/* Layout: 학원 브랜드 리포트 — 기둥 패턴 네이비 헤더 + 겹쳐 올라온 요약 스트립(Bridge Point·퀴즈·숙제), 이후 영문 라벨+한글 제목 섹션. 레벨은 4칸 미터로 통일 */
:root{
  --bg:#e9edf2; --paper:#ffffff; --ink:#132033; --ink-2:#3a4a5f; --muted:#6b7a8f; --line:#dfe4eb; --line-2:#eef1f5; --soft:#f6f8fb; --tint:#eef3f9;
  --navy:#1F4E79; --navy-deep:#163a5c; --navy-ink:#ffffff; --orange:#E2592A; --gold:#F4B942;
  --good:#1f7a4d; --good-bg:#e6f4ec; --bad:#c0392b; --bad-bg:#fcebe8; --warn:#a36a00; --warn-bg:#fdf3dc; --neu:#7a8798; --neu-bg:#eef1f5;
  --meter:#1F4E79; --accent-ink:#1F4E79; --gold-ink:#b07d1a; --wash:#f2f5f9; --pillar-op:.06;
  --logo:#1F4E79; --logo-sub:#1b1f24;
  --f-body:"Noto Sans KR","Apple SD Gothic Neo","Malgun Gothic",Arial,sans-serif;
  --f-en:Poppins,"Noto Sans KR",Arial,sans-serif;
  --shadow:0 1px 2px rgba(19,32,51,.06),0 8px 28px rgba(19,32,51,.08);
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#0c121b; --paper:#141d29; --ink:#e8edf4; --ink-2:#c3cdd9; --muted:#8e9bad; --line:#263243; --line-2:#1d2735; --soft:#18222f; --tint:#1a2636;
  --navy:#1d4a73; --navy-deep:#143656; --navy-ink:#f4f7fb; --orange:#ff8a5c; --gold:#f4c86a;
  --good:#6fd39f; --good-bg:#16352a; --bad:#ff8f84; --bad-bg:#3a1d1b; --warn:#f2c45f; --warn-bg:#3a2e12; --neu:#8e9bad; --neu-bg:#222e3e;
  --meter:#8fb6e0; --accent-ink:#8fb6e0; --logo:#dfe7f1; --logo-sub:#b9c5d4; --gold-ink:#e0b55a; --wash:#182332; --pillar-op:.14;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 8px 28px rgba(0,0,0,.35);
  color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#0c121b; --paper:#141d29; --ink:#e8edf4; --ink-2:#c3cdd9; --muted:#8e9bad; --line:#263243; --line-2:#1d2735; --soft:#18222f; --tint:#1a2636;
  --navy:#1d4a73; --navy-deep:#143656; --navy-ink:#f4f7fb; --orange:#ff8a5c; --gold:#f4c86a;
  --good:#6fd39f; --good-bg:#16352a; --bad:#ff8f84; --bad-bg:#3a1d1b; --warn:#f2c45f; --warn-bg:#3a2e12; --neu:#8e9bad; --neu-bg:#222e3e;
  --meter:#8fb6e0; --accent-ink:#8fb6e0; --logo:#dfe7f1; --logo-sub:#b9c5d4; --gold-ink:#e0b55a; --wash:#182332; --pillar-op:.14;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 8px 28px rgba(0,0,0,.35);
  color-scheme:dark}
*{box-sizing:border-box}
body{background:var(--bg);color:var(--ink);font-family:var(--f-body);font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-block:24px 48px}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--orange);outline-offset:2px}
.wrap{max-width:720px;margin:0 auto;display:flex;flex-direction:column;gap:16px}
.wrap.wide{max-width:1200px}
.en{font-family:var(--f-en)}

