:root{
  --bg:#070809; --bg-1:#0C0E12; --bg-2:#12151B; --bg-3:#181C24;
  --line:#232833; --line-2:#2E3542;
  --txt:#E8ECF2; --txt-2:#99A3B3; --txt-3:#5F6A7A;
  --accent:#E0452B; --accent-2:#FF6B4A;
  --ok:#2ECC8F; --warn:#F2B134; --err:#F2554B; --info:#4D8DF0;
  --r:10px; --r-lg:16px;
  --mono:ui-monospace,"SF Mono",Menlo,monospace;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{background:var(--bg);color:var(--txt);font-family:var(--sans);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}
a{color:inherit}
button,input,select,textarea{font:inherit;color:inherit}

/* ---- login ---- */
.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px;
  background:radial-gradient(900px 500px at 50% -10%,rgba(224,69,43,.14),transparent 60%),var(--bg)}
.login-card{width:100%;max-width:380px;background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r-lg);padding:36px 32px}
.login-card h1{font-size:19px;letter-spacing:-.3px;margin-bottom:6px}
.login-card p{color:var(--txt-3);font-size:13px;margin-bottom:26px}

/* ---- shell ---- */
.shell{display:grid;grid-template-columns:238px 1fr;min-height:100vh}
.side{background:var(--bg-1);border-right:1px solid var(--line);display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto}
.brand{padding:20px 18px 14px;border-bottom:1px solid var(--line)}
.brand b{display:block;font-size:13px;letter-spacing:.14em;text-transform:uppercase}
.brand span{color:var(--txt-3);font-size:11px;font-family:var(--mono)}
.proj-pick{padding:12px 14px;border-bottom:1px solid var(--line)}
.nav{flex:1;padding:10px 8px}
.nav a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;text-decoration:none;color:var(--txt-2);font-size:13px;cursor:pointer}
.nav a:hover{background:var(--bg-2);color:var(--txt)}
.nav a.on{background:var(--bg-3);color:var(--txt);box-shadow:inset 2px 0 0 var(--accent)}
.nav a em{font-style:normal;width:18px;text-align:center}
.side-foot{padding:12px 14px;border-top:1px solid var(--line);font-size:11px;color:var(--txt-3);font-family:var(--mono)}
.main{min-width:0;padding:26px 30px 70px;max-width:1500px}

.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:22px;flex-wrap:wrap}
h2.title{font-size:21px;letter-spacing:-.4px}
.sub{color:var(--txt-3);font-size:13px;margin-top:3px}

/* ---- primitives ---- */
.card{background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px}
.card h3{font-size:13px;text-transform:uppercase;letter-spacing:.1em;color:var(--txt-2);margin-bottom:14px}
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(2,1fr)} .g3{grid-template-columns:repeat(3,1fr)} .g4{grid-template-columns:repeat(4,1fr)}
@media(max-width:1100px){.g3,.g4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.shell{grid-template-columns:1fr}.side{position:static;height:auto}.g2,.g3,.g4{grid-template-columns:1fr}.main{padding:18px}}

.stat{background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r);padding:15px 16px}
.stat .k{font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--txt-3)}
.stat .v{font-size:26px;font-weight:600;letter-spacing:-.8px;margin-top:5px;font-variant-numeric:tabular-nums}
.stat .n{font-size:11px;color:var(--txt-3);margin-top:3px}

label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.09em;color:var(--txt-3);margin:0 0 6px}
input,select,textarea{width:100%;background:var(--bg-2);border:1px solid var(--line-2);border-radius:8px;padding:9px 11px;outline:none}
input:focus,select:focus,textarea:focus{border-color:var(--accent);background:var(--bg-3)}
textarea{resize:vertical;min-height:80px;line-height:1.6}
.field{margin-bottom:14px}
.row{display:flex;gap:12px;flex-wrap:wrap}
.row>*{flex:1;min-width:150px}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;background:var(--bg-3);border:1px solid var(--line-2);
  border-radius:8px;padding:9px 15px;cursor:pointer;font-size:13px;font-weight:500;white-space:nowrap;transition:.14s}
