:root{
  --bg:#F5F8F4; --card:#FFFFFF; --ink:#1D2822; --muted:#5C6B61; --line:#DCE5DC;
  --accent:#2E7D46; --accent-ink:#FFFFFF; --accent-soft:#E3F0E6;
  --gk:#B8860B; --gk-soft:#F6EDD6;
  --def:#3B6FB5; --def-soft:#E2ECF7;
  --trv:#2E9C8A; --trv-soft:#DFF2EE;
  --stk:#CE5A45; --stk-soft:#F9E6E1;
  --bench:#8A968C; --bench-soft:#EEF1EC;
  --off:#B3362A; --off-soft:#F7E3E0;
  --on:#2E7D46; --on-soft:#E3F0E6;
  --warn:#8A6D1B; --warn-soft:#F5EDD2;
  --shadow:0 1px 3px rgba(20,40,25,.10), 0 4px 16px rgba(20,40,25,.06);
}
@media (prefers-color-scheme: dark){
  :root{
    --bg:#131A15; --card:#1C241E; --ink:#E6EDE7; --muted:#93A197; --line:#2C372F;
    --accent:#66C285; --accent-ink:#0E1710; --accent-soft:#22331F;
    --gk:#E3B34C; --gk-soft:#33290F;
    --def:#7FA9DC; --def-soft:#1B2A3D;
    --trv:#5EC2B1; --trv-soft:#14322C;
    --stk:#E88A76; --stk-soft:#3A1F19;
    --bench:#7C887E; --bench-soft:#232B24;
    --off:#E4796B; --off-soft:#3A1F19;
    --on:#66C285; --on-soft:#22331F;
    --warn:#D9BC5E; --warn-soft:#332B10;
    --shadow:0 1px 3px rgba(0,0,0,.4), 0 4px 16px rgba(0,0,0,.25);
  }
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--ink);
  font:16px/1.5 ui-sans-serif, system-ui, "Segoe UI", Roboto, sans-serif;
  -webkit-tap-highlight-color:transparent;
}
h1{font-size:22px;font-weight:800;letter-spacing:-.02em;margin:0;text-wrap:balance}
h2{font-size:15px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;margin:0;color:var(--muted)}
.sub{color:var(--muted);font-size:14px;margin:2px 0 0}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:12px}
button{font:inherit;cursor:pointer;border-radius:10px;border:1px solid var(--line);background:var(--card);color:var(--ink);padding:10px 16px;font-weight:700}
button:focus-visible, input:focus-visible, select:focus-visible, a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
button.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-size:16px}
button.big{padding:14px 20px;font-size:17px}
button:disabled{opacity:.45;cursor:default}
input[type=text], input[type=date], input[type=email], input[type=password], select{
  font:inherit;color:var(--ink);background:var(--bg);border:1px solid var(--line);
  border-radius:8px;padding:10px;min-width:0;
}
.hint{font-size:13px;color:var(--muted)}
.err{color:var(--off);font-weight:700;font-size:14px;display:none}
.err.show{display:block}
.warnbox{background:var(--warn-soft);color:var(--warn);border-radius:8px;padding:8px 12px;font-size:14px;font-weight:600}
.okmsg{color:var(--on);font-weight:700;font-size:14px;align-self:center}
.count{font-weight:800;color:var(--accent)}
.count.bad{color:var(--off)}
.hidden{display:none !important}

/* ---------- app shell ---------- */
#appShell{display:flex;flex-direction:column;min-height:100dvh}
.topbar{
  position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:10px;
  background:var(--card);border-bottom:1px solid var(--line);
  padding:10px 14px;padding-top:calc(10px + env(safe-area-inset-top));
}
.topbar .brand{font-weight:800;font-size:20px;letter-spacing:-.01em;color:inherit;text-decoration:none}
.topbar .teamchip{display:inline-flex;align-items:center;gap:2px;max-width:48%;text-decoration:none;
  font-weight:800;font-size:14px;color:var(--ink);background:var(--accent-soft);
  border:1px solid var(--line);border-radius:999px;padding:5px 12px;white-space:nowrap;overflow:hidden}