/* logo */
.logo{display:inline-block;color:var(--logo);line-height:0}
.logo svg{display:block;height:44px;width:auto;overflow:visible}
.logo .lg-kr{font-family:var(--f-body);font-size:17px;font-weight:500;fill:var(--logo-sub);letter-spacing:.04em}
.logo .lg-en{font-family:Poppins,Arial,sans-serif;font-size:50px;font-weight:700;fill:currentColor}
.logo .lg-sub{font-family:Poppins,Arial,sans-serif;font-size:14.5px;font-weight:400;fill:var(--logo-sub)}
.logo.on-navy{color:#fff}
.logo.on-navy .lg-kr,.logo.on-navy .lg-sub{fill:rgba(255,255,255,.82)}
.logo.on-navy svg{height:34px}
.ft-name{font-family:var(--f-en);font-size:10.5px;letter-spacing:.2em;color:var(--muted)}
.ft-name b{font-weight:700;color:var(--ink-2)}
.ft-name em{font-style:normal;font-family:var(--f-body);letter-spacing:.02em;margin-left:10px;padding-left:10px;border-left:1px solid var(--line)}

/* ===== report ===== */
.report{background:var(--paper);border-radius:4px;box-shadow:var(--shadow);overflow:hidden;border-top:3px solid var(--gold)}
.r-head{position:relative;padding:26px 36px 0;background:linear-gradient(180deg,var(--wash) 0%,var(--paper) 100%);isolation:isolate;overflow:hidden}
.r-head::before{content:"";position:absolute;right:-20px;top:0;width:260px;height:230px;z-index:-1;opacity:var(--pillar-op);
  background:repeating-linear-gradient(90deg,var(--navy) 0 7px,transparent 7px 22px);
  -webkit-mask:radial-gradient(120% 90% at 100% 0%,#000 25%,transparent 70%);mask:radial-gradient(120% 90% at 100% 0%,#000 25%,transparent 70%)}
.r-top{display:flex;justify-content:space-between;align-items:center;min-height:44px;gap:12px;flex-wrap:wrap}
.r-kind{text-align:right;font-family:var(--f-en);line-height:1.35;color:var(--muted)}
.r-kind b{display:block;font-size:10.5px;font-weight:600;letter-spacing:.28em;color:var(--ink-2)}
.r-kind span{font-size:11px;letter-spacing:.08em}
.r-cover{padding:44px 0 30px}
.eyebrow{display:inline-flex;align-items:center;gap:10px;font-family:var(--f-en);font-size:11px;font-weight:600;letter-spacing:.24em;color:var(--gold-ink)}
.eyebrow::before{content:"";width:22px;height:1px;background:var(--gold-ink)}
.r-cover h1{margin:12px 0 0;font-size:42px;font-weight:800;letter-spacing:-.035em;line-height:1.1;color:var(--ink)}
.r-cover h1 em{font-style:normal;font-weight:300;font-size:24px;letter-spacing:-.01em;color:var(--muted);margin-left:8px}
.r-cover p{margin:12px 0 0;font-size:14.5px;color:var(--ink-2);max-width:34em}
.r-info{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border-top:1px solid var(--line)}
.r-info div{padding:14px 0 16px;min-width:0}
.r-info div+div{padding-left:20px;border-left:1px solid var(--line)}
.r-info dt{font-family:var(--f-en);font-size:10px;font-weight:600;letter-spacing:.2em;color:var(--muted)}
.r-info dd{margin:3px 0 0;font-size:14.5px;font-weight:700;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sample-flag{margin:0 36px;font-size:12px;color:var(--warn);background:var(--warn-bg);padding:7px 12px;border-radius:2px}

/* summary */
.summary{margin:0 36px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-top:1.5px solid var(--ink);border-bottom:1px solid var(--line)}
.summary>div{padding:22px 12px 20px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;min-width:0}
.summary>div+div{border-left:1px solid var(--line)}
.s-lab{font-family:var(--f-en);font-size:10px;font-weight:600;letter-spacing:.2em;color:var(--muted)}
.s-lab small{display:block;font-family:var(--f-body);font-size:11.5px;letter-spacing:0;font-weight:500;margin-top:2px;color:var(--ink-2)}
.ring{position:relative;width:78px;height:78px}
.ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.ring .trk{fill:none;stroke:var(--line-2);stroke-width:4}
.ring .val{fill:none;stroke:var(--meter);stroke-width:4;stroke-linecap:round}
.ring.low .val{stroke:var(--bad)}
.ring .tick{stroke:var(--gold-ink);stroke-width:1.5}
.ring b{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--f-en);font-size:24px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--ink)}
.big{font-family:var(--f-en);font-size:34px;font-weight:500;line-height:78px;height:78px;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--ink)}
.big small{font-size:15px;font-weight:400;color:var(--muted);letter-spacing:0}
.big.g-A{color:var(--good)}.big.g-B{color:var(--accent-ink)}.big.g-C{color:var(--warn)}.big.g-D{color:var(--bad)}
.s-val{font-family:var(--f-en);font-size:12px;font-weight:500;color:var(--muted);letter-spacing:.02em}
.bp-note{margin:14px 36px 0;font-size:12px;color:var(--muted);line-height:1.65}
.bp-note b{color:var(--ink-2);font-weight:700}

.r-body{padding:8px 36px 36px}
.sec{padding-top:30px}
.sec-h{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;padding-bottom:10px;border-bottom:1.5px solid var(--ink);margin-bottom:4px}
.sec-h div{display:flex;flex-direction:column;gap:2px}
.sec-h .k{font-family:var(--f-en);font-size:10.5px;font-weight:600;letter-spacing:.2em;color:var(--accent-ink)}
.sec-h h2{margin:0;font-size:18px;font-weight:800;letter-spacing:-.01em}
.sec-h .aside{font-size:12.5px;color:var(--muted);white-space:nowrap}

/* level rows */
.lv-list{list-style:none;margin:0;padding:0}
.lv-list li{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 2px;border-bottom:1px solid var(--line-2)}
.lv-list .nm{min-width:0;font-weight:500}
.lv-list .nm small{display:block;font-size:12.5px;color:var(--muted);font-weight:400;margin-top:1px}
.lv{display:flex;align-items:center;gap:10px;flex:none}
.lv .t{font-family:var(--f-en);font-size:12.5px;font-weight:600;width:104px;text-align:right;color:var(--ink-2)}
.lv.l1 .t{color:var(--bad)}
.lv.l0 .t{color:var(--neu);font-weight:500}
.meter{display:inline-flex;gap:3px}
.meter i{width:16px;height:6px;border-radius:1px;background:var(--line)}
.lv.l4 .meter i,.lv.l3 .meter i:nth-child(-n+3),.lv.l2 .meter i:nth-child(-n+2){background:var(--meter)}
.lv.l1 .meter i:first-child{background:var(--bad)}
.lv .gl{font-family:var(--f-en);font-weight:700;font-size:13px;width:22px;height:22px;display:inline-grid;place-items:center;border-radius:2px;color:var(--paper);background:var(--meter)}
.lv.l1 .gl{background:var(--bad)}
.legend{margin-top:10px;display:flex;flex-wrap:wrap;gap:4px 14px;font-family:var(--f-en);font-size:11px;color:var(--muted)}
.legend b{color:var(--ink-2);font-weight:600;margin-right:4px}

.words{margin-top:16px;padding:14px 16px;background:var(--tint);border-radius:2px}
.words h4{margin:0 0 10px;font-size:13px;font-weight:700;display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap}
.words h4 span{font-weight:400;color:var(--muted);font-size:12px}
.words ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.words li{background:var(--paper);border:1px solid var(--line);border-radius:2px;padding:5px 11px;font-size:13.5px;display:flex;gap:7px;align-items:baseline}
.words li b{font-family:var(--f-en);font-weight:600}
.words li span{color:var(--muted);font-size:12.5px}

/* homework */
.hw{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:28px}
.hw li{display:flex;align-items:center;gap:10px;padding:12px 2px;border-bottom:1px solid var(--line-2);min-width:0}
.hw svg{width:20px;height:20px;flex:none}
.hw .ok circle{fill:var(--meter)} .hw .ok path{stroke:var(--paper)}
.hw .no circle{fill:none;stroke:var(--bad);stroke-width:1.6} .hw .no path{stroke:var(--bad)}
.hw li.miss{color:var(--bad)}
.hw li span{min-width:0}

/* lessons / next */
.bul{list-style:none;margin:0;padding:6px 0 0;display:flex;flex-direction:column}
.bul li{position:relative;padding:9px 0 9px 20px;border-bottom:1px solid var(--line-2);font-size:14.5px}
.bul li::before{content:"";position:absolute;left:3px;top:18px;width:6px;height:6px;background:var(--meter)}
.todo li::before{width:11px;height:11px;top:15px;left:0;background:none;border:1.5px solid var(--meter);border-radius:2px}

/* note */
.note{position:relative;margin-top:14px;padding:22px 22px 18px 58px;background:var(--tint);border-radius:2px}
.note::before{content:"\201C";position:absolute;left:18px;top:6px;font-family:Georgia,serif;font-size:56px;line-height:1;color:var(--gold)}
.note p{margin:0;white-space:pre-wrap;font-size:15px;line-height:1.85;color:var(--ink)}
.note .sign{margin-top:14px;display:flex;justify-content:flex-end;align-items:center;gap:10px;font-size:13px;color:var(--muted)}
.note .sign b{color:var(--ink);font-weight:700}
.note .sign i{width:28px;height:1px;background:var(--muted);opacity:.5}

.r-foot{border-top:1px solid var(--line);background:var(--soft);color:var(--muted);padding:20px 36px;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;font-size:11.5px}

/* ===== teacher app ===== */
.appbar{background:var(--navy);color:#fff;border-radius:3px;padding:12px 14px 12px 18px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;box-shadow:var(--shadow)}
.appbar .ttl{display:flex;align-items:center;gap:14px}
.appbar .ttl span{font-size:12px;opacity:.7;padding-left:14px;border-left:1px solid rgba(255,255,255,.25)}
.tabs{display:flex;gap:2px;flex-wrap:wrap}
.tabs button{border:0;background:none;padding:7px 14px;border-radius:2px;cursor:pointer;font-size:13.5px;color:rgba(255,255,255,.78);font-weight:500}
.tabs button:hover{color:#fff;background:rgba(255,255,255,.08)}
.tabs button[aria-selected="true"]{background:#fff;color:#1F4E79;font-weight:700}
.tabs button.out{border:1px solid rgba(255,255,255,.35);margin-left:6px}
.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.topbar .tabs{background:var(--navy);border-radius:3px;padding:3px;margin-left:auto}

.editor{display:grid;grid-template-columns:minmax(0,440px) minmax(0,1fr);gap:24px;align-items:start}
.editor>div:last-child{position:sticky;top:calc(env(safe-area-inset-top,0px) + 12px)}
.panel{background:var(--paper);border-radius:3px;box-shadow:var(--shadow);padding:6px 22px 22px;display:flex;flex-direction:column}
.fgroup{display:flex;flex-direction:column;gap:10px;padding:18px 0;border-bottom:1px solid var(--line-2)}
.fgroup:last-of-type{border-bottom:0}
.panel h3{margin:0 0 2px;font-size:14px;font-weight:800;color:var(--ink);display:flex;align-items:center;gap:8px}
.panel h3::before{content:"";width:3px;height:14px;background:var(--navy)}
.row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
label.f{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--muted);font-weight:500;min-width:0}
input[type=text],input[type=date],input[type=number],select,textarea{width:100%;border:1px solid var(--line);background:var(--paper);border-radius:2px;padding:9px 11px;font-size:14px;color:var(--ink);transition:border-color .15s}
input:hover,select:hover,textarea:hover{border-color:#c3ccd8}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--navy);box-shadow:0 0 0 3px rgba(31,78,121,.12)}
textarea{min-height:84px;resize:vertical;line-height:1.6}
.mrow{display:grid;grid-template-columns:minmax(0,1fr) 140px minmax(0,1fr) auto;gap:6px;align-items:center}
.mrow .x{order:4}
.mrow input[data-k=value]{order:3}
.hrow{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:6px;align-items:center}
.qrow{display:grid;grid-template-columns:minmax(0,1fr) auto 28px;gap:6px;align-items:center}
.toggle{border:1px solid var(--line);background:var(--paper);border-radius:2px;padding:8px 12px;font-size:13px;cursor:pointer;white-space:nowrap;color:var(--bad)}
.toggle.on{background:var(--navy);color:#fff;border-color:var(--navy);font-weight:600}
.gpick{display:inline-flex;gap:3px}
.gpick button{width:34px;height:36px;border:1px solid var(--line);background:var(--paper);border-radius:2px;cursor:pointer;font-family:var(--f-en);font-weight:700;font-size:13px;color:var(--muted);padding:0}
.gpick button.on{background:var(--navy);border-color:var(--navy);color:#fff}
.gpick button.on.g-D{background:var(--bad);border-color:var(--bad)}
.x{border:0;background:none;color:var(--muted);cursor:pointer;font-size:18px;line-height:1;padding:4px 6px}
.link-btn{border:1px dashed var(--line);background:none;border-radius:2px;padding:8px;color:var(--muted);cursor:pointer;font-size:13px}
.link-btn:hover{border-color:var(--navy);color:var(--accent-ink)}
.btn{border:0;border-radius:2px;padding:12px 20px;font-weight:700;cursor:pointer;background:var(--navy);color:#fff;font-size:14px}
.btn:hover{background:var(--navy-deep)}
.btn.ghost{background:var(--paper);color:var(--ink-2);border:1px solid var(--line);font-weight:500}
.btn.ghost:hover{border-color:var(--navy);color:var(--accent-ink)}
.btn.sm{padding:6px 10px;font-size:12.5px}
.btn:disabled{opacity:.5;cursor:default}
.actions{display:flex;gap:8px;flex-wrap:wrap;padding-top:18px}
.actions .btn:first-child{flex:1}
.status{font-size:13px;color:var(--muted);padding-top:8px}
.preview-label{font-family:var(--f-en);font-size:10.5px;font-weight:600;color:var(--muted);letter-spacing:.2em;margin-bottom:8px}
.picker{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}
.picker .btn{padding:8px 12px;font-size:13px}
.cm-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--muted);font-weight:500}
.bank{display:flex;flex-direction:column;gap:8px}
.bank-g{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.bank-g span{font-size:11px;font-weight:700;color:var(--muted);width:58px;flex:none}
.bank-g button{border:1px solid var(--line);background:var(--soft);border-radius:999px;padding:4px 11px;font-size:12.5px;cursor:pointer;color:var(--ink-2);max-width:100%;text-align:left}
.bank-g button:hover{border-color:var(--navy);color:var(--accent-ink)}
.roster{max-width:640px}
.chip{display:inline-block;font-size:11.5px;font-weight:700;padding:2px 8px;border-radius:2px;white-space:nowrap}
.chip.warn{color:var(--warn);background:var(--warn-bg)}

.list{background:var(--paper);border-radius:3px;box-shadow:var(--shadow);overflow-x:auto}
.list table{width:100%;border-collapse:collapse;font-size:14px}
.list th,.list td{text-align:left;padding:13px 16px;border-bottom:1px solid var(--line-2);vertical-align:middle}
.list th{font-size:11.5px;color:var(--muted);font-weight:500;background:var(--soft)}
.code{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;background:var(--soft);padding:2px 6px;border-radius:2px}
.mini{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.mini button{border:1px solid var(--line);background:var(--paper);border-radius:2px;padding:5px 10px;font-size:12.5px;cursor:pointer;white-space:nowrap}
.mini button:hover{border-color:var(--navy)}
.mini button.del{color:var(--bad)}

/* lookup */
.lookup{background:var(--paper);border-radius:3px;box-shadow:var(--shadow);overflow:hidden}
.lookup .lk-top{background:var(--navy);padding:26px 28px;position:relative;overflow:hidden;isolation:isolate;border-bottom:3px solid var(--gold)}
.lookup .lk-top::before{content:"";position:absolute;inset:0 0 0 auto;width:50%;z-index:-1;opacity:.09;background:repeating-linear-gradient(90deg,#fff 0 10px,transparent 10px 26px);-webkit-mask:linear-gradient(90deg,transparent,#000 60%);mask:linear-gradient(90deg,transparent,#000 60%)}
.lookup .lk-body{padding:28px;display:flex;flex-direction:column;gap:14px}
.lookup h1{font-size:22px;font-weight:800;margin:0;letter-spacing:-.01em}
.lookup p{margin:0;color:var(--muted);font-size:14px}
.lookup form{display:flex;gap:8px;flex-wrap:wrap}
.lookup input{flex:1 1 200px}
.err{color:var(--bad);font-size:13px}

/* practice */
.pr-list{list-style:none;margin:0;padding:0}
.pr-list li{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 2px;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.pr-l{display:flex;flex-direction:column;gap:2px;min-width:0}
.pr-area{font-size:10.5px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-ink)}
.pr-l b{font-size:15.5px}
.pr-l small{font-size:12.5px;color:var(--muted)}
.pr-r{display:flex;align-items:center;gap:10px;margin-left:auto}
.pr-st{font-size:12.5px;color:var(--muted)}
.pr-st.ok{color:var(--good);font-weight:700}
.pr-help{margin:10px 0 0;font-size:12.5px;color:var(--muted)}
.pr-help b{color:var(--ink-2)}
.back{border:0;background:none;color:var(--muted);cursor:pointer;font-size:13px;padding:0;align-self:flex-start}
.back:hover{color:var(--accent-ink)}
.pv-head{background:var(--navy);color:#fff;padding:22px 28px 20px;position:relative;overflow:hidden;isolation:isolate;border-bottom:3px solid var(--gold)}
.pv-head::before{content:"";position:absolute;inset:0 0 0 auto;width:46%;z-index:-1;opacity:.09;background:repeating-linear-gradient(90deg,#fff 0 10px,transparent 10px 26px);-webkit-mask:linear-gradient(90deg,transparent,#000 60%);mask:linear-gradient(90deg,transparent,#000 60%)}
.pv-head h1{margin:10px 0 16px;font-size:26px;font-weight:800;letter-spacing:-.01em;line-height:1.25}
.steps{list-style:none;margin:0;padding:0;display:flex;gap:6px;flex-wrap:wrap;counter-reset:st}
.steps li{counter-increment:st;font-size:12px;padding:4px 10px 4px 6px;border-radius:2px;background:rgba(255,255,255,.1);color:rgba(255,255,255,.7);display:flex;align-items:center;gap:6px}
.steps li::before{content:counter(st);font-family:var(--f-en);font-weight:700;font-size:11px;width:18px;height:18px;display:grid;place-items:center;border-radius:50%;background:rgba(255,255,255,.18)}
.steps li.on{background:#fff;color:#1F4E79;font-weight:700}.steps li.on::before{background:#1F4E79;color:#fff}
.steps li.done{color:#fff}.steps li.done::before{background:var(--gold);color:#1F4E79}
.pv-body{padding:24px 28px 28px}
.concept{font-size:15.5px;line-height:1.85}
.concept p{margin:0 0 10px}
.concept ul{list-style:none;margin:6px 0 14px;padding:12px 16px;background:var(--tint);border-radius:2px}
.concept li{padding:4px 0;font-family:var(--f-en);font-size:14.5px}
.concept b{color:var(--accent-ink)}
.pq-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:22px}
.pq-q{display:flex;gap:10px;align-items:baseline}
.pq-q span{font-weight:700;color:var(--accent-ink);font-size:14px;flex:none}
.pq-q p{margin:0;font-size:15.5px;font-weight:500;line-height:1.6}
.opts{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:10px}
.opt{display:flex;align-items:center;gap:10px;text-align:left;border:1px solid var(--line);background:var(--paper);border-radius:2px;padding:10px 12px;font-size:14.5px;cursor:pointer;color:var(--ink);min-width:0}
.opt span{font-weight:700;font-size:12px;width:22px;height:22px;flex:none;display:grid;place-items:center;border-radius:2px;background:var(--soft);color:var(--muted)}
.opt:hover:not(:disabled){border-color:var(--navy)}
.opt.sel{border-color:var(--navy);box-shadow:inset 0 0 0 1px var(--navy)}.opt.sel span{background:var(--navy);color:#fff}
.opt:disabled{cursor:default}
.opt.ans{border-color:var(--good);background:var(--good-bg)}.opt.ans span{background:var(--good);color:#fff}
.opt.miss{border-color:var(--bad);background:var(--bad-bg)}.opt.miss span{background:var(--bad);color:#fff}
.pq-ex{margin-top:8px;font-size:13.5px;color:var(--ink-2);padding:8px 12px;border-left:2px solid var(--line)}
.pq.right .pq-ex b{color:var(--good)}.pq.wrong .pq-ex b{color:var(--bad)}
.pv-score{display:grid;grid-template-columns:auto minmax(0,1fr);gap:16px;align-items:center;padding:16px 20px;border:1px solid var(--line);border-radius:3px;margin-bottom:24px}
.pv-score>div:first-child{display:flex;flex-direction:column;align-items:center}
.code-box{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding-left:16px;border-left:1px solid var(--line);min-width:0}
.code-box b{font-size:22px;letter-spacing:.06em;color:var(--accent-ink);overflow-wrap:anywhere}
.code-box span:not(.s-lab){font-size:12.5px;color:var(--muted)}
.code-box small{font-size:12px;color:var(--good)}
.code-box .btn{margin-top:4px}
/* practice editor */
.sugs{display:flex;flex-wrap:wrap;gap:6px}
.sug{border:1px solid var(--bad);color:var(--bad);background:var(--bad-bg);border-radius:2px;padding:6px 10px;font-size:12.5px;cursor:pointer}
.sug .en{font-weight:700}
.pre{border:1px solid var(--line);border-radius:2px;padding:12px;display:flex;flex-direction:column;gap:8px}
.pre-h{display:flex;align-items:center;gap:8px}
.pre-h .en{font-weight:700;font-size:13px;color:var(--accent-ink);letter-spacing:.04em}
.pre-h .x{margin-left:auto}
.chip.ok{color:var(--good);background:var(--good-bg)}
.pre details summary{cursor:pointer;font-size:13px;color:var(--accent-ink);font-weight:600;padding:4px 0}
.pre details[open]{display:flex;flex-direction:column;gap:8px}
.pqe{border-top:1px solid var(--line-2);padding-top:8px;display:flex;flex-direction:column;gap:5px}
.pqe-h{display:flex;justify-content:space-between;align-items:center}
.pqe-h .en{font-weight:700;font-size:12px;color:var(--muted)}
.pqe-c{display:grid;grid-template-columns:30px minmax(0,1fr);gap:5px}
.pqe-c .ans{border:1px solid var(--line);background:var(--paper);border-radius:2px;cursor:pointer;font-family:var(--f-en);font-weight:700;font-size:12px;color:var(--muted);padding:0}
.pqe-c .ans.on{background:var(--good);border-color:var(--good);color:#fff}
.codechk{max-width:none}
@media (max-width:560px){.opts{grid-template-columns:minmax(0,1fr)}.pv-head,.pv-body{padding-left:18px;padding-right:18px}.pv-score{grid-template-columns:minmax(0,1fr)}.code-box{padding-left:0;border-left:0;border-top:1px solid var(--line);padding-top:12px}}
@media (max-width:900px){.editor{grid-template-columns:minmax(0,1fr)}.editor>div:last-child{position:static}}
@media (max-width:560px){
  .r-head{padding:20px 20px 0}
  .r-head::before{width:170px;height:170px}
  .r-cover{padding:34px 0 24px}.r-cover h1{font-size:34px}.r-cover h1 em{font-size:19px}
  .summary{margin:0 20px}
  .summary>div{padding:18px 4px 16px}
  .ring{width:64px;height:64px}.ring b{font-size:20px}
  .big{font-size:27px;line-height:64px;height:64px}.big small{font-size:12.5px}.s-val{font-size:11px;letter-spacing:0}.eyebrow{letter-spacing:.12em;flex-wrap:wrap}
  .s-lab{font-size:9px;letter-spacing:.12em}
  .bp-note,.sample-flag{margin-left:20px;margin-right:20px}
  .r-body{padding:4px 18px 26px}
  .hw{grid-template-columns:minmax(0,1fr)}
  .lv .t{width:auto}
  .meter i{width:11px}
  .note{padding:20px 16px 16px 44px}.note::before{left:10px;font-size:46px}
  .r-foot{padding:16px 18px}
  .mrow{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto}
  .mrow input[data-k=value]{grid-column:1/-1}
  .mrow .x{grid-column:3;grid-row:1}
  .picker{grid-template-columns:minmax(0,1fr)}
  .appbar .ttl span{display:none}
}
@media (prefers-reduced-motion:no-preference){.ring .val{transition:stroke-dashoffset .6s ease}}

/* ===== code gate ===== */
.gate{background:var(--paper);border-radius:4px;box-shadow:var(--shadow);overflow:hidden;border-top:3px solid var(--gold);max-width:520px;width:100%;margin:6vh auto 0;position:relative;isolation:isolate}
.gate::before{content:"";position:absolute;right:-20px;top:0;width:220px;height:200px;z-index:-1;opacity:var(--pillar-op);background:repeating-linear-gradient(90deg,var(--navy) 0 7px,transparent 7px 22px);-webkit-mask:radial-gradient(120% 90% at 100% 0%,#000 25%,transparent 70%);mask:radial-gradient(120% 90% at 100% 0%,#000 25%,transparent 70%)}
.g-top{padding:28px 32px 0}
.g-body{padding:40px 32px 32px;display:flex;flex-direction:column;gap:14px}
.g-body h1{margin:0;font-size:30px;font-weight:800;letter-spacing:-.03em}
.g-body p{margin:0;color:var(--ink-2);font-size:14.5px}
.g-body small{color:var(--muted);font-size:12px}
.g-body form{display:flex;flex-direction:column;gap:10px;margin-top:6px}
#code{font-family:var(--f-en);font-size:24px;font-weight:600;letter-spacing:.3em;text-align:center;text-transform:uppercase;padding:14px 12px}
#code::placeholder{letter-spacing:.12em;font-weight:400;font-size:16px;color:var(--muted)}
input[type=password]{width:100%;border:1px solid var(--line);background:var(--paper);border-radius:2px;padding:12px 12px;font-size:15px;color:var(--ink)}
.g-body .btn{padding:14px 20px;font-size:15px}
.g-foot{border-top:1px solid var(--line);background:var(--soft);padding:14px 32px;font-family:var(--f-en);font-size:10.5px;letter-spacing:.16em;color:var(--muted)}
.err{color:var(--bad);font-size:13px}
@media (max-width:560px){.g-top{padding:22px 22px 0}.g-body{padding:30px 22px 26px}.g-foot{padding:14px 22px}.gate{margin-top:2vh}}

/* ===== learning center ===== */
.lc-tabs{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:0;border-top:1px solid var(--line)}
.lc-tabs::-webkit-scrollbar{display:none}
.lc-tabs button{border:0;background:none;padding:14px 4px 13px;white-space:nowrap;font-size:14px;font-weight:600;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.lc-tabs button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--gold)}
.lc .r-body{padding-top:6px}
.lc-box{margin-top:24px;padding:22px;border:1px solid var(--line);border-radius:3px;display:flex;flex-direction:column;gap:12px}
.lc-box.center{align-items:center;text-align:center}
.lc-box h3{margin:0;font-size:19px;font-weight:800;letter-spacing:-.01em}
.lc-box p{margin:0;color:var(--ink-2)}
.lc-guide{font-size:14px}
.lc-week{margin-top:20px;max-width:320px}
.au-list{list-style:none;margin:0;padding:0}
.au-list li{display:flex;flex-direction:column;gap:6px;padding:12px 0;border-bottom:1px solid var(--line-2)}
.au-list li span{font-weight:600}
audio{width:100%;height:40px}
.todo-cards{list-style:none;margin:8px 0 0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.todo-cards button{width:100%;text-align:left;border:1px solid var(--line);background:var(--paper);border-radius:3px;padding:16px;cursor:pointer;display:flex;flex-direction:column;gap:4px;height:100%;color:var(--ink)}
.todo-cards button:hover{border-color:var(--navy)}
.todo-cards b{font-size:15px}
.todo-cards span{font-size:12.5px;color:var(--muted)}
.todo-cards li.ok button{border-color:var(--good);background:var(--good-bg)}.todo-cards li.ok span{color:var(--good);font-weight:700}
.wcards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:10px}
.wcard{position:relative;border:1px solid var(--line);border-radius:3px;background:var(--paper)}
.wcard.on{border-color:var(--navy);background:var(--tint)}
.wc-main{width:100%;border:0;background:none;cursor:pointer;padding:18px 12px 14px;display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--ink);text-align:center}
.wc-main b{font-size:18px;font-weight:600;overflow-wrap:anywhere}
.wc-main span{font-size:12.5px;color:var(--muted)}
.wcard.on .wc-main span{color:var(--ink);font-size:14px;font-weight:600}
.wc-spk{position:absolute;top:6px;right:6px;border:0;background:none;color:var(--muted);cursor:pointer;padding:4px;border-radius:2px;display:grid;place-items:center}
.wc-spk:hover{color:var(--accent-ink);background:var(--soft)}
.wc-cnt{position:absolute;top:8px;left:8px;font-style:normal;font-size:10.5px;font-weight:700;color:var(--bad)}
.lq-top{display:flex;justify-content:space-between;align-items:center}
.lq-top .wc-spk{position:static}
.lq-w{font-size:32px;margin:4px 0 6px!important;font-weight:600!important}
.read-text{white-space:pre-wrap;font-family:var(--f-en);font-size:15.5px;line-height:1.9;background:var(--tint);padding:16px 18px;border-radius:2px}
.rec-ctl{display:flex;flex-direction:column;gap:10px;align-items:flex-start}
.rec-ctl small{color:var(--muted);font-size:12px}
.rec-btn{display:inline-flex;align-items:center;gap:10px;padding:14px 22px;font-size:15px}
.rec-btn .dot{width:12px;height:12px;border-radius:50%;background:#ff5a4f}
.rec-btn.on{background:var(--bad)}.rec-btn .sq{width:11px;height:11px;background:#fff;border-radius:1px}
.rec-btn.on .en{font-variant-numeric:tabular-nums;opacity:.85}
.rec-done{font-size:13.5px;color:var(--good);font-weight:700}
.rec-done a{color:var(--accent-ink)}
/* admin center */
.ac-mats{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.ac-mats button{width:100%;text-align:left;border:1px solid var(--line);background:var(--paper);border-radius:2px;padding:9px 12px;cursor:pointer;font-size:13.5px;color:var(--ink)}
.ac-mats li.on button{border-color:var(--navy);background:var(--tint)}
.ac-subs{list-style:none;margin:0;padding:0}
.ac-subs li{display:grid;grid-template-columns:80px minmax(0,1fr) auto;gap:8px;align-items:center;padding:7px 0;border-bottom:1px solid var(--line-2);font-size:13.5px}
.ac-subs audio{height:32px}
.ac-subs small{color:var(--muted);font-size:11.5px}
.ac-subs small.miss{color:var(--bad);font-weight:700}
.ac-subs a{color:var(--accent-ink);font-size:13px}
.steps-list{margin:8px 0;padding-left:20px;font-size:13.5px;color:var(--ink-2);display:flex;flex-direction:column;gap:8px}
.steps-list a{color:var(--accent-ink)}
.codebox{margin-top:6px;border:1px solid var(--line);border-radius:2px;background:var(--soft)}
.codebox pre{margin:0;padding:10px;max-height:180px;overflow:auto;font-size:11.5px;line-height:1.5}
.codebox .btn{margin:0 10px 10px}
details summary{cursor:pointer;font-size:13px;font-weight:600;color:var(--accent-ink)}
.codes{display:flex;flex-direction:column;gap:6px}
.codes ul{list-style:none;margin:0;padding:0}
.codes li{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line-2);font-size:14px}
.codes li span{flex:1;min-width:0}.codes li small{color:var(--muted)}
.codes li b{font-size:14px;letter-spacing:.12em;color:var(--accent-ink)}
@media (max-width:560px){.todo-cards{grid-template-columns:minmax(0,1fr)}.wcards{grid-template-columns:repeat(2,minmax(0,1fr))}.lc-box{padding:18px}}
/* correction note */
.nbar{display:block;height:6px;background:var(--line-2);border-radius:3px;overflow:hidden;margin:10px 0 4px}
.nbar i{display:block;height:100%;background:var(--meter);border-radius:3px;transition:width .3s}
.nbar.sm{margin:0;height:5px}
.ngroup{margin-top:18px}
.ngroup h4{margin:0 0 4px;font-size:11px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--accent-ink)}
.nlist{list-style:none;margin:0;padding:0}
.nlist li{border-bottom:1px solid var(--line-2)}
.nchk{width:100%;display:flex;align-items:center;gap:12px;border:0;background:none;padding:13px 2px;cursor:pointer;text-align:left;color:var(--ink);font-size:15px}
.nchk .box{width:22px;height:22px;flex:none;border:1.5px solid var(--line);border-radius:3px;display:grid;place-items:center;color:transparent;background:var(--paper)}
.nchk .box svg{width:14px;height:14px}
.nchk.on .box{background:var(--meter);border-color:var(--meter);color:var(--paper)}
.nchk.on .t{color:var(--muted);text-decoration:line-through;text-decoration-color:var(--line)}
.ac-subs small.ok{color:var(--good);font-weight:700}
/* gate tabs */
.g-tabs{display:grid;grid-template-columns:1fr 1fr;margin:24px 32px 0;border:1px solid var(--line);border-radius:3px;padding:3px;background:var(--soft)}
.g-tabs button{border:0;background:none;padding:10px;font-size:14.5px;font-weight:600;color:var(--muted);cursor:pointer;border-radius:2px}
.g-tabs button[aria-selected="true"]{background:var(--paper);color:var(--ink);box-shadow:0 1px 3px rgba(19,32,51,.12)}
.g-body{padding-top:28px}
.g-cont{display:flex;justify-content:center;gap:10px;align-items:center}
.g-cont .en{font-weight:500;opacity:.75;letter-spacing:.08em}
.g-or{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:12px}
.g-or::before,.g-or::after{content:"";flex:1;height:1px;background:var(--line)}
.r-foot .back{font-size:12px}
@media (max-width:560px){.g-tabs{margin:20px 22px 0}}
#mat-editor{scroll-margin-top:12px}
#mat-editor.flash{animation:edflash 1.2s ease}
@keyframes edflash{0%{box-shadow:0 0 0 3px var(--gold)}100%{box-shadow:var(--shadow)}}
@media (max-width:900px){.editor>div:last-child:has(#mat-editor){order:-1}}
.tabs a.tab-link{display:inline-flex;align-items:center;padding:7px 14px;border-radius:2px;font-size:13.5px;color:rgba(255,255,255,.85);text-decoration:none;border:1px solid rgba(255,255,255,.35);margin-left:6px}
.tabs a.tab-link:hover{color:#fff;background:rgba(255,255,255,.08)}
.mini a.mini-a{border:1px solid var(--line);background:var(--paper);border-radius:2px;padding:5px 10px;font-size:12.5px;white-space:nowrap;color:var(--ink);text-decoration:none}
.rec-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.rec-list li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center;font-size:12.5px;color:var(--muted)}
.rec-list audio{height:34px}

.warn-box{font-size:12.5px;color:var(--warn);background:var(--warn-bg);padding:8px 10px;border-radius:2px}
@media (max-width:700px){.lc-tabs{grid-template-columns:repeat(3,minmax(0,1fr))}.lc-tabs button{padding:12px 4px;border-bottom:1px solid var(--line-2)}.lc-tabs button[aria-selected="true"]{border-bottom:2px solid var(--gold)}}
.r-kind{margin-left:auto}
/* O/X */
.ox{margin-top:26px}
.ox-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ox-list li{padding:14px 0;border-bottom:1px solid var(--line-2)}
.ox-list p{margin:0;display:flex;gap:10px;font-size:15px;line-height:1.6}
.ox-list p .en{font-weight:700;color:var(--accent-ink);flex:none}
.ox-btns{display:flex;gap:8px;margin:10px 0 0 22px}
.oxb{width:64px;height:44px;border:1.5px solid var(--line);background:var(--paper);border-radius:3px;font-family:var(--f-en);font-size:20px;font-weight:700;color:var(--ink-2);cursor:pointer}
.oxb:hover:not(:disabled){border-color:var(--navy)}
.oxb:disabled{cursor:default}
.oxb.ans{background:var(--good);border-color:var(--good);color:#fff}
.oxb.miss{background:var(--bad);border-color:var(--bad);color:#fff}
.ox-list .pq-ex{margin-left:22px}
.ox-sum{margin-top:12px;font-size:14px;color:var(--ink-2)}
.oxe{display:flex;flex-direction:column;gap:6px;padding:10px 0;border-top:1px solid var(--line-2);border-bottom:1px solid var(--line-2)}
.oxe-row{display:grid;grid-template-columns:minmax(0,1fr) auto 28px;gap:6px;align-items:center}
.oxe-row .oxe-ex{grid-column:1/-1;font-size:13px}

/* practice header: light style */
.pv-head{background:linear-gradient(180deg,var(--wash),var(--paper));color:var(--ink);border-bottom:1px solid var(--line)}
.pv-head::before{background:repeating-linear-gradient(90deg,var(--navy) 0 7px,transparent 7px 22px);opacity:var(--pillar-op)}
.pv-head .r-kind{color:var(--muted);margin-left:0}.pv-head .r-kind b{color:var(--gold-ink)}
.steps li{background:var(--soft);color:var(--muted);border:1px solid var(--line)}
.steps li::before{background:var(--line);color:var(--ink-2)}
.steps li.on{background:var(--navy);color:#fff;border-color:var(--navy)}.steps li.on::before{background:#fff;color:#1F4E79}
.steps li.done{color:var(--ink-2)}.steps li.done::before{background:var(--gold);color:#1F4E79}
/* youtube + read along */
.yt{position:relative;width:100%;padding-top:56.25%;border-radius:10px;overflow:hidden;background:#0b0f19}
.yt iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.rd-ctl{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px}
.rd-rate{display:flex;align-items:center;gap:6px;white-space:nowrap;font-size:13px;color:var(--ink-2,#555);margin-left:auto}
.rd-rate select{width:auto;min-width:0;padding:6px 8px;border:1px solid var(--line,#ddd);border-radius:8px;background:#fff;font:inherit}
.rd-text{background:var(--paper-2,#f7f8fb);border:1px solid var(--line-2,#e8eaf0);border-radius:12px;padding:16px 18px;font-size:17px;line-height:1.9}
.rd-text p{margin:0 0 14px}.rd-text p:last-child{margin:0}
.rd-s{cursor:pointer;border-radius:4px;padding:1px 0;transition:background .15s}
.rd-s:hover{background:rgba(201,162,74,.15)}
.rd-s.on{background:rgba(201,162,74,.38);box-shadow:0 0 0 2px rgba(201,162,74,.38)}
@media (max-width:700px){.rd-text{font-size:16px;padding:14px}.rd-rate{margin-left:0}}

/* homework 3-state */
.hw li .hw-st{margin-left:auto;font-style:normal;font-size:12px;font-weight:600;padding:2px 8px;border-radius:999px;white-space:nowrap;flex:none}
.hw li.ok .hw-st{color:var(--good);background:var(--good-bg)}
.hw li.late .hw-st{color:var(--warn);background:var(--warn-bg)}
.hw li.miss .hw-st{color:var(--bad);background:var(--bad-bg)}
.hw li.late{color:inherit}
.hw .lt circle{fill:none;stroke:var(--warn);stroke-width:1.6} .hw .lt path{stroke:var(--warn)}
.hw-lg{margin-top:10px}.hw-lg b{font-size:11px;padding:1px 6px;border-radius:999px;margin-right:4px}
.hw-lg .c-ok{color:var(--good);background:var(--good-bg)}.hw-lg .c-late{color:var(--warn);background:var(--warn-bg)}.hw-lg .c-miss{color:var(--bad);background:var(--bad-bg)}
.hwpick{display:inline-flex;border:1px solid var(--line);border-radius:2px;overflow:hidden;flex:none}
.hwpick button{border:0;border-left:1px solid var(--line);background:var(--paper);padding:8px 10px;font-size:13px;cursor:pointer;white-space:nowrap;color:var(--muted)}
.hwpick button:first-child{border-left:0}
.hwpick button.on.ok{background:var(--good);color:#fff;font-weight:600}
.hwpick button.on.late{background:var(--warn);color:#fff;font-weight:600}
.hwpick button.on.miss{background:var(--bad);color:#fff;font-weight:600}

/* tighter lists */
.lv-list li{padding:8px 2px}
.bul{padding-top:2px}
.bul li{padding:6px 0 6px 20px;line-height:1.5}
.bul li::before{top:14px}
.bul li.num{padding-left:28px}
.bul li.num::before{display:none}
.bul li .no{position:absolute;left:0;top:6px;line-height:1.6;width:20px;font-weight:600;color:var(--accent-ink,var(--navy));font-size:13.5px;font-variant-numeric:tabular-nums}
/* notice board */
.g-tabs.g3{grid-template-columns:1fr 1fr 1fr}
.g-tabs.g3 button{font-size:14px;padding:10px 4px;white-space:nowrap}
.nt-body h1{margin-bottom:14px}
.nt-empty{color:var(--muted);padding:18px 0}
.nt-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--ink)}
.nt-list li{border-bottom:1px solid var(--line-2)}
.nt-list button{display:flex;align-items:center;gap:10px;width:100%;border:0;background:none;padding:14px 2px;text-align:left;cursor:pointer;font:inherit;color:var(--ink)}
.nt-list button:hover .nt-t{text-decoration:underline;text-underline-offset:3px}
.nt-list button.on{background:var(--soft)}
.nt-t{flex:1;min-width:0;font-size:15px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nt-d{flex:none;font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.nt-pin{flex:none;font-size:11px;font-weight:700;color:#fff;background:var(--navy);padding:2px 7px;border-radius:2px;letter-spacing:.02em}
.nt-new{display:inline-block;margin-left:6px;font-style:normal;font-size:10px;font-weight:700;color:#fff;background:var(--gold);width:15px;height:15px;line-height:15px;text-align:center;border-radius:50%;vertical-align:2px}
.nt-more{margin-top:12px}
.nt-quick{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:26px}
.nt-quick button{display:flex;flex-direction:column;align-items:flex-start;gap:3px;border:1px solid var(--line);background:var(--paper);padding:14px 16px;border-radius:3px;cursor:pointer;text-align:left;font:inherit;color:var(--ink);transition:border-color .15s}
.nt-quick button:hover{border-color:var(--navy)}
.nt-quick b{font-size:14.5px}.nt-quick span{font-size:12.5px;color:var(--muted)}
.nt-back{margin:0 0 14px;padding:0}
.nt-view .nt-meta{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted);margin-bottom:8px}
.nt-view h1{font-size:22px;line-height:1.4;margin:0 0 16px;padding-bottom:16px;border-bottom:1px solid var(--line)}
.nt-text{font-size:15px;line-height:1.8;color:var(--ink-2,var(--ink));word-break:keep-all;overflow-wrap:anywhere}
.nt-text p{margin:0 0 14px}
.nt-text a{color:var(--navy);text-decoration:underline}
.nt-admin{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:20px;align-items:start}
.nt-list.adm .nt-t{font-size:14.5px}
.nt-pinf .nt-chk{display:flex;align-items:center;gap:8px;font-size:14px;padding:10px 0;font-weight:400}
.nt-pinf .nt-chk input{width:18px;height:18px;margin:0}
@media (max-width:900px){.nt-admin{grid-template-columns:1fr}}
@media (max-width:560px){.nt-quick{grid-template-columns:1fr}.g-tabs.g3 button{font-size:13px}}
/* level pills (replace 4-dot meter) */
.lv .meter{display:none}
.lv{gap:8px}
.lv .t{box-sizing:border-box;width:116px;padding:5px 8px;border-radius:999px;text-align:center;font-size:12px;font-weight:600;line-height:1.25;white-space:nowrap;border:1px solid transparent}
.lv.l4 .t{color:var(--good);background:var(--good-bg)}
.lv.l3 .t{color:var(--navy);background:rgba(31,63,105,.08)}
.lv.l2 .t{color:var(--warn);background:var(--warn-bg)}
.lv.l1 .t{color:var(--bad);background:var(--bad-bg)}
.lv.l0 .t{color:var(--neu);background:var(--neu-bg);font-weight:500}
.lv .gl{border-radius:999px;width:24px;height:24px}
.lv.l4 .gl{background:var(--good)}.lv.l3 .gl{background:var(--navy)}.lv.l2 .gl{background:var(--warn)}.lv.l1 .gl{background:var(--bad)}
@media (max-width:700px){.lv .t{width:104px;font-size:11.5px;padding:5px 6px}}
@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .lv.l3 .t{color:#a9c4ec;background:rgba(169,196,236,.12)}}
.chip:not(.ok):not(.warn){color:var(--muted);background:var(--soft);font-weight:600}
/* word game & spelling */
.wg-list{list-style:none;margin:0 0 6px;padding:0;border-top:1px solid var(--line-2)}
.wg-list li{display:flex;align-items:center;gap:12px;padding:10px 2px;border-bottom:1px solid var(--line-2)}
.wg-list li b{min-width:120px;font-size:16px}
.wg-list li span{color:var(--ink-2,var(--ink));font-size:14.5px}
.wg-say{border:1px solid var(--line);background:var(--paper);border-radius:999px;width:34px;height:34px;cursor:pointer;font-size:15px;flex:none;line-height:1}
.wg-say.lg{width:44px;height:44px;font-size:19px;margin-top:10px}
.wg-say.xl{width:72px;height:72px;font-size:30px;margin:10px 0 4px;border-color:var(--navy)}
.wg-top{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.wg-top .nbar{flex:1;margin:0}
.wg-top .en{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.wg-streak{font-size:12.5px;font-weight:700;color:var(--warn);background:var(--warn-bg);padding:3px 9px;border-radius:999px;white-space:nowrap}
.wg-card{text-align:center;border:1px solid var(--line);border-radius:6px;padding:22px 16px 18px;background:var(--soft);margin-bottom:14px}
.wg-q-lab{display:block;font-size:13px;color:var(--muted);margin-bottom:8px}
.wg-word{font-size:32px;font-weight:700;letter-spacing:-.01em;color:var(--ink);word-break:keep-all}
.wg-word.ko{font-size:26px}
.wg-sub{margin-top:6px;font-size:13.5px;color:var(--muted)}
.wg-opts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.wg-opt{justify-content:center;text-align:center;min-height:54px;font-size:15.5px}
.wg-fb{margin-top:14px;padding:12px 14px;border-radius:4px;font-size:14.5px;line-height:1.6}
.wg-fb.ok{color:var(--good);background:var(--good-bg)}
.wg-fb.no{color:var(--bad);background:var(--bad-bg)}
.wg-wrong{text-decoration:line-through}
.wg-form{display:flex;gap:8px}
.wg-form input{flex:1;font-size:20px;padding:12px 14px;border:1.5px solid var(--line);border-radius:4px;background:var(--paper);color:var(--ink);min-width:0}
.wg-form input:focus{outline:none;border-color:var(--navy)}
.wg-perfect{text-align:center;font-size:16px;font-weight:600;color:var(--good);padding:16px 0}
@media (max-width:560px){.wg-opts{grid-template-columns:1fr}.wg-word{font-size:28px}.wg-list li b{min-width:96px}}
.wk-sw{margin:0 0 12px;display:flex;justify-content:flex-end}
.wk-sw label{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.wk-sw select{padding:7px 10px;border:1px solid var(--line);border-radius:3px;background:var(--paper);color:var(--ink);font:inherit;font-size:13.5px}
/* concept layout */
.cx{display:flex;flex-direction:column;gap:14px;font-size:15px;line-height:1.7}
.cx p{margin:0}
.cx-tag{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.06em;color:#fff;background:var(--navy);padding:2px 8px;border-radius:2px;margin-bottom:8px}
.cx-key{border-left:4px solid var(--gold);background:var(--soft);padding:14px 16px;border-radius:0 4px 4px 0;font-size:16px}
.cx-key b{color:var(--accent-ink)}
.cx-rules{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.cx-rules>li{display:flex;gap:12px;align-items:flex-start;border:1px solid var(--line-2);border-radius:4px;padding:12px 14px;background:var(--paper)}
.cx-n{flex:none;width:22px;height:22px;border-radius:50%;background:var(--navy);color:#fff;font-size:12px;font-weight:700;display:grid;place-items:center;margin-top:2px;font-family:var(--f-en)}
.cx-rules>li>div{min-width:0;flex:1}
.cx-lab{display:block;font-size:14.5px;color:var(--ink);margin-bottom:3px}
.cx-rules b:not(.cx-lab){color:var(--accent-ink)}
.cx-sub{list-style:none;margin:2px 0 0;padding:0}
.cx-sub li{position:relative;padding:3px 0 3px 14px;font-size:14.5px}
.cx-sub li::before{content:"";position:absolute;left:2px;top:13px;width:5px;height:5px;border-radius:50%;background:var(--gold)}
.cx-inl{margin-top:4px!important;font-size:13.5px;color:var(--muted);font-style:italic}
.cx-ex{background:var(--tint);border-radius:4px;padding:14px 16px}
.cx-ex ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.cx-ex li{display:flex;flex-direction:column;padding:0 0 8px;border-bottom:1px dashed var(--line);}
.cx-ex li:last-child{border-bottom:0;padding-bottom:0}
.cx-ex li .en{font-size:15px;font-weight:500;color:var(--ink)}
.cx-ex li small{font-size:13px;color:var(--muted)}
.concept .cx ul{background:none;padding:0;margin:0}
.concept .cx li{font-family:inherit}

.wg-h{font-size:13px;color:var(--muted);margin:14px 0 8px;font-weight:600}
/* word detail sheet */
.wd-ov{position:fixed;inset:0;background:rgba(15,25,40,.45);z-index:50;display:flex;align-items:flex-end;justify-content:center;padding:0}
.wd-box{position:relative;background:var(--paper);width:100%;max-width:560px;max-height:86vh;overflow:auto;border-radius:14px 14px 0 0;padding:22px 20px 18px;box-shadow:0 -8px 30px rgba(0,0,0,.18)}
@media (min-width:700px){.wd-ov{align-items:center}.wd-box{border-radius:8px}}
.wd-x{position:absolute;top:10px;right:12px;border:0;background:none;font-size:26px;line-height:1;color:var(--muted);cursor:pointer;padding:4px 8px}
.wd-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-right:30px}
.wd-head b{font-size:28px;font-weight:700;letter-spacing:-.01em}
.wd-ph{color:var(--muted);font-size:15px}
.wd-play{border:1px solid var(--line);background:var(--paper);border-radius:999px;width:30px;height:30px;cursor:pointer;font-size:13px;flex:none}
.wd-play.lg{width:38px;height:38px;font-size:16px;border-color:var(--navy)}
.wd-ko{margin:12px 0 4px;padding:10px 14px;background:var(--soft);border-left:4px solid var(--gold);border-radius:0 4px 4px 0;display:flex;gap:10px;align-items:baseline}
.wd-ko span,.wd-ex span,.wd-rel span{font-size:11.5px;font-weight:700;color:var(--muted);letter-spacing:.04em;flex:none}
.wd-ko b{font-size:17px}
.wd-m{border-top:1px solid var(--line-2);padding:14px 0 6px;margin-top:10px}
.wd-pos{display:inline-block;font-size:12.5px;font-weight:700;color:#fff;background:var(--navy);padding:2px 9px;border-radius:2px}
.wd-pos i{font-style:normal;font-weight:500;opacity:.8;margin-left:2px}
.wd-defs{margin:8px 0 6px;padding-left:20px;font-size:14.5px;line-height:1.6}
.wd-defs li{margin-bottom:3px}
.wd-ex{display:flex;align-items:flex-start;gap:10px;background:var(--tint);border-radius:4px;padding:10px 12px;margin:8px 0}
.wd-ex p{margin:0;flex:1;font-size:14.5px;line-height:1.55;font-style:italic}
.wd-rel{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0}
.wd-rel button{border:1px solid var(--line);background:var(--paper);border-radius:999px;padding:4px 11px;font-size:13.5px;cursor:pointer;color:var(--ink)}
.wd-rel.ant button{border-style:dashed}
.wd-msg{color:var(--muted);padding:18px 0;text-align:center}
.wd-src{margin:14px 0 0;font-size:11px;color:var(--muted);text-align:right}
.wd-img{margin:12px 0 4px;border-radius:6px;overflow:hidden;background:var(--soft);border:1px solid var(--line-2)}
.wd-img img{display:block;width:100%;max-height:220px;object-fit:cover}
.wd-img figcaption{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:11px;color:var(--muted)}
.wd-img figcaption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right;flex:1}
.wd-img.ph{height:120px;display:grid;place-items:center;font-size:13px;color:var(--muted)}
.eq-btns{display:inline-flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.eq-def{border-left:4px solid var(--navy);background:var(--soft);padding:12px 14px;border-radius:0 4px 4px 0;margin-top:6px}
.eq-def p{margin:8px 0 0;font-size:16.5px;line-height:1.55;color:var(--ink)}
.eq-row{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 4px}
/* sentence ordering */
.ord-ans{min-height:64px;border:1.5px dashed var(--line);border-radius:6px;padding:10px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:12px;background:var(--paper)}
.ord-ans.ok{border-style:solid;border-color:var(--good);background:var(--good-bg)}
.ord-ans.no{border-style:solid;border-color:var(--bad);background:var(--bad-bg)}
.ord-ph{color:var(--muted);font-size:13.5px;padding:0 4px}
.ord-pool{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;padding:4px 0 6px}
.ord-t{border:1px solid var(--line);background:var(--paper);border-radius:6px;padding:9px 13px;font-size:16px;cursor:pointer;color:var(--ink);box-shadow:0 1px 0 var(--line)}
.ord-t.on{background:var(--navy);color:#fff;border-color:var(--navy)}
.ord-t.used{opacity:.25;cursor:default}
.ord-p{font-size:18px;font-weight:600;margin-left:-2px}
.wg-list.sents li{align-items:flex-start}
.wg-list.sents li div{display:flex;flex-direction:column;gap:2px}
.wg-list.sents li b{min-width:0;font-size:15.5px;font-weight:500}
.wg-list.sents li span{font-size:13px;color:var(--muted)}
.wg-word.def{font-size:17px;font-weight:500;line-height:1.5}.wg-opt{line-height:1.4}
.eq-word{display:flex;align-items:center;gap:10px;margin:4px 0 10px}
.eq-word b{font-size:30px;font-weight:700;letter-spacing:-.01em}
.eq-ex{margin-top:8px!important;font-size:14.5px!important;font-style:italic;color:var(--ink-2,var(--ink))!important}
.eq-ex span{font-style:normal;font-size:11px;font-weight:700;color:var(--muted);margin-right:8px;letter-spacing:.04em}
/* reward */
.rw-card button{border:1.5px dashed var(--gold)!important;background:linear-gradient(135deg,rgba(244,185,66,.08),rgba(244,185,66,.02))!important}
.rw-card:not(.ok) button{opacity:.75;cursor:default}
.rw-card.ok button{border-style:solid!important;background:linear-gradient(135deg,rgba(244,185,66,.28),rgba(244,185,66,.08))!important;animation:rwPulse 2s ease-in-out infinite}
@keyframes rwPulse{0%,100%{box-shadow:0 0 0 0 rgba(244,185,66,.0)}50%{box-shadow:0 0 0 6px rgba(244,185,66,.25)}}
.rw-box{max-width:640px}
.rw-h{display:flex;flex-direction:column;gap:2px;margin:0 30px 12px 0}
.rw-h b{font-size:19px}.rw-h span{color:var(--muted);font-size:14px}
.rw-box video{width:100%;max-height:70vh;background:#000;border-radius:8px;display:block}
.rw-list{list-style:none;margin:14px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.rw-list li{border:1px solid var(--line);border-radius:6px;overflow:hidden;background:var(--paper)}
.rw-list li.off{opacity:.5}
.rw-list video{width:100%;aspect-ratio:16/10;object-fit:cover;background:#000;display:block}
.rw-meta{padding:10px;display:flex;flex-direction:column;gap:6px}
.rw-meta input{width:100%;box-sizing:border-box;padding:7px 9px;border:1px solid var(--line);border-radius:3px;font:inherit;font-size:13.5px;background:var(--paper);color:var(--ink)}
.rw-btns{display:flex;gap:6px}
.rw-meta small{font-size:11.5px;color:var(--muted)}
.danger-t{color:var(--bad)!important}
.seen-row{display:flex;gap:4px;flex-wrap:wrap;margin-top:4px}
.chip.seen-y{background:#e6f4ea;color:#1e6b3a;border-color:#bfe3cb}
.chip.seen-n{background:#f3f3f1;color:#8a8a85}
.pc-like{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);background:var(--paper);border-radius:999px;padding:9px 16px;font:inherit;font-size:14px;cursor:pointer;color:inherit}
.pc-like .hrt{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border:1.5px solid #b8c2cf;border-radius:50%;font-size:12px;line-height:1;color:transparent;font-weight:700}
.pc-like.on{background:#e8f0f8;border-color:#9fb7d3;color:#1F4E79;font-weight:600}.pc-like.on .hrt{background:#1F4E79;border-color:#1F4E79;color:#fff}
.pc-list{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}
.pc-list li{max-width:88%;padding:10px 12px;border-radius:12px;background:var(--soft)}
.pc-list li.p{align-self:flex-end;background:var(--tint)}
.pc-list li b{display:block;font-size:12px;opacity:.7;margin-bottom:2px}
.pc-list li p{margin:0;font-size:14px;line-height:1.55;word-break:break-word}
.pc-list li time{display:block;font-size:11px;opacity:.55;margin-top:4px;text-align:right}
.pc-form{display:flex;gap:8px;margin-top:12px;align-items:flex-end}
.pc-form textarea{flex:1;min-width:0;border:1px solid var(--line);border-radius:10px;padding:10px;font:inherit;font-size:14px;resize:vertical;background:var(--paper);color:var(--ink)}
.pc-msg{font-size:13px;margin:8px 0 0;opacity:.8}
.pc-admin{padding:6px 2px 10px}
.chip.pc-y{background:#e8f0f8;color:#1F4E79;border-color:#9fb7d3}
button.chip.pc-c{cursor:pointer;background:#eef3fb;color:#24508f;border-color:#c9d8ef;font:inherit;font-size:12px}
.kk-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:0 14px}
.kk .chk{display:flex;gap:8px;align-items:center;font-size:14px;margin:6px 0}
.kk .status.ok{color:#1e6b3a}
.kk-tpl{margin-top:12px}.kk-tpl summary{cursor:pointer;font-weight:600;font-size:14px}
.kk-t{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-top:10px}
.kk-th{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.kk-t pre{white-space:pre-wrap;font:inherit;font-size:13px;margin:0;line-height:1.55}
@media (max-width:520px){.pc-form{flex-direction:column;align-items:stretch}}

/* ---- monthly plan (월간 계획) ---- */
.pl-panel{display:flex;flex-direction:column;gap:12px}
.pl-nav{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.pl-nav b{font-size:17px}
.pl-nav .sp{flex:1}
.pl-card{border:1px solid var(--line);border-radius:4px;padding:12px 14px;background:var(--paper);display:flex;flex-direction:column;gap:6px}
.pl-c-top{display:flex;align-items:center;gap:8px}
.pl-c-top b{font-size:15.5px}
.pl-c-meta{font-size:13px;color:var(--muted)}
.pl-c-act{display:flex;gap:6px;flex-wrap:wrap}
.btn.danger{color:var(--bad);border-color:var(--bad)}
.pl-chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
.pl-chip{border:1px solid var(--line);background:var(--paper);border-radius:999px;padding:4px 12px;cursor:pointer;font-size:13.5px}
.pl-chip small{color:var(--muted);font-size:11px}
.pl-chip.on{background:var(--navy);border-color:var(--navy);color:#fff}
.pl-chip.on small{color:rgba(255,255,255,.75)}
.pl-regen{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:4px 0 10px}
.pl-regen .status{padding:0;font-size:12.5px}
.pl-s{border:1px solid var(--line);border-radius:4px;padding:10px 12px;margin-bottom:10px;background:var(--soft)}
.pl-s.off{background:var(--warn-bg)}
.pl-s-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pl-s-h b{min-width:84px}
.pl-s-h input[type=date],.pl-s-h input[type=text]{width:auto;flex:none;border:1px solid var(--line);border-radius:3px;padding:3px 6px;background:var(--paper);font-size:13px}
.pl-s-h .x{margin-left:auto;border:0;background:none;font-size:18px;color:var(--muted);cursor:pointer}
.pl-off{font-size:13px;display:flex;align-items:center;gap:4px}
.pl-s-b{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px}
.pl-s-b textarea{min-height:92px}
@media (max-width:640px){.pl-s-b{grid-template-columns:1fr}}
.pl-fill{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;background:var(--tint);border:1px solid var(--line);border-radius:4px;padding:8px 10px;margin-bottom:10px;font-size:13.5px}
.pl-fill .status{padding:0}
.pl-wk{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:6px}
.pl-wk li{display:flex;gap:12px;font-size:14px;border-bottom:1px solid var(--line-2);padding-bottom:6px}
.pl-wk li b{min-width:72px;color:var(--accent-ink)}
.cal-wrap{overflow-x:auto;display:flex;flex-direction:column;gap:20px;align-items:flex-start}
.cal-modal{position:fixed;inset:0;z-index:50;background:#3a4656;overflow:auto;padding:16px}
.cal-bar{display:flex;gap:8px;justify-content:flex-end;max-width:794px;margin:0 auto 10px}
.cal-modal .cal-wrap{align-items:center}
#print-root{display:none}

/* printable calendar: always light paper */
.cal{width:794px;min-height:1123px;background:#fff;color:#1b2533;padding:44px 48px 36px;font-family:"Noto Sans KR","Malgun Gothic",Arial,sans-serif;box-shadow:0 2px 14px rgba(0,0,0,.12);display:flex;flex-direction:column;flex:none}
.cal .logo{color:#1F4E79}
.cal .logo .lg-kr,.cal .logo .lg-sub{fill:#1b1f24}
.cal-logo svg{height:40px}
.cal-top{display:flex;justify-content:space-between;align-items:flex-end;gap:16px}
.cal-mon{font-family:Poppins,Arial,sans-serif;font-size:58px;font-weight:800;color:#1F4E79;line-height:1;margin-top:12px;letter-spacing:.01em}
.cal-sub{font-size:12.5px;font-weight:700;color:#E2592A;margin-top:8px;letter-spacing:.02em}
.cal-r{text-align:right;display:flex;flex-direction:column;align-items:flex-end;gap:2px}
.cal-r .k{font-size:10.5px;font-weight:700;color:#E2592A;letter-spacing:.08em}
.cal-r b{font-size:30px;color:#1F4E79;line-height:1.2}
.cal-r span:last-child{font-size:12.5px;color:#6b7a8f}
.cal-rule{height:3px;background:#1F4E79;margin:14px 0 20px}
.cal h3{display:flex;align-items:baseline;gap:8px;font-size:13px;font-weight:800;color:#1F4E79;margin:0 0 8px;padding-bottom:6px;border-bottom:2px solid #1F4E79;letter-spacing:.02em}
.cal h3 span{color:#E2592A;font-family:Poppins,Arial,sans-serif}
.cal h3 em{font-style:normal;font-weight:700}
.cal-two{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-bottom:22px}
.cal-info{width:100%;border-collapse:collapse;background:#eef3f9;font-size:13px}
.cal-info th{text-align:left;color:#E2592A;font-weight:700;width:84px;padding:9px 10px;border-left:3px solid #E2592A}
.cal-info td{font-weight:700;color:#1F4E79;padding:9px 10px}
.cal-notes{list-style:none;margin:0;padding:10px 12px;background:#eef3f9;border-top:1px solid #d7e0ea;font-size:12.5px;color:#3a4a5f;display:flex;flex-direction:column;gap:8px}
.cal-notes li::before{content:"·";margin-right:6px;color:#1F4E79;font-weight:700}
.cal-mini{width:100%;border-collapse:separate;border-spacing:3px;font-size:12px;text-align:center}
.cal-mini th{font-size:11px;color:#1F4E79;font-weight:700}
.cal-mini th.sun,.cal-mini td.sun{color:#E2592A}
.cal-mini td{height:24px;color:#3a4a5f}
.cal-mini td.on{background:#1F4E79;color:#fff;font-weight:700}
.cal-mini td.off{background:#fde7e1;color:#E2592A;font-weight:700}
.cal-mini td.nx span{font-size:10.5px}
.cal-leg{display:flex;gap:14px;justify-content:flex-end;font-size:11px;color:#6b7a8f;margin-top:6px}
.cal-leg i{display:inline-block;width:9px;height:9px;margin-right:4px;vertical-align:-1px}
.cal-leg .lg-on{background:#1F4E79}.cal-leg .lg-off{background:#fde7e1;border:1px solid #f4b3a2}
.cal-h3{margin-top:0}
.cal-week{width:100%;border-collapse:collapse;font-size:11.5px;table-layout:fixed;border-bottom:2px solid #1F4E79}
.cal-week th{background:#1F4E79;color:#fff;font-size:12px;font-weight:800;padding:6px 4px;border-right:2px solid #fff}
.cal-week th span{font-weight:700}
.cal-week th.wk{width:38px;font-size:10.5px}
.cal-week td{word-break:keep-all;overflow-wrap:anywhere;border:1px solid #c9d4e0;vertical-align:top;padding:5px 7px;line-height:1.45}
.cal-week td.wk{background:#eef3f9;color:#1F4E79;text-align:center;vertical-align:middle;font-size:10.5px;font-weight:700;border-right:2px solid #1F4E79;padding:4px 2px}
.cal-week td.wk b{display:block;font-size:12px;margin-bottom:4px}
.cal-week td.wk span{display:block;line-height:1.3}
.cal-week .c-sub{background:#eef3f9;color:#1F4E79;font-size:11.5px;padding:4px 7px}
.cal-week .c-sub.hw{color:#E2592A;font-weight:700}
.cal-week .c-sub.off{color:#E2592A}
.cal-week .c-les{color:#1F4E79}
.cal-week .c-hw{color:#1b2533}
.cal-week .c-none{text-align:center;vertical-align:middle;color:#8e9bad;font-size:11.5px}
.cal-week .c-none b{color:#8e9bad;font-weight:600}
.cal-foot{margin-top:auto;padding-top:14px;border-top:3px solid #1F4E79;font-size:10.5px;color:#6b7a8f}
.cal-foot b{color:#6b7a8f}
@media print{
  body.pr-cal{background:#fff!important;padding:0!important;margin:0}
  body.pr-cal>*:not(#print-root){display:none!important}
  body.pr-cal #print-root{display:block}
  #print-root .cal{box-shadow:none;width:794px;min-height:0;height:auto;margin:0 auto;page-break-after:always;break-after:page;page-break-inside:avoid}
  #print-root .cal:last-child{page-break-after:auto;break-after:auto}
  #print-root *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  @page{size:A4 portrait;margin:6mm}
}

.pl-panel label.f small,.pl-panel .f>span small{display:inline;font-size:12px;color:var(--muted);font-weight:400}
.pl-s-h input[type=text]{min-width:180px}
.pl-s-h .pl-off input{width:auto}
.pl-panel input[type=month]{width:100%;border:1px solid var(--line);background:var(--paper);border-radius:2px;padding:9px 11px;font-size:14px;color:var(--ink)}
.pl-warn{background:var(--warn-bg);color:var(--warn);border-radius:4px;padding:8px 12px;font-size:13.5px}
.pl-c-warn{font-size:12.5px;color:var(--warn);font-weight:600}
@media (max-width:840px){.cal-modal{padding:16px 0}.cal-bar{padding:0 16px}}

/* ---- 학사일정 ---- */
.g-tabs.g4{grid-template-columns:repeat(4,1fr)}
.g-tabs.g4 button{font-size:13.5px;padding:10px 2px;white-space:nowrap}
@media (max-width:560px){.g-tabs.g4 button{font-size:12px}}
.gate.g-wide{max-width:1040px}
.ac{display:flex;flex-direction:column;gap:12px;margin-top:8px}
.ac-head{background:#1F4E79;color:#fff;text-align:center;font-size:18px;font-weight:700;padding:10px;border-radius:3px}
.ac-head b{font-family:Poppins,Arial,sans-serif;margin-right:10px}
.ac-leg{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;font-size:13px;text-align:center}
.ac-leg span{padding:6px;border-radius:3px;background:var(--soft)}
.ac-leg i{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;vertical-align:-1px}
.ac-leg i.mw{background:#1F4E79}.ac-leg i.tt{background:#E2592A}.ac-leg i.off{background:#e0333a}.ac-leg i.brk{background:#7cb342}
.ac-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
@media (max-width:860px){.ac-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:520px){.ac-grid{grid-template-columns:1fr}}
.ac-m{border:1px solid var(--line);border-radius:3px;overflow:hidden;background:var(--paper)}
.ac-mh{background:#2a5d9f;color:#fff;text-align:center;font-weight:700;padding:4px}
.ac-mh small{font-weight:500;opacity:.85}
.ac-m table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:13px;text-align:center}
.ac-m th{background:#163a5c;color:#fff;font-weight:600;font-size:11.5px;padding:3px 0}
.ac-m th.sun{color:#ffb4a8}.ac-m th.sat{color:#b9d4ff}
.ac-m td{padding:5px 0;color:var(--ink)}
.ac-m td.mw{background:rgba(31,78,121,.09)}.ac-m td.tt{background:rgba(226,89,42,.09)}
.ac-m td.sun{color:#d23c3c}.ac-m td.sat{color:#2f6fd6}
.ac-m td.off{background:#fbd7d7!important;color:#c0392b;font-weight:700}
.ac-m td.brk{background:#d8ecc4!important;color:#3d6b1d;font-weight:700}
.ac-m td.hol{color:#d23c3c}
.ac-ev{margin:0;padding:6px 10px 8px 24px;font-size:12.5px;color:var(--ink-2);border-top:1px solid var(--line-2);background:var(--soft)}
.ac-list h3{font-size:15px;margin:6px 0}
.ac-list ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.ac-list li{display:flex;gap:10px;align-items:center;font-size:14px;border-bottom:1px solid var(--line-2);padding:5px 0}
.ac-list li span{min-width:110px;color:var(--muted)}
.ac-list li b{font-size:11.5px;padding:1px 7px;border-radius:2px}
.ac-list .t-off{background:#fbd7d7;color:#c0392b}.ac-list .t-break{background:#d8ecc4;color:#3d6b1d}
/* learning center week */
.lw{list-style:none;margin:0 0 6px;padding:0;display:flex;flex-direction:column;gap:10px}
.lw>li{border:1px solid var(--line);border-radius:4px;padding:10px 12px;background:var(--paper);display:flex;flex-direction:column;gap:4px}
.lw>li.off{background:var(--warn-bg);flex-direction:row;gap:12px}
.lw>li>b{color:var(--accent-ink)}
.lw-les{font-size:13px;color:var(--muted)}
.lw-hw{list-style:none;margin:4px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}
.lw-hw label{display:flex;gap:8px;align-items:center;font-size:14.5px;cursor:pointer}
.lw-hw input{width:18px;height:18px}
.lw-hw .done{text-decoration:line-through;color:var(--muted)}
.cal-page{align-items:center}
@media (max-width:440px){.g-tabs.g4{grid-template-columns:1fr 1fr}.g-tabs.g4 button{font-size:13px;padding:9px 2px}}

/* ---- 휴대폰용 월간 캘린더 ---- */
.calm{width:100%;max-width:560px;background:#fff;color:#1b2533;border-radius:6px;padding:18px 16px 14px;box-shadow:0 2px 14px rgba(0,0,0,.12);display:flex;flex-direction:column;gap:14px;font-family:"Noto Sans KR","Malgun Gothic",Arial,sans-serif}
.calm .logo{color:#1F4E79}.calm .logo .lg-kr,.calm .logo .lg-sub{fill:#1b1f24}
.calm-top{display:flex;flex-direction:column;gap:8px;border-bottom:3px solid #1F4E79;padding-bottom:12px}
.calm-mon b{display:block;font-family:Poppins,Arial,sans-serif;font-size:34px;font-weight:800;color:#1F4E79;line-height:1.05}
.calm-mon span{font-size:13px;font-weight:700;color:#E2592A}
.calm-stu b{font-size:22px;color:#1F4E79;margin-right:8px}
.calm-stu span{font-size:13.5px;color:#4a5a6f}
.calm-notes{list-style:none;margin:0;padding:10px 12px;background:#eef3f9;border-radius:4px;font-size:14px;color:#3a4a5f;display:flex;flex-direction:column;gap:5px}
.calm-notes li::before{content:"·";margin-right:6px;font-weight:700;color:#1F4E79}
.calm-mini .cal-mini{font-size:14px}.calm-mini .cal-mini td{height:30px}
.calm-wk{display:flex;flex-direction:column;gap:8px}
.calm-wh{display:flex;align-items:baseline;gap:8px;background:#1F4E79;color:#fff;padding:7px 12px;border-radius:4px}
.calm-wh b{font-family:Poppins,Arial,sans-serif;font-size:15px}.calm-wh span{font-size:13px;opacity:.85}
.calm-s{border:1px solid #d3dce7;border-radius:6px;padding:10px 12px 12px}
.calm-s.off{background:#fdf0ec;border-color:#f4c7b8}.calm-s.off p{margin:4px 0 0;color:#c0392b;font-size:14.5px}
.calm-d{font-size:16.5px;font-weight:800;color:#1F4E79;margin-bottom:4px}
.calm-k{font-size:12px;font-weight:800;color:#1F4E79;margin:8px 0 3px;letter-spacing:.02em}
.calm-k.hw{color:#E2592A}
.calm-les,.calm-hw{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:15px;line-height:1.45;word-break:keep-all;overflow-wrap:anywhere}
.calm-les li::before{content:"•";color:#1F4E79;margin-right:7px}
.calm-hw li{padding-left:24px;position:relative}
.calm-hw li::before{content:"";position:absolute;left:2px;top:4px;width:13px;height:13px;border:1.6px solid #5b6b80;border-radius:3px}
.calm-foot{font-size:11px;color:#8e9bad;border-top:2px solid #1F4E79;padding-top:8px}
.cal-wrap .calm{margin:0 auto}

.say{cursor:pointer;border-bottom:1px dashed rgba(31,78,121,.35);transition:background .2s}
.say:hover{background:rgba(31,78,121,.06)}
.say.saying{background:rgba(244,185,66,.35);border-radius:3px}
.lw2{display:flex;flex-direction:column;gap:10px;margin-bottom:6px}
.lw-card{border:1px solid var(--line);border-radius:6px;padding:12px 14px;background:var(--paper)}
.lw-card.due{border-color:#f4b942;background:rgba(244,185,66,.08)}
.lw-card.off{background:var(--warn-bg);color:var(--warn);font-size:14px}
.lw-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:6px}
.lw-h b{font-size:16px;color:var(--accent-ink)}.lw-h span{font-size:13px;color:var(--muted);font-weight:600}
.lw-card.due .lw-h span{color:#b07d1a}
.lw-from{margin:0 0 6px;font-size:12.5px;color:var(--muted)}
.lw-les2{margin:0;padding-left:18px;font-size:14.5px;line-height:1.55}
.wm{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;font-size:14px;color:var(--ink-2)}
.wm.pending{color:var(--muted);font-size:12.5px}
.wm-pos{font-style:normal;font-size:11.5px;font-weight:700;color:#b07d1a;background:rgba(244,185,66,.18);border-radius:3px;padding:0 5px}
.wm-ko.en{font-size:12.5px;color:var(--muted)}
.wc-main .wm{justify-content:center;font-size:13px;margin-top:4px}
.pv-bar{position:sticky;top:0;z-index:50;display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding:8px 14px;background:#2b2b2b;color:#fff;font-size:13px}
.pv-bar b{background:#f5c542;color:#222;padding:2px 8px;border-radius:999px;font-size:12px}
.nc-row{margin-bottom:10px}.nc-head{display:flex;gap:6px;align-items:center;margin-bottom:4px}
.nc-name{flex:1;font-weight:600;font-size:13px;padding:6px 8px;border:1px dashed var(--line-2);border-radius:6px;background:transparent}
.nc-name:focus{border-style:solid;outline:none;border-color:var(--accent-ink)}
.kd{margin:10px 0 12px;padding:14px 14px 12px;border-radius:12px;background:var(--paper-2,#f6f8fb);border:1px solid var(--line-2)}
.kd-top{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.kd-pos{font-size:12px;font-weight:600;color:var(--accent-ink);background:#fff;border:1px solid var(--line-2);border-radius:999px;padding:2px 9px}
.kd-ko{font-size:20px;font-weight:700;color:var(--ink)}
.kd-also{margin:4px 0 0;font-size:12.5px;color:var(--muted)}
.kd-def{margin:8px 0 0;font-size:14px;color:var(--ink-2)}
.kd-ex{margin-top:10px;display:grid;grid-template-columns:1fr auto;gap:2px 8px;align-items:center}
.kd-ex p{margin:0;font-size:15px}.kd-exko{grid-column:1/-1;font-size:13px;color:var(--muted)}
.wd-more{margin-top:8px}.wd-more summary{cursor:pointer;font-size:13px;color:var(--muted);padding:6px 0}
.kd-tbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:4px 0 8px}
.kd-form{margin:6px 0 10px;padding:12px;border:1px dashed var(--line-2);border-radius:10px}.kd-form b{display:block;margin-bottom:6px;font-size:13px}
/* ---- home ---- */
.g-home-btn{all:unset;cursor:pointer;display:inline-block}
.hm-hero h1{margin:6px 0 6px;font-size:28px;letter-spacing:-.02em}
.hm-hero p{margin:0;color:var(--muted);font-size:14px;line-height:1.6}
.hm-cont{display:grid;gap:8px;margin:18px 0 0}
.hm-cbtn{display:grid;grid-template-columns:1fr auto;align-items:center;gap:2px 10px;text-align:left;padding:13px 16px;border-radius:12px;border:0;cursor:pointer;background:var(--accent-ink,#1f4e79);color:#fff;font:inherit}
.hm-cbtn.parent{background:#2b3a4a}
.hm-cbtn span{grid-column:1;font-size:11px;letter-spacing:.08em;opacity:.75;font-family:var(--f-en)}
.hm-cbtn b{grid-column:1;font-size:16px}
.hm-cbtn i{grid-column:2;grid-row:1/3;font-style:normal;font-size:20px;opacity:.85}
.hm-doors{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin:18px 0 6px}
.hm-door{display:flex;flex-direction:column;align-items:flex-start;gap:4px;text-align:left;padding:18px 16px 16px;border-radius:14px;border:1px solid var(--line-2);background:#fff;cursor:pointer;font:inherit;transition:border-color .15s,box-shadow .15s}
.hm-door:hover{border-color:var(--accent-ink,#1f4e79);box-shadow:0 4px 14px rgba(31,78,121,.08)}
.hm-door b{font-size:16px;color:var(--ink);white-space:nowrap}
.hm-door span:last-child{font-size:12.5px;color:var(--muted);line-height:1.5}
.hm-ic{width:40px;height:40px;border-radius:10px;display:grid;place-items:center;margin-bottom:6px;background:#eef3f8;color:var(--accent-ink,#1f4e79)}
.hm-door.s .hm-ic{background:#fdf4e2;color:#a86d00}
.hm-ic svg{width:22px;height:22px}
.hm-sec{margin-top:22px}
.hm-sh{display:flex;justify-content:space-between;align-items:center;padding-bottom:8px;border-bottom:1px solid var(--ink)}
.hm-sh b{font-size:15px}.hm-sh button{border:0;background:none;color:var(--muted);font:inherit;font-size:12.5px;cursor:pointer}
.hm-ev{list-style:none;margin:0;padding:0}
.hm-ev li{display:flex;gap:12px;align-items:baseline;padding:11px 2px;border-bottom:1px solid var(--line-2);font-size:14px}
.hm-ev li span{min-width:118px;color:var(--muted);font-size:13px}
.hm-ev li.t-off b,.hm-ev li.t-break b{color:#b4432f}
@media (max-width:560px){.hm-doors{grid-template-columns:1fr}.hm-door{flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:12px}.hm-door .hm-ic{margin:0}.hm-door b{flex:1}.hm-door span:last-child{flex-basis:100%;padding-left:52px;margin-top:-6px}.hm-hero h1{font-size:24px}}
/* ---- progress & stamps ---- */
.pg-card{border:1px solid var(--line-2);border-radius:14px;padding:16px 16px 12px;background:#fff}
.pg-card.done{background:#fff8f6;border-color:#f1c9bf}
.pg-top{display:flex;justify-content:space-between;align-items:flex-end}
.pg-top span{font-size:14px;font-weight:600;color:var(--ink-2)}
.pg-top b{font-size:34px;line-height:1;font-weight:600;color:var(--accent-ink,#1f4e79)}.pg-top b small{font-size:16px;margin-left:2px}
.pg-bar{height:12px;border-radius:999px;background:#edf1f6;margin:10px 0 6px;overflow:hidden}
.pg-bar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#3d7ab8,#1f4e79);transition:width .6s ease}
.pg-hint{margin:0 0 8px;font-size:12.5px;color:var(--muted)}.pg-hint b{color:#c0392b}
.pg-done{display:flex;align-items:center;gap:14px;margin-bottom:8px}
.pg-done b{display:block;font-size:20px;color:#c0392b}.pg-done span{font-size:13.5px;color:var(--ink-2)}
.stamp{color:#d23a2a;width:82px;height:82px;flex:none;transform:rotate(-12deg)}
.stamp.pop{animation:stampPop .55s cubic-bezier(.2,1.6,.4,1) both}
@keyframes stampPop{0%{transform:scale(2.2) rotate(-30deg);opacity:0}100%{transform:scale(1) rotate(-12deg);opacity:1}}
.pg-cats{list-style:none;margin:6px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:6px}
.pg-cats button{width:100%;display:flex;flex-direction:column;gap:2px;align-items:flex-start;padding:8px 10px;border-radius:10px;border:1px solid var(--line-2);background:#fafbfd;font:inherit;cursor:pointer;text-align:left}
.pg-cats span{font-size:12px;color:var(--muted)}.pg-cats b{font-size:14px;color:var(--ink)}
.pg-cats li.ok button{background:#eef8f1;border-color:#bfe3cb}.pg-cats li.ok b{color:#1e7a44}
.sb{margin-top:12px;border:1px dashed #e3b9b1;border-radius:14px;padding:14px;background:#fffdfb}
.sb-h{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin-bottom:10px}
.sb-h b{font-size:15px}.sb-h span{font-size:12.5px;color:var(--muted);flex:1}.sb-h em{font-style:normal;font-size:12.5px;color:#c0392b;font-weight:600}
.sb-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.sb-grid li{aspect-ratio:1;border-radius:50%;border:1.5px dashed #e6cfca;display:grid;place-items:center;color:#d8c2bd;font-size:13px}
.sb-grid li.on{border:0}.sb-grid li.on .stamp{width:100%;height:100%}
/* ---- dashboard ---- */
.db-h{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-bottom:12px}.db-h h3{margin:0}
.db-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.db-tile{border:1px solid var(--line-2);border-radius:12px;padding:12px 14px;background:#fff}
.db-tile span{display:block;font-size:12.5px;color:var(--muted)}
.db-tile b{font-size:26px;font-weight:600;color:var(--ink)}.db-tile b small{font-size:14px;color:var(--muted);margin-left:2px}
.db-tile em{display:block;font-style:normal;font-size:11.5px;color:var(--muted)}
.db-list{margin-top:14px}.db-list td{vertical-align:middle}
.db-sub{font-size:12px;color:var(--muted)}.db-sp{font-size:18px;color:#c0392b}
.db-act{white-space:nowrap}.db-act .btn{margin:2px}
@media (max-width:720px){.db-tiles{grid-template-columns:1fr 1fr}}
.pg-done b{font-family:var(--f-en);letter-spacing:-.01em}.pg-done small{display:block;font-size:12px;color:var(--muted);margin-top:2px}
.pg-hint small{display:block;font-size:11.5px;margin-top:1px}
.sb{border:2px solid #f0d58a;background:linear-gradient(180deg,#fffaf0,#fff);border-radius:16px}
.sb-h b{font-family:var(--f-en);font-size:17px;letter-spacing:.01em;color:#1f4e79}
.sb-sub{margin:-4px 0 12px;font-size:12px;color:var(--muted);line-height:1.5}.sb-sub span.en{display:block;color:var(--ink-2);font-size:13px}
.sb-grid li{border-color:#ecdcae;color:#d6c38f;background:#fff}
.stamp{transform:rotate(-10deg)}
.hm-door.c .hm-ic{background:#eaf6ef;color:#1e7a44}
a.hm-cbtn{text-decoration:none;color:#fff}
/* ---- siblings ---- */
.sib-sw{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px;padding:5px;border-radius:999px;background:#eef2f7;width:max-content;max-width:100%}
.sib-sw>*{border:0;background:none;font:inherit;font-size:14px;font-weight:600;color:var(--muted);padding:7px 16px;border-radius:999px;cursor:pointer;text-decoration:none}
.sib-sw .on{background:#fff;color:var(--accent-ink,#1f4e79);box-shadow:0 1px 3px rgba(0,0,0,.08);cursor:default}
/* ---- site footer ---- */
.site-foot{display:flex;flex-direction:column;gap:8px;padding:18px 22px 20px;letter-spacing:0}
.sf-brand{font-family:var(--f-en);font-size:12px;letter-spacing:.18em;color:var(--ink-2)}.sf-brand b{letter-spacing:.12em}.sf-brand span{display:block;margin-top:3px;font-family:var(--f-body);letter-spacing:.04em;color:var(--muted)}
.sf-links{display:flex;flex-wrap:wrap;gap:2px 14px}.sf-links button{border:0;background:none;padding:2px 0;font:inherit;font-size:12.5px;color:var(--muted);cursor:pointer}.sf-links button:hover{color:var(--ink)}
.sf-note{margin:2px 0 0;font-size:11.5px;line-height:1.6;color:var(--muted)}
.sf-copy{margin:0;font-size:11.5px;color:#8a95a5;letter-spacing:.02em}
.r-foot .sf-copy{flex-basis:100%;font-size:11px}
.cal-empty-nav{display:flex;gap:8px;margin:14px 0 4px}
.cal-empty-links{margin-top:14px}.cal-empty-links a{display:flex;flex-direction:column;gap:2px;text-decoration:none;color:inherit;padding:14px 16px}
.cal-empty-links{grid-template-columns:1fr 1fr}.cal-empty-links a{border:1px solid var(--line);background:var(--paper);border-radius:3px;height:100%}.cal-empty-links a:hover{border-color:var(--navy)}.cal-empty-links a span{font-size:12.5px;color:var(--muted)}

.picker .gb-pick{grid-column:1/-1;width:100%;font:inherit;font-size:15px;padding:12px 14px;border:1px solid var(--line);border-radius:6px;background:var(--paper);color:inherit;min-height:46px}

.miss-list{list-style:none;margin:10px auto 4px;padding:0;max-width:360px;text-align:left}.miss-list li{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px;background:var(--paper)}.miss-list li b{font-size:16px}.miss-list li span{flex:1;opacity:.75}

.db-cell{display:inline-flex;align-items:center;gap:6px;background:none;border:0;padding:4px 2px;font:inherit;color:inherit;cursor:pointer;text-align:left;border-radius:6px}
.db-cell:hover,.db-cell.on{background:rgba(31,78,121,.08)}
.db-caret{font-style:normal;font-size:11px;opacity:.55}
.db-det td{background:rgba(31,78,121,.04);padding:0!important}
.db-box{padding:14px 16px}.db-box h4{margin:0 0 8px;font-size:15px}.db-box p{margin:0 0 6px}
.db-dl{list-style:none;margin:0;padding:0}.db-dl li{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--line)}
.db-dl li:last-child{border-bottom:0}.db-dl li>span:first-child{flex:1 1 180px}.db-dl audio{height:34px;max-width:260px}
.db-nc{display:block!important}.db-nc>div{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.db-miss{flex-basis:100%;font-size:13px;opacity:.8}

button.db-tile{font:inherit;color:inherit;text-align:left;cursor:pointer;width:100%}
button.db-tile:hover,button.db-tile.on{border-color:#1F4E79;box-shadow:0 0 0 2px rgba(31,78,121,.12)}
.db-tile .db-caret{display:block;margin-top:4px;font-size:11.5px}
.db-tp{margin-top:10px;border:1px solid var(--line-2);border-radius:12px;background:rgba(31,78,121,.04)}
.db-tl{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:6px}
.db-tl .db-cell{width:100%;padding:8px 10px;background:#fff;border:1px solid var(--line-2)}
.db-sec+.db-sec{margin-top:14px;padding-top:12px;border-top:1px dashed var(--line-2)}
.db-nm b{font-size:15px}
@media (max-width:720px){
 .db-list table,.db-list tbody,.db-list tr,.db-list td{display:block;width:100%}
 .db-list thead{display:none}
 .db-list tr{border:1px solid var(--line-2);border-radius:12px;margin-bottom:10px;padding:6px 12px;background:#fff}
 .db-list td{border:0!important;padding:6px 0!important}
 .db-list td[data-label]{display:flex;align-items:center;justify-content:space-between;gap:10px;border-top:1px solid var(--line)!important}
 .db-list td[data-label]::before{content:attr(data-label);font-size:13px;color:var(--muted);flex:0 0 auto}
 .db-list td.db-act{padding-top:8px!important}
 .db-list tr.db-det{padding:0;background:rgba(31,78,121,.04);margin-top:-6px}
 .db-list tr.db-det td{display:block}
}

@font-face{font-family:SUIT;font-weight:100 900;font-display:swap;src:url(https://cdn.jsdelivr.net/gh/sunn-us/SUIT/fonts/variable/woff2/SUIT-Variable.woff2) format("woff2")}
.jb-public{
--jx-navy:#1F4E79; --jx-navy-2:#2B6CA8; --jx-ink:#16233A; --jx-ink-2:#4A5872; --jx-muted:#8792A6;
--jx-sky:#EEF5FF; --jx-sky-2:#DCEAFE; --jx-cream:#FFF6E3; --jx-gold:#F2B33D; --jx-gold-ink:#B57E12;
--jx-mint:#E7F7EF; --jx-mint-ink:#1E8A5A; --jx-peach:#FFEDE6; --jx-peach-ink:#C9532B;
--jx-line:#E8EDF4; --jx-bg:#F7F9FC; --jx-paper:#fff;
--jx-shadow:0 1px 2px rgba(22,35,58,.04),0 12px 32px -12px rgba(22,35,58,.14);
--f-body:SUIT,"SUIT Variable",-apple-system,"Apple SD Gothic Neo","Noto Sans KR","Malgun Gothic",sans-serif;
}
@media (prefers-color-scheme: dark){.jb-public:not([data-theme="light"]){
--jx-navy:#8fb6e0; --jx-navy-2:#9cc4ef; --jx-ink:#e8edf4; --jx-ink-2:#c3cdd9; --jx-muted:#8e9bad;
--jx-sky:#1a2a3e; --jx-sky-2:#21364f; --jx-cream:#33291a; --jx-gold-ink:#f2c86a; --jx-mint:#16352a; --jx-mint-ink:#6fd39f; --jx-peach:#3a1d1b; --jx-peach-ink:#ff9f8a;
--jx-line:#263243; --jx-bg:#0c121b; --jx-paper:#141d29; --jx-shadow:0 1px 2px rgba(0,0,0,.3),0 12px 32px -12px rgba(0,0,0,.5)}}
.jb-public[data-theme="dark"]{
--jx-navy:#8fb6e0; --jx-navy-2:#9cc4ef; --jx-ink:#e8edf4; --jx-ink-2:#c3cdd9; --jx-muted:#8e9bad;
--jx-sky:#1a2a3e; --jx-sky-2:#21364f; --jx-cream:#33291a; --jx-gold-ink:#f2c86a; --jx-mint:#16352a; --jx-mint-ink:#6fd39f; --jx-peach:#3a1d1b; --jx-peach-ink:#ff9f8a;
--jx-line:#263243; --jx-bg:#0c121b; --jx-paper:#141d29; --jx-shadow:0 1px 2px rgba(0,0,0,.3),0 12px 32px -12px rgba(0,0,0,.5)}
.jb-public body{background:var(--jx-bg);letter-spacing:-.01em;word-break:keep-all}
.jb-public .wrap.jx-wrap{max-width:none;gap:0}
.jb-public body:has(.jx){padding-top:12px}
.jx{max-width:1120px;width:100%;margin:0 auto;color:var(--jx-ink)}
.jx button{font:inherit}
.jx-hd{position:sticky;top:12px;z-index:20}
.jx-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:64px;padding:8px 8px 8px 20px;background:color-mix(in srgb,var(--jx-paper) 88%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--jx-line);border-radius:99px;box-shadow:var(--jx-shadow)}
.jx-logo{display:flex;align-items:center;border:0;background:none;padding:0 0 0 4px;cursor:pointer}
.jx-logo .logo svg{height:48px}
.jx-nav{display:flex;gap:2px}
.jx-nav button{border:0;background:none;padding:9px 16px;border-radius:99px;font-size:14.5px;font-weight:600;color:var(--jx-ink-2);cursor:pointer;white-space:nowrap;transition:background .2s,color .2s}
.jx-nav button:hover{background:var(--jx-sky);color:var(--jx-navy)}
.jx-nav button.on{background:#1F4E79;color:#fff}
.jx-main{padding:28px 0 8px}
.jx-hero{position:relative;overflow:hidden;border-radius:32px;background:linear-gradient(135deg,#F3F8FF 0%,#E3EEFD 55%,#FFF4DD 100%);padding:68px 60px;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:48px;align-items:center}
.jx-hero::before{content:"";position:absolute;width:420px;height:420px;border-radius:50%;right:-120px;bottom:-200px;background:radial-gradient(circle,rgba(242,179,61,.28),transparent 70%)}
.jx-hero::after{content:"";position:absolute;width:300px;height:300px;border-radius:50%;left:-120px;top:-140px;background:radial-gradient(circle,rgba(43,108,168,.14),transparent 70%)}
.jx-hero>*{position:relative;z-index:1;min-width:0}
.jx-chip{display:inline-flex;align-items:center;gap:8px;padding:7px 14px 7px 8px;border-radius:99px;background:#fff;font-size:13px;font-weight:600;color:#1F4E79;box-shadow:0 2px 8px rgba(31,78,121,.08)}
.jx-chip i{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--jx-gold);color:#fff;font-style:normal;font-size:12px}
.jx-hero h1{font-size:clamp(32px,4.6vw,50px);font-weight:800;line-height:1.25;letter-spacing:-.035em;margin:22px 0 18px;color:#16233A}
.jx-hero h1 em{font-style:normal;color:#2B6CA8}
.jx-lead{margin:0;font-size:17px;color:#4A5872;max-width:28em}
.jx-look{display:flex;gap:8px;margin-top:30px;max-width:440px;padding:8px;background:#fff;border-radius:99px;box-shadow:var(--jx-shadow)}
.jx-look #code{flex:1;min-width:0;height:48px;border:0;border-radius:0;background:transparent;padding:0 18px;font-family:Poppins,var(--f-body);font-size:18px;font-weight:600;letter-spacing:.2em;text-align:left;color:#16233A}
.jx-look #code::placeholder{text-transform:none;font-family:var(--f-body);letter-spacing:0;font-weight:500;font-size:15.5px;color:#9AA4B5}
.jx-look input:focus{outline:none}
.jx-look:focus-within{box-shadow:0 0 0 3px rgba(43,108,168,.18),var(--jx-shadow)}
.jx-look button{height:48px;padding:0 24px;border:0;border-radius:99px;background:#1F4E79;color:#fff;font-size:15px;font-weight:700;cursor:pointer;white-space:nowrap;transition:background .2s,transform .2s}
.jx-look button:hover{background:#173D60;transform:translateY(-1px)}
.jx-look button:disabled{opacity:.7;transform:none}
.jx-err{margin-top:12px;max-width:440px;border-radius:14px}
.jx-hint{margin:12px 0 0;padding-left:20px;font-size:13px;color:#7A8597}
.jx-saved{display:grid;gap:8px;margin-top:20px;max-width:440px}
.jx-sv{display:grid;grid-template-columns:1fr auto;align-items:center;gap:0 10px;text-align:left;padding:12px 18px;border:0;border-radius:18px;background:rgba(255,255,255,.75);color:#16233A;cursor:pointer;transition:background .2s}
.jx-sv:hover{background:#fff}
.jx-sv small{grid-column:1;font-size:11.5px;font-weight:600;color:#7A8597}
.jx-sv b{grid-column:1;font-size:15px}
.jx-sv svg{grid-column:2;grid-row:1/3;width:16px;height:16px;color:#1F4E79}
.jx-rc{background:#fff;border-radius:24px;padding:26px;box-shadow:0 30px 60px -24px rgba(31,78,121,.28);transform:rotate(1.5deg);color:#16233A}
.jx-rc-top{display:flex;align-items:center;gap:12px;margin-bottom:20px}
.jx-av{width:44px;height:44px;border-radius:50%;background:#FFF6E3;display:grid;place-items:center;font-weight:800;color:#B57E12;flex:none}
.jx-who{flex:1;min-width:0}
.jx-who b{display:block;font-size:16px}
.jx-who small{font-size:12.5px;color:#8792A6}
.jx-wk{font-family:Poppins,sans-serif;font-size:11px;font-weight:600;letter-spacing:.08em;color:#1F4E79;background:#EEF5FF;padding:6px 12px;border-radius:99px}
.jx-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.jx-stats span{border-radius:16px;padding:14px}
.jx-stats small{display:block;font-size:12px;font-weight:600;opacity:.8}
.jx-stats b{display:block;font-size:22px;font-weight:800;margin-top:2px;letter-spacing:-.02em}
.jx-stats .a{background:#EEF5FF;color:#1F4E79}.jx-stats .b{background:#E7F7EF;color:#1E8A5A}.jx-stats .c{background:#FFF6E3;color:#B57E12}
.jx-meter{margin-top:18px}
.jx-meter>span{display:flex;justify-content:space-between;font-size:13px;color:#4A5872;margin-bottom:6px}
.jx-meter>span i{font-style:normal}
.jx-meter>div{height:10px;border-radius:99px;background:#E8EDF4;overflow:hidden}
.jx-meter>div i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#2B6CA8,#5FA3E6)}
.jx-note{margin-top:18px;padding:14px 16px;background:#F7F9FC;border-radius:16px;font-size:13.5px;color:#4A5872}
.jx-note b{color:#16233A}
.jx-sample{display:block;text-align:right;margin-top:12px;font-size:11.5px;color:#8792A6}
.jx-sec{padding:64px 0 16px}
.jx h2{margin:0;font-size:clamp(24px,2.8vw,30px);font-weight:800;letter-spacing:-.03em;color:var(--jx-ink)}
.jx-sub{margin:8px 0 0;color:var(--jx-ink-2);font-size:16px}
.jx-doors{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:32px}
.jx-door{display:flex;flex-direction:column;align-items:flex-start;text-align:left;background:var(--jx-paper);border-radius:24px;padding:30px 28px 28px;border:1px solid var(--jx-line);cursor:pointer;color:var(--jx-ink);transition:transform .25s,box-shadow .25s,border-color .25s}
.jx-door:hover{transform:translateY(-4px);box-shadow:var(--jx-shadow);border-color:transparent}
.jx-ic{width:56px;height:56px;border-radius:18px;display:grid;place-items:center}
.jx-ic svg{width:26px;height:26px}
.jx-ic.p{background:var(--jx-sky);color:var(--jx-navy)}.jx-ic.s{background:var(--jx-cream);color:var(--jx-gold-ink)}.jx-ic.c{background:var(--jx-mint);color:var(--jx-mint-ink)}
.jx-door b{font-size:19px;font-weight:700;margin:22px 0 6px;letter-spacing:-.02em}
.jx-dp{font-size:15px;color:var(--jx-ink-2);line-height:1.6}
.jx-go{display:inline-flex;align-items:center;gap:6px;margin-top:auto;padding-top:22px;font-size:14px;font-weight:700;color:var(--jx-navy)}
.jx-go svg{width:16px;height:16px;transition:transform .25s}
.jx-door:hover .jx-go svg{transform:translateX(4px)}
.jx-box{margin-top:48px;background:var(--jx-paper);border:1px solid var(--jx-line);border-radius:32px;padding:44px 48px;display:grid;gap:48px}
.jx-box.two{grid-template-columns:1fr 1fr}
.jx-col-hd{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}
.jx-col-hd button{display:inline-flex;align-items:center;gap:6px;border:0;padding:10px 16px;border-radius:99px;background:var(--jx-sky);color:var(--jx-navy);font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap}
.jx-col-hd button:hover{background:var(--jx-sky-2)}
.jx-col-hd button svg{width:14px;height:14px}
.jx-evs{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.jx-evs li{display:flex;align-items:center;gap:18px;padding:14px;border-radius:20px;background:var(--jx-bg)}
.jx-cal{flex:none;width:62px;height:62px;border-radius:18px;background:var(--jx-paper);box-shadow:0 2px 8px rgba(22,35,58,.06);display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.1}
.jx-cal small{font-size:11px;font-weight:700;color:var(--jx-peach-ink)}
.jx-cal b{font-size:22px;font-weight:700;color:var(--jx-ink)}
.jx-evt{flex:1;min-width:0}
.jx-evt b{display:block;font-size:16px;font-weight:700}
.jx-evt span{font-size:13px;color:var(--jx-muted)}
.jx-k{flex:none;font-size:12px;font-weight:700;padding:6px 12px;border-radius:99px}
.jx-k.brk{background:var(--jx-sky);color:var(--jx-navy)}.jx-k.off{background:var(--jx-peach);color:var(--jx-peach-ink)}.jx-k.etc{background:var(--jx-mint);color:var(--jx-mint-ink)}
.jx-nts{margin:0}
.jx-panel{max-width:600px;margin:0 auto;background:var(--jx-paper);border:1px solid var(--jx-line);border-radius:32px;box-shadow:var(--jx-shadow);overflow:hidden}
.jx-panel.wide{max-width:1040px}
.jx-panel .g-body{padding:44px 44px 40px}
.jx-panel .g-body h1{font-size:32px;font-weight:800;letter-spacing:-.035em;color:var(--jx-ink)}
.jx-panel .g-body p{font-size:15.5px;color:var(--jx-ink-2)}
.jx-panel .eyebrow{align-self:flex-start;padding:6px 12px;border-radius:99px;background:var(--jx-sky);color:var(--jx-navy);font-family:Poppins,sans-serif;font-size:11px;letter-spacing:.12em}
.jx-panel .eyebrow::before{display:none}
.jx-panel #lookup input{border:1px solid var(--jx-line);border-radius:99px;padding:14px 22px;background:var(--jx-bg);color:var(--jx-ink)}
.jx-panel #lookup input:focus{outline:none;border-color:var(--jx-navy-2);box-shadow:0 0 0 3px rgba(43,108,168,.15);background:var(--jx-paper)}
.jx-panel .btn{border-radius:99px;background:#1F4E79;color:#fff;padding:15px 22px;font-size:15.5px}
.jx-panel .btn:hover{background:#173D60}
.jx-panel .btn.ghost{background:var(--jx-sky);color:var(--jx-navy)}
.jx-panel .err{border-radius:14px}
.jx-panel .hm-cbtn{border-radius:18px}
.jx-panel .g-or span{background:var(--jx-paper)}
.jx-panel .nt-list li button,.jx-panel .nt-list li{border-radius:14px}
.jx-panel table{border-radius:14px;overflow:hidden}
.jx-ft{margin-top:64px;padding:40px 8px 24px;border-top:1px solid var(--jx-line);font-size:13.5px;color:var(--jx-muted)}
.jx-ft-row{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:16px 24px}
.jx-ft-brand .logo svg{height:40px}
.jx-ft nav{display:flex;flex-wrap:wrap;gap:6px 22px}
.jx-ft nav button{border:0;background:none;padding:0;font-weight:600;color:var(--jx-ink-2);cursor:pointer}
.jx-ft nav button:hover{color:var(--jx-navy)}
.jx-ft p{margin:18px 0 0;line-height:1.8}
@media (max-width:900px){
.jb-public body:has(.jx){padding-top:8px}
.jx-hd{top:8px}
.jx-bar{flex-direction:column;align-items:stretch;border-radius:24px;padding:12px;gap:8px}
.jx-logo{padding:4px 8px}
.jx-logo .logo svg{height:42px}
.jx-nav{overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.jx-nav::-webkit-scrollbar{display:none}
.jx-nav button{padding:8px 14px;font-size:14px}
.jx-main{padding-top:16px}
.jx-hero{grid-template-columns:minmax(0,1fr);padding:40px 24px 32px;gap:36px;border-radius:28px}
.jx-rc{transform:none;padding:20px}
.jx-stats{gap:8px}.jx-stats span{padding:12px 10px}.jx-stats b{font-size:19px}
.jx-look #code{padding:0 12px;font-size:16px;letter-spacing:.14em}
.jx-look button{padding:0 18px}
.jx-sec{padding-top:48px}
.jx-doors{grid-template-columns:1fr;gap:14px;margin-top:24px}
.jx-box,.jx-box.two{grid-template-columns:1fr;padding:28px 20px;gap:36px;border-radius:28px;margin-top:36px}
.jx-evs li{gap:14px;padding:12px}
.jx-cal{width:54px;height:54px;border-radius:16px}
.jx-panel{border-radius:28px}
.jx-panel .g-body{padding:32px 22px 28px}
.jx-panel .g-body h1{font-size:27px}
.jx-ft{margin-top:40px}
}
@media (max-width:420px){.jx-hero h1{font-size:30px}}
.jx-panel .nt-quick button{border-radius:18px;border-color:var(--jx-line);background:var(--jx-bg);transition:background .2s,border-color .2s}
.jx-panel .nt-quick button:hover{background:var(--jx-sky);border-color:transparent}
.jx-panel .nt-empty{padding:28px 0;text-align:center;color:var(--jx-muted)}
.jx-panel .nt-list{border-top:0}
.jx-panel .nt-list li{border-bottom:1px solid var(--jx-line)}
.jx-panel .back{border-radius:99px}
@media (max-width:900px){
.jx-nav{justify-content:space-between;overflow:visible}
.jx-nav button[data-t="home"]{display:none}
.jx-nav button{padding:8px 9px;font-size:13.5px}
}
@media (max-width:360px){.jx-nav button{padding:7px 6px;font-size:12.5px}}
.jx-panel .ac-head{border-radius:20px}
.jx-panel .ac-m{border-radius:18px;overflow:hidden}
.jx-panel .ac-m table{border-radius:0}
.jx-panel .ac-list{border-radius:18px}
.jb-public .report{border-radius:28px;border-top:0;border:1px solid var(--jx-line);box-shadow:var(--jx-shadow)}
.jb-public .report .r-head{background:linear-gradient(135deg,#F3F8FF 0%,#E8F1FD 60%,#FFF6E3 100%)}
.jb-public .back{border-radius:99px}
.jb-public .wk-sw select,.jb-public .wk-sw{border-radius:14px}
@media (prefers-color-scheme: dark){.jb-public:not([data-theme="light"]) .report .r-head{background:var(--paper)}}
.jb-public[data-theme="dark"] .report .r-head{background:var(--paper)}
/* softer corners */
.jx-bar{border-radius:14px}.jx-hero{border-radius:16px}.jx-box,.jx-panel{border-radius:16px}.jx-door,.jx-rc{border-radius:14px}.jx-sv{border-radius:12px}.jx-note{border-radius:10px}.jx-ic,.jx-cal{border-radius:12px}
@media (max-width:720px){.jx-bar{border-radius:14px}.jx-hero{border-radius:16px}.jx-panel{border-radius:16px}.jx-cal{border-radius:12px}}
/* readability: quiz grade, section headers, lessons */
.s-val .sv-g{font-weight:700;color:var(--ink-2);margin-right:4px}
@media (max-width:560px){.s-val .sv-g{display:block;margin:0 0 1px;font-size:13px}.s-val .sv-t{display:block;font-size:10.5px;white-space:nowrap}
 .sec-h{flex-wrap:wrap;row-gap:6px}.sec-h>div{flex:1 1 100%}.sec-h .aside{flex:1 1 100%;white-space:normal;text-align:left}}
.bul li.lsn{padding:10px 0;display:flex;flex-direction:column;gap:6px}
.bul li.lsn::before{display:none}
.lsn-d{font-weight:700;font-size:13.5px;color:var(--accent-ink,var(--navy));font-variant-numeric:tabular-nums}
.lsn-t{display:flex;flex-wrap:wrap;gap:6px}
.lsn-t span{font-size:13.5px;line-height:1.35;padding:5px 10px;border-radius:6px;background:#f2f5f9;color:var(--ink-2)}
/* fix: one-line grade, justified comment */
@media (max-width:560px){.s-val{white-space:nowrap;font-size:10.5px}.s-val .sv-g{display:inline;font-size:inherit;margin:0 3px 0 0}.s-val .sv-g::after{content:"·";margin-left:3px;font-weight:400;color:var(--muted)}.s-val .sv-t{display:inline;font-size:inherit}}
.s-val .sv-g::after{content:" ·";font-weight:400}
.note p{text-align:justify;word-break:normal;overflow-wrap:break-word}
@media (max-width:560px){.note{padding:18px 16px 16px 40px}}
.s-val .sv-g{margin:0!important}.s-val .sv-g::after{content:"·"!important;margin:0 4px!important;font-weight:400;color:var(--muted)}
/* align score numbers with ring (consistent on iOS) */
.summary .big{display:flex;align-items:center;justify-content:center;line-height:1}
.summary .bn{display:block;line-height:1;white-space:nowrap}
.ring b{line-height:1}
@media (max-width:560px){.s-val{font-size:10px}.s-val .sv-g::after{margin:0 3px!important}}
.note p{text-align:left!important;word-break:normal}
/* letter grades A+/A/B+/B/N */
.big.g-P{color:var(--accent-ink)}
.gl{width:auto!important;min-width:24px;padding:0 5px;box-sizing:border-box;font-size:12px}
.s-val .sv-n{color:#9aa5b4;font-weight:400;margin-left:2px}
.ring b{font-size:24px}
@media (max-width:560px){.ring b{font-size:20px}.s-val{font-size:11px}}
.bp-scale{display:block;margin-top:6px;font-size:11.5px;color:var(--muted);letter-spacing:.02em}
.s-val .sv-n{display:block;margin:3px 0 0}
.bp-scale{display:flex!important;flex-wrap:wrap;gap:4px 14px}.bp-scale b{color:var(--ink-2);margin-right:3px}
/* 원서 예습 */
.sec.bk .bk-part{margin-top:18px}
.bk-part h4{margin:0 0 10px;font-size:12.5px;letter-spacing:.12em;font-weight:800;color:var(--accent-ink)}
.bk-part h4 span{letter-spacing:0;font-weight:600;color:var(--ink-2);margin-left:6px;font-family:inherit}
.bq-list{list-style:none;margin:0;padding:0;counter-reset:bq}
.bq-list>li{counter-increment:bq;padding:14px 0;border-bottom:1px solid var(--line-2)}
.bq-list>li>p{margin:0 0 10px;font-weight:600;line-height:1.5}
.bq-list>li>p:first-child:before{content:"Q" counter(bq) ". ";color:var(--accent-ink);font-weight:800}
.bq-ch{display:grid;gap:7px}
.bq-ch button{text-align:left;padding:11px 14px;border:1px solid var(--line);border-radius:10px;background:#fff;color:inherit;font:inherit;font-size:15px;cursor:pointer;line-height:1.4}
.bq-ch button.on{border-color:var(--accent-ink);background:color-mix(in srgb,var(--accent-ink) 9%,transparent);font-weight:600}
.bq-ch button:disabled{cursor:default}
.bq-ch button.right{border-color:var(--good);background:var(--good-bg);font-weight:600}
.bq-list>li.no>p:first-child:after{content:"  ✕";color:var(--bad)}
.bq-list>li.ok>p:first-child:after{content:"  ✓";color:var(--good)}
.bq-ex{margin:8px 0 0!important;font-size:13.5px;color:var(--ink-2);font-weight:400!important}
.bq-ex:before{content:none!important}
.bq-res{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:14px 16px;border:1px solid var(--line);border-radius:12px;margin-bottom:6px}
.bq-res b{font-size:24px;font-weight:800;color:var(--accent-ink)}
.bq-res span{flex:1;min-width:140px;color:var(--ink-2)}
.bk-card{border:1px solid var(--line);border-radius:12px;padding:14px;margin:12px 0}
.bk-for{display:flex;flex-wrap:wrap;gap:6px 14px;padding:6px 0 4px}
.bk-for label{display:flex;align-items:center;gap:5px;font-size:14px;font-weight:400}
.ac-subs small.miss{color:var(--ink-3,#999)}
.bq-ch button.wrong{border-color:var(--bad);background:var(--bad-bg)}
.bk-tg>span{font-size:13px;color:var(--ink-2)}
/* 아이 화면 편집 모드 */
.jb-edit .back{display:none}
.jb-edit .wrap{padding-bottom:0}
.pv-bar.em{background:#1d3a5f}
.pv-bar.em b b,.pv-bar.em span b{background:none;color:#ffd77a;padding:0}
.pv-bar a{color:#ffd77a;font-weight:700;margin-left:4px}
.em-slot{position:relative;margin:18px 0 0;padding:4px 12px 12px;border:1.5px dashed #9fb4cf;border-radius:14px;background:rgba(240,245,252,.45)}
.em-slot.open{border-style:solid;border-color:var(--accent-ink);background:#fff;box-shadow:0 6px 24px rgba(20,40,70,.1)}
.em-slot>.sec{margin-top:6px}
.em-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 0 2px;font-size:12.5px;font-weight:700;color:#4a6587}
.em-bar .btn{flex-shrink:0}
.em-empty{display:block;width:100%;margin:6px 0 0;padding:18px 12px;border:1.5px dashed #9fb4cf;border-radius:12px;background:transparent;color:#2c5282;font:inherit;font-weight:700;font-size:15px;cursor:pointer}
.em-slot .em-empty{border:0;margin:0;padding:12px}
.em-empty:hover{background:rgba(44,82,130,.06)}
.em-sum{padding:4px 0 2px;font-size:15px}.em-sum b{margin-right:4px}
.em-form .fgroup{border:0;padding:0;margin:6px 0 0}
.em-form .fgroup h3{font-size:15px;margin:4px 0 8px}
.em-form .f{display:flex;flex-direction:column;gap:5px;margin:10px 0 0;font-size:13px;color:var(--ink-2)}
.em-form input[type=text],.em-form input[type=date],.em-form textarea,.em-form select{width:100%;box-sizing:border-box;padding:10px 12px;border:1px solid #cfd8e3;border-radius:10px;font:inherit;font-size:15px;color:var(--ink);background:#fff}
.em-form textarea{min-height:90px;line-height:1.55;resize:vertical}
.em-form .row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.em-form .hrow{display:grid;grid-template-columns:1fr 1.6fr 34px;gap:6px;margin:8px 0 0}
.em-form .hrow .x{border:1px solid #cfd8e3;border-radius:10px;background:#fff;cursor:pointer;font-size:18px}
.em-form .actions{display:flex;flex-wrap:wrap;gap:8px;padding:10px 0 0}
.em-form .status{font-size:12.5px;color:var(--ink-2);margin:6px 0 0;line-height:1.55}
.em-form .nc-head{display:flex;gap:6px}.em-form .nc-name{font-weight:700}
.em-form details.nb-st{border:1px solid #e1e7ef;border-radius:10px;padding:8px 10px;margin:8px 0 0}
.em-form details.nb-st summary{cursor:pointer;font-size:14px}
.em-form .bk-card{border:0;padding:0;margin:0}
.em-done{display:flex;justify-content:flex-end;padding:12px 0 0}
.em-tip{font-size:13px;color:var(--ink-2);margin:14px 0 0}
.em-new{margin:16px 0 0;padding:16px;border:1.5px dashed #9fb4cf;border-radius:14px;display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between}
.em-new p{margin:0;font-size:14px;color:var(--ink-2)}.em-new b{color:var(--ink)}
.em-save{position:sticky;bottom:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:14px 0 0;padding:12px 16px calc(12px + env(safe-area-inset-bottom));background:#1d3a5f;color:#fff;border-radius:14px 14px 0 0;box-shadow:0 -6px 20px rgba(20,40,70,.15);font-size:14px}
.em-save.dirty{background:#8a4b08}
.em-save .btn{background:#fff;color:#1d3a5f;border-color:#fff}
.em-formbar{margin:0 0 10px}
.em-host-panel{padding:12px!important}
.em-fhead{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 10px}
.em-fhead b{font-size:15px}.em-fhead label{display:flex;align-items:center;gap:6px;font-size:13px}
.em-fhead select{padding:6px 8px;border-radius:8px}
.em-fst{flex:1;font-size:12.5px;font-weight:700}.em-fst.dirty{color:#b45309}
#em-host{height:calc(100vh - 110px);min-height:560px}
@media(max-width:560px){.em-form .row{grid-template-columns:1fr}.em-form .hrow{grid-template-columns:1fr 34px}.em-form .hrow input:first-child{grid-column:1/-1}}
.em-form .fgroup>h3{display:none}
.em-fhead label{white-space:nowrap}
.r-body>.em-slot:first-child,.r-body>.em-new:first-child{margin-top:4px}
.rd-tt{margin:0 0 8px;font-weight:600}.bk-part.rd .rd-text{margin-top:4px}
/* 읽어 주기: 10줄 창 + 진행 하이라이트 */
.rd-text{position:relative;max-height:calc(1.9em * 10 + 32px);overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.rd-text.open{max-height:none}
.rd-s.done{color:var(--ink-2);opacity:.6}
.rd-s.on{background:#ffe08a;box-shadow:0 0 0 3px #ffe08a;color:var(--ink);opacity:1}
.rd-more{display:block;margin:8px auto 0;padding:6px 14px;border:1px solid var(--line-2,#e8eaf0);border-radius:999px;background:#fff;font:inherit;font-size:13px;color:var(--ink-2);cursor:pointer}
@media (max-width:700px){.rd-text{max-height:calc(1.9em * 10 + 28px)}}
/* AI 낭독 (Google) */
.gtts{margin:10px 0 4px;padding:12px 14px;border:1px solid #d8e2ef;border-radius:12px;background:#f6f9fd}
.gtts-h{display:flex;flex-direction:column;gap:2px;margin-bottom:8px}.gtts-h b{font-size:14px;color:var(--ink)}.gtts-h small{font-size:12px;color:var(--ink-2)}
.gtts-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:6px 0}.gtts-row label{display:flex;align-items:center;gap:6px;font-size:13px}.gtts-row small{font-size:12px;color:var(--ink-2)}
.gtts-row select{padding:7px 8px;border:1px solid #cfd8e3;border-radius:8px;font:inherit;font-size:14px;background:#fff}
.gtts-key{display:flex;gap:6px}.gtts-key input{flex:1;padding:9px 10px;border:1px solid #cfd8e3;border-radius:8px;font:inherit}
.gtts-st.ok{color:var(--good)!important}.gtts-st.warn{color:#b45309!important}
.linkbtn{border:0;background:none;padding:0;margin-left:4px;font:inherit;font-size:12px;color:#2c5282;text-decoration:underline;cursor:pointer}
/* Portfolio */
.pf-sub{font-size:12.5px;color:var(--ink-2);font-weight:500}
.pf-up{margin:4px 0 18px}
.pf-kinds{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.pf-kinds button{display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px 6px;border:1.5px solid #d8e2ef;border-radius:14px;background:#fff;font:inherit;font-size:13px;font-weight:600;color:var(--ink);cursor:pointer;line-height:1.3;text-align:center}
.pf-kinds button span{font-size:26px}
.pf-kinds button.on{border-color:var(--accent-ink);background:#eef4fb}
.pf-form{margin-top:12px;padding:14px;border:1px solid #d8e2ef;border-radius:14px;background:#f8fafd}
.pf-form .f{display:flex;flex-direction:column;gap:5px;margin:0 0 10px;font-size:13px;color:var(--ink-2)}
.pf-form input[type=text],.pf-form input[type=url],.pf-form textarea{width:100%;box-sizing:border-box;padding:11px 12px;border:1px solid #cfd8e3;border-radius:10px;font:inherit;font-size:16px;background:#fff;color:var(--ink)}
.pf-drop{display:flex;align-items:center;justify-content:center;min-height:96px;padding:14px;border:2px dashed #9fb4cf;border-radius:14px;background:#fff;color:#2c5282;font-weight:700;text-align:center;cursor:pointer}
.pf-drop.has{border-style:solid;color:var(--ink)}
.pf-msg{margin:10px 0 0;font-weight:600;color:var(--accent-ink)}
.pf-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.pf-card{position:relative;border:1px solid #e1e7ef;border-radius:14px;overflow:hidden;background:#fff}
.pf-card.pick{border-color:#e7c35a;box-shadow:0 0 0 2px #f6e3a5}
.pf-open{display:block;width:100%;padding:0;border:0;background:none;text-align:left;font:inherit;color:inherit;cursor:pointer}
.pf-th{position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column;aspect-ratio:4/3;background:#f2f5fa;overflow:hidden}
.pf-th img,.pf-th video{width:100%;height:100%;object-fit:cover;display:block}
.pf-th .pf-ic{font-size:40px}.pf-th small{font-size:12px;color:var(--ink-2)}
.pf-play{position:absolute;inset:auto;width:40px;height:40px;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;font-style:normal;display:flex;align-items:center;justify-content:center;font-size:16px}
.pf-txt{margin:0;padding:12px;font-size:13px;line-height:1.5;color:var(--ink);align-self:stretch;overflow:hidden;font-family:var(--f-en,inherit)}
.pf-meta{display:flex;flex-direction:column;gap:2px;padding:9px 11px 10px}
.pf-meta b{font-size:14px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pf-meta small{font-size:12px;color:var(--ink-2)}
.pf-badges{display:flex;flex-wrap:wrap;gap:4px;padding:0 10px 10px}
.pf-badges em{font-style:normal;font-size:11px;font-weight:700;padding:2px 7px;border-radius:999px}
.b-pick{background:#fff3cf;color:#8a6200}.b-show{background:#eef4fb;color:#1d3a5f}.b-share{background:#e8f5ee;color:#1f7a4d}
.pf-modal{position:fixed;inset:0;z-index:200;background:rgba(10,20,35,.6);display:flex;align-items:center;justify-content:center;padding:16px}
.pf-box{width:100%;max-width:720px;max-height:92vh;overflow:auto;background:#fff;border-radius:16px;padding:14px 16px 16px}
.pf-bh{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.pf-bh b{font-size:17px}
.pf-x{border:0;background:none;font-size:28px;line-height:1;cursor:pointer;color:var(--ink-2)}
.pf-bb img,.pf-bb video{display:block;width:100%;max-height:70vh;object-fit:contain;border-radius:10px;background:#000}
.pf-bb audio{width:100%}
.pf-read{font-size:17px;line-height:1.8;white-space:normal;font-family:var(--f-en,inherit)}
.pf-note{margin:10px 0 0;font-size:14px;color:var(--ink-2)}
.pf-cm{margin:10px 0 0;padding:10px 12px;border-radius:10px;background:#fff8e1;font-size:14px}.pf-cm b{margin-right:6px}
.pf-bf{display:flex;justify-content:space-between;align-items:center;margin-top:12px;font-size:12px;color:var(--ink-2)}
.pf-par{max-width:880px;margin:18px auto 0;padding:0 16px}
.pfa-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.pfa-list li{display:grid;grid-template-columns:72px 1fr;gap:10px;padding:8px;border:1px solid #e1e7ef;border-radius:12px}
.pfa-th{width:72px;height:72px;border:0;padding:0;border-radius:10px;overflow:hidden;background:#f2f5fa;cursor:pointer;display:flex;align-items:center;justify-content:center}
.pfa-th img,.pfa-th video{width:100%;height:100%;object-fit:cover}.pfa-th .pf-ic{font-size:28px}.pfa-th .pf-txt{font-size:9px;padding:4px}.pfa-th .pf-play{display:none}
.pfa-b{display:flex;flex-direction:column;gap:4px;min-width:0}.pfa-b b{font-size:14px}.pfa-b small{font-size:12px;color:var(--ink-2)}
.pfa-t{display:flex;flex-wrap:wrap;gap:4px}
.pfa-t button{padding:4px 8px;border:1px solid #cfd8e3;border-radius:999px;background:#fff;font:inherit;font-size:12px;cursor:pointer}
.pfa-t button.on{background:#1d3a5f;border-color:#1d3a5f;color:#fff}
.pfa-cm{padding:6px 8px;border:1px solid #cfd8e3;border-radius:8px;font:inherit;font-size:13px}
@media(max-width:560px){.pf-grid{grid-template-columns:repeat(2,1fr);gap:10px}.pf-kinds button{font-size:12px}}
.pfa-th{flex-direction:column}.pfa-th small{font-size:10px}.pfa-b .linkbtn{align-self:flex-start;margin-left:0}
/* 월간 계획 편집: 주차별 표 */
.pe-grid{display:grid;grid-template-columns:64px repeat(var(--n),minmax(0,1fr));border:1px solid var(--line,#C9D6E3);border-radius:8px;overflow:hidden;margin:8px 0}
.pe-hd{background:#1F4E79;color:#fff;font-weight:700;text-align:center;padding:8px 4px;font-size:14px}
.pe-wk{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#1F4E79;border-right:2px solid #1F4E79;border-top:1px solid #C9D6E3;font-size:12px;text-align:center;padding:6px 2px}
.pe-wk b{font-size:15px}
.pe-c{border-top:1px solid #C9D6E3;border-left:1px solid #C9D6E3;display:flex;flex-direction:column;min-width:0}
.pe-c.none{align-items:center;justify-content:center;color:#999}
.pe-c.off{background:#FBE3E1}.pe-c.off input[type=text]{margin:8px}
.pe-h{display:flex;align-items:center;gap:6px;background:#E9F0F7;padding:6px 8px;color:#1F4E79;font-size:13px;flex-wrap:wrap}
.pe-h input[type=date]{font-size:12px;padding:2px 4px;max-width:130px}.pe-h .x{margin-left:auto}
.pe-b{display:grid;grid-template-columns:1.1fr .9fr;flex:1}
.pe-b textarea{border:0;border-radius:0;resize:vertical;padding:8px;font-size:13px;line-height:1.55;min-height:0;width:100%;color:#1F4E79}
.pe-b textarea.hw{border-left:1px solid #C9D6E3;color:#222}
.pe-extra{grid-column:2/-1;display:grid;grid-template-columns:repeat(var(--n),minmax(0,1fr))}
@media(max-width:760px){.pe-grid{grid-template-columns:1fr}.pe-hd{display:none}.pe-wk{flex-direction:row;gap:8px;border-right:0;background:#1F4E79;color:#fff}.pe-extra{grid-column:auto;grid-template-columns:1fr}}
@media(max-width:760px){.pe-wk span br{display:none}.pe-wk span{font-size:12px}}

/* ---- 반별 수업 기록장 ---- */
.lg-panel .lg-cls{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 4px}
.lg-panel .lg-cls .chip{border:1px solid #D6DEEA;background:#fff;color:#1F2A44;border-radius:999px;padding:6px 12px;font:500 13.5px/1.2 inherit;cursor:pointer}
.lg-panel .lg-cls .chip small{color:#7A879C;font-weight:400;margin-left:2px}
.lg-panel .lg-cls .chip.on{background:#1F4E79;border-color:#1F4E79;color:#fff}
.lg-panel .lg-cls .chip.on small{color:#C9D8EA}
.lg-nav b small{font-weight:400;color:#7A879C;margin-left:4px}
.lg-st{font-size:12.5px;color:#9A6B00}.lg-st.ok{color:#1E7B4F}
.lg-day{border:1px solid #E3E8F0;border-radius:12px;padding:12px;margin:12px 0;background:#fff}
.lg-day.off{background:#F7F8FA}
.lg-dh{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lg-dh b{font-size:15.5px;color:#1F4E79}
.lg-tag{font-size:11.5px;padding:2px 8px;border-radius:999px;background:#E8F1FB;color:#1F4E79}.lg-tag.off{background:#FDECEC;color:#B42318}
.lg-tbl{display:flex;flex-direction:column;gap:6px}
.lg-row{display:grid;grid-template-columns:78px repeat(5,minmax(0,1fr));gap:6px;align-items:stretch}
.lg-th span{font-size:12.5px;font-weight:600;color:#55627A;padding:0 2px}
.lg-nm{font-weight:600;font-size:14px;padding-top:8px;color:#1F2A44}
.lg-cell{display:block;margin:0}.lg-cell i,.lg-memo i{display:none;font-style:normal}
.lg-panel textarea{width:100%;box-sizing:border-box;min-height:64px;resize:vertical;border:1px solid #D6DEEA;border-radius:8px;padding:6px 8px;font:13.5px/1.45 inherit;color:#1F2A44;background:#FBFCFE}
.lg-panel textarea:focus{outline:2px solid #2E6DB4;outline-offset:-1px;background:#fff}
.lg-panel textarea::placeholder{color:#A3ADBD}
.lg-memo{display:block;margin-top:8px}.lg-memo i{display:block;font-size:12.5px;color:#55627A;margin-bottom:3px}.lg-memo textarea{min-height:44px}
.lg-memo.wk{margin-top:14px}
.lg-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px}
.lg-add{font-size:13px;color:#55627A;display:inline-flex;align-items:center;gap:6px}.lg-add input{border:1px solid #D6DEEA;border-radius:8px;padding:4px 6px;font:inherit}
@media (max-width:860px){.lg-th{display:none}.lg-row{grid-template-columns:1fr;border-top:1px solid #EEF1F6;padding-top:8px}.lg-nm{padding-top:0}.lg-cell i{display:block;font-size:12px;color:#55627A;margin-bottom:2px}.lg-panel textarea{min-height:48px}}
@media print{.lg-panel textarea{border:none;min-height:0;resize:none}}

/* ---- 제이브릿지 ON 이름 · 설명 ---- */
.jx-logo{gap:12px}
.jx-on{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding-left:12px;border-left:1px solid var(--jx-line,#E3E8F0);text-align:left;line-height:1.15}
.jx-on b{font-size:15px;font-weight:700;color:#1F4E79;letter-spacing:-.01em;white-space:nowrap}
.jx-on b em{font-style:normal;font-family:Poppins,sans-serif;font-weight:700;color:#fff;background:#F2B33D;border-radius:6px;padding:1px 6px;margin-left:3px;font-size:12.5px;vertical-align:1px}
.jx-on small{font-size:11.5px;color:#6B7A99;font-weight:500;white-space:nowrap}
.jx-chip i.en{font-family:Poppins,sans-serif;font-size:9.5px;font-weight:700;width:26px;height:22px;border-radius:99px}
.jx-chip b{font-weight:700}
.jx-ft-brand{display:flex;align-items:center;gap:12px}
.jx-ft-about{font-size:13px;color:#55627A;line-height:1.6;margin:14px 0 8px}
.jx-ft-about b{color:#1F4E79}
@media (max-width:720px){.jx-logo{justify-content:flex-start}.jx-on b{font-size:14px}}
@media (max-width:360px){.jx-on small{display:none}}
.lg-add{white-space:nowrap}

.lg-print{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin:14px 0 6px;padding:12px 14px;border-radius:12px;background:#F2F6FB;border:1px solid #D6E2F0}
.lg-print>div{flex:1 1 260px;display:flex;flex-direction:column;gap:2px}.lg-print b{color:#1F4E79;font-size:14.5px}.lg-print span{font-size:12.5px;color:#55627A}
.lg-cks{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:2px 0 4px 84px}
.lg-cks b{font-size:12px;color:#55627A;font-weight:600;margin-right:2px}
.lg-ck{display:inline-flex;align-items:center;gap:5px;border:1px solid #D6DEEA;background:#fff;border-radius:999px;padding:3px 10px 3px 4px;font:12.5px/1.2 inherit;color:#1F2A44;cursor:pointer}
.lg-ck em{font-style:normal;font-size:11.5px;padding:1px 7px;border-radius:999px;background:#EEF1F6;color:#7A879C;font-weight:600}
.lg-ck.ok em{background:#E3F4EA;color:#1E7B4F}.lg-ck.late em{background:#FFF4DB;color:#9A6B00}.lg-ck.miss em{background:#FDECEC;color:#B42318}
@media (max-width:860px){.lg-cks{padding-left:0}}

.lg-fill{flex-wrap:wrap}.lg-ref{flex:1 1 100%;margin:6px 0 0;padding:8px 10px 8px 24px;background:#FFF8E8;border-radius:8px;font-size:12.5px;color:#5C4A1A;line-height:1.55}.lg-ref b{color:#1F2A44;margin-right:4px}

/* ---- 수업 노트 화면 편집 ---- */
.nbs .pg{background:#fff;border:1px solid #D6DEEA;border-radius:14px;padding:14px 16px 10px;margin:16px 0;box-shadow:0 1px 4px rgba(31,42,68,.05)}
.nbs .pg header{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;border-bottom:2.5px solid #1F4E79;padding:0 2px 8px;margin-bottom:8px}
.nbs .brand{font:600 13px Poppins,sans-serif;color:#1F4E79;letter-spacing:.04em}.nbs .brand b{font-family:inherit;margin-left:4px}
.nbs .who b{font-size:22px;font-weight:800;margin-right:8px;color:#1F2A44}.nbs .who span{font-size:13px;color:#55627A}
.nbs .rng{text-align:right}.nbs .rng b{display:block;font-size:15px}.nbs .rng .id{font:500 10px Poppins,monospace;color:#8A94A6;letter-spacing:.06em}
.nbs .tw{overflow-x:auto}.nbs table{width:100%;min-width:880px;border-collapse:collapse;table-layout:fixed}.nbs col.h{width:86px}
.nbs th,.nbs td{border:1px solid #B8C3D3;vertical-align:top;padding:5px 6px}
.nbs thead th{background:#1F4E79;color:#fff;font-size:14px;text-align:center;padding:7px}.nbs thead th.off{background:#C9D1DD;color:#55627A}
.nbs tbody th{background:#EEF3F9;text-align:left;font-size:13px}.nbs tbody th b{display:block}.nbs tbody th small{display:block;font-weight:500;color:#55627A;font-size:11px;margin-top:3px}
.nbs td.off{background:#F3F4F6}.nbs .offl{color:#8A94A6;font-size:13px;text-align:center;padding-top:14px}
.nb-it{display:flex;align-items:center;gap:6px;min-height:28px;border-bottom:1px dotted #D3DAE5;padding:2px 0}.nb-it:last-child{border-bottom:0}
.nb-mk{flex:0 0 22px;width:22px;height:22px;border:1.6px solid #6B7A99;border-radius:5px;background:#fff;font:800 13px/1 inherit;cursor:pointer;display:grid;place-items:center;padding:0;color:#1F2A44}
.nb-mk.ck{border-radius:50%}.nb-mk:hover{border-color:#1F4E79;background:#F2F6FB}
.nb-mk.m-ok{color:#1E7B4F;border-color:#1E7B4F;background:#E9F6EF}.nb-mk.m-part,.nb-mk.m-late{color:#9A6B00;border-color:#C99A2E;background:#FFF6E0}.nb-mk.m-no,.nb-mk.m-miss{color:#B42318;border-color:#D9534F;background:#FDEEEE}
.nb-tx{flex:1;min-width:0;border:0;border-bottom:1px solid transparent;background:transparent;font:13px/1.35 inherit;color:#1F2A44;padding:3px 2px;border-radius:0}
.nb-tx:hover{border-bottom-color:#D6DEEA}.nb-tx:focus{outline:none;border-bottom-color:#2E6DB4;background:#F7FAFE}.nb-tx.ex{color:#2E5C8A;font-weight:500}.nb-tx[readonly]{color:#55627A}
.nb-st{flex:1;min-width:0;font-size:13px;line-height:1.35}
.nb-pg{flex:0 0 76px;width:76px;border:1px solid #E7C77B;background:#FFFBF0;border-radius:6px;font:12px inherit;padding:3px 5px;color:#7A5600}
.nb-it.add{border-bottom:0}.nb-plus{flex:0 0 22px;text-align:center;color:#9AA6B8;font-weight:700}.nb-it.add .nb-tx::placeholder{color:#AEB7C6}
.nb-ta{width:100%;box-sizing:border-box;min-height:52px;resize:vertical;border:1px solid #E1E6EE;border-radius:6px;padding:5px 6px;font:13px/1.45 inherit;background:#FBFCFE;color:#1F2A44}
.nb-ta:focus{outline:2px solid #2E6DB4;outline-offset:-1px;background:#fff}
.nb-none{font-size:12px;color:#9AA6B8}
.nbs .pg footer{font-size:11.5px;color:#7A879C;padding-top:6px}
.nb-warn{margin:0 0 8px;padding:6px 10px;border-radius:8px;background:#FFF6E0;color:#7A5600;font-size:12.5px}
.nb-help{margin:6px 0 0}
textarea.nb-tx{resize:none;overflow:hidden;display:block;white-space:pre-wrap;word-break:keep-all;overflow-wrap:anywhere}
.lg-panel textarea.nb-tx{border:0;border-bottom:1px solid transparent;min-height:0;background:transparent;padding:3px 2px;border-radius:0;font:13px/1.35 inherit;line-height:1.35}
.lg-panel textarea.nb-tx:hover{border-bottom-color:#D6DEEA}.lg-panel textarea.nb-tx:focus{outline:none;border-bottom-color:#2E6DB4;background:#F7FAFE}
.lg-panel textarea.nb-ta{min-height:52px}
@media (max-width:600px){.nbs .pg header{flex-wrap:wrap;align-items:flex-start}.nbs .brand{width:100%}.nbs .who b{font-size:19px}.nbs .rng{text-align:left}.nbs .pg{padding:12px}}

/* ---- 결석 · 보강 ---- */
.pl-off.abs{color:#9A6B00}
.pe-c.off.abs{background:#FFF8E8;border-color:#F0D89A}
.pe-absn{margin:6px 0 0;font-size:12px;color:#7A5600;line-height:1.5}
.pe-mkh{font-size:12px;color:#2E6DB4}
.cal td.off.abs,td.off.abs{background:#FFF1D6 !important;color:#9A6B00 !important}
.cal td.on.mk span,td.on.mk span{box-shadow:inset 0 0 0 2px #F2B33D;border-radius:6px}
.c-sub.off.abs,.calm-s.off.abs{background:#FFF8E8 !important;color:#7A5600 !important}
.cal-leg .lg-abs{background:#FFF1D6;border:1px solid #E7C77B}
.cal-leg .lg-mk{background:#fff;border:2px solid #F2B33D}
.offl.abs{color:#9A6B00}
.cal td.on.mk span,td.on.mk span{box-shadow:none}.cal td.on.mk,td.on.mk{background:#F2B33D !important;color:#1F2A44 !important}
.cal-leg .lg-mk{background:#F2B33D;border:0}
.c-sub.mk{background:#FFF1D6 !important;color:#7A5600 !important}

/* ---- 수업 노트: 반 한 장 ---- */
.nb-vt{display:inline-flex;margin:12px 0 0;border:1px solid #D6DEEA;border-radius:999px;padding:3px;background:#fff}
.nb-vt button{border:0;background:none;padding:6px 16px;border-radius:999px;font:600 13px inherit;color:#55627A;cursor:pointer}.nb-vt button.on{background:#1F4E79;color:#fff}
.nbs .cp .tw{overflow-x:auto}.nbs .ct{min-width:760px;width:100%;border-collapse:collapse;table-layout:fixed}.nbs .ct col.h{width:64px}
.nbs .ct thead th{font-size:14px}.nbs .ct tbody th{text-align:center;vertical-align:middle;background:#EEF3F9;padding:4px 2px}
.nbs .ct tbody th small{display:block;font-size:11px;color:#55627A}.nbs .ct tbody th b{display:block;font-size:15px}.nbs .ct tbody th span{display:block;font-size:11.5px;color:#55627A}
.nbs .ct td{padding:6px 7px}.nbs .ct td.none{text-align:center;color:#C0C7D2}.nbs .ct tr.offr th{background:#F3F4F6}
.nbs .cc{display:grid;grid-template-columns:1.15fr 1fr;gap:0 10px;font-size:12px;line-height:1.35}
.nbs .cl,.nbs .cr{min-width:0}.nbs .cb{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;margin-top:6px;border-top:1px dashed #C5CCD8;padding-top:5px}
.nbs .ch{display:block;font-size:11px;color:#1F4E79;margin:3px 0 2px}
.nbs .ci{display:flex;align-items:flex-start;gap:5px;margin:2px 0}.nbs .flow .ci{display:inline-flex;margin-right:6px}.nbs .ci.ex>span{color:#2E5C8A;font-weight:500}.nbs .ci em{font-style:normal;color:#9A6B00}
.nb-mk.sm{flex:0 0 18px;width:18px;height:18px;font-size:11px;border-width:1.4px;border-radius:4px}.nb-mk.sm.ck{border-radius:50%}
.ci-add{display:block;width:100%;box-sizing:border-box;border:0;border-bottom:1px dashed #D6DEEA;background:transparent;font:11.5px inherit;padding:2px 0;margin:2px 0;color:#1F2A44}.ci-add:focus{outline:none;border-bottom-color:#2E6DB4}
.nbs .cn{display:block;margin:0}.nbs .cn b{display:block;font-size:10.5px;color:#55627A;font-weight:600}
.lg-panel textarea.nb-ta.sm{min-height:38px;font-size:12px;padding:3px 5px}
.nbs .cc{grid-template-columns:1.1fr 1fr 1fr;gap:0 8px;font-size:11.5px}.nbs .ct{min-width:1060px}
.nbs .ct td.blank{background:#FCFDFE}.nbs .ch small{font-weight:400;color:#9AA6B8}

/* 반 한 장: 주차별 */
.nbs .ct th.wkh{text-align:center;vertical-align:middle;background:#EEF3F9;padding:6px 2px}.nbs .wkh b{display:block;font-size:16px}.nbs .wkh span{display:block;font-size:11.5px;color:#55627A;margin-top:4px}.nbs .wkh small{display:block;font-size:11px;color:#8A94A6}
.nbs .ct tr.rb td{border-top:2px solid #6B7A99;background:#FCFDFE}
.nbs .g2{display:grid;grid-template-columns:1.15fr 1fr;gap:0 10px;font-size:12px;line-height:1.35}.nbs .g2>div+div,.nbs .g3>div+div{border-left:1px solid #DDE3EC;padding-left:8px}
.nbs .g3{display:grid;grid-template-columns:1fr 1fr .8fr;gap:0 10px;font-size:12px;line-height:1.35}
.nbs .dd{margin-bottom:8px}.nbs .dh{display:block;font-size:11.5px;color:#55627A;border-bottom:1px solid #E3E8F0;margin-bottom:3px;padding-bottom:1px}.nbs .dh.off{color:#9A6B00}
.nbs .sl{display:block;font-size:10.5px;color:#8A94A6;margin-top:4px}
.nbs .ct{min-width:1000px}
