@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700;900&family=Space+Mono:wght@400;700&display=swap');
:root{
  --bg:#f4f4f5;--surface:#ffffff;--surface2:#f0f0f2;--border:#dddde0;
  --accent:#5c9e00;--accent2:#0077cc;--danger:#d93025;--warn:#c8760a;
  --text:#111111;--text2:#555555;--text3:#999999;--radius:6px;--hh:48px;
  --header-bg:rgba(244,244,245,.97);
}
body.dark{
  --bg:#121212;--surface:#1e1e1e;--surface2:#2a2a2e;--border:#333338;
  --accent:#e8ff47;--accent2:#47c5ff;--danger:#ff4747;--warn:#ffaa47;
  --text:#f0f0f0;--text2:#888888;--text3:#505055;
  --header-bg:rgba(18,18,18,.97);
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;}
body{font-family:'Noto Sans KR',sans-serif;background:var(--bg);color:var(--text);font-size:14px;}

/* ── HEADER ── */
header{height:var(--hh);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 16px;gap:10px;position:sticky;top:0;background:var(--header-bg);backdrop-filter:blur(8px);z-index:100;}
.logo{display:inline-flex;align-items:center;gap:7px;text-decoration:none;white-space:nowrap;}
.logo-img{display:inline-block;width:28px;height:28px;background:var(--accent);-webkit-mask-image:url('../img/logo.png');mask-image:url('../img/logo.png');-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;}
.logo-sub{font-family:'Space Mono',monospace;font-weight:700;font-size:11px;color:var(--text2);}
.theme-btn{background:var(--surface2);border:1px solid var(--border);border-radius:4px;padding:4px 8px;font-size:14px;cursor:pointer;line-height:1;transition:all .12s;}
.theme-btn:hover{border-color:var(--text2);}

/* ── HEADER NAV ── */
.nav{display:flex;gap:1px;background:var(--surface2);border:1px solid var(--border);border-radius:5px;overflow:hidden;}
.nav-btn{padding:5px 13px;border:none;background:transparent;color:var(--text2);cursor:pointer;font-family:'Noto Sans KR',sans-serif;font-size:13px;font-weight:500;transition:all .12s;white-space:nowrap;text-decoration:none;display:inline-flex;align-items:center;}
.nav-btn.active{background:var(--surface);color:var(--text);font-weight:700;}
.nav-btn:hover:not(.active){color:var(--text);}

/* ── WEEK NAV ── */
.week-nav{display:flex;align-items:center;gap:4px;background:var(--surface2);border:1px solid var(--border);border-radius:4px;padding:2px 6px;}
.week-nav button{background:none;border:none;color:var(--text2);cursor:pointer;font-size:16px;padding:1px 3px;line-height:1;transition:color .12s;}
.week-nav button:hover{color:var(--accent);}
.week-lbl{font-family:'Space Mono',monospace;font-size:11px;color:var(--text);white-space:nowrap;min-width:70px;text-align:center;}

/* ── HEADER QUICK LINKS ── */
.hdr-ensemble-btn{background:rgba(92,158,0,.1);border:1px solid rgba(92,158,0,.35);border-radius:4px;padding:4px 11px;font-size:12px;font-weight:700;color:var(--accent);text-decoration:none;white-space:nowrap;transition:all .12s;cursor:pointer;font-family:'Noto Sans KR',sans-serif;}
body.dark .hdr-ensemble-btn{background:rgba(232,255,71,.08);border-color:rgba(232,255,71,.25);}
.hdr-ensemble-btn:hover{opacity:.8;}
.hdr-ensemble-btn.active{background:rgba(92,158,0,.18);border-color:rgba(92,158,0,.6);}
.hdr-school-btn{background:rgba(200,118,10,.08);border:1px solid rgba(200,118,10,.3);border-radius:4px;padding:4px 11px;font-size:12px;font-weight:700;color:var(--warn);text-decoration:none;white-space:nowrap;transition:all .12s;cursor:pointer;font-family:'Noto Sans KR',sans-serif;}
body.dark .hdr-school-btn{background:rgba(255,170,71,.08);border-color:rgba(255,170,71,.25);}
.hdr-school-btn:hover{opacity:.8;}
.hdr-school-btn.active{background:rgba(200,118,10,.16);border-color:rgba(200,118,10,.55);}
.hdr-apply-btn{background:rgba(0,119,204,.08);border:1px solid rgba(0,119,204,.3);border-radius:4px;padding:4px 11px;font-size:12px;font-weight:700;color:var(--accent2);white-space:nowrap;transition:all .12s;cursor:pointer;font-family:'Noto Sans KR',sans-serif;text-decoration:none;}
body.dark .hdr-apply-btn{background:rgba(71,197,255,.08);border-color:rgba(71,197,255,.25);}
.hdr-apply-btn:hover{opacity:.8;}
.hdr-apply-btn.active{background:rgba(0,119,204,.16);border-color:rgba(0,119,204,.55);}
body.dark .hdr-apply-btn.active{background:rgba(71,197,255,.15);border-color:rgba(71,197,255,.45);}

