html{color-scheme:light dark; -webkit-tap-highlight-color:transparent}
:root{padding-top:env(safe-area-inset-top,0px); padding-bottom:env(safe-area-inset-bottom,0px)}
body{margin:0}
img{max-width:100%}
[hidden]{display:none!important}

:root{
  --bg:#F6F7F9; --surface:#FFFFFF; --surface2:#EEF1F5; --raise:#FFFFFF;
  --ink:#151C24; --ink2:#55606D; --ink3:#8A94A1;
  --line:#DFE4EA; --line2:#C9D1DA;
  --accent:#0E6A62; --accent-ink:#0E6A62; --accent-soft:#DCEFEC; --on-accent:#FFFFFF;
  --ok:#16794A; --ok-bg:#E4F3EA; --ok-line:#9BD3B4;
  --no:#B02A22; --no-bg:#FBE8E6; --no-line:#EBAEA8;
  --warn:#8A5A00; --warn-bg:#FBF1DC; --warn-line:#E3C588;
  --shadow:0 1px 2px rgba(18,28,38,.06), 0 4px 14px rgba(18,28,38,.05);
  --sans:'Noto Sans KR',system-ui,-apple-system,'Malgun Gothic',sans-serif;
  --serif:'Noto Serif KR',Georgia,'Batang',serif;
  --mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;
  --maxw:800px; --barh:60px;
}
@media (prefers-color-scheme:dark){ :root:not([data-theme="light"]){
  --bg:#11151A; --surface:#181E25; --surface2:#212932; --raise:#1E262F;
  --ink:#E8ECF1; --ink2:#A3AEBC; --ink3:#6F7B89;
  --line:#2B343E; --line2:#3A4550;
  --accent:#4FC3B4; --accent-ink:#4FC3B4; --accent-soft:#143631; --on-accent:#08201D;
  --ok:#6BD79E; --ok-bg:#12301F; --ok-line:#2C6B45;
  --no:#FF9086; --no-bg:#3A1A17; --no-line:#7A3A33;
  --warn:#E3B45F; --warn-bg:#332710; --warn-line:#6B5322;
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 6px 18px rgba(0,0,0,.28);
}}
:root[data-theme="dark"]{
  --bg:#11151A; --surface:#181E25; --surface2:#212932; --raise:#1E262F;
  --ink:#E8ECF1; --ink2:#A3AEBC; --ink3:#6F7B89;
  --line:#2B343E; --line2:#3A4550;
  --accent:#4FC3B4; --accent-ink:#4FC3B4; --accent-soft:#143631; --on-accent:#08201D;
  --ok:#6BD79E; --ok-bg:#12301F; --ok-line:#2C6B45;
  --no:#FF9086; --no-bg:#3A1A17; --no-line:#7A3A33;
  --warn:#E3B45F; --warn-bg:#332710; --warn-line:#6B5322;
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 6px 18px rgba(0,0,0,.28);
}
*{box-sizing:border-box}
html,body{overflow-x:hidden}
body{background:var(--bg); color:var(--ink); font-family:var(--sans); font-size:15px; line-height:1.72;
  -webkit-text-size-adjust:100%; padding-bottom:calc(var(--barh) + env(safe-area-inset-bottom,0px) + 8px)}
b,strong{font-weight:700; color:var(--ink)}
h2,h3{text-wrap:balance; word-break:keep-all}
:focus-visible{outline:2px solid var(--accent); outline-offset:2px; border-radius:6px}
@media (prefers-reduced-motion:reduce){*{transition:none!important; animation:none!important}}

/* ===== header ===== */
.top{position:sticky; top:env(safe-area-inset-top,0px); z-index:30; background:var(--surface);
  border-bottom:1px solid var(--line)}
.top-in{max-width:var(--maxw); margin:0 auto; padding:11px 16px; display:flex; align-items:center; gap:10px}
.top h1{font-family:var(--serif); font-weight:600; font-size:17px; margin:0; letter-spacing:-.01em; white-space:nowrap}
.sync{margin-left:auto; display:flex; align-items:center; gap:6px; font-size:11px; color:var(--ink3);
  font-family:var(--mono); white-space:nowrap}
.dot{width:7px; height:7px; border-radius:50%; background:var(--ink3); flex:none}
.dot.on{background:var(--ok)} .dot.local{background:var(--warn)}

