/* ===== 할로윈 캔디 교환소 (사용자) ===== */
.cdy{
  --panel:#fff; --soft:#faf6ef; --ground:#f7f3ea;
  --night:#1b1526; --night2:#2a1f3a;
  --pumpkin:#d4681f; --pumpkin-dk:#a8511a; --pumpkin-sf:#fbeee2;
  --grape:#4a2e75; --gold:#c08a2c;
  --bd:#e2d8c6; --bd-st:#c9bca4;
  --tx:#241f2e; --tx-sf:#554d63; --tx-mu:#6b6276;
  --bad:#b13a2a; --bad-dk:#8c2f22; --good:#1f6149;
  --rad:14px;
  --sh-sm:0 1px 3px rgba(27,21,38,.06); --sh-md:0 6px 16px rgba(74,56,18,.07);
  max-width:1360px; margin:0 auto; padding:26px 32px 60px; color:var(--tx);
}

/* ── 머리말 ── */
.cdy .cdy-head{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-end;justify-content:space-between;margin-bottom:18px}
.cdy .eyebrow{font-size:.68rem;font-weight:900;letter-spacing:.2em;color:var(--tx-mu)}
.cdy h1{margin:4px 0 0;font-size:1.72rem;font-weight:900;letter-spacing:-.02em}
.cdy .sub{margin:6px 0 0;font-size:.82rem;font-weight:700;color:var(--tx-mu);line-height:1.65}
.cdy .sub b{color:var(--pumpkin-dk)}

.cdy .cdy-empty{padding:40px;text-align:center;font-size:.86rem;font-weight:700;color:var(--tx-mu);
  background:var(--panel);border:1px solid var(--bd);border-radius:var(--rad)}

/* ── 버튼 ── */
.cdy .cdy-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;
  border:1px solid var(--bd-st);background:var(--panel);color:var(--tx);
  font-size:.8rem;font-weight:900;padding:10px 16px;border-radius:10px;min-height:42px;
  cursor:pointer;transition:.15s;font-family:inherit}