/* ── BUTTONS ── */
.btn{padding:7px 15px;border-radius:5px;border:none;font-family:'Noto Sans KR',sans-serif;font-size:13px;font-weight:700;cursor:pointer;transition:opacity .12s;white-space:nowrap;}
.btn:hover{opacity:.8;}
.btn:disabled{opacity:.35;cursor:not-allowed;}
.btn-p{background:var(--accent);color:#000;}
.btn-s{background:var(--surface2);color:var(--text2);border:1px solid var(--border);}
.btn-d{background:var(--danger);color:#fff;}
.btn-xs{padding:4px 9px;font-size:12px;}

/* ── FORM ELEMENTS ── */
.fl{font-size:12px;color:var(--text2);margin-bottom:4px;font-weight:500;}
.fi,.fs{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:5px;padding:8px 11px;color:var(--text);font-family:'Noto Sans KR',sans-serif;font-size:14px;outline:none;transition:border-color .12s;}
.fi:focus,.fs:focus{border-color:var(--accent);}
.fs option{background:var(--surface);}

/* ── INFO ROWS ── */
.irow{display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px solid var(--border);font-size:13px;}
.irow:last-child{border-bottom:none;}
.ik{color:var(--text2);}

/* ── ANIMATIONS ── */
@keyframes fi{from{opacity:0}to{opacity:1}}
@keyframes su{from{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}
@keyframes sp{to{transform:rotate(360deg)}}

/* ── LOADING ── */
.ld{position:fixed;inset:0;background:var(--bg);display:flex;align-items:center;justify-content:center;z-index:999;}
.ld-logo-wrap{position:relative;width:100px;height:100px;}
.ld-logo-gray{position:absolute;inset:0;width:100%;height:100%;opacity:.18;}
.ld-logo-fill{position:absolute;inset:0;width:100%;height:100%;background:var(--accent);-webkit-mask-image:url('../img/logo.png');mask-image:url('../img/logo.png');-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;clip-path:inset(100% 0 0 0);animation:ld-rise 1.5s cubic-bezier(.4,0,.2,1) .15s forwards;}
@keyframes ld-rise{from{clip-path:inset(100% 0 0 0);}to{clip-path:inset(0% 0 0 0);}}

/* ── TOAST ── */
.toast{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:8px 16px;font-size:13px;font-weight:500;z-index:999;white-space:nowrap;animation:fi .2s;box-shadow:0 2px 12px rgba(0,0,0,.1);}
.toast.ok{border-color:var(--accent);color:var(--accent);}
.toast.err{border-color:var(--danger);color:var(--danger);}

/* ── MODAL ── */
.modal-bd{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:600;backdrop-filter:blur(4px);animation:fi .15s;}
body.dark .modal-bd{background:rgba(0,0,0,.7);}
.modal{background:var(--surface);border:1px solid var(--border);border-radius:10px;width:420px;max-width:94vw;max-height:88vh;display:flex;flex-direction:column;animation:su .15s;box-shadow:0 8px 32px rgba(0,0,0,.1);}
body.dark .modal{box-shadow:0 8px 32px rgba(0,0,0,.4);}
.modal-hdr{padding:14px 16px 10px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-shrink:0;}
.modal-ttl{font-size:15px;font-weight:700;}
.modal-x{background:none;border:none;color:var(--text2);cursor:pointer;font-size:22px;line-height:1;}
.modal-x:hover{color:var(--text);}
.modal-body{padding:14px 16px;display:flex;flex-direction:column;gap:10px;overflow-y:auto;flex:1;}
.modal-foot{padding:10px 16px;border-top:1px solid var(--border);display:flex;gap:6px;justify-content:flex-end;flex-shrink:0;}

/* ── SCROLLBAR ── */
::-webkit-scrollbar{width:4px;height:4px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px;}

/* ── REALTIME BADGE ── */
.rt-badge{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:700;color:var(--accent);padding:2px 8px;background:rgba(92,158,0,.08);border:1px solid rgba(92,158,0,.2);border-radius:4px;}
body.dark .rt-badge{background:rgba(232,255,71,.07);border-color:rgba(232,255,71,.2);}
.rt-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:rtpulse 1.5s infinite;}
@keyframes rtpulse{0%,100%{opacity:1}50%{opacity:.3}}