.topbar .teamchip #teamChipName{overflow:hidden;text-overflow:ellipsis}
.topbar .who{margin-left:auto;font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:34%}
.tabbar a .ticon{font-size:19px}
.trow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.trow.active{border-color:var(--accent);background:var(--accent-soft)}
.trow .tmeta{display:flex;flex-direction:column;gap:1px;min-width:0}
.trow .tname{font-weight:800}
.trow .tpath{font-size:12px;color:var(--muted)}
.trow .tbtn{margin-left:auto}
.rolepill{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;padding:2px 8px;border-radius:999px}
.rolepill.admin{background:var(--gk-soft);color:var(--gk)}
.rolepill.manager{background:var(--bench-soft);color:var(--muted)}
.mrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;border:1px solid var(--line);border-radius:10px;padding:8px 12px}
.mrow .memail{font-weight:700;min-width:0;overflow:hidden;text-overflow:ellipsis}
.mrow .mspace{margin-left:auto;display:flex;gap:6px;align-items:center}
.struct-club{font-weight:800;margin-top:6px;display:flex;align-items:center;gap:8px}
.struct-ag{margin-left:14px;font-weight:700;color:var(--muted);display:flex;align-items:center;gap:8px}
.struct-team{margin-left:28px;display:flex;align-items:center;gap:8px}
.struct-club > span, .struct-ag > span, .struct-team > span{min-width:0;overflow:hidden;text-overflow:ellipsis}
.struct-def{margin-left:28px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.struct-defpanel{margin-left:28px;padding:12px;border:1px solid var(--line);border-radius:10px;display:flex;flex-direction:column;gap:10px}
button.mini.rn{padding:2px 8px;font-size:13px;line-height:1.3;flex:none}
.topbar button{padding:6px 10px;font-size:13px}
main{flex:1;width:100%;max-width:680px;margin:0 auto;padding:14px 12px calc(84px + env(safe-area-inset-bottom))}
.view{display:none}
.view.active{display:flex;flex-direction:column;gap:14px}
.tabbar{
  position:fixed;left:0;right:0;bottom:0;z-index:30;
  display:grid;grid-template-columns:repeat(5,1fr);
  background:var(--card);border-top:1px solid var(--line);
  padding-bottom:env(safe-area-inset-bottom);
}
.tabbar a{
  display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:9px 4px 7px;text-decoration:none;color:var(--muted);
  font-size:11px;font-weight:700;letter-spacing:.02em;
}
.tabbar a .ticon{font-size:20px;line-height:1}
.tabbar a.active{color:var(--accent)}

/* ---------- auth ---------- */
#authView{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:20px}
.authcard{width:100%;max-width:380px;display:flex;flex-direction:column;gap:14px;
  background:var(--card);border:1px solid var(--line);border-radius:16px;padding:24px;box-shadow:var(--shadow)}
.authcard .logo{font-size:40px;line-height:1;text-align:center}
.authcard h1{text-align:center}
.authcard .sub{text-align:center}
.authtabs{display:grid;grid-template-columns:1fr 1fr;gap:6px;background:var(--bg);border-radius:10px;padding:4px}
.authtabs button{border:none;background:none;padding:8px;font-weight:700;color:var(--muted);border-radius:8px}
.authtabs button.active{background:var(--card);color:var(--ink);box-shadow:var(--shadow)}
.authform{display:flex;flex-direction:column;gap:10px}
.authform label{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:700;color:var(--muted)}
.linkbtn{background:none;border:none;color:var(--accent);font-size:13px;font-weight:700;padding:4px;align-self:center;cursor:pointer}
.notice{background:var(--accent-soft);color:var(--accent);border-radius:10px;padding:12px;font-size:14px;font-weight:600;text-align:center}

/* ---------- squad / availability ---------- */
.rowlist{display:flex;flex-direction:column;gap:8px}
.prow,.phead{display:grid;grid-template-columns:minmax(0,1fr) 62px 62px 42px;column-gap:6px;align-items:center}
.prow{padding:1px 0}
.prow select{min-width:0;padding:9px 4px;text-align:center}
.phead{padding-bottom:6px;border-bottom:1px solid var(--line);margin-bottom:2px;
  font-size:11px;font-weight:800;letter-spacing:.03em;text-transform:uppercase;color:var(--muted)}
.phead span{text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.phead span:first-child{text-align:left}
.arow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
.arow .aname{font-weight:700;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.arow.absent .aname{opacity:.4}
.avl{display:flex;gap:4px}
.ab{width:30px;height:40px;padding:0;border-radius:8px;border:1px solid var(--line);background:var(--bg);font-size:13px;font-weight:800;color:var(--muted);cursor:pointer}
.ab.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
.tgl{width:42px;height:42px;border-radius:8px;border:1px solid var(--line);background:var(--bg);font-size:18px;font-weight:800;color:var(--muted);padding:0}
.tgl.key.active{background:var(--gk-soft);border-color:var(--gk);color:var(--gk)}
.settings{display:grid;grid-template-columns:repeat(2, minmax(0,1fr));gap:10px}
.settings label{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:700;color:var(--muted);min-width:0}
.settings label.wide{grid-column:1/-1}
.settings select{width:100%}
.keyrule{grid-column:1/-1;display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px}
.keyrule select{width:64px}

/* ---------- plan grid ---------- */
.gridwrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px}
table.plan{border-collapse:collapse;width:100%;min-width:560px;font-size:13px}
table.plan th, table.plan td{padding:6px 6px;text-align:center;border-bottom:1px solid var(--line);white-space:nowrap}
table.plan th{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
table.plan td.name{text-align:left;font-weight:700;position:sticky;left:0;background:var(--card);max-width:110px;overflow:hidden;text-overflow:ellipsis}
table.plan th.half{border-left:2px solid var(--line)}
table.plan td.h2start{border-left:2px solid var(--line)}
.cell{display:inline-block;min-width:34px;padding:2px 4px;border-radius:6px;font-weight:800;font-size:12px;font-variant-numeric:tabular-nums}
.cell.GK{background:var(--gk-soft);color:var(--gk)}
.cell.DEF,.cell.CB,.cell.FB{background:var(--def-soft);color:var(--def)}
.cell.TRV{background:var(--trv-soft);color:var(--trv)}
.cell.STK{background:var(--stk-soft);color:var(--stk)}
.cell.B{background:var(--bench-soft);color:var(--bench);font-weight:600}
.cell.A{background:none;color:var(--muted);font-weight:600;opacity:.45}
.cell.tap{cursor:pointer}
/* custom-formation builder */
button.ghost{background:none;border-color:var(--line);color:var(--muted);font-weight:700}
.fbline{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:6px 0;border-bottom:1px dashed var(--line)}
.fbzone{min-width:78px;font-size:11px;letter-spacing:.05em;text-transform:uppercase;font-weight:800;color:var(--muted)}
.fbzone.DEF{color:var(--def)} .fbzone.TRV{color:var(--trv)} .fbzone.STK{color:var(--stk)}
.fbslot{display:inline-flex;align-items:center}
.fbinput{width:56px;text-align:center;font-weight:800;border-radius:8px 0 0 8px;border-right:none;padding:6px 4px}
.fbinput.DEF{background:var(--def-soft);color:var(--def)}
.fbinput.TRV{background:var(--trv-soft);color:var(--trv)}
.fbinput.STK{background:var(--stk-soft);color:var(--stk)}
.fbpick{font-weight:800;border-radius:8px 0 0 8px;border-right:none;padding:6px 4px;min-width:64px}
.fbpick.DEF{background:var(--def-soft);color:var(--def)}
.fbpick.TRV{background:var(--trv-soft);color:var(--trv)}
.fbpick.STK{background:var(--stk-soft);color:var(--stk)}
.fbdel{padding:6px 8px;border-radius:0 8px 8px 0;color:var(--muted);line-height:1}
.fbaddslot{padding:6px 10px;font-size:13px;color:var(--muted)}
.fbdelline{padding:4px 8px;font-size:12px;margin-left:auto}
.fbaddline{margin-top:8px;font-size:13px}
.hint.ok{color:var(--trv)} .hint.bad{color:var(--stk)}
/* positions dictionary + saved formations */
.subhd{font-size:12px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin:6px 0 0}
.squadsettings{display:flex;gap:12px;flex-wrap:wrap}
.squadsettings label{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:700;color:var(--muted)}
.z-stk{color:var(--stk)} .z-trv{color:var(--trv)} .z-def{color:var(--def)}
.posrow{display:flex;align-items:center;gap:8px;padding:4px 0}
.posinput{width:64px;text-align:center;font-weight:800;padding:6px 4px}
.posinput.DEF{background:var(--def-soft);color:var(--def)}
.posinput.TRV{background:var(--trv-soft);color:var(--trv)}
.posinput.STK{background:var(--stk-soft);color:var(--stk)}
.postype{flex:1;max-width:160px}
.posdel{padding:6px 9px;color:var(--muted);line-height:1}
.fbnamerow{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}
.fbnamerow label{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:700;color:var(--muted)}
.fmtrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;border:1px solid var(--line);border-radius:10px;padding:8px 12px;margin:4px 0}
.fmtname{font-weight:800}
.fmtrow .mini{margin-left:0}
.fmtrow .tpath{color:var(--muted);font-size:12px;margin-right:auto}
.cell.sel{outline:2px solid var(--accent);outline-offset:1px}
td.mins{font-weight:800;font-variant-numeric:tabular-nums}
td.statcell{cursor:pointer;font-weight:700;font-variant-numeric:tabular-nums;color:var(--muted);min-width:34px}
.sth{display:flex;flex-direction:column;align-items:center;gap:1px;font-size:15px;line-height:1.2}
.sth span{font-size:9px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
td.statcell.has{color:var(--accent);font-weight:800}
td.statoff{color:var(--muted);opacity:.35}
.statrow{display:flex;align-items:center;gap:8px}
button.mini{padding:2px 12px;font-size:15px;line-height:1.4}
button.mini.active, #statMinus.active{background:var(--off-soft);border-color:var(--off);color:var(--off)}
.legend{display:flex;flex-wrap:wrap;gap:6px;font-size:12px;color:var(--muted)}
.legend .cell{min-width:0}

/* ---------- sub schedule ---------- */
.sublist{display:flex;flex-direction:column;gap:10px}
.subcard{border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.subcard .when{font-weight:800;font-size:14px}
.subcard.ht{border-color:var(--gk);background:var(--gk-soft)}
.chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.chip{padding:3px 10px;border-radius:999px;font-size:13px;font-weight:700}
.chip.off{background:var(--off-soft);color:var(--off)}
.chip.on{background:var(--on-soft);color:var(--on)}
.chip.role{background:var(--bench-soft);color:var(--muted);font-weight:600}
.dirlabel{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;width:34px;flex:none}
.dirlabel.off{color:var(--off)} .dirlabel.on{color:var(--on)}
.gknote{font-size:13px;font-weight:700;color:var(--gk)}

/* ---------- save + history ---------- */
.saverow{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.saverow label{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:700;color:var(--muted)}
.hitem{border:1px solid var(--line);border-radius:10px}
.hitem summary{list-style:none;cursor:pointer;display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:10px 12px}
.hitem summary::-webkit-details-marker{display:none}
.hitem[open] summary{border-bottom:1px solid var(--line)}
.hdate{font-weight:800}
.hfmt{color:var(--muted);font-size:13px}
.hpotm{margin-left:auto;color:var(--gk);font-size:13px;font-weight:700}
.hbody{padding:10px 12px;display:flex;flex-direction:column;gap:10px}
.hbody .potmrow{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:700;color:var(--muted);align-items:flex-start}
button.danger{color:var(--off);border-color:var(--off);align-self:flex-start;font-size:14px}

/* ---------- live match ---------- */
.clockrow{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.scorewrap{display:flex;flex-direction:column;gap:6px}
.scorewrap > .scorelabel{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.scorerow{display:flex;flex-wrap:nowrap;align-items:flex-end;justify-content:center;gap:10px}
.scoreteam{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0;flex:1 1 0}
.scoreteam .sslabel{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:800;font-size:13px}
.scorerow .stepper{display:inline-flex;flex-wrap:nowrap;align-items:center;gap:8px;flex:none}
.scorerow .stepbtn{width:36px;height:36px;padding:0;border-radius:50%;font-size:22px;font-weight:800;line-height:1;display:flex;align-items:center;justify-content:center;flex:none}
.scorerow .scorenum{min-width:24px;text-align:center;font-weight:800;font-size:22px;font-variant-numeric:tabular-nums}
.scorerow .scoredash{font-weight:800;color:var(--muted);flex:none;padding-bottom:7px}
.hres{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px}
.hres input[type=text]{flex:1;min-width:120px}
.hres input[type=number]{width:52px;text-align:center;font-weight:800}
.hscore{margin-left:6px;font-weight:800;font-variant-numeric:tabular-nums}
.clock{font:800 52px/1 ui-monospace, "Cascadia Mono", Consolas, monospace;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.phase{font-size:13px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.nextsub{font-size:14px;color:var(--muted)}
.nextsub b{color:var(--ink);font-variant-numeric:tabular-nums}
.btnrow{display:flex;gap:8px;flex-wrap:wrap}
.pitchnow{display:flex;flex-direction:column;gap:8px}
.pitchnow .grp{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.grplabel{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);width:70px;flex:none}
.pchip{padding:4px 10px;border-radius:999px;font-size:14px;font-weight:700}
.pchip.GK{background:var(--gk-soft);color:var(--gk)}
.pchip.DEF,.pchip.CB,.pchip.FB{background:var(--def-soft);color:var(--def)}
.pchip.TRV{background:var(--trv-soft);color:var(--trv)}
.pchip.STK{background:var(--stk-soft);color:var(--stk)}
.pchip.B{background:var(--bench-soft);color:var(--bench)}
.nextpos{font-size:11px;font-weight:800;letter-spacing:.02em}
.nextpos.DEF,.nextpos.CB,.nextpos.FB{color:var(--def)}
.nextpos.TRV{color:var(--trv)}
.nextpos.STK{color:var(--stk)}
.nextpos.GK{color:var(--gk)}

/* ---------- live pitch view ---------- */
.pitch{
  background:
    repeating-linear-gradient(0deg, rgba(255,255,255,.06) 0 26px, rgba(255,255,255,0) 26px 52px),
    linear-gradient(180deg, #2E8B4F, #256F40);
  border-radius:12px;
  padding:18px 10px;
  display:flex;flex-direction:column;gap:18px;
  position:relative;overflow:hidden;
}
.pitch::before{
  content:"";position:absolute;left:8%;right:8%;top:50%;height:0;
  border-top:2px solid rgba(255,255,255,.22);
}
.pline{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;position:relative;z-index:1;min-height:30px}
.pp{
  background:rgba(255,255,255,.93);color:#173322;
  padding:5px 12px;border-radius:999px;font-weight:800;font-size:13px;
  border-top:3px solid var(--bench);
  box-shadow:0 1px 3px rgba(0,0,0,.28);
}
.pp.STK{border-top-color:var(--stk)}
.pp.TRV{border-top-color:var(--trv)}
.pp.DEF,.pp.CB,.pp.FB{border-top-color:var(--def)}
.pp.GK{border-top-color:var(--gk)}
.pp.nextoff{background:var(--off-soft);box-shadow:0 0 0 2px var(--off);color:var(--off)}
#subNowPanel{border:1px solid var(--line);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:8px}
#subNowPanel .chip{cursor:pointer;border:1px solid transparent;font:inherit;font-size:13px;font-weight:700}
#subNowPanel .chip.selpick{outline:2px solid var(--accent);outline-offset:1px}
.chippos{background:var(--card);border-radius:6px;padding:1px 6px;font-size:11px;font-weight:800;letter-spacing:.02em}
.chippos.DEF,.chippos.CB,.chippos.FB{color:var(--def)}
.chippos.TRV{color:var(--trv)}
.chippos.STK{color:var(--stk)}
.chippos.GK{color:var(--gk)}

/* ---------- alert sheet + toast ---------- */
#sheet{
  position:fixed;left:0;right:0;bottom:0;z-index:50;display:none;
  background:var(--card);border-top:3px solid var(--accent);
  box-shadow:0 -8px 30px rgba(0,0,0,.25);
  padding:16px 16px calc(20px + env(safe-area-inset-bottom));
}
#sheet.show{display:block}
#sheet .inner{max-width:680px;margin:0 auto;display:flex;flex-direction:column;gap:10px}
#sheet h3{margin:0;font-size:18px;font-weight:800}
#sheet.pulse h3{animation:pulse 1s ease-in-out infinite}
@keyframes pulse{50%{opacity:.45}}
@media (prefers-reduced-motion: reduce){#sheet.pulse h3{animation:none}}
.subchecklist{display:flex;flex-direction:column;gap:2px;margin:2px 0}
.subitem{display:flex;align-items:center;gap:10px;padding:9px 4px;border-top:1px solid var(--line);cursor:pointer}
.subitem:first-child{border-top:none}
.subitem input{width:22px;height:22px;flex:none;accent-color:var(--accent)}
.subitem .subx{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:700}
.subitem .soff{color:var(--off)}
.subitem .son{color:var(--on)}
.subitem .arrow{color:var(--muted);font-weight:800}
.subitem:has(input:checked) .subx{opacity:.45;text-decoration:line-through}
#toast{
  position:fixed;left:50%;transform:translateX(-50%);bottom:calc(76px + env(safe-area-inset-bottom));z-index:40;display:none;
  background:var(--warn-soft);color:var(--warn);border:1px solid var(--warn);
  border-radius:999px;padding:8px 18px;font-weight:700;font-size:14px;max-width:92vw;
}
#toast.show{display:block}
footer{color:var(--muted);font-size:12px;text-align:center;padding-bottom:8px}

/* ---------- terms & privacy gate ---------- */
#termsGate{position:fixed;inset:0;z-index:1000;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;padding:16px}
.termscard{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);width:100%;max-width:640px;max-height:90vh;display:flex;flex-direction:column;gap:12px;padding:20px}
.termscard h2{font-size:16px}
.termsmeta{color:var(--muted);font-size:12px;margin:0}
.termsbody{flex:1 1 auto;overflow-y:auto;border:1px solid var(--line);border-radius:10px;padding:14px;background:var(--bg);font-size:14px;line-height:1.5}
.termsbody h3{font-size:14px;font-weight:800;margin:14px 0 4px}
.termsbody h3:first-of-type{margin-top:0}
.termsbody p{margin:0 0 8px}
.termsbody ul{margin:0 0 8px;padding-left:18px}
.termsbody li{margin:0 0 6px}
.termsagree{display:flex;align-items:flex-start;gap:8px;font-size:14px;font-weight:700;cursor:pointer}
.termsagree input{margin-top:3px}

/* ---------- print (plan → PDF) ---------- */
.printhead{display:none}
@media print{
  @page{ size: A4 landscape; margin: 10mm; }
  *{ -webkit-print-color-adjust:exact; print-color-adjust:exact; }
  body{ background:#fff; padding:0; }
  .topbar, .tabbar, #toast, #sheet, footer, .noprint{ display:none !important; }
  main{ max-width:none; padding:0; }
  #view-plan.active > .card:not(#planResult){ display:none !important; }
  #planResult{ box-shadow:none; border:none; padding:0; border-radius:0; }
  .printhead{ display:block; font-weight:800; font-size:17px; }
  .gridwrap{ overflow:visible; }
  table.plan{ min-width:0; width:100%; }
  table.plan td.name{ position:static; }
  .subcard{ break-inside:avoid; }
  .sublist{ display:block; }
  .sublist .subcard{ margin-bottom:8px; }
}