.cdy .cdy-btn:hover:not(:disabled){border-color:var(--pumpkin);color:var(--pumpkin-dk)}
.cdy .cdy-btn:disabled{opacity:.55;cursor:not-allowed}
.cdy .cdy-btn.pri{border:0;background:var(--pumpkin);color:#fff}
.cdy .cdy-btn.pri:hover:not(:disabled){background:#bd5a16;color:#fff}
.cdy .cdy-btn.pri:disabled{background:#f3efe6;color:#8b8295;border:1px solid var(--bd)}
.cdy .cdy-btn.dark{border:0;background:var(--night);color:#fff}
.cdy .cdy-btn.dark:hover:not(:disabled){background:#2c2240;color:#fff}
.cdy .cdy-btn.ghost{background:var(--panel)}
.cdy .cdy-btn.wide{width:100%}
.cdy .cdy-btn.grow{flex:1.4 1 0}

/* ── 지갑 ── */
.cdy .wallet{position:relative;overflow:hidden;border-radius:18px;border:1px solid #3b2d4f;
  background:linear-gradient(145deg,var(--night2) 0%,var(--night) 62%,#130f1c 100%);
  padding:24px 28px;margin-bottom:18px}
.cdy .wallet .glow{position:absolute;right:-40px;top:-70px;width:300px;height:300px;border-radius:50%;
  background:radial-gradient(circle,rgba(212,104,31,.34),rgba(212,104,31,0) 68%);pointer-events:none}
.cdy .w-main{position:relative;display:flex;flex-wrap:wrap;gap:24px;align-items:center;justify-content:space-between}
.cdy .w-left{flex:1 1 300px;min-width:0;display:flex;gap:18px;align-items:center}
.cdy .pumpkin{flex:0 0 auto;width:62px;height:62px}
.cdy .pumpkin svg{width:100%;height:100%;display:block}
.cdy .w-left .k{font-size:.66rem;font-weight:900;letter-spacing:.2em;color:rgba(255,255,255,.56)}
.cdy .w-left .v{display:flex;align-items:flex-end;gap:8px}
.cdy .w-left .v .n{font-size:3.2rem;font-weight:900;line-height:1.02;color:#fff;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums}
.cdy .w-left .v .u{font-size:.9rem;font-weight:800;color:rgba(255,255,255,.62);padding-bottom:9px}
.cdy .w-stats{display:flex;flex-wrap:wrap;gap:10px}
.cdy .w-stats .st{min-width:124px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);
  border-radius:12px;padding:11px 16px}
.cdy .w-stats .st .k{font-size:.68rem;font-weight:800;color:rgba(255,255,255,.6)}
.cdy .w-stats .st .v{font-size:1.3rem;font-weight:900;color:#fff;font-variant-numeric:tabular-nums}
.cdy .w-stats .st .v small{font-size:.76rem;font-weight:800;color:rgba(255,255,255,.5);margin-left:2px}

.cdy .w-period{position:relative;margin-top:20px;padding-top:16px;border-top:1px solid rgba(255,255,255,.12);
  display:flex;flex-wrap:wrap;gap:10px 22px;align-items:center}
.cdy .w-period .phase{display:inline-flex;align-items:center;gap:7px;font-size:.74rem;font-weight:900;
  padding:5px 12px;border-radius:999px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);color:#fff}
.cdy .w-period .phase .dot{width:7px;height:7px;border-radius:50%;background:currentColor}
.cdy .w-period .phase.earning{background:rgba(47,122,61,.22);border-color:rgba(96,196,118,.45);color:#9fe0b0}
.cdy .w-period .phase.exchange{background:rgba(192,138,44,.2);border-color:rgba(230,185,97,.45);color:#f0d59a}
.cdy .w-period .phase.upcoming{background:rgba(74,46,117,.3);border-color:rgba(150,118,200,.45);color:#cdb8ee}
.cdy .w-period .phase.ended,.cdy .w-period .phase.off{background:rgba(255,255,255,.08);color:rgba(255,255,255,.6)}
.cdy .w-period .pd{font-size:.78rem;font-weight:800;color:rgba(255,255,255,.78)}
.cdy .w-period .pd b{color:#fff}
.cdy .w-period .note{font-size:.72rem;font-weight:700;color:rgba(255,255,255,.52)}

/* ── 레이아웃 ── */
.cdy .cdy-layout{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start}
.cdy .col-main{flex:999 1 620px;min-width:0;display:flex;flex-direction:column;gap:16px}
.cdy .col-side{flex:1 1 380px;display:flex;flex-direction:column;gap:16px}

/* ── 카드 ── */
.cdy .card{background:var(--panel);border:1px solid var(--bd);border-radius:16px;overflow:hidden;box-shadow:var(--sh-md)}
.cdy .card-head{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;
  padding:15px 20px;border-bottom:1px solid #ece4d6;background:var(--soft)}
.cdy .card-head h2{margin:0;font-size:.95rem;font-weight:900;display:flex;align-items:center;gap:9px}
.cdy .card-head h2 i{color:var(--grape)}
.cdy .card-head .r{font-size:.74rem;font-weight:800;color:var(--tx-mu)}
.cdy .card-body{padding:16px 20px 18px}
.cdy .locked{display:flex;align-items:center;gap:9px;padding:14px;border-radius:10px;background:var(--soft);
  border:1px solid var(--bd);font-size:.8rem;font-weight:800;color:var(--tx-sf);line-height:1.55}
.cdy .locked.warn{background:#fdf1ee;border-color:#e8c0b7;color:var(--bad-dk)}
.cdy .locked i{color:var(--tx-mu)}
.cdy .locked.warn i{color:var(--bad)}

/* ── 교환 상품 ── */
.cdy .shop-grid{padding:16px 20px 20px;display:grid;grid-template-columns:repeat(auto-fit,minmax(258px,1fr));gap:14px}
.cdy .it{position:relative;border:1px solid var(--bd);border-radius:var(--rad);padding:15px;
  display:flex;flex-direction:column;gap:11px;background:var(--panel);transition:.15s}
.cdy .it:hover{border-color:var(--bd-st);box-shadow:var(--sh-sm)}
.cdy .it.off{background:#fbf9f4}
.cdy .it.sold{background:#f5f1e8;border-color:#ded5c5}
.cdy .sold-stamp{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-7deg);
  font-size:1.9rem;font-weight:900;letter-spacing:.06em;color:rgba(177,58,42,.15);pointer-events:none;white-space:nowrap}
.cdy .it-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cdy .it-top .kind{font-size:.63rem;font-weight:900;letter-spacing:.04em;padding:3px 8px;border-radius:6px}
.cdy .it-top .state{font-size:.68rem;font-weight:900;color:var(--tx-mu)}
.cdy .it-top .state.ok{color:var(--good)}
.cdy .it-top .state.bad{color:var(--bad)}
.cdy .it-top .state.warn{color:var(--pumpkin-dk)}
.cdy .it-top .state.dim{color:var(--tx-mu)}

.cdy .it-main{display:flex;gap:11px;align-items:flex-start}
.cdy .it-main .ic{flex:0 0 auto;width:44px;height:44px;border-radius:11px;border:1px solid var(--bd);
  display:flex;align-items:center;justify-content:center;font-size:1.05rem}
.cdy .it-main .tx{min-width:0}
.cdy .it-main .n{font-size:.88rem;font-weight:900;line-height:1.35}
.cdy .it-main .d{font-size:.74rem;font-weight:700;color:var(--tx-mu);margin-top:3px;line-height:1.5}
.cdy .it-main .s{font-size:.72rem;font-weight:800;color:var(--grape);margin-top:4px}

.cdy .it-meta{display:flex;flex-direction:column;gap:7px;padding-top:2px}
.cdy .it-meta .row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cdy .it-meta .l{font-size:.69rem;font-weight:800;color:var(--tx-mu)}
.cdy .it-meta .v{font-size:.69rem;font-weight:900;color:var(--tx);font-variant-numeric:tabular-nums}
.cdy .it-meta .v.dim{color:var(--tx-mu);font-weight:800}
.cdy .it-meta .v.bad{color:var(--bad)}
.cdy .it-meta .bar{height:5px;border-radius:3px;background:#ece4d6;overflow:hidden}
.cdy .it-meta .bar.inf{background:repeating-linear-gradient(90deg,#ece4d6 0 7px,var(--ground) 7px 14px)}
.cdy .it-meta .bar i{display:block;height:100%;background:var(--pumpkin)}

.cdy .it-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:2px}
.cdy .it-foot .price{display:inline-flex;align-items:center;gap:6px;font-size:1.05rem;font-weight:900;
  color:var(--pumpkin-dk);font-variant-numeric:tabular-nums}
.cdy .candy{width:17px;height:17px;flex:0 0 auto}

/* ── 코드 등록 ── */
.cdy .code-box{display:flex;flex-direction:column;gap:10px}
.cdy .lbl{font-size:.72rem;font-weight:900;color:var(--tx-sf)}
.cdy .code-in{width:100%;box-sizing:border-box;border:1px solid var(--bd-st);border-radius:10px;
  padding:12px 13px;font-size:.82rem;font-weight:800;color:var(--tx);background:#fffdf8;min-height:44px;font-family:inherit}
.cdy .code-in:focus{outline:none;border-color:var(--pumpkin);box-shadow:0 0 0 3px rgba(212,104,31,.14)}
.cdy .code-msg{display:flex;gap:9px;align-items:flex-start;border-radius:10px;padding:11px 13px;
  font-size:.76rem;font-weight:800;line-height:1.55}
.cdy .code-msg.ok{background:#e9f3ec;border:1px solid #bcdcc6;color:var(--good)}
.cdy .code-msg.no{background:#fdf1ee;border:1px solid #e8c0b7;color:var(--bad-dk)}
.cdy .hint{margin:2px 0 0;font-size:.71rem;font-weight:700;color:var(--tx-mu);line-height:1.7}
.cdy .hint code{background:#f3efe6;border-radius:4px;padding:1px 5px;font-weight:800}

/* ── 내역 ── */
.cdy .tabs{display:flex;gap:6px;padding:12px 20px 0}
.cdy .tabs button{border:1px solid var(--bd);background:var(--panel);color:var(--tx-mu);
  font-size:.74rem;font-weight:900;padding:7px 14px;border-radius:999px;min-height:36px;cursor:pointer;font-family:inherit}
.cdy .tabs button.on{border-color:var(--pumpkin);background:var(--pumpkin-sf);color:var(--pumpkin-dk)}
.cdy .ledger{padding:10px 12px 16px;display:flex;flex-direction:column;gap:2px}
.cdy .lg{display:flex;align-items:center;gap:11px;padding:11px 10px;border-radius:10px}
.cdy .lg:nth-child(even){background:var(--soft)}
.cdy .lg .kd{flex:0 0 auto;font-size:.63rem;font-weight:900;padding:3px 7px;border-radius:6px}
.cdy .lg .tx{flex:1 1 auto;min-width:0}
.cdy .lg .tx .n{font-size:.76rem;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cdy .lg .tx .t{font-size:.68rem;font-weight:700;color:var(--tx-mu)}
.cdy .lg .am{flex:0 0 auto;text-align:right}
.cdy .lg .am .d{font-size:.8rem;font-weight:900;font-variant-numeric:tabular-nums}
.cdy .lg .am .d.plus{color:var(--good)}
.cdy .lg .am .d.minus{color:var(--bad)}
.cdy .lg .am .b{font-size:.64rem;font-weight:700;color:var(--tx-mu);font-variant-numeric:tabular-nums}

/* ── 발급 세이브코드 ── */
.cdy .sc-box{display:flex;flex-direction:column;gap:10px}
.cdy .sc{border-radius:11px;background:var(--night);padding:12px 13px}
.cdy .sc .t{font-size:.63rem;font-weight:900;letter-spacing:.14em;color:rgba(255,255,255,.5)}
.cdy .sc .v{margin-top:6px;font-size:.76rem;font-weight:800;color:#fff;word-break:break-all;line-height:1.6}

/* ── 교환 확인 ── */
.cdy .cdy-modal{position:fixed;inset:0;z-index:1200;background:rgba(27,21,38,.55);
  display:flex;align-items:center;justify-content:center;padding:20px}
.cdy .cdy-modal .box{width:100%;max-width:440px;background:var(--panel);border:1px solid var(--bd-st);
  border-radius:16px;overflow:hidden;box-shadow:0 18px 44px rgba(27,21,38,.3)}
.cdy .box-head{padding:16px 20px;background:var(--night)}
.cdy .box-head .k{font-size:.63rem;font-weight:900;letter-spacing:.16em;color:rgba(255,255,255,.52)}
.cdy .box-head .t{margin-top:4px;font-size:1rem;font-weight:900;color:#fff}
.cdy .box-body{padding:18px 20px;display:flex;flex-direction:column;gap:14px}
.cdy .target{display:flex;gap:12px;align-items:center}
.cdy .target .ic{flex:0 0 auto;width:46px;height:46px;border-radius:12px;border:1px solid var(--bd);
  display:flex;align-items:center;justify-content:center;font-size:1.1rem}
.cdy .target .n{font-size:.92rem;font-weight:900}
.cdy .target .s{font-size:.74rem;font-weight:700;color:var(--tx-mu);margin-top:2px}
/* ── 교환 확인창: 수량 선택 ── */
.cdy .qty{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cdy .qty .ql{font-size:.78rem;font-weight:800;color:var(--tx-sf)}
.cdy .qty .qc{display:flex;align-items:center;border:1px solid var(--bd);border-radius:10px;
  background:var(--panel);overflow:hidden}
.cdy .qty .qc button{width:40px;min-height:40px;border:0;background:transparent;cursor:pointer;
  font-size:1.05rem;font-weight:900;color:var(--tx-sf);line-height:1}
.cdy .qty .qc button:hover:not(:disabled){background:var(--pumpkin-sf);color:var(--pumpkin-dk)}
.cdy .qty .qc button:disabled{opacity:.35;cursor:not-allowed}
.cdy .qty .qc input{width:62px;min-height:40px;border:0;border-left:1px solid var(--bd);
  border-right:1px solid var(--bd);text-align:center;font:inherit;font-size:.95rem;font-weight:900;
  color:var(--tx);background:transparent;font-variant-numeric:tabular-nums;-moz-appearance:textfield}
.cdy .qty .qc input::-webkit-outer-spin-button,
.cdy .qty .qc input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.cdy .qty .qc input:focus{outline:2px solid var(--pumpkin);outline-offset:-2px}
.cdy .qty .qmax{margin-left:auto;border:1px solid var(--bd);border-radius:9px;background:var(--soft);
  padding:9px 13px;font-size:.74rem;font-weight:900;color:var(--tx-sf);cursor:pointer}
.cdy .qty .qmax:hover:not(:disabled){border-color:var(--pumpkin);color:var(--pumpkin-dk)}
.cdy .qty .qmax:disabled{opacity:.45;cursor:not-allowed}

.cdy .calc{border:1px solid #ece4d6;border-radius:12px;background:var(--soft);padding:13px 15px;
  display:flex;flex-direction:column;gap:9px}
.cdy .calc .row{display:flex;align-items:center;justify-content:space-between;gap:10px;
  font-size:.78rem;font-weight:800;color:var(--tx-sf)}
.cdy .calc .row b{font-size:.86rem;font-weight:900;color:var(--tx);font-variant-numeric:tabular-nums}
.cdy .calc .row b.pri{color:var(--pumpkin-dk)}
.cdy .calc .row.big{color:var(--tx);font-weight:900}
.cdy .calc .row.big b{font-size:1.05rem}
.cdy .calc .hr{height:1px;background:var(--bd)}
.cdy .warn-box{display:flex;gap:9px;align-items:flex-start;background:#fdf1ee;border:1px solid #e8c0b7;
  border-radius:10px;padding:11px 13px;font-size:.74rem;font-weight:800;color:var(--bad-dk);line-height:1.55}
.cdy .warn-box i{flex:0 0 auto;margin-top:2px;color:var(--bad)}
.cdy .acts{display:flex;gap:9px}
.cdy .acts .cdy-btn{flex:1 1 0;min-height:48px}

/* ── 토스트 ── */
.cdy .cdy-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:1300;
  display:flex;align-items:center;gap:10px;max-width:560px;padding:13px 18px;border-radius:12px;
  font-size:.8rem;font-weight:800;line-height:1.5;cursor:pointer;box-shadow:0 10px 28px rgba(27,21,38,.22)}
.cdy .cdy-toast.ok{background:#e9f3ec;border:1px solid #bcdcc6;color:var(--good)}
.cdy .cdy-toast.no{background:#fdf1ee;border:1px solid #e8c0b7;color:var(--bad-dk)}

/* ── 반응형 ── */
@media(max-width:900px){
  .cdy{padding:20px 16px 48px}
  .cdy .wallet{padding:20px 18px}
  .cdy .w-left .v .n{font-size:2.5rem}
  .cdy .shop-grid{padding:14px 14px 16px;grid-template-columns:1fr}
  .cdy .card-head,.cdy .card-body,.cdy .tabs{padding-left:16px;padding-right:16px}
}