/* ===== tabbar ===== */
.tabbar{position:fixed; left:0; right:0; bottom:0; z-index:40; background:var(--surface);
  border-top:1px solid var(--line); padding-bottom:env(safe-area-inset-bottom,0px)}
.tabbar-in{max-width:var(--maxw); margin:0 auto; display:grid; grid-template-columns:repeat(5,1fr)}
.tabbar button{appearance:none; border:0; background:none; font:inherit; font-size:10.5px; font-weight:500;
  color:var(--ink3); padding:8px 2px 7px; cursor:pointer; display:flex; flex-direction:column;
  align-items:center; gap:3px; min-height:var(--barh); justify-content:center}
.tabbar button .ic{font-size:17px; line-height:1}
.tabbar button[aria-current="true"]{color:var(--accent-ink)}

/* ===== layout ===== */
main{max-width:var(--maxw); margin:0 auto; padding:16px}
.view{display:flex; flex-direction:column; gap:14px}
.lead{margin:0 0 2px; font-family:var(--serif); font-weight:600; font-size:20px; line-height:1.45}
.sub{margin:0 0 4px; font-size:13px; color:var(--ink2)}
.card{background:var(--surface); border:1px solid var(--line); border-radius:12px; box-shadow:var(--shadow); padding:15px}
.lbl{font-size:10.5px; font-weight:700; letter-spacing:.09em; text-transform:uppercase; color:var(--ink3); margin:0 0 7px}

/* ===== home ===== */
.hero{background:var(--surface); border:1px solid var(--line); border-radius:12px; box-shadow:var(--shadow);
  padding:16px; display:flex; flex-direction:column; gap:13px}
.dday{display:flex; align-items:baseline; gap:9px; flex-wrap:wrap}
.dday .big{font-family:var(--mono); font-size:30px; font-weight:500; color:var(--accent-ink); line-height:1;
  font-variant-numeric:tabular-nums}
.dday .cap{font-size:12.5px; color:var(--ink2)}
.dday .set{appearance:none; border:1px solid var(--line2); background:var(--surface); color:var(--ink2);
  font:inherit; font-size:11.5px; padding:6px 11px; min-height:34px; border-radius:7px; cursor:pointer; margin-left:auto}
.goal{display:flex; align-items:center; gap:10px}
.goal .t{font-size:12.5px; color:var(--ink2); white-space:nowrap}
.bar{flex:1; height:7px; border-radius:99px; background:var(--surface2); overflow:hidden; min-width:60px}
.bar i{display:block; height:100%; background:var(--accent); width:0; transition:width .35s ease}
.goal .n{font-family:var(--mono); font-size:12px; color:var(--ink2); font-variant-numeric:tabular-nums; white-space:nowrap}
.stats{display:grid; grid-template-columns:repeat(3,1fr); gap:9px}
.stat{background:var(--surface2); border-radius:10px; padding:11px 10px; text-align:center}
.stat .v{font-family:var(--mono); font-size:19px; font-weight:500; line-height:1.2; font-variant-numeric:tabular-nums}
.stat .k{font-size:11px; color:var(--ink3); margin-top:2px}
.stat.wrong .v{color:var(--no)}
.stat.streak .v{color:var(--warn)}
.acts{display:grid; grid-template-columns:1fr; gap:9px}
@media (min-width:520px){ .acts{grid-template-columns:1fr 1fr} }
.act{appearance:none; text-align:left; font:inherit; background:var(--surface); border:1px solid var(--line);
  border-radius:11px; padding:13px 14px; cursor:pointer; box-shadow:var(--shadow); min-height:56px}
.act .t{font-size:14px; font-weight:500; color:var(--ink); display:block}
.act .d{font-size:11.5px; color:var(--ink3); line-height:1.55; display:block; margin-top:2px}
.act.hi{border-color:var(--accent); background:var(--accent-soft)}
.act.hi .t{color:var(--accent-ink)}
.prog-row{display:flex; align-items:center; gap:10px; padding:9px 0; border-bottom:1px solid var(--line)}
.prog-row:last-child{border-bottom:0}
.prog-row .nm{font-size:13px; flex:1; min-width:0; word-break:keep-all}
.prog-row.off{opacity:.45}
.prog-row .chno{font-family:var(--mono); font-size:11px; color:var(--ink3); min-width:20px; flex:none;
  text-align:right; font-variant-numeric:tabular-nums}
.grouphead{font-size:10.5px; font-weight:700; letter-spacing:.09em; color:var(--accent-ink);
  padding:14px 0 4px; border-bottom:1px solid var(--line)}
