:root{color-scheme:light;
  --bg:#F4F6F9;--surface:#FFFFFF;--surface2:#F3F5F9;--surface3:#E9EDF3;--text:#0F1729;--text2:#334155;--muted:#5D6A7E;--line:#E3E8EF;--line2:#D2D9E3;
  --brand:#2450D8;--brandHover:#1C43BD;--brandSoft:#EBF0FE;--brandInk:#1D41B3;
  --good:#0A7C5C;--goodSoft:#E3F4ED;--warn:#9A5A00;--warnSoft:#FCF1DE;--bad:#B92D43;--badSoft:#FBE9EC;--violet:#6B3BCF;--violetSoft:#F1EBFD;
  --radius:14px;--shadow:0 1px 2px rgba(15,23,41,.04),0 1px 3px rgba(15,23,41,.04);--shadowMd:0 6px 20px rgba(15,23,41,.08);--shadowLg:0 24px 64px rgba(15,23,41,.20);
  --font:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
[data-theme=dark]{color-scheme:dark;
  --bg:#0A0F1B;--surface:#111827;--surface2:#172034;--surface3:#1F2A42;--text:#E8EDF6;--text2:#C4CDDC;--muted:#95A1B6;--line:#222C41;--line2:#2E3A54;
  --brand:#3D63E6;--brandHover:#4C70EC;--brandSoft:#1A2548;--brandInk:#A8BCFB;
  --good:#43C99D;--goodSoft:#0F2D25;--warn:#F2B661;--warnSoft:#33260E;--bad:#F27688;--badSoft:#3A1820;--violet:#B79CF7;--violetSoft:#261C42;
  --shadow:0 1px 2px rgba(0,0,0,.35);--shadowMd:0 6px 20px rgba(0,0,0,.35);--shadowLg:0 24px 64px rgba(0,0,0,.55);
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--text);font:14.5px/1.5 var(--font);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--brandInk);text-decoration:none;font-weight:500}
a:hover{text-decoration:underline;text-underline-offset:2px}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
h1{font-size:24px;line-height:1.25;margin:0;letter-spacing:-.022em;font-weight:680}
h2{font-size:15.5px;line-height:1.35;margin:0;letter-spacing:-.012em;font-weight:640}
h3{font-size:14.5px;margin:0;font-weight:620}
b,strong{font-weight:620}
.muted{color:var(--muted)} .small{font-size:13px} .tiny{font-size:12px}
.num{font-variant-numeric:tabular-nums}
.pos{color:var(--good)}
svg{flex-shrink:0}

