/* Base styles from design/concept-d-workbench.html (Concept D — Workbench). */
:root{
  --bg:#f7f7f5;
  --panel:#ffffff;
  --line:#e4e4e0;
  --line-2:#d0d0cb;
  --ink:#1c1e26;
  --ink-2:#5b5e6b;
  --ink-3:#9a9da8;
  --brand:#4f46e5;
  --brand-soft:#eef0fd;
  --brand-line:#c7cbf5;
  --astro:#7c3aed;
  --astro-soft:#f3eefe;
  --phy:#0e7490;
  --phy-soft:#e6f6fa;
  --ok:#16a34a;
  --ok-soft:#e9f9ef;
  --sh:0 1px 2px rgba(28,30,38,.05), 0 4px 16px -8px rgba(28,30,38,.08);
  --sh-hover:0 1px 2px rgba(28,30,38,.06), 0 10px 28px -10px rgba(28,30,38,.16);
}
*{box-sizing:border-box;margin:0}
html{scroll-behavior:smooth}
body{
  font-family:"Inter","Segoe UI",system-ui,sans-serif;
  background:var(--bg);color:var(--ink);line-height:1.5;
  font-size:14px;
}
a{color:inherit;text-decoration:none}

/* ---------- top bar ---------- */
.top{
  background:rgba(255,255,255,.85);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);
  position:sticky;top:0;z-index:20;
}
.top-in{max-width:1280px;margin:0 auto;display:flex;align-items:center;gap:16px;padding:10px 20px}
.mark{
  width:30px;height:30px;border-radius:8px;flex:none;
  background:conic-gradient(from 220deg,#4f46e5,#7c3aed,#0e7490,#4f46e5);
  display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:15px;
}
.crumb{font-size:13.5px;color:var(--ink-3);white-space:nowrap}
.crumb b{color:var(--ink);font-weight:600}
.searchbar{
  flex:1;max-width:520px;display:flex;align-items:center;gap:8px;
  border:1px solid var(--line);border-radius:8px;background:var(--panel);
  padding:0 12px;color:var(--ink-3);font-size:13.5px;
}
.searchbar input{
  flex:1;border:none;outline:none;background:none;font:inherit;color:var(--ink);
  padding:8px 0;
}
.kbd{
  margin-left:auto;font-size:11px;color:var(--ink-3);
  border:1px solid var(--line);border-radius:4px;padding:1px 5px;background:var(--bg);
}
.top-actions{margin-left:auto;display:flex;gap:8px;align-items:center}

/* ---------- layout ---------- */
.shell{max-width:1280px;margin:0 auto;display:flex;gap:28px;padding:24px 20px 120px}

/* sidebar */
aside{flex:0 0 220px;position:sticky;top:76px;align-self:flex-start;font-size:13.5px}
.fgroup{margin-bottom:22px}
.fgroup h4{
  font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);
  margin-bottom:8px;font-weight:600;
}
.frow{
  display:flex;align-items:center;gap:8px;padding:5px 8px;margin:0 -8px;
  border-radius:6px;color:var(--ink-2);cursor:pointer;
}
.frow:hover{background:#efeff3}
.frow.on{color:var(--brand);background:var(--brand-soft);font-weight:600}
.frow .n{margin-left:auto;font-size:11.5px;color:var(--ink-3)}
.box{width:14px;height:14px;border:1.5px solid var(--line-2);border-radius:4px;flex:none}
.frow.on .box{background:var(--brand);border-color:var(--brand);position:relative}
.frow.on .box::after{content:"✓";position:absolute;inset:-3px 0 0 1px;color:#fff;font-size:10px}
.yr{display:flex;gap:8px;align-items:center;color:var(--ink-2)}
.yr input{width:64px;border:1px solid var(--line);border-radius:6px;padding:5px 8px;font:inherit;text-align:center}

/* main column */
section{flex:1;min-width:0}
.listhead{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.listhead h1{font-size:18px;font-weight:700}
.listhead .cnt{color:var(--ink-3);font-size:13px}

.stack{display:flex;flex-direction:column;gap:12px}

/* ---------- problem panel ---------- */
.p{
  background:var(--panel);border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--sh);
  padding:16px 18px 0;
  display:flex;flex-direction:column;
  transition:box-shadow .18s, border-color .18s;
}
.p:hover{box-shadow:var(--sh-hover);border-color:var(--line-2)}
.chip{
  font-size:12px;font-weight:500;border-radius:6px;padding:3px 9px;
  background:var(--bg);color:var(--ink-2);border:1px solid var(--line);
}
.chip.astro{background:var(--astro-soft);color:var(--astro);border-color:transparent;font-weight:600}
.chip.phy{background:var(--phy-soft);color:var(--phy);border-color:transparent;font-weight:600}
.chip.stage{background:var(--brand-soft);color:var(--brand);border-color:transparent}
.st{color:var(--ink-2);font-size:13.5px;line-height:1.6}

@media (max-width:860px){aside{display:none}}

/* checked state via :has (falls back to server-rendered .on class) */
.frow input[type=checkbox]{display:none}
.frow:has(input:checked){color:var(--brand);background:var(--brand-soft);font-weight:600}
.frow:has(input:checked) .box{background:var(--brand);border-color:var(--brand);position:relative}
.frow:has(input:checked) .box::after{content:"✓";position:absolute;inset:-3px 0 0 1px;color:#fff;font-size:10px}
.frow .tname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}

.sort{
  margin-left:auto;font-size:13px;color:var(--ink-2);
  border:1px solid var(--line);border-radius:7px;background:var(--panel);padding:6px 12px;cursor:pointer;
  font-family:inherit;
}

/* ---------- card internals ---------- */
.p-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.p-top .id{margin-left:auto;font-size:11.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.p.selected{border-color:var(--brand-line);background:linear-gradient(180deg,#fdfdff,#fff)}

.p-mid{display:flex;gap:18px;flex:1;min-height:0}
.p-text{flex:1;min-width:0}
.p-text h3{font-size:15.5px;font-weight:650;margin-bottom:5px;letter-spacing:-.005em}
.p-text h3 .num{color:var(--ink-3);font-weight:500;margin-right:6px}
.p-text h3 a:hover{color:var(--brand)}
.p .st{overflow:hidden;position:relative}
.p:not(.open) .st{max-height:6.4em}
.p:not(.open) .st::after{content:"";position:absolute;inset:auto 0 0 0;height:2em;background:linear-gradient(transparent,var(--panel))}
.p.selected:not(.open) .st::after{background:linear-gradient(transparent,#fdfdff)}
.p .st img{display:none} /* inline figures are shown as thumbnails instead */
.st p{margin-bottom:.5em}
.st p:last-child{margin-bottom:0}

.p-figs{flex:0 0 auto;display:flex;flex-direction:column;gap:6px}
.f{
  width:104px;height:72px;border:1px solid var(--line);border-radius:8px;overflow:hidden;
  background:#fff;cursor:zoom-in;position:relative;transition:transform .15s;
}
.f:hover{transform:scale(1.05)}
.f img{width:100%;height:100%;object-fit:contain;display:block}
.f .more-n{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  background:rgba(28,30,38,.55);color:#fff;font-weight:600;font-size:13px;pointer-events:none;
}

.p-bot{
  display:flex;align-items:center;gap:6px;flex-wrap:wrap;
  border-top:1px solid var(--line);
  margin:12px -18px 0;padding:8px 12px;
}
.tagchip{font-size:12px;color:var(--ink-3);padding:3px 8px;border-radius:99px}
.flags{margin-left:auto;display:flex;gap:6px;align-items:center}
.flag{
  font-size:11.5px;font-weight:600;border-radius:6px;padding:3px 8px;
  background:var(--ok-soft);color:var(--ok);
}
.ib{
  border:none;background:none;color:var(--ink-3);cursor:pointer;font-size:13px;
  border-radius:7px;padding:6px 10px;font-family:inherit;
}
.ib:hover{background:var(--bg);color:var(--ink)}
.addb{
  display:flex;align-items:center;gap:6px;
  border:1px solid var(--line-2);background:var(--panel);color:var(--ink);
  border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600;cursor:pointer;
  transition:all .15s;font-family:inherit;
}
.addb:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}
.addb.added{background:var(--brand);border-color:var(--brand);color:#fff}

/* ---------- pager ---------- */
.pager{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:22px;font-size:13.5px}
.pbtn{
  border:1px solid var(--line);border-radius:8px;background:var(--panel);
  padding:7px 14px;color:var(--ink-2);font-weight:500;
}
.pbtn:hover{border-color:var(--brand);color:var(--brand)}
.pinfo{color:var(--ink-3)}

/* ---------- bottom tray ---------- */
.tray{
  position:fixed;left:50%;bottom:18px;transform:translateX(-50%) translateY(140%);
  width:min(860px,calc(100% - 32px));
  background:#1c1e26;color:#fff;border-radius:14px;
  box-shadow:0 20px 50px -12px rgba(28,30,38,.5);
  display:flex;align-items:center;gap:14px;padding:12px 16px;
  transition:transform .3s cubic-bezier(.2,.9,.3,1.1);z-index:30;
}
.tray.show{transform:translateX(-50%) translateY(0)}
.tray .tn{font-size:13px;color:#b9bcc7;white-space:nowrap}
.tray .tn b{color:#fff;font-size:15px}
.tray-chips{flex:1;display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}
.tchip{
  flex:none;font-size:12px;background:#2b2e3a;border-radius:7px;padding:5px 10px;
  display:flex;gap:7px;align-items:center;
}
.tchip i{font-style:normal;cursor:pointer;color:#8a8d99}
.tchip i:hover{color:#fff}
.tray .go{
  flex:none;background:var(--brand);color:#fff;border:none;border-radius:9px;
  padding:9px 18px;font-weight:600;font-size:13.5px;cursor:pointer;font-family:inherit;
}
.tray .go:hover{filter:brightness(1.12)}

/* ---------- lightbox ---------- */
.lightbox{
  position:fixed;inset:0;background:rgba(28,30,38,.85);z-index:50;
  display:flex;align-items:center;justify-content:center;cursor:zoom-out;
}
.lightbox img{max-width:92vw;max-height:92vh;border-radius:8px;background:#fff}
.lightbox[hidden]{display:none}

/* KaTeX sizing inside cards */
.katex{font-size:1.05em}

/* ---------- problem page ---------- */
.pv{max-width:840px;margin:0 auto}
.pv .p{padding:22px 26px 0}
.pv .p .st{max-height:none}
.pv .p .st::after{display:none}
.pv-title{font-size:20px;font-weight:700;letter-spacing:-.01em;margin-bottom:4px}
.pv-title .num{color:var(--ink-3);font-weight:500;margin-right:8px}
.pv-author{color:var(--ink-3);font-size:12.5px;margin-bottom:14px}
.prose{color:var(--ink-2);font-size:14.5px;line-height:1.7}
.prose p{margin-bottom:.7em}
.prose img{max-width:min(100%,520px);display:block;margin:12px auto;border:1px solid var(--line);border-radius:8px;cursor:zoom-in;background:#fff}
.prose table{border-collapse:collapse;margin:12px 0}
.prose td,.prose th{border:1px solid var(--line);padding:5px 10px;font-size:13.5px}
.figgrid{display:flex;flex-wrap:wrap;gap:10px;margin:14px 0}
.figgrid img{max-width:240px;max-height:180px;border:1px solid var(--line);border-radius:8px;cursor:zoom-in;background:#fff}
.spoiler{
  border:1px solid var(--line);border-radius:10px;background:var(--bg);
  margin:14px 0;overflow:hidden;
}
.spoiler summary{
  cursor:pointer;font-weight:600;font-size:13.5px;color:var(--ink-2);
  padding:11px 16px;list-style:none;user-select:none;
}
.spoiler summary::before{content:"▸ ";color:var(--ink-3)}
.spoiler[open] summary::before{content:"▾ "}
.spoiler summary:hover{color:var(--brand)}
.spoiler > .prose,.spoiler > .figgrid{padding:0 16px;background:var(--panel)}
.spoiler > .prose{padding-top:12px}
.spoiler > *:last-child{padding-bottom:12px;margin-bottom:0}
.pv .p-bot{margin-top:16px}

/* ---------- list page ---------- */
.list-actions{margin-left:auto;display:flex;gap:8px}
.list-actions .pbtn{cursor:pointer;font-family:inherit;font-size:13px;background:var(--panel)}
#savedlists{margin-top:26px}
#savedlists h3{font-size:13px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
.saved-row{
  display:flex;align-items:center;gap:10px;padding:9px 14px;margin-bottom:6px;
  background:var(--panel);border:1px solid var(--line);border-radius:9px;font-size:13.5px;
}
.saved-row a{font-weight:600}
.saved-row a:hover{color:var(--brand)}
.saved-row .n{color:var(--ink-3);font-size:12px}
.saved-row i{margin-left:auto;font-style:normal;color:var(--ink-3);cursor:pointer;padding:2px 6px}
.saved-row i:hover{color:var(--ink)}

/* ---------- print ---------- */
.print-head{display:none}
@media print{
  .top,.tray,aside,.noprint,.p-bot,.expand,.addb,.ib{display:none !important}
  .print-head{display:block;margin-bottom:18px;border-bottom:1px solid #000;padding-bottom:8px}
  .print-head h1{font-size:16px}
  body{background:#fff;font-size:12.5pt}
  .shell{padding:0;display:block;max-width:none}
  .pv{max-width:none}
  .p{border:none;box-shadow:none;border-radius:0;padding:0;margin-bottom:18px;break-inside:avoid-page}
  .stack{gap:0}
  .p+.p{border-top:1px solid #ccc;padding-top:14px}
  .spoiler{border:none;background:none;margin:8px 0}
  .spoiler summary{padding:0;font-weight:700}
  .spoiler summary::before{content:""}
  .spoiler[open] summary::before{content:""}
  .spoiler > .prose,.spoiler > .figgrid{padding:0}
  .prose{color:#000}
  .st{color:#000}
}

/* ---------- forms (editor, suggest, login) ---------- */
.frm-panel{padding:22px 26px 22px}
.frm-panel form{display:flex;flex-direction:column;gap:12px}
.frm-note{color:var(--ink-3);font-size:12.5px;margin:4px 0 10px}
.frm-error{background:#fdecec;color:#b42318;border:1px solid #f5c6c0;border-radius:8px;padding:9px 14px;font-size:13.5px;margin-bottom:10px}
.frm-ok{background:var(--ok-soft);color:var(--ok);border-radius:8px;padding:9px 14px;font-size:13.5px;margin-bottom:10px}
.frm-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.fld{display:flex;flex-direction:column;gap:4px;font-size:12.5px;color:var(--ink-2)}
.fld span{font-weight:600;font-size:11.5px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.04em}
.fld input,.fld select,.fld textarea{
  border:1px solid var(--line-2);border-radius:8px;padding:8px 10px;font:inherit;
  font-size:13.5px;color:var(--ink);background:var(--panel);
}
.fld textarea{resize:vertical;line-height:1.5;font-family:ui-monospace,"Cascadia Code",Consolas,monospace;font-size:13px}
.fld input:focus,.fld select:focus,.fld textarea:focus{outline:2px solid var(--brand-line);border-color:var(--brand)}
.fld-wide{grid-column:1/-1}
.hp{position:absolute;left:-9999px;top:-9999px}
.frm-actions{display:flex;gap:10px;margin-top:6px}
.btn{
  display:inline-flex;align-items:center;gap:6px;cursor:pointer;
  border:1px solid var(--line-2);background:var(--panel);color:var(--ink);
  border-radius:8px;padding:8px 16px;font-size:13.5px;font-weight:600;font-family:inherit;
}
.btn:hover{border-color:var(--brand);color:var(--brand)}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.primary:hover{filter:brightness(1.1);color:#fff}
.btn.danger:hover{border-color:#b42318;color:#b42318}
.btn:disabled{opacity:.5;cursor:not-allowed}

/* live preview panes */
.pvw{display:none;border:1px dashed var(--line-2);border-radius:8px;padding:12px 14px;background:var(--bg)}
.pvw.show{display:block}
.pvw-toggle{align-self:flex-start;margin-top:-6px}

/* ---------- admin ---------- */
.admin-nav{
  display:flex;align-items:center;gap:4px;margin-bottom:18px;flex-wrap:wrap;
  background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:6px 10px;
}
.admin-nav a{padding:6px 10px;border-radius:7px;font-size:13.5px;font-weight:500;color:var(--ink-2)}
.admin-nav a:hover{background:var(--bg);color:var(--ink)}
.admin-nav form{margin-left:auto}
.badge{
  display:inline-block;background:var(--brand);color:#fff;border-radius:99px;
  font-size:11px;font-weight:700;padding:1px 7px;vertical-align:1px;
}
.tabs{display:flex;gap:4px;margin-bottom:14px;flex-wrap:wrap}
.tab{
  padding:6px 12px;border-radius:8px;font-size:13px;color:var(--ink-2);
  border:1px solid transparent;
}
.tab:hover{background:var(--panel)}
.tab.on{background:var(--brand-soft);color:var(--brand);font-weight:600}
.tab .n{color:var(--ink-3);font-size:11.5px}
.tab.on .n{color:var(--brand)}
.admin-search{display:flex;gap:8px;margin-bottom:14px;max-width:480px}
.admin-search input{
  flex:1;border:1px solid var(--line-2);border-radius:8px;padding:8px 12px;font:inherit;font-size:13.5px;
}
.admin-tablewrap{overflow-x:auto;background:var(--panel);border:1px solid var(--line);border-radius:12px}
.admin-table{width:100%;border-collapse:collapse;font-size:13px}
.admin-table th{
  text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.05em;
  color:var(--ink-3);padding:10px 12px;border-bottom:1px solid var(--line);
}
.admin-table td{padding:8px 12px;border-bottom:1px solid var(--line);vertical-align:top}
.admin-table tr:last-child td{border-bottom:none}
.admin-table .t-title a{font-weight:550}
.admin-table .t-title a:hover{color:var(--brand)}
.admin-table .t-dim{color:var(--ink-3);font-size:12px;white-space:nowrap}
.status{font-size:11.5px;font-weight:600;border-radius:6px;padding:2px 7px;background:var(--bg);color:var(--ink-2)}
.status.s-ok,.status.s-approved,.status.s-fixed{background:var(--ok-soft);color:var(--ok)}
.status.s-pending{background:#fef4e6;color:#b45309}
.status.s-unusable,.status.s-rejected{background:#fdecec;color:#b42318}
.status.s-flag{background:#fef4e6;color:#b45309}

/* proposal diff */
.diff-head{display:grid;grid-template-columns:1fr 1fr;gap:12px;font-size:11.5px;font-weight:700;
  text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);margin:14px 0 6px}
.diff-field h3{font-size:13px;margin:12px 0 6px;color:var(--ink)}
.diff-cols{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.diff-cols pre{
  white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,Consolas,monospace;
  font-size:12.5px;line-height:1.55;border-radius:8px;padding:10px 12px;margin:0;
}
.diff-cols .old{background:#fdf1f0;border:1px solid #f5d5d0}
.diff-cols .new{background:#eefaf1;border:1px solid #cbe8d2}

/* admin images */
.img-row{display:flex;align-items:center;gap:14px;padding:10px 0;border-bottom:1px solid var(--line)}
.img-row img{max-width:140px;max-height:90px;border:1px solid var(--line);border-radius:6px;background:#fff}
.img-row form{display:flex;gap:8px;align-items:center}
.img-row select,.img-row input{border:1px solid var(--line-2);border-radius:7px;padding:6px 8px;font:inherit;font-size:13px}
.img-row input{width:56px;text-align:center}
.img-upload{display:flex;gap:10px;align-items:center;margin-top:14px;flex-wrap:wrap}
.img-upload select{border:1px solid var(--line-2);border-radius:7px;padding:7px 8px;font:inherit;font-size:13px}

@media (max-width:700px){.frm-grid{grid-template-columns:1fr 1fr}.diff-cols,.diff-head{grid-template-columns:1fr}}

/* ---------- UI refinements ---------- */
/* sidebar scrolls independently of the problem list */
aside{max-height:calc(100vh - 100px);overflow-y:auto;overscroll-behavior:contain;
  scrollbar-width:thin;padding-right:4px}

/* subject dropdown */
.dd summary{
  list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;
  border:1px solid var(--line-2);border-radius:8px;background:var(--panel);
  padding:8px 12px;font-size:13.5px;font-weight:600;color:var(--ink);user-select:none;
}
.dd summary::-webkit-details-marker{display:none}
.dd summary:hover{border-color:var(--brand);color:var(--brand)}
.dd-arrow{margin-left:auto;color:var(--ink-3);font-size:11px}
.dd[open] .dd-arrow{transform:rotate(180deg)}
.dd-list{
  margin-top:6px;border:1px solid var(--line);border-radius:9px;background:var(--panel);
  padding:6px 8px;box-shadow:var(--sh);
}
.dd-list .frow{margin:0}
.frow input[type=radio]{display:none}
.dot{width:14px;height:14px;border:1.5px solid var(--line-2);border-radius:50%;flex:none}
.frow:has(input[type=radio]:checked){color:var(--brand);background:var(--brand-soft);font-weight:600}
.frow:has(input[type=radio]:checked) .dot{border-color:var(--brand);background:radial-gradient(circle at center,var(--brand) 0 45%,transparent 50%)}

/* per-parameter chip colours */
.chip.grade{background:var(--phy-soft);color:var(--phy);border-color:transparent;font-weight:600}
.chip.type{background:#fef4e6;color:#b45309;border-color:transparent;font-weight:600}

/* coloured topic chips (stable colour per topic via tc0…tc4) */
.tagchip{font-weight:600;padding:3px 10px}
.tagchip.tc0{background:#f3eefe;color:#7c3aed}
.tagchip.tc1{background:#e6f6fa;color:#0e7490}
.tagchip.tc2{background:#fdeef4;color:#be185d}
.tagchip.tc3{background:#e9f9ef;color:#15803d}
.tagchip.tc4{background:#fef4e6;color:#b45309}

/* topics live in the card header, right-aligned; ID only when expanded */
.p-tags{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.p-top .id{margin-left:0}
.p:not(.open) .p-top .id{display:none}

/* ---------- refinement round 2 ---------- */
/* sidebar: no horizontal scroll, invisible scrollbar, wrapping topic labels */
aside{overflow-x:hidden;scrollbar-width:none;padding-right:0}
aside::-webkit-scrollbar{display:none}
.frow{align-items:flex-start}
.frow .box,.frow .dot{margin-top:3px}
.frow .tname{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.35}
.frow .n{flex:none;margin-top:2px}

/* subject selector as a design element with a soft spectrum */
.dd summary{
  border:none;color:var(--ink);font-weight:700;letter-spacing:-.005em;
  background:linear-gradient(105deg,#eef0fd 0%,#f3eefe 38%,#e6f6fa 72%,#e9f9ef 100%);
  box-shadow:inset 0 0 0 1px rgba(79,70,229,.12);
}
.dd summary:hover{color:var(--brand);box-shadow:inset 0 0 0 1px rgba(79,70,229,.35)}

/* tray: compact card pinned top-right */
.tray{
  left:auto;right:18px;bottom:auto;top:70px;
  width:290px;transform:translateX(120%);
  flex-direction:column;align-items:stretch;gap:10px;
  border-radius:12px;padding:14px 16px;
}
.tray.show{transform:translateX(0)}
.tray .tn{font-size:13px}
.tray-chips{flex-wrap:wrap;overflow:visible}
.tray .go{text-align:center}

/* card footer: Открыть prominent left, Развернуть centered */
.openb{
  display:flex;align-items:center;gap:6px;
  border:1px solid var(--brand-line);background:var(--brand-soft);color:var(--brand);
  border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600;
  transition:all .15s;
}
.openb:hover{background:var(--brand);border-color:var(--brand);color:#fff}
.p-bot .expand{margin-left:auto;margin-right:auto}
.p-bot .flags{margin-left:0}

/* collapsed cards show a decent chunk of text; no clamp needed when it fits */
.p:not(.open) .st{max-height:26em}
.p.fits .st::after{display:none}
.p.fits .expand{visibility:hidden}

/* year chip colour (stage and year are separate parameters) */
.chip.year{background:#fdeef4;color:#be185d;border-color:transparent;font-weight:600}

/* admin filter pills */
.admin-filters{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px;position:relative}
.admin-filters .dd{position:relative}
.admin-filters .dd summary{padding:7px 12px;font-size:13px;font-weight:600;min-width:110px}
.admin-filters .dd-list{position:absolute;z-index:15;min-width:200px;top:calc(100% + 4px)}
.admin-filters .yr input{width:74px;border:1px solid var(--line-2);border-radius:7px;padding:7px 8px;font:inherit;font-size:13px;text-align:center}
.admin-q{flex:1;min-width:180px;border:1px solid var(--line-2);border-radius:8px;padding:8px 12px;font:inherit;font-size:13.5px}

/* clickable, fully highlighted admin rows; sortable headers */
.admin-table thead a{display:inline-block;padding:0;color:var(--ink-3)}
.admin-table thead a:hover{color:var(--brand)}
.admin-table tbody tr[data-href]{cursor:pointer;transition:background .1s}
.admin-table tbody tr[data-href]:hover{background:var(--brand-soft)}
.admin-table tbody tr[data-href]:hover td{color:var(--ink)}

/* ---------- batch: active chips, views, histogram, drawer, admin bulk, diff, dark ---------- */

/* active filter chips */
.fchips{display:flex;gap:6px;flex-wrap:wrap;margin:-4px 0 14px}
.fchip{
  display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;
  background:var(--brand-soft);color:var(--brand);border-radius:99px;padding:4px 12px;
}
.fchip i{font-style:normal;opacity:.55}
.fchip:hover{background:var(--brand);color:#fff}
.fchip.clear{background:transparent;color:var(--ink-3);border:1px dashed var(--line-2)}
.fchip.clear:hover{color:#b42318;border-color:#b42318;background:transparent}

/* search highlight */
mark{background:#fde68a;color:inherit;border-radius:3px;padding:0 1px}

/* view toggle */
.view-toggle{display:flex;border:1px solid var(--line);border-radius:7px;overflow:hidden}
.view-toggle a{padding:6px 10px;background:var(--panel);color:var(--ink-3);font-size:13px}
.view-toggle a.on{background:var(--brand-soft);color:var(--brand)}

/* grid view: compact cards without statements */
.stack.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));align-items:start}
.stack.grid .p .st,.stack.grid .p-figs,.stack.grid .expand{display:none}
.stack.grid .p-text h3{font-size:14px}

/* year histogram */
.histo{
  display:flex;align-items:flex-end;gap:1px;height:44px;margin-bottom:8px;
  padding:2px;border-radius:6px;background:var(--panel);border:1px solid var(--line);
}
.histo .hbar{flex:1;min-width:2px;background:var(--line-2);border-radius:1px;cursor:pointer;min-height:1px}
.histo .hbar.in{background:var(--brand-line)}
.histo .hbar:hover{background:var(--brand)}

/* mobile filters drawer */
.filters-toggle{display:none}
.drawer-backdrop{display:none}
@media (max-width:860px){
  .filters-toggle{display:inline-block;border:1px solid var(--line-2);border-radius:8px;background:var(--panel)}
  aside{
    display:block;position:fixed;top:0;left:0;bottom:0;width:290px;max-height:none;
    background:var(--panel);z-index:45;transform:translateX(-105%);transition:transform .25s;
    padding:18px 16px;overflow-y:auto;box-shadow:0 0 40px rgba(28,30,38,.25);
  }
  body.drawer-open aside{transform:none}
  .drawer-backdrop{position:fixed;inset:0;background:rgba(28,30,38,.4);z-index:44}
  body.drawer-open .drawer-backdrop{display:block}
}

/* admin bulk bar + checkbox cells */
.bulkbar{display:flex;gap:10px;align-items:center;margin-bottom:10px;font-size:13px;color:var(--ink-2)}
.bulkbar select{border:1px solid var(--line-2);border-radius:7px;padding:7px 8px;font:inherit;font-size:13px}
.bulk-all{display:flex;gap:6px;align-items:center;cursor:pointer}
.admin-table .cbcell{width:34px;text-align:center}
.admin-table td.cbcell input{cursor:pointer}

/* git-style unified diff */
.udiff{
  border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--panel);
  font-family:ui-monospace,Consolas,monospace;font-size:12.5px;line-height:1.55;
}
.udiff .dl{display:flex;white-space:pre-wrap;word-break:break-word;padding:1px 8px}
.udiff .dl .m{flex:none;width:16px;color:var(--ink-3);user-select:none}
.udiff .dl.del{background:#fdf1f0;color:#8f2016}
.udiff .dl.del .m{color:#b42318}
.udiff .dl.add{background:#eefaf1;color:#135e28}
.udiff .dl.add .m{color:#15803d}
.rcols{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.rcols .prose{border:1px solid var(--line);border-radius:8px;padding:10px 14px;background:var(--panel);font-size:13px}
.rcols .rold{border-color:#f5d5d0}
.rcols .rnew{border-color:#cbe8d2}
@media (max-width:700px){.rcols{grid-template-columns:1fr}}

/* print header meta */
.print-head p{font-size:11px;color:#444;margin-top:2px}

/* ---------- dark theme ---------- */
@media (prefers-color-scheme:dark){
  :root{
    --bg:#14161d;
    --panel:#1c1f29;
    --line:#2a2e3b;
    --line-2:#3a3f50;
    --ink:#e7e8ee;
    --ink-2:#b4b7c4;
    --ink-3:#7c8093;
    --brand:#818cf8;
    --brand-soft:#26293f;
    --brand-line:#4348a8;
    --astro-soft:#2d2440;
    --phy-soft:#12333d;
    --ok:#4ade80;
    --ok-soft:#173327;
    --sh:0 1px 2px rgba(0,0,0,.4), 0 4px 16px -8px rgba(0,0,0,.5);
    --sh-hover:0 1px 2px rgba(0,0,0,.5), 0 10px 28px -10px rgba(0,0,0,.6);
  }
  .top{background:rgba(20,22,29,.85)}
  .frow:hover{background:#232633}
  .p.selected{background:var(--panel)}
  .p:not(.open) .st::after{background:linear-gradient(transparent,var(--panel))}
  .p.selected:not(.open) .st::after{background:linear-gradient(transparent,var(--panel))}
  .chip.type{background:#3a2a12;color:#fbbf24}
  .chip.year{background:#3b1a2b;color:#f472b6}
  .chip.grade{background:#12333d;color:#38bdf8}
  .tagchip.tc0{background:#2d2440;color:#c4b5fd}
  .tagchip.tc1{background:#12333d;color:#67e8f9}
  .tagchip.tc2{background:#3b1a2b;color:#f9a8d4}
  .tagchip.tc3{background:#173327;color:#86efac}
  .tagchip.tc4{background:#3a2a12;color:#fcd34d}
  .status.s-pending,.status.s-flag{background:#3a2a12;color:#fbbf24}
  .status.s-unusable,.status.s-rejected{background:#3d1a1a;color:#f87171}
  .frm-error{background:#3d1a1a;color:#fca5a5;border-color:#5c2626}
  .dd summary{
    background:linear-gradient(105deg,#26293f 0%,#2d2440 38%,#12333d 72%,#173327 100%);
    box-shadow:inset 0 0 0 1px rgba(129,140,248,.2);
  }
  .udiff .dl.del{background:#33201e;color:#f0b3ab}
  .udiff .dl.add{background:#16301f;color:#a3e2b4}
  .rcols .rold{border-color:#5c2626}
  .rcols .rnew{border-color:#1d4a2a}
  .diff-cols .old{background:#33201e;border-color:#5c2626}
  .diff-cols .new{background:#16301f;border-color:#1d4a2a}
  mark{background:#78560a;color:#fde68a}
  .f,.prose img,.img-row img{background:#fff} /* scans stay on white */
  .histo .hbar:hover{background:var(--brand)}
  .searchbar input{color:var(--ink)}
  .lightbox img{background:#fff}
}

.saved-empty{color:var(--ink-3);font-size:12.5px;line-height:1.5}