.grouphead:first-of-type{padding-top:2px}
.prog-row .n{font-family:var(--mono); font-size:11.5px; color:var(--ink3); white-space:nowrap;
  font-variant-numeric:tabular-nums}

/* ===== chips / segments ===== */
.seg{display:flex; gap:3px; background:var(--surface2); border-radius:9px; padding:3px}
.seg button{flex:1; appearance:none; border:0; background:none; font:inherit; font-size:13px; font-weight:500;
  color:var(--ink2); padding:9px 8px; min-height:42px; border-radius:7px; cursor:pointer}
.seg button[aria-pressed="true"]{background:var(--surface); color:var(--ink); box-shadow:var(--shadow)}
.chips{display:flex; gap:7px; flex-wrap:wrap}
.chip{appearance:none; font:inherit; font-size:12.5px; line-height:1; padding:9px 13px; min-height:38px;
  border-radius:99px; border:1px solid var(--line2); background:var(--surface); color:var(--ink2); cursor:pointer}
.chip[aria-pressed="true"]{background:var(--accent); border-color:var(--accent); color:var(--on-accent); font-weight:500}

/* ===== question card ===== */
.q{background:var(--surface); border:1px solid var(--line); border-radius:12px; box-shadow:var(--shadow); overflow:hidden}
.q-head{display:flex; align-items:center; gap:7px; padding:10px 13px; border-bottom:1px solid var(--line); flex-wrap:wrap}
.tag{font-family:var(--mono); font-size:11px; padding:3px 7px; border-radius:5px;
  background:var(--accent-soft); color:var(--accent-ink); white-space:nowrap}
.pg{font-family:var(--mono); font-size:11px; color:var(--ink3); margin-left:auto; white-space:nowrap}
.star{appearance:none; border:0; background:none; cursor:pointer; font-size:17px; line-height:1;
  width:34px; height:34px; color:var(--ink3); padding:0; flex:none}