.btn:hover:not(:disabled){border-color:var(--txt-3);background:#1F2430}
.btn:disabled{opacity:.42;cursor:not-allowed}
.btn.pri{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.pri:hover:not(:disabled){background:var(--accent-2);border-color:var(--accent-2)}
.btn.sm{padding:5px 10px;font-size:12px}
.btn.ghost{background:transparent}
.btn.danger{color:var(--err);border-color:#4A2420}

.tag{display:inline-flex;align-items:center;gap:5px;font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--line-2);color:var(--txt-2);white-space:nowrap}
.tag.ok{color:var(--ok);border-color:#1E4A38;background:rgba(46,204,143,.07)}
.tag.warn{color:var(--warn);border-color:#4A3A17;background:rgba(242,177,52,.07)}
.tag.err{color:var(--err);border-color:#4A2420;background:rgba(242,85,75,.07)}
.tag.info{color:var(--info);border-color:#1E3457;background:rgba(77,141,240,.07)}

table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--txt-3);padding:8px 10px;border-bottom:1px solid var(--line)}
td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top}
tr:last-child td{border-bottom:none}
.num{text-align:right;font-variant-numeric:tabular-nums;font-family:var(--mono)}

.bar{height:5px;background:var(--bg-3);border-radius:99px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--accent);transition:width .35s}
.bar.ok i{background:var(--ok)}

.empty{padding:34px 20px;text-align:center;color:var(--txt-3);font-size:13px;border:1px dashed var(--line-2);border-radius:var(--r)}
.note{font-size:12px;color:var(--txt-3);line-height:1.6;padding:11px 13px;background:var(--bg-2);border-left:2px solid var(--line-2);border-radius:0 8px 8px 0}
.note.warn{border-left-color:var(--warn)} .note.err{border-left-color:var(--err)} .note.info{border-left-color:var(--info)}
.mono{font-family:var(--mono);font-size:12px}
.muted{color:var(--txt-3)}
.hr{height:1px;background:var(--line);margin:16px 0}

.toast-host{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:9px;z-index:99;max-width:400px}
.toast{background:var(--bg-3);border:1px solid var(--line-2);border-left:3px solid var(--accent);border-radius:8px;padding:11px 14px;font-size:13px;animation:sl .22s}
.toast.ok{border-left-color:var(--ok)} .toast.err{border-left-color:var(--err)}
@keyframes sl{from{opacity:0;transform:translateX(16px)}}

.spin{width:13px;height:13px;border:2px solid var(--line-2);border-top-color:var(--accent);border-radius:50%;animation:sp .7s linear infinite;display:inline-block}
@keyframes sp{to{transform:rotate(360deg)}}

/* ---- timeline ---- */
.seg{background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r);padding:13px 15px;margin-bottom:9px;display:grid;
  grid-template-columns:52px 1fr 190px;gap:14px;align-items:start}
.seg.archive{border-left:3px solid var(--info)}
.seg.narration{border-left:3px solid var(--accent)}
.seg.hybrid{border-left:3px solid var(--warn)}
.seg .ix{font-family:var(--mono);color:var(--txt-3);font-size:12px}
.seg .ix b{display:block;color:var(--txt);font-size:15px}
.seg textarea{min-height:62px;font-size:13px}
.seg .side-col{display:flex;flex-direction:column;gap:7px;font-size:12px}
@media(max-width:900px){.seg{grid-template-columns:1fr}}

.arch{background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r);padding:13px 15px}
.arch.allowed{border-left:3px solid var(--ok)}
.arch.link_only{border-left:3px solid var(--warn)}
.arch.needs_review{border-left:3px solid var(--txt-3)}
.arch h4{font-size:13px;font-weight:600;margin-bottom:4px}

.thumb{border:2px solid var(--line);border-radius:var(--r);overflow:hidden;cursor:pointer;background:var(--bg-2)}
.thumb.sel{border-color:var(--accent)}
.thumb canvas,.thumb img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover}
.thumb .meta{padding:9px 11px;font-size:12px;color:var(--txt-2)}