/* ---------- shell ---------- */
.app{display:flex;min-height:100vh}
.side{display:none}
.main{flex:1;min-width:0;padding:20px 16px 104px;max-width:1240px;margin:0 auto;width:100%}
.topbar{display:flex;align-items:flex-start;justify-content:space-between;margin:0 0 18px;gap:12px 16px;flex-wrap:wrap}
.topbar .tt{min-width:0;flex:1 1 0}
.topbar .util{display:flex;gap:8px;order:2}
.topbar .tools{order:3;flex:1 0 100%}
@media(min-width:900px){.topbar .tools{order:2;flex:0 1 auto;justify-content:flex-end}.topbar .util{order:3}}
.topbar .tt .muted{margin-top:4px}
.tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tabbar{position:fixed;left:0;right:0;bottom:0;background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:saturate(1.4) blur(14px);-webkit-backdrop-filter:saturate(1.4) blur(14px);border-top:1px solid var(--line);display:flex;justify-content:space-around;padding:6px 4px calc(6px + env(safe-area-inset-bottom));z-index:20}
.tabbar button{background:none;border:0;display:flex;flex-direction:column;align-items:center;gap:3px;font-size:11px;font-weight:560;color:var(--muted);padding:6px 8px;border-radius:12px;cursor:pointer;min-width:62px;min-height:48px}
.tabbar button.on{color:var(--brandInk)}
.tabbar .tbi{position:relative;display:grid;place-items:center}
.tabbar .navcount{position:absolute;top:-5px;right:-11px}
.tabbar svg{width:22px;height:22px}
@media (min-width:900px){
  .tabbar{display:none}
  .side{display:flex;flex-direction:column;width:248px;flex-shrink:0;background:var(--surface);border-right:1px solid var(--line);padding:18px 12px 14px;position:sticky;top:0;height:100vh;overflow-y:auto}
  .side .nav{display:flex;flex-direction:column;gap:1px;margin-top:6px}
  .side .nav button{display:flex;align-items:center;gap:11px;background:none;border:0;padding:0 10px;height:36px;border-radius:9px;color:var(--text2);cursor:pointer;text-align:left;font-weight:520;font-size:14px;width:100%}
  .side .nav button svg{color:var(--muted)}
  .side .nav button span{flex:1}
  .side .nav button:hover{background:var(--surface2);color:var(--text)}
  .side .nav button.on{background:var(--brandSoft);color:var(--brandInk);font-weight:620}
  .side .nav button.on svg{color:var(--brandInk)}
  .side .navlabel{font-size:11px;font-weight:650;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:18px 10px 6px}
  .main{padding:30px 40px 56px}
}
.sidesearch{display:flex;align-items:center;gap:9px;width:100%;height:36px;margin-top:16px;padding:0 10px;border:1px solid var(--line2);border-radius:9px;background:var(--surface2);color:var(--muted);font-size:13.5px;cursor:pointer;text-align:left}
.sidesearch:hover{border-color:var(--muted)}
.sidesearch span{flex:1}
kbd{font-family:var(--font);font-size:11px;font-weight:600;padding:1px 6px;border-radius:5px;border:1px solid var(--line2);background:var(--surface);color:var(--muted)}
.navcount{font-style:normal;min-width:19px;height:19px;padding:0 5px;border-radius:99px;background:var(--bad);color:#fff;font-size:11px;font-weight:700;display:inline-grid;place-items:center;line-height:1}
[data-theme=dark] .navcount{color:#1a0b0f}
.sidefoot{margin-top:auto;display:flex;align-items:center;gap:10px;padding:12px 6px 2px;border-top:1px solid var(--line);font-size:13px}
.sidefoot .grow{flex:1;min-width:0}
.logo{display:flex;align-items:center;gap:10px;font-weight:700;font-size:16px;letter-spacing:-.015em;padding:0 6px}
.logo i{width:32px;height:32px;border-radius:9px;background:var(--brand);display:grid;place-items:center;color:#fff;font-style:normal;flex-shrink:0;box-shadow:inset 0 -2px 0 rgba(0,0,0,.14)}
.logo span{display:flex;flex-direction:column;line-height:1.2}
.logo small{font-size:12px;font-weight:500;color:var(--muted);letter-spacing:0}
.bellwrap{position:relative}
.bellwrap .navcount{position:absolute;top:-6px;right:-6px;pointer-events:none}

/* ---------- surfaces ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px}
.card + .card{margin-top:14px}
.cardhead{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:8px}
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid .card+.card{margin-top:0}
.grid > div > .card + .card{margin-top:14px}
.grid > *{min-width:0}
.main > .grid + .card,.main > .card + .grid,.main > .grid + .grid{margin-top:14px}
.grid.gmd2{align-items:start}
@media (min-width:900px){.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.gmd2{grid-template-columns:repeat(2,minmax(0,1fr))}.gmd3{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}}
.stat .label{font-size:12px;color:var(--muted);font-weight:560;letter-spacing:.01em}
.stat .value{font-size:24px;font-weight:680;letter-spacing:-.025em;margin-top:4px;font-variant-numeric:tabular-nums;line-height:1.2}
.stat .sub{font-size:12px;color:var(--muted);margin-top:4px}
.kpis{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px}
@media(min-width:600px){.kpis{grid-template-columns:repeat(4,minmax(0,1fr))}}
.kpis > div{background:var(--surface2);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.kpis span{display:block;font-size:12px;color:var(--muted);font-weight:560}
.kpis b{font-size:16px;font-variant-numeric:tabular-nums;font-weight:680}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:1px solid var(--line2);background:var(--surface);padding:0 14px;height:38px;border-radius:10px;font-weight:600;font-size:13.5px;cursor:pointer;white-space:nowrap;color:var(--text);box-shadow:var(--shadow);transition:background .12s,border-color .12s,box-shadow .12s}
.btn:hover{background:var(--surface2)}
.btn:active{transform:translateY(.5px)}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.primary:hover{background:var(--brandHover);border-color:var(--brandHover)}
.btn.ghost{border-color:transparent;background:transparent;color:var(--brandInk);box-shadow:none}
.btn.ghost:hover{background:var(--brandSoft)}
.btn.danger{color:var(--bad)}
.btn.danger:hover{background:var(--badSoft)}
.btn.danger.solid{background:var(--bad);border-color:var(--bad);color:#fff}
.btn.sm{height:32px;padding:0 11px;font-size:13px;border-radius:8px}
.btn.block{width:100%;height:42px}
.btn svg{width:17px;height:17px}
.iconbtn{width:36px;height:36px;border-radius:9px;border:1px solid var(--line2);background:var(--surface);display:grid;place-items:center;cursor:pointer;color:var(--text2);box-shadow:var(--shadow)}
.iconbtn:hover{background:var(--surface2);color:var(--text)}
.iconbtn:disabled{opacity:.4;cursor:not-allowed}

/* ---------- lists ---------- */
.row{display:flex;align-items:center;gap:12px}
.list{display:flex;flex-direction:column}
.item{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.item:last-child{border-bottom:0}
.item .grow{flex:1;min-width:0}
.item .title{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.clickable{cursor:pointer}
.list > .item.clickable{margin:0 -10px;padding:12px 10px;border-radius:10px}
.list > .item.clickable:hover{background:var(--surface2)}
.clickable:hover .title{color:var(--brandInk)}
.ico{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;font-size:14px;flex-shrink:0;background:var(--surface2);color:var(--text2)}
.bico{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:var(--surface);flex-shrink:0;color:var(--brandInk)}
.pill{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:620;padding:2px 8px;border-radius:999px;background:var(--surface3);color:var(--text2);white-space:nowrap;line-height:1.55}
.pill svg{width:12px;height:12px}
.pill.good{background:var(--goodSoft);color:var(--good)} .pill.warn{background:var(--warnSoft);color:var(--warn)} .pill.bad{background:var(--badSoft);color:var(--bad)} .pill.brand{background:var(--brandSoft);color:var(--brandInk)}
.chips{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{border:1px solid var(--line2);background:var(--surface);border-radius:999px;padding:0 12px;height:32px;font-size:13px;font-weight:580;cursor:pointer;white-space:nowrap;color:var(--text2)}
.chip:hover{border-color:var(--muted);color:var(--text)}
.chip.on{background:var(--text);color:var(--surface);border-color:var(--text)}
.seg{display:inline-flex;background:var(--surface3);border-radius:10px;padding:3px;gap:2px;max-width:100%;overflow-x:auto}
.seg button{border:0;background:none;padding:0 12px;height:30px;border-radius:8px;font-weight:600;font-size:13px;color:var(--muted);cursor:pointer;white-space:nowrap}
.seg button:hover{color:var(--text)}
.seg button.on{background:var(--surface);color:var(--text);box-shadow:0 1px 2px rgba(15,23,41,.1),0 0 0 1px var(--line)}

/* ---------- forms ---------- */
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.field label,label.small{font-size:13px;font-weight:600;color:var(--text2)}
label.small .input{margin-top:6px}
.input{width:100%;height:40px;padding:0 12px;border:1px solid var(--line2);border-radius:10px;background:var(--surface);outline:none;transition:border-color .12s,box-shadow .12s}
textarea.input{height:auto;padding:10px 12px;resize:vertical;font-family:var(--mono);font-size:12.5px}
select.input{appearance:none;-webkit-appearance:none;padding-right:34px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2378859a' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;background-size:14px}
.input:focus{border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 18%,transparent)}
.input:disabled{background:var(--surface2);color:var(--muted)}
.hint{font-size:12px;color:var(--muted)}
.err{font-size:13px;color:var(--bad);font-weight:550}
.err:empty{display:none}
.bar{height:8px;background:var(--surface3);border-radius:99px;overflow:hidden}
.bar > i{display:block;height:100%;background:var(--brand);border-radius:99px;transition:width .3s}
.switch{position:relative;width:42px;height:24px;flex-shrink:0;display:inline-block}
.switch input{opacity:0;width:0;height:0;position:absolute}
.switch span{position:absolute;inset:0;background:var(--line2);border-radius:99px;transition:.18s;cursor:pointer}
.switch span:before{content:"";position:absolute;width:18px;height:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.18s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.switch input:checked + span{background:var(--brand)}
.switch input:checked + span:before{transform:translateX(18px)}
.switch input:focus-visible + span{outline:2px solid var(--brand);outline-offset:2px}
.ck{width:18px;height:18px;accent-color:var(--brand);flex-shrink:0;cursor:pointer}

.section-title{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin:28px 0 12px}
.empty{text-align:center;color:var(--muted);padding:28px 8px;font-size:13.5px}

/* ---------- tables ---------- */
table.t{width:100%;border-collapse:separate;border-spacing:0;font-size:13.5px}
table.t th{text-align:left;font-size:11.5px;color:var(--muted);font-weight:650;text-transform:uppercase;letter-spacing:.045em;padding:9px 10px;border-bottom:1px solid var(--line);background:var(--surface2);white-space:nowrap}
table.t th:first-child{border-top-left-radius:8px} table.t th:last-child{border-top-right-radius:8px}
table.t td{padding:11px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
table.t tbody tr:hover td{background:color-mix(in srgb,var(--surface2) 70%,transparent)}
table.t tbody tr:last-child td{border-bottom:0}
table.t th.sort{cursor:pointer;user-select:none}
table.t th.sort:hover{color:var(--text)}
table.t td.ed{cursor:text}
table.t td.ed:hover{background:var(--brandSoft);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--brand) 35%,transparent)}
table.t tr.selr td{background:var(--brandSoft)}
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.cmp td,.cmp th{font-size:13px;vertical-align:top}
.cmp td:first-child{color:var(--text2);white-space:nowrap}
.inl{height:32px;padding:0 8px;border:1px solid var(--brand);border-radius:7px;width:100%;min-width:90px;background:var(--surface);outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 18%,transparent)}
.math{background:var(--surface2);border:1px solid var(--line);border-radius:10px;padding:11px 13px;font-size:13px;font-variant-numeric:tabular-nums;line-height:1.7;color:var(--text2)}
.math code{font-family:var(--mono);font-size:12.5px;color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:5px;padding:0 4px}
.mono{font-family:var(--mono);font-size:12.5px}

/* ---------- charts ---------- */
.chart svg{width:100%;height:auto;display:block;overflow:visible}
.chart-hit{cursor:pointer}
.chart-hit:hover{fill:var(--surface2)!important}
.chart-arc{transition:opacity .12s;cursor:default}
.chart-arc:hover{opacity:.75}
.chart-dot{transition:r .12s}
.chart-dot:hover{r:6}
.legend{display:flex;flex-wrap:wrap;gap:10px 16px;font-size:12px;color:var(--text2);margin-top:10px}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:10px;height:10px;border-radius:3px;display:inline-block}
.tip{position:fixed;z-index:90;pointer-events:none;background:var(--text);color:var(--surface);font-size:12px;font-weight:600;padding:6px 9px;border-radius:7px;box-shadow:var(--shadowMd);opacity:0;transform:translateY(4px);transition:opacity .1s,transform .1s;white-space:nowrap;font-variant-numeric:tabular-nums}
.tip.on{opacity:1;transform:none}

/* ---------- module pieces ---------- */
.datehead{font-size:11.5px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:18px 0 2px}
.datehead:first-child{margin-top:8px}
.acchead{font-size:11.5px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:18px 0 4px;display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}
.acchead .sharetag{text-transform:none;letter-spacing:0}
.paidline{font-size:12px;color:var(--good);font-weight:550;margin-top:4px}
.lesson{display:flex;align-items:center;gap:12px;padding:10px 8px;margin:0 -8px;border-top:1px solid var(--line);cursor:pointer;border-radius:8px}
.lesson:hover{background:var(--surface2)}
.lesson.lock{cursor:not-allowed}
.lesson .chk{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--line2);display:grid;place-items:center;flex-shrink:0;color:var(--muted)}
.lesson.done .chk{background:var(--good);border-color:var(--good);color:#fff}
.lock{opacity:.6}
.badge{text-align:center;padding:18px 10px}
.badge .medal{width:56px;height:56px;margin:0 auto 10px;border-radius:50%;display:grid;place-items:center;background:var(--surface2);color:var(--muted);border:1px dashed var(--line2)}
.badge:not(.earned) b{color:var(--muted)}
.badge.earned .medal{background:var(--warnSoft);color:var(--warn);border:1px solid color-mix(in srgb,var(--warn) 35%,transparent);box-shadow:0 0 0 4px color-mix(in srgb,var(--warn) 9%,transparent)}
.badges{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.badges .card+.card{margin-top:0}
.strip{display:flex;gap:4px;margin-top:12px}
.strip div{flex:1;text-align:center;font-size:10px;color:var(--muted)}
.strip b{display:block;height:24px;border-radius:5px;background:var(--surface3);margin-bottom:4px}
.strip .on b{background:var(--good)}
.proof{border-left:3px solid var(--warn);background:var(--warnSoft);border-radius:10px;padding:11px 13px;font-size:13px;margin:10px 0 14px;line-height:1.6}
.pc{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}
.pc div{background:var(--surface2);border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:13px}
.pc b{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px;color:var(--muted)}
.next{background:var(--goodSoft);border-left:3px solid var(--good);border-radius:10px;padding:11px 13px;font-size:13.5px;margin:14px 0}
.dz{border:1.5px dashed var(--line2);border-radius:12px;padding:22px;text-align:center;background:var(--surface2)}
.tag-dup{opacity:.5;text-decoration:line-through}
.banner{display:flex;gap:12px;align-items:center;padding:12px 14px;border-radius:12px;background:var(--brandSoft);border:1px solid color-mix(in srgb,var(--brand) 18%,transparent);color:var(--text);font-size:13.5px;margin-bottom:14px}
.banner.warn{background:var(--warnSoft);border-color:color-mix(in srgb,var(--warn) 25%,transparent)} .banner.warn .bico{color:var(--warn)}
.banner.good{background:var(--goodSoft);border-color:color-mix(in srgb,var(--good) 25%,transparent)} .banner.good .bico{color:var(--good)}
.banner.clickable:hover{border-color:var(--brand)}
.banner .grow{flex:1;min-width:0}
.bookchip{display:inline-flex;align-items:center;gap:7px;height:36px;border:1px solid var(--line2);background:var(--surface);border-radius:10px;padding:0 10px 0 9px;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;box-shadow:var(--shadow)}
.bookchip:hover{background:var(--surface2)}
.bookchip svg{color:var(--muted)}
.tswitch{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--text2);white-space:nowrap;cursor:pointer}
.tools .tswitch{height:36px;padding:0 11px;border:1px solid var(--line2);border-radius:10px;background:var(--surface);box-shadow:var(--shadow)}
.tswitch .switch{width:34px;height:20px}.tswitch .switch span:before{width:14px;height:14px}.tswitch .switch input:checked+span:before{transform:translateX(14px)}
.src{font-size:10.5px;font-weight:700;padding:1px 6px;border-radius:5px;background:var(--surface3);color:var(--text2);letter-spacing:.03em;text-transform:uppercase}
.src.feed{background:var(--goodSoft);color:var(--good)} .src.csv_import{background:var(--brandSoft);color:var(--brandInk)}
.sharetag{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:620;padding:2px 8px;border-radius:99px;background:var(--violetSoft);color:var(--violet);white-space:nowrap}
.sharetag.out{background:var(--surface3);color:var(--text2)}
.tiles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media(min-width:700px){.tiles{grid-template-columns:repeat(4,minmax(0,1fr))}}
.tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px;cursor:pointer;box-shadow:var(--shadow);transition:border-color .12s,box-shadow .12s,transform .12s}
.tile:hover{border-color:color-mix(in srgb,var(--brand) 50%,var(--line));box-shadow:var(--shadowMd);transform:translateY(-1px)}
.tile .ti{width:38px;height:38px;border-radius:10px;background:var(--brandSoft);color:var(--brandInk);display:grid;place-items:center;margin-bottom:12px}
.tile b{display:block;font-size:14.5px}
.tile span{font-size:12px;color:var(--muted)}
.grouplabel{font-size:11.5px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin:26px 0 10px}
.grouplabel:first-of-type{margin-top:6px}
.bulkbar{position:sticky;bottom:76px;z-index:15;display:flex;gap:8px;align-items:center;flex-wrap:wrap;background:var(--text);color:var(--surface);padding:10px 12px;border-radius:12px;margin-top:12px;box-shadow:var(--shadowLg)}
.bulkbar .btn{background:transparent;color:var(--surface);border-color:color-mix(in srgb,var(--surface) 30%,transparent);box-shadow:none}
.bulkbar .btn:hover{background:color-mix(in srgb,var(--surface) 12%,transparent)}
@media(min-width:900px){.bulkbar{bottom:16px}}
details.sec{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:10px;box-shadow:var(--shadow)}
details.sec summary{padding:15px 18px;font-weight:640;cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center}
details.sec summary::-webkit-details-marker{display:none}
details.sec summary::after{content:"";width:7px;height:7px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);margin-right:4px;transition:transform .15s}
details.sec[open] summary::after{transform:rotate(-135deg)}
details.sec .in{padding:0 18px 18px}
.avatar{width:36px;height:36px;border-radius:50%;background:var(--brandSoft);color:var(--brandInk);display:grid;place-items:center;font-weight:700;flex-shrink:0}

/* ---------- search palette & notifications ---------- */
.pal-in{display:flex;align-items:center;gap:10px;border:1px solid var(--line2);border-radius:11px;padding:0 12px;height:46px;background:var(--surface)}
.pal-in:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 18%,transparent)}
.pal-in input{border:0;outline:none;background:transparent;flex:1;height:100%;font-size:15px}
.pal-in svg{color:var(--muted)}
.pal-grp{font-size:11px;font-weight:650;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:14px 2px 4px}
.pal-item{display:flex;align-items:center;gap:11px;padding:8px 8px;border-radius:9px;cursor:pointer}
.pal-item .ico{width:30px;height:30px;border-radius:8px}
.pal-item.act,.pal-item:hover{background:var(--brandSoft)}
.pal-item .grow{flex:1;min-width:0}
.pal-item .title{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pal-foot{display:flex;gap:14px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:12px;color:var(--muted);flex-wrap:wrap}

/* ---------- modal / toast ---------- */
.scrim{position:fixed;inset:0;background:rgba(9,13,24,.5);backdrop-filter:blur(2px);z-index:50;display:flex;align-items:flex-end;justify-content:center;animation:fade .15s}
.sheet{background:var(--surface);width:100%;max-width:560px;max-height:92vh;overflow:auto;border-radius:20px 20px 0 0;padding:20px 20px calc(20px + env(safe-area-inset-bottom));animation:up .22s cubic-bezier(.2,.8,.2,1);box-shadow:var(--shadowLg)}
.sheet.wide{max-width:640px}
.sheet .grab{width:40px;height:4px;border-radius:9px;background:var(--line2);margin:-6px auto 14px}
.sheethead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.sheethead h2{font-size:17px}
.sheet .card{box-shadow:none}
@media(min-width:700px){.scrim{align-items:center;padding:24px}.scrim.top{align-items:flex-start;padding-top:12vh}.sheet{border-radius:18px}.sheet .grab{display:none}}
@keyframes up{from{transform:translateY(24px);opacity:0}}
@keyframes fade{from{opacity:0}}
.toast{position:fixed;left:50%;bottom:92px;transform:translateX(-50%);display:flex;align-items:center;gap:14px;background:var(--text);color:var(--surface);padding:10px 12px 10px 16px;border-radius:11px;font-weight:600;font-size:13.5px;z-index:60;box-shadow:var(--shadowLg);animation:fade .18s;max-width:calc(100vw - 32px)}
.toast button{border:0;background:color-mix(in srgb,var(--surface) 16%,transparent);color:var(--surface);font-weight:700;padding:5px 11px;border-radius:7px;cursor:pointer}
.toast button:hover{background:color-mix(in srgb,var(--surface) 26%,transparent)}
.toast:not(:has(button)){padding-right:16px}
@media(min-width:900px){.toast{bottom:28px}}
.mockbadge-unused{position:fixed;bottom:14px;right:16px;z-index:70;font-size:10.5px;font-weight:700;letter-spacing:.02em;background:var(--warnSoft);color:var(--warn);border:1px solid color-mix(in srgb,var(--warn) 30%,transparent);padding:3px 9px;border-radius:99px;pointer-events:none}
@media(max-width:899px){.mockbadge-unused{position:absolute;top:8px;bottom:auto;right:12px}.main{padding-top:38px}}
.login{min-height:100vh;display:grid;place-items:center;padding:24px;background:var(--bg);background-image:radial-gradient(circle at 1px 1px,var(--line2) 1px,transparent 0);background-size:22px 22px}
.login .box{width:100%;max-width:400px}
.login .card{padding:28px;box-shadow:var(--shadowMd)}
.login h1{font-size:22px}
.hide-sm{display:none} @media(min-width:900px){.hide-sm{display:inline}}
@media(max-width:899px){h1{font-size:21px}.card{padding:16px}}
@media(max-width:520px){.stat .value{font-size:19px}.g3{gap:8px}.pc{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------- PHP build additions (links styled as the v2 buttons) ---------- */
a.btn,a.iconbtn,a.bookchip,a.tswitch,a.chip,a.tile,.seg a,.tabbar a,.side .nav a{text-decoration:none}
a.btn{color:var(--text)} a.btn.primary{color:#fff} a.btn.ghost{color:var(--brandInk)} a.btn.danger{color:var(--bad)}
a.btn:hover,a.iconbtn:hover,a.bookchip:hover,.side .nav a:hover{text-decoration:none}
a.iconbtn,a.bookchip{color:var(--text)}
.tabbar a{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:11px;font-weight:560;color:var(--muted);padding:6px 8px;border-radius:12px;min-width:62px;min-height:48px}
.tabbar a.on{color:var(--brandInk)}
@media (min-width:900px){
  .side .nav a{display:flex;align-items:center;gap:11px;padding:0 10px;height:36px;border-radius:9px;color:var(--text2);font-weight:520;font-size:14px;width:100%}
  .side .nav a svg{color:var(--muted)}
  .side .nav a span{flex:1}
  .side .nav a:hover{background:var(--surface2);color:var(--text)}
  .side .nav a.on{background:var(--brandSoft);color:var(--brandInk);font-weight:620}
  .side .nav a.on svg{color:var(--brandInk)}
}
.seg a,.seg .segbtn{display:inline-flex;align-items:center;justify-content:center;padding:0 12px;height:30px;border-radius:8px;font-weight:600;font-size:13px;color:var(--muted);cursor:pointer;white-space:nowrap;flex:1}
.seg a:hover,.seg .segbtn:hover{color:var(--text)}
.seg a.on,.seg .segbtn.on{background:var(--surface);color:var(--text);box-shadow:0 1px 2px rgba(15,23,41,.1),0 0 0 1px var(--line)}
.seg input:focus-visible+.segbtn{outline:2px solid var(--brand);outline-offset:2px}
.tswitch{color:var(--text2)} a.tswitch:hover{color:var(--text)}
.tswitch .switch input:disabled+span{cursor:pointer}
.chip{display:inline-flex;align-items:center}
.topbar .util{flex-shrink:0}
.toast form{margin:0} .toast form button{border:0;background:color-mix(in srgb,var(--surface) 16%,transparent);color:var(--surface);font-weight:700;padding:5px 11px;border-radius:7px;cursor:pointer}
.cw-narrow{display:none}
@media(max-width:699px){.cw-wide{display:none}.cw-narrow{display:block}}
a.banner{display:flex}
.article p{margin:0 0 12px;line-height:1.65}
.lesson{color:inherit}
[hidden]{display:none!important}
.chart-hit:focus-visible{outline:none;fill:var(--brandSoft)!important}
.list > a.item.clickable{margin:0 -10px;padding:12px 10px;border-radius:10px}
.list > a.item.clickable:hover{background:var(--surface2)}
details.sec summary:focus-visible{outline:2px solid var(--brand);outline-offset:-2px;border-radius:var(--radius)}
@media print{.side,.tabbar,.tools,.util,.toast{display:none!important}.main{padding:0}}