.star[aria-pressed="true"]{color:#E0A020}
.q-body{padding:15px 15px 4px}
.stem{margin:0 0 13px; font-size:15.5px; line-height:1.78; word-break:keep-all}
.fig{margin:0 0 14px}
.fig img{width:100%; height:auto; border-radius:8px; border:1px solid var(--line); background:#fff;
  display:block; cursor:zoom-in}
.fig.multi{display:flex; flex-wrap:wrap; gap:8px}
.fig.multi img{width:calc(50% - 4px); min-width:150px; flex:1 1 auto}
.fig.multi figcaption{width:100%}
.fig figcaption{font-size:11.5px; color:var(--ink3); margin-top:5px; text-align:center}
.opts{display:flex; flex-direction:column; gap:7px; margin:0 0 14px; padding:0; list-style:none}
.opt{display:flex; gap:10px; align-items:flex-start; width:100%; text-align:left; font:inherit; font-size:14.5px;
  line-height:1.6; padding:11px 13px; min-height:46px; border-radius:9px; border:1px solid var(--line2);
  background:var(--surface); color:var(--ink); cursor:pointer; word-break:keep-all}
.opt:hover:not(:disabled){border-color:var(--accent); background:var(--accent-soft)}
.opt:disabled{cursor:default}
.opt .k{font-family:var(--mono); font-size:12.5px; color:var(--ink3); flex:none; padding-top:1px; min-width:14px}
.opt .tx{flex:1; min-width:0}
.opt.is-ok{background:var(--ok-bg); border-color:var(--ok-line)}
.opt.is-ok .k{color:var(--ok); font-weight:700}
.opt.is-no{background:var(--no-bg); border-color:var(--no-line)}
.opt.is-no .k{color:var(--no); font-weight:700}
.opt .mk{margin-left:auto; font-size:12px; font-weight:700; flex:none; padding-top:2px}
.opt.is-ok .mk{color:var(--ok)} .opt.is-no .mk{color:var(--no)}
.btn{appearance:none; font:inherit; font-size:14px; font-weight:500; padding:11px 16px; min-height:46px;
  border-radius:9px; border:1px solid var(--accent); background:var(--surface); color:var(--accent-ink); cursor:pointer}
.btn.solid{background:var(--accent); color:var(--on-accent); border-color:var(--accent)}
.btn.ghost{border-color:var(--line2); color:var(--ink2)}
.btn:disabled{opacity:.45; cursor:default}
.btn.wide{width:100%}

/* ===== answer ===== */
.ans{border-top:1px solid var(--line); background:var(--surface2); padding:15px}
.ans-line{display:flex; align-items:center; gap:9px; flex-wrap:wrap; margin-bottom:11px}
.ans-key{font-family:var(--mono); font-size:13px; padding:4px 10px; border-radius:6px;
  background:var(--ok-bg); color:var(--ok); border:1px solid var(--ok-line); word-break:break-word}
.badge{font-size:11px; font-weight:500; padding:4px 9px; border-radius:6px; line-height:1.4;
  background:var(--warn-bg); color:var(--warn); border:1px solid var(--warn-line)}
.ans p{margin:0 0 9px; font-size:14px; line-height:1.78; color:var(--ink); word-break:keep-all}
.ans p:last-of-type{margin-bottom:0}
.memo{margin:11px 0 0; padding:9px 12px; border-left:2px solid var(--line2); background:var(--surface);
  border-radius:0 7px 7px 0; font-size:13px; color:var(--ink2); line-height:1.7}
.memo em{font-style:normal; font-family:var(--mono); font-size:10.5px; color:var(--ink3); display:block; margin-bottom:2px}
.refs{margin:0; padding:0; list-style:none; display:flex; flex-direction:column; gap:5px}
.refs li{font-size:12.5px; line-height:1.6; color:var(--ink2); padding-left:17px; position:relative; word-break:break-word}
.refs li::before{content:"§"; position:absolute; left:0; top:0; color:var(--accent-ink); font-family:var(--mono); font-size:11px}
.reffigs{display:flex; flex-wrap:wrap; gap:8px}
.reffigs img{width:calc(50% - 4px); max-width:210px; height:auto; border-radius:7px; border:1px solid var(--line);
  background:#fff; cursor:zoom-in; display:block}
@media (min-width:560px){ .reffigs img{width:calc(33.333% - 6px)} }
.minirow{display:flex; gap:8px; flex-wrap:wrap; margin-top:14px}
.mini{appearance:none; font:inherit; font-size:12.5px; padding:9px 13px; min-height:40px;
  border-radius:8px; border:1px solid var(--line2); background:var(--surface); color:var(--ink2); cursor:pointer}
.mini.on{border-color:var(--accent); color:var(--accent-ink)}
.memobox{margin-top:11px}
.memobox textarea{width:100%; min-height:76px; font:inherit; font-size:13.5px; line-height:1.7; padding:10px 12px;
  border-radius:9px; border:1px solid var(--line2); background:var(--surface); color:var(--ink); resize:vertical}

/* ===== AI ===== */
.ai{margin-top:11px; border:1px solid var(--line2); border-radius:10px; background:var(--surface); overflow:hidden}
.ai-in{display:flex; gap:7px; padding:9px; flex-wrap:wrap}
.ai-in input{flex:1; min-width:150px; font:inherit; font-size:13.5px; padding:10px 12px; min-height:42px;
  border-radius:8px; border:1px solid var(--line2); background:var(--surface); color:var(--ink)}
.ai-out{padding:0 12px 12px; font-size:13.5px; line-height:1.75; color:var(--ink); white-space:pre-wrap;
  word-break:keep-all}
.ai-warn{font-size:11px; color:var(--ink3); padding:0 12px 10px; line-height:1.5}

/* ===== note / learn ===== */
.note h3{font-family:var(--serif); font-weight:600; font-size:16px; margin:0 0 4px; line-height:1.5}
.note .pgline{font-family:var(--mono); font-size:11px; color:var(--ink3); margin-bottom:11px}
.note p{margin:0 0 9px; font-size:14px; line-height:1.78; word-break:keep-all}

/* ===== config form ===== */
.field{display:flex; flex-direction:column; gap:7px; padding:13px 0; border-bottom:1px solid var(--line)}
.field:last-child{border-bottom:0}
.field > label{font-size:13px; font-weight:500; color:var(--ink)}
.field .hint{font-size:11.5px; color:var(--ink3); line-height:1.55}
select#secpick{
  font:inherit; font-size:14px; font-weight:500; padding:11px 13px; min-height:46px; width:100%;
  border-radius:9px; border:1px solid var(--line2); background:var(--surface); color:var(--ink);
  appearance:none; background-image:linear-gradient(45deg,transparent 50%,var(--ink3) 50%),
    linear-gradient(135deg,var(--ink3) 50%,transparent 50%);
  background-position:calc(100% - 19px) 21px, calc(100% - 13px) 21px;
  background-size:6px 6px, 6px 6px; background-repeat:no-repeat; padding-right:38px}
.field input[type="text"], .field input[type="number"], .field input[type="date"], .field select{
  font:inherit; font-size:14px; padding:10px 12px; min-height:44px; border-radius:9px;
  border:1px solid var(--line2); background:var(--surface); color:var(--ink); width:100%}
.range{display:flex; align-items:center; gap:8px}
.range input{flex:1; min-width:0}
.range span{font-size:12.5px; color:var(--ink3); white-space:nowrap}

/* ===== exam ===== */
.exam-top{position:sticky; top:calc(env(safe-area-inset-top,0px) + 52px); z-index:20; background:var(--surface);
  border:1px solid var(--line); border-radius:11px; padding:10px 13px; display:flex; align-items:center; gap:10px;
  box-shadow:var(--shadow)}
.exam-top .tm{font-family:var(--mono); font-size:16px; font-variant-numeric:tabular-nums}
.exam-top .tm.warn{color:var(--no)}
.exam-top .pos{font-size:12.5px; color:var(--ink2); margin-left:auto; font-family:var(--mono)}
.navrow{display:flex; gap:8px}
.navrow .btn{flex:1}
.palette{display:flex; flex-wrap:wrap; gap:6px}
.pbtn{appearance:none; width:34px; height:34px; border-radius:7px; border:1px solid var(--line2);
  background:var(--surface); color:var(--ink2); font-family:var(--mono); font-size:12px; cursor:pointer}
.pbtn.did{background:var(--accent-soft); border-color:var(--accent); color:var(--accent-ink)}
.pbtn.cur{outline:2px solid var(--accent); outline-offset:1px}

/* ===== result ===== */
.score{text-align:center; padding:8px 0 4px}
.score .v{font-family:var(--mono); font-size:40px; font-weight:500; line-height:1; color:var(--accent-ink);
  font-variant-numeric:tabular-nums}
.score .k{font-size:12.5px; color:var(--ink2); margin-top:6px}
.rrow{display:flex; align-items:center; gap:9px; padding:10px 0; border-bottom:1px solid var(--line)}
.rrow:last-child{border-bottom:0}
.rrow .m{width:22px; flex:none; font-weight:700; font-size:13px; text-align:center}
.rrow .m.o{color:var(--ok)} .rrow .m.x{color:var(--no)}
.rrow .s{flex:1; min-width:0; font-size:13px; line-height:1.6; word-break:keep-all;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden}
.hrow{display:flex; align-items:center; gap:10px; padding:11px 0; border-bottom:1px solid var(--line); cursor:pointer}
.hrow:last-child{border-bottom:0}
.hrow .ti{flex:1; min-width:0}
.hrow .ti b{display:block; font-size:13.5px; font-weight:500}
.hrow .ti span{font-size:11.5px; color:var(--ink3); font-family:var(--mono)}
.hrow .sc{font-family:var(--mono); font-size:14px; white-space:nowrap; font-variant-numeric:tabular-nums}

.empty{text-align:center; padding:48px 20px; color:var(--ink3); font-size:14px; line-height:1.8}

/* ===== modal ===== */
.modal{position:fixed; inset:0; z-index:100; background:rgba(10,14,18,.93); display:flex; flex-direction:column}
.modal-bar{display:flex; align-items:center; gap:8px; padding:calc(env(safe-area-inset-top,0px) + 10px) 14px 10px; flex:none}
.modal-bar .t{color:#E8ECF1; font-family:var(--mono); font-size:12px; margin-right:auto; overflow:hidden;
  text-overflow:ellipsis; white-space:nowrap}
.mbtn{appearance:none; font:inherit; font-size:13px; font-weight:500; padding:8px 13px; min-height:40px;
  border-radius:8px; border:1px solid rgba(255,255,255,.28); background:rgba(255,255,255,.08); color:#fff; cursor:pointer}
.modal-scroll{flex:1; overflow:auto; -webkit-overflow-scrolling:touch;
  padding:0 10px calc(env(safe-area-inset-bottom,0px) + 16px); text-align:center}
.modal-scroll img{display:inline-block; background:#fff; border-radius:6px}

.foot{max-width:var(--maxw); margin:22px auto 0; padding:20px 16px 8px; border-top:1px solid var(--line);
  font-size:11.5px; color:var(--ink3); line-height:1.8}
