Files
ArmorandClaude Opus 4.7 0b4a5c6aa0 style: add mission list page CSS (~190 rules)
Covers previously undefined classes used by /missions and its includes:
- mission-filter-grid, mission-filter-pill, mission-filter-pill-row
- preview-tab, mission-preview-nav, mission-ops-tabs-panel
- mission-page-header, summary-card, mission-page-header-metrics
- data-table, mission-log-table, two-line-cell, table-subline, table-title
- table-actions, table-link, clamp-line, chip, field-label, eyebrow
- mission-datetime-control-row, mission-datetime-display-input
- primary-button, secondary-button
- panel, top-gap, empty-state

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 12:04:40 +08:00

383 lines
30 KiB
CSS

/* ═══ KSP管理后台 Design System ═══ */
/* ═══ Phase 1: CSS Variables + Layout + Components ═══ */
/* ─── Dark Theme (Default) ─── */
:root {
--bg:#0B0B10;--surface:#131318;--surface2:#1a1a22;--border:rgba(248,250,252,.06);
--text:#F8FAFC;--muted:#94A3B8;--accent:#3B82F6;--accent-glow:rgba(59,130,246,.3);
--green:#22c55e;--amber:#eab308;--red:#ef4444;--cyan:#06b6d4;--purple:#a855f7;
--radius:6px;--sidebar-w:224px;--topbar-h:42px;
--font-data:'SF Mono','Cascadia Code','Consolas',monospace;
--font-ui:system-ui,-apple-system,'Segoe UI',sans-serif;
color-scheme:dark;
}
/* ─── Light Theme ─── */
[data-theme="light"] {
--bg:#F1F5F9;--surface:#FFFFFF;--surface2:#F8FAFC;--border:rgba(0,0,0,.06);
--text:#0F172A;--muted:#64748B;--accent:#2563EB;--accent-glow:rgba(37,99,235,.15);
color-scheme:light;
}
/* ─── Reset ─── */
*{margin:0;padding:0;box-sizing:border-box}
body{background:var(--bg);color:var(--text);font-family:var(--font-ui);height:100vh;overflow:hidden;display:flex;flex-direction:column}
a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}
::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
/* ─── Topbar ─── */
#topbar{height:var(--topbar-h);display:flex;align-items:center;gap:12px;padding:0 14px;background:var(--surface);border-bottom:1px solid var(--border);z-index:30;flex-shrink:0}
.brand{font-family:var(--font-data);font-size:.78rem;font-weight:600;letter-spacing:-.02em}.brand b{color:var(--accent)}
.tb-sp{flex:1}
.tb-time{display:flex;align-items:center;gap:5px}
.tb-time .l{font-size:.62rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.tb-time .td{font-family:var(--font-data);font-size:.74rem;color:var(--accent);background:rgba(59,130,246,.06);padding:3px 8px;border-radius:4px;cursor:pointer;border:1px solid transparent;transition:.15s}
.tb-time .td:hover{background:rgba(59,130,246,.12);border-color:var(--accent-glow)}
/* ─── Buttons ─── */
.b{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:4px;font-family:var(--font-ui);font-size:.7rem;cursor:pointer;border:1px solid var(--border);background:transparent;color:var(--muted);transition:.15s;white-space:nowrap}
.b:hover{background:rgba(128,128,128,.08);color:var(--text)}
.b.ac{background:var(--accent);color:#fff;border-color:var(--accent)}.b.ac:hover{box-shadow:0 0 10px var(--accent-glow)}
.b.sm{padding:2px 6px;font-size:.64rem}.b.dg{border-color:var(--red);color:var(--red)}.b.dg:hover{background:rgba(239,68,68,.08)}
/* ─── Layout ─── */
#layout{display:flex;flex:1;overflow:hidden}
#sidebar{width:var(--sidebar-w);flex-shrink:0;background:var(--surface);border-right:1px solid var(--border);overflow-y:auto;padding:6px 0;user-select:none}
#content{flex:1;overflow-y:auto;padding:20px 24px;position:relative}
.pg{display:none}.pg.act{display:block}
/* ─── Sidebar Navigation ─── */
.nst{display:flex;align-items:center;gap:6px;padding:8px 14px 2px;font-family:var(--font-data);font-size:.6rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;cursor:pointer}
.nst .ar{font-size:.5rem;transition:transform .15s;opacity:.4}
.nst.on .ar{transform:rotate(-90deg)}
.nst.on+.niw{display:none}
.niw{padding-bottom:2px}
.ni{display:flex;align-items:center;gap:8px;padding:6px 14px;cursor:pointer;font-size:.76rem;color:var(--muted);transition:.1s;border-left:2px solid transparent}
.ni:hover{color:var(--text);background:rgba(128,128,128,.03)}
.ni.act{color:var(--text);background:rgba(59,130,246,.05);border-left-color:var(--accent)}
.ni .ic{width:16px;height:16px;display:flex;align-items:center;justify-content:center;font-size:.8rem;flex-shrink:0;opacity:.6}
.ni.su{padding-left:36px;font-size:.72rem}
/* ─── Page Header ─── */
.ph{margin-bottom:18px}.ph .ey{font-family:var(--font-data);font-size:.6rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:2px}
.ph h1{font-family:var(--font-data);font-size:1.1rem;font-weight:600}.ph p{color:var(--muted);font-size:.72rem;margin-top:1px}
.ph-row{display:flex;align-items:center;justify-content:space-between}
/* ─── Metric Cards ─── */
.mg{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:18px}
.mc{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;transition:border-color .15s}
.mc:hover{border-color:rgba(248,250,252,.1)}
.mc .l{font-family:var(--font-data);font-size:.6rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:4px}
.mc .v{font-family:var(--font-data);font-size:1.6rem;font-weight:600}.mc .s{font-size:.66rem;color:var(--muted);margin-top:2px}
.mc.ac .v{color:var(--accent)}.mc.gn .v{color:var(--green)}.mc.am .v{color:var(--amber)}
/* ─── Status Board ─── */
.stl{font-family:var(--font-data);font-size:.68rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px}
.sgr{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.sgi{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.sgh{display:flex;align-items:center;gap:8px;padding:8px 14px;border-bottom:1px solid var(--border);font-family:var(--font-data);font-size:.66rem;font-weight:500;cursor:pointer;user-select:none}
.sdt{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.sdt.tf{background:var(--amber);box-shadow:0 0 5px var(--amber)}.sdt.ex{background:var(--accent);box-shadow:0 0 5px var(--accent-glow)}
.sdt.mt{background:var(--purple);box-shadow:0 0 5px var(--purple)}.sdt.dk{background:var(--green);box-shadow:0 0 5px var(--green)}
.scc{color:var(--muted);font-size:.64rem;margin-left:auto}
.srw{display:flex;align-items:center;gap:10px;padding:5px 14px 5px 30px;font-size:.74rem;transition:background .1s}
.srw:hover{background:rgba(128,128,128,.02)}
.srw .an{color:var(--accent);cursor:pointer;flex:1;font-weight:500}.srw .an:hover{text-decoration:underline}
.srw .am{color:var(--muted);font-size:.66rem}.srw .al{color:var(--muted);font-size:.66rem;font-family:var(--font-data)}
/* ─── Events ─── */
.evl{display:flex;flex-direction:column;gap:3px;margin-bottom:18px}
.evr{display:flex;align-items:center;gap:10px;padding:7px 10px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);font-size:.74rem}
.evr .ed{font-family:var(--font-data);font-size:.66rem;color:var(--amber);min-width:76px}
.evr .eb{font-family:var(--font-data);font-size:.6rem;padding:2px 6px;border-radius:3px;background:rgba(234,179,8,.08);color:var(--amber)}
/* ─── Filter Bar ─── */
.fb{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.fb input[type=text],.fb select,.fb input[type=date]{padding:5px 8px;border-radius:4px;background:var(--surface2);color:var(--text);border:1px solid var(--border);font-size:.72rem}
.fb input[type=text]{width:180px}
.fb input[type=text]:focus,.fb select:focus,.fb input[type=date]:focus{outline:none;border-color:var(--accent)}
.fb label{display:flex;align-items:center;gap:4px;font-size:.7rem;color:var(--muted);cursor:pointer}
/* ─── Data Tables ─── */
table{width:100%;border-collapse:collapse;font-size:.74rem}
th,td{padding:6px 10px;text-align:left;border-bottom:1px solid var(--border)}
th{font-family:var(--font-data);font-size:.62rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;cursor:pointer;user-select:none;white-space:nowrap}
th:hover{color:var(--text)}
.th-sa{color:var(--accent);margin-left:2px}
td{color:var(--text)}
td.mt{color:var(--muted);font-size:.68rem}
tr:hover td{background:rgba(128,128,128,.015)}
.act-btn{display:inline-flex;gap:4px;font-size:.68rem}
.act-btn a{color:var(--muted);text-decoration:none;padding:2px 5px;border-radius:3px;transition:.1s}
.act-btn a:hover{background:var(--border);color:var(--text)}
/* ─── Pagination ─── */
.pg-bar{display:flex;align-items:center;gap:3px;margin-top:12px;font-size:.7rem}
.pg-bar span,.pg-bar a{padding:3px 7px;border-radius:4px;color:var(--muted);text-decoration:none}
.pg-bar a:hover{background:var(--border);color:var(--text)}.pg-bar .cur{background:var(--accent);color:#fff}
/* ─── Timeline ─── */
.tl-r{display:flex;align-items:center;gap:8px;padding:5px 8px;margin-bottom:2px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);font-size:.72rem}
.tl-bar{flex:1;height:5px;border-radius:3px;background:var(--border);position:relative;overflow:hidden}
.tl-fl{position:absolute;top:0;height:100%;border-radius:3px;opacity:.75}
.tl-fl.warning{background:var(--amber)}.tl-fl.primary{background:var(--accent)}.tl-fl.mt,.tl-fl.neutral{background:var(--purple)}.tl-fl.soft{background:var(--green)}.tl-fl.dk{background:var(--green)}
.tl-fl.warning.current{background:var(--amber);box-shadow:0 0 6px var(--amber)}
.tl-fl.primary.current{background:var(--accent);box-shadow:0 0 6px var(--accent)}
.tl-fl.neutral.current{background:var(--purple);box-shadow:0 0 6px var(--purple)}
.tl-fl.soft.current{background:var(--green);box-shadow:0 0 6px var(--green)}
.tl-scale{display:flex;margin-bottom:6px;font-size:.58rem;color:var(--muted);text-align:center;border-bottom:1px solid var(--border);padding-bottom:4px}
.tl-scale>div{flex:1}
/* ─── Fuel Converter ─── */
.cvw{display:flex;gap:16px}.cvw form{display:flex;flex-direction:column;gap:8px;width:260px}
.cvw form label{font-size:.72rem;color:var(--muted)}.cvw form input,.cvw form select{padding:5px 8px;border-radius:4px;background:var(--surface2);color:var(--text);border:1px solid var(--border)}
.cvw .res{flex:1}
/* ─── Modals ─── */
.modal-bg{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:100;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .2s}
.modal-bg.open{opacity:1;pointer-events:auto}
.modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;width:400px;max-height:80vh;overflow-y:auto}
.modal h2{font-family:var(--font-data);font-size:.85rem;margin-bottom:14px}
.modal .fg{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.modal .fg label{font-size:.72rem;color:var(--muted)}
.modal .fg input,.modal .fg select,.modal .fg textarea{padding:6px 8px;border-radius:4px;background:var(--bg);color:var(--text);border:1px solid var(--border);font-size:.74rem}
.modal .fg textarea{min-height:60px;resize:vertical}
.modal .fg input:focus,.modal .fg select:focus,.modal .fg textarea:focus{outline:none;border-color:var(--accent)}
.modal .btn-row{display:flex;gap:6px;justify-content:flex-end}
/* ─── Location Board ─── */
#map-ct{flex:1;position:relative;display:flex;align-items:center;justify-content:center;background:var(--bg);cursor:grab;overflow:hidden}
#map-cv{display:block}
#bk-btn{position:absolute;top:10px;left:10px;z-index:5;display:none;background:var(--surface);border:1px solid var(--border);color:var(--text);padding:4px 12px;border-radius:var(--radius);cursor:pointer;font-size:.74rem}
#bk-btn.vis{display:block}
#scope-ind{position:absolute;top:10px;right:10px;z-index:5;background:rgba(19,19,24,.85);border:1px solid var(--border);color:var(--muted);padding:3px 10px;border-radius:4px;font-size:.68rem;font-family:var(--font-data)}
#map-info{width:280px;background:var(--surface);border-left:1px solid var(--border);padding:16px;overflow-y:auto;display:flex;flex-direction:column;gap:14px;flex-shrink:0}
#map-info h2{font-family:var(--font-data);font-size:.85rem;font-weight:600;padding-bottom:5px;border-bottom:1px solid var(--border)}
.mi-sec h3{font-family:var(--font-data);font-size:.6rem;text-transform:uppercase;color:var(--muted);letter-spacing:.05em;margin-bottom:3px}
.mi-val{font-family:var(--font-data);font-size:1.3rem;font-weight:600;color:var(--accent)}
.mi-arow{display:flex;justify-content:space-between;align-items:center;padding:4px 0;border-bottom:1px solid var(--border);font-size:.76rem}
.mi-arow .n{color:var(--accent);cursor:pointer}.mi-arow .n:hover{text-decoration:underline}
.mi-arow .loc{color:var(--muted);font-size:.68rem;font-family:var(--font-data)}
/* ─── Location Board Full-Height Page ─── */
.pg.loc{display:none;position:absolute;inset:0;padding:0 !important;z-index:20;background:var(--bg)}
.pg.loc.act{display:flex;flex-direction:column}
#tl-layout{flex:1;display:flex;overflow:hidden}
/* ─── Asset Detail ─── */
.ad-grid{display:grid;grid-template-columns:1fr 280px;gap:16px}
.ad-dock{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}
.ad-dock-box{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:6px 0;font-size:.76rem;max-height:120px;overflow-y:auto}
.ad-dock-item{display:flex;align-items:center;justify-content:space-between;padding:5px 10px;border-bottom:1px solid var(--border)}
.ad-dock-item:last-child{border-bottom:none}
.ad-undock{font-size:.68rem;color:var(--red);cursor:pointer;text-decoration:none}
.ad-undock:hover{text-decoration:underline}
/* ─── Asset Entry Editor ─── */
.asset-entry-hero{display:flex;justify-content:space-between;gap:18px;align-items:stretch;margin-bottom:14px;padding:18px;background:linear-gradient(135deg,var(--surface),var(--surface2));border:1px solid var(--border);border-radius:var(--radius)}
.asset-entry-title-block{display:grid;align-content:center;min-width:0}
.asset-entry-crumbs{display:flex;gap:7px;align-items:center;flex-wrap:wrap;color:var(--muted);font-family:var(--font-data);font-size:.6rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;margin-bottom:8px}
.asset-entry-crumbs span:nth-child(even){color:rgba(148,163,184,.48)}
.asset-entry-title-block h1{font-family:var(--font-data);font-size:1.35rem;line-height:1.12;font-weight:700;letter-spacing:0;overflow-wrap:anywhere}
.asset-entry-title-block p{color:var(--muted);font-size:.74rem;margin-top:7px}
.asset-entry-status-grid{display:grid;grid-template-columns:repeat(2,minmax(140px,1fr));gap:9px;min-width:430px}
.asset-entry-stat{padding:12px;background:rgba(128,128,128,.035);border:1px solid var(--border);border-radius:var(--radius)}
.asset-entry-stat span{display:block;color:var(--muted);font-family:var(--font-data);font-size:.58rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase}
.asset-entry-stat strong{display:block;margin-top:7px;font-family:var(--font-data);font-size:.78rem;line-height:1.35;overflow-wrap:anywhere}
.asset-entry-stat.active{border-color:rgba(34,197,94,.32);background:rgba(34,197,94,.08)}
.asset-entry-stat.active strong{color:var(--green)}
.asset-entry-layout{display:grid;grid-template-columns:390px minmax(0,1fr);gap:14px;align-items:start}
.asset-entry-side{display:grid;gap:14px}
.asset-entry-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.asset-entry-panel-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:14px 15px;border-bottom:1px solid var(--border)}
.asset-entry-panel-head h2{font-family:var(--font-data);font-size:.95rem;font-weight:700}
.asset-entry-panel-head p:not(.asset-entry-kicker){color:var(--muted);font-size:.68rem;line-height:1.45;margin-top:6px;max-width:560px}
.asset-entry-kicker{font-family:var(--font-data);font-size:.58rem;color:var(--muted);font-weight:700;letter-spacing:.12em;text-transform:uppercase;margin-bottom:5px}
.asset-entry-panel-body{display:grid;gap:13px;padding:15px}
.asset-entry-context{display:grid;gap:9px;padding:12px;background:rgba(128,128,128,.035);border:1px solid var(--border);border-radius:var(--radius)}
.asset-entry-context div{display:flex;align-items:center;justify-content:space-between;gap:12px}
.asset-entry-context span{color:var(--muted);font-family:var(--font-data);font-size:.58rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase}
.asset-entry-context strong{text-align:right;font-size:.72rem;overflow-wrap:anywhere}
.asset-entry-field{display:grid;gap:6px;min-width:0}
.asset-entry-field input,.asset-entry-field select,.asset-entry-field textarea{width:100%;min-height:38px;padding:8px 10px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:4px;font-family:var(--font-ui);font-size:.74rem}
.asset-entry-field input[disabled]{background:var(--surface2);color:var(--muted)}
.asset-entry-field textarea{min-height:82px;resize:vertical}
.asset-entry-field input:focus,.asset-entry-field select:focus,.asset-entry-field textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}
.asset-entry-help{color:var(--muted);font-size:.64rem;line-height:1.35}
.asset-entry-two-col{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.asset-entry-type-switch{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.asset-entry-type-option{display:flex;align-items:center;justify-content:center;min-height:34px;padding:0 9px;background:rgba(128,128,128,.03);color:var(--muted);border:1px solid var(--border);border-radius:4px;font-size:.68rem;font-weight:700;cursor:pointer}
.asset-entry-type-option.active{color:#fff;background:var(--accent);border-color:var(--accent)}
.asset-entry-node-panel{min-height:520px}
.asset-entry-node-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end}
.asset-entry-chip{display:inline-flex;align-items:center;min-height:24px;padding:0 8px;border-radius:4px;background:rgba(59,130,246,.08);border:1px solid rgba(59,130,246,.2);color:var(--accent);font-family:var(--font-data);font-size:.58rem;font-weight:700}
.asset-entry-node-summary{display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding:10px 15px;background:rgba(128,128,128,.025);border-bottom:1px solid var(--border)}
.asset-entry-node-count{margin-left:auto;color:var(--cyan);font-family:var(--font-data);font-size:.68rem;font-weight:700}
.asset-entry-node-pill{display:inline-flex;align-items:center;justify-content:center;min-height:23px;padding:0 8px;border-radius:999px;border:1px solid var(--border);font-family:var(--font-data);font-size:.56rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
.asset-entry-node-pill.start{color:var(--green);background:rgba(34,197,94,.08);border-color:rgba(34,197,94,.24)}
.asset-entry-node-pill.mid{color:var(--cyan);background:rgba(6,182,212,.08);border-color:rgba(6,182,212,.22)}
.asset-entry-node-pill.watch{color:var(--amber);background:rgba(234,179,8,.08);border-color:rgba(234,179,8,.22)}
.asset-entry-node-pill.end{color:var(--purple);background:rgba(168,85,247,.08);border-color:rgba(168,85,247,.22)}
.asset-entry-rail{display:grid;gap:0;padding:15px}
.asset-entry-empty-nodes{display:grid;justify-items:center;gap:8px;padding:42px 18px;background:rgba(128,128,128,.03);border:1px dashed var(--border);border-radius:var(--radius);text-align:center}
.asset-entry-empty-nodes strong{font-family:var(--font-data);font-size:.82rem}
.asset-entry-empty-nodes span{color:var(--muted);font-size:.72rem}
.asset-entry-rail-node{display:grid;grid-template-columns:132px 30px minmax(0,1fr);gap:9px;min-height:84px}
.asset-entry-rail-time{color:var(--cyan);font-family:var(--font-data);font-size:.68rem;font-weight:700;line-height:1.35;text-align:right;padding-top:5px;overflow-wrap:anywhere}
.asset-entry-rail-line{position:relative;display:flex;justify-content:center}
.asset-entry-rail-line::before{content:"";position:absolute;top:0;bottom:0;width:2px;background:var(--border)}
.asset-entry-rail-line span{position:relative;z-index:1;width:14px;height:14px;margin-top:4px;border-radius:50%;background:var(--cyan);box-shadow:0 0 0 4px rgba(6,182,212,.12)}
.asset-entry-rail-node:last-child .asset-entry-rail-line::before{bottom:calc(100% - 16px)}
.asset-entry-rail-copy{padding-bottom:16px;min-width:0}
.asset-entry-node-card{display:grid;gap:9px;padding:11px;background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);position:relative}
.asset-entry-node-card::before{content:"";position:absolute;left:-1px;top:10px;bottom:10px;width:3px;border-radius:3px;background:var(--cyan)}
.asset-entry-rail-node:nth-child(1) .asset-entry-node-card::before{background:var(--green)}
.asset-entry-rail-node:nth-child(3) .asset-entry-node-card::before{background:var(--amber)}
.asset-entry-rail-node:last-child .asset-entry-node-card::before{background:var(--purple)}
.asset-entry-node-card-head{display:grid;grid-template-columns:78px minmax(0,1fr) auto;gap:8px;align-items:center}
.asset-entry-time-badge{display:inline-flex;align-items:center;justify-content:center;min-height:28px;padding:0 8px;border-radius:4px;background:rgba(6,182,212,.08);border:1px solid rgba(6,182,212,.22);color:var(--cyan);font-family:var(--font-data);font-size:.62rem;font-weight:700;text-align:center}
.asset-entry-node-title{min-width:0}
.asset-entry-node-title strong{display:block;font-size:.78rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.asset-entry-node-title span{display:block;color:var(--muted);font-size:.68rem;line-height:1.35;margin-top:2px;overflow-wrap:anywhere}
.asset-entry-node-fields{display:grid;grid-template-columns:minmax(0,1fr) 170px;gap:8px}
.asset-entry-node-detail{grid-column:1 / -1}
.asset-entry-footer{position:sticky;bottom:10px;z-index:12;display:flex;align-items:center;gap:8px;margin-top:14px;padding:10px;background:rgba(19,19,24,.9);border:1px solid var(--border);border-radius:var(--radius);backdrop-filter:blur(14px)}
.asset-entry-footer-spacer{flex:1}
.field-error-shell{border-color:rgba(239,68,68,.42)!important}
.field-error-input{border-color:var(--red)!important;box-shadow:0 0 0 3px rgba(239,68,68,.1)!important}
@media (max-width: 1180px){
.asset-entry-hero{align-items:flex-start;flex-direction:column}
.asset-entry-status-grid{min-width:0;width:100%}
.asset-entry-layout{grid-template-columns:1fr}
}
@media (max-width: 760px){
.asset-entry-status-grid,.asset-entry-two-col,.asset-entry-node-fields{grid-template-columns:1fr}
.asset-entry-rail-node{grid-template-columns:1fr}
.asset-entry-rail-time{text-align:left}
.asset-entry-rail-line{display:none}
.asset-entry-node-card-head{grid-template-columns:1fr}
.asset-entry-footer{bottom:0;border-radius:var(--radius) var(--radius) 0 0}
}
/* ─── Buttons (extended) ─── */
.primary-button{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border-radius:4px;font-family:var(--font-ui);font-size:.72rem;font-weight:500;cursor:pointer;background:var(--accent);color:#fff;border:1px solid var(--accent);transition:.15s;white-space:nowrap}
.primary-button:hover{box-shadow:0 0 10px var(--accent-glow)}
.secondary-button{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border-radius:4px;font-family:var(--font-ui);font-size:.72rem;cursor:pointer;background:transparent;color:var(--muted);border:1px solid var(--border);transition:.15s;white-space:nowrap;text-decoration:none}
.secondary-button:hover{background:rgba(128,128,128,.08);color:var(--text)}
/* ─── Mission Pages ─── */
.eyebrow{font-family:var(--font-data);font-size:.6rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:2px}
.top-gap{margin-top:14px}
.field-label{font-family:var(--font-data);font-size:.58rem;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.08em}
/* Mission ops tabs */
.mission-ops-tabs-panel{margin-bottom:0;padding-bottom:0}
.mission-preview-nav{display:flex;gap:0;border-bottom:1px solid var(--border)}
.mission-preview-nav-top{margin-bottom:12px}
.preview-tab{display:inline-flex;align-items:center;padding:8px 16px;font-size:.74rem;color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;transition:.15s;margin-bottom:-1px}
.preview-tab:hover{color:var(--text);background:rgba(128,128,128,.03)}
.preview-tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
/* Mission page header */
.mission-page-header{display:flex;align-items:flex-start;gap:20px;flex-wrap:wrap;margin-bottom:10px}
.mission-page-header-copy{flex:1;min-width:200px}
.mission-page-header-copy h1{font-family:var(--font-data);font-size:1.35rem;font-weight:600;line-height:1.15}
.mission-page-header-metrics{display:flex;gap:10px;flex-wrap:wrap}
.mission-page-header-controls{display:flex;align-items:flex-end}
/* Summary cards */
.summary-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px;min-width:100px}
.summary-card.compact{padding:8px 14px}
.summary-label{display:block;font-family:var(--font-data);font-size:.56rem;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px}
.summary-card strong{font-family:var(--font-data);font-size:.88rem;font-weight:600}
.mission-summary-card-time strong{color:var(--accent)}
/* Mission time form */
.mission-page-time-form{display:flex;align-items:flex-end;gap:6px}
/* Panel */
.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px}
/* Mission toolbar */
.mission-toolbar-grid{display:flex;flex-direction:column;gap:10px}
.mission-toolbar-block{min-width:0}
.mission-toolbar-span-two{width:100%}
.mission-toolbar-block .field-label{margin-bottom:6px}
.mission-filter-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;align-items:end}
.mission-filter-grid label{display:flex;flex-direction:column;gap:4px;font-size:.72rem;color:var(--muted)}
.mission-filter-grid input,.mission-filter-grid select{padding:6px 8px;border-radius:4px;background:var(--bg);color:var(--text);border:1px solid var(--border);font-size:.72rem;min-height:34px}
.mission-filter-grid input:focus,.mission-filter-grid select:focus{outline:none;border-color:var(--accent)}
.mission-filter-grid input[type=search]{min-width:180px}
/* Mission filter pills */
.mission-filter-pill-row{display:flex;flex-wrap:wrap;gap:8px}
.mission-filter-pill{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:4px;font-size:.68rem;color:var(--muted);background:rgba(128,128,128,.04);border:1px solid var(--border);font-family:var(--font-data)}
.mission-filter-pill strong{color:var(--text);font-weight:600}
/* Mission group */
.mission-group-panel{padding:0;overflow:hidden}
.mission-group-header{display:flex;justify-content:space-between;align-items:flex-start;padding:14px 16px;border-bottom:1px solid var(--border)}
.mission-group-header h2{font-family:var(--font-data);font-size:1.05rem;font-weight:600;margin-top:2px}
.mission-group-subtitle{color:var(--muted);font-size:.7rem;margin-top:4px}
.mission-group-count{font-family:var(--font-data);font-size:.64rem;color:var(--muted);padding-top:4px;flex-shrink:0}
.mission-group-panel .mission-filter-pill-row{padding:8px 16px;border-bottom:1px solid var(--border)}
/* Mission log table */
.table-shell{padding:0;overflow-x:auto}
.table-shell.top-gap{margin-top:0}
.data-table{width:100%;border-collapse:collapse;font-size:.74rem;table-layout:fixed}
.data-table thead th{font-family:var(--font-data);font-size:.58rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;padding:8px 10px;text-align:left;border-bottom:1px solid var(--border);background:rgba(128,128,128,.02);position:sticky;top:0;z-index:1}
.data-table tbody td{padding:8px 10px;border-bottom:1px solid rgba(148,163,184,.06);vertical-align:top}
.compact-table td{padding:6px 10px}
/* Mission log column widths */
.mission-log-table thead th:nth-child(1){width:11%}
.mission-log-table thead th:nth-child(2){width:11%}
.mission-log-table thead th:nth-child(3){width:46%}
.mission-log-table thead th:nth-child(4){width:16%}
.mission-log-table thead th:nth-child(5){width:16%}
/* Two-line cell */
.two-line-cell{display:flex;flex-direction:column;gap:2px}
.table-title{font-size:.74rem;font-weight:500;color:var(--text)}
.table-subline{font-size:.64rem;color:var(--muted);line-height:1.35}
.clamp-line{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.table-link{color:var(--accent);text-decoration:none;font-size:inherit}
.table-link:hover{text-decoration:underline}
/* Mission entry labels */
.mission-asset-chip-row{display:flex;flex-wrap:wrap;gap:3px;margin-top:4px}
.mission-entry-label-row .chip{display:inline-flex;align-items:center;padding:1px 6px;border-radius:3px;font-family:var(--font-data);font-size:.56rem;font-weight:600;background:rgba(59,130,246,.08);color:var(--accent);border:1px solid rgba(59,130,246,.15)}
/* Table actions */
.table-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
/* Empty state */
.empty-state{text-align:center;padding:32px 16px;color:var(--muted)}
.empty-state h2{font-size:.9rem;font-weight:600;margin-bottom:6px}
.empty-state p{font-size:.72rem}
/* Mission filter grid — datetime picker */
.mission-datetime-control{display:flex;flex-direction:column;gap:4px;font-size:.72rem;color:var(--muted)}
.mission-datetime-control-row{display:flex;gap:4px;align-items:center;width:100%}
.mission-datetime-display-input{flex:1;min-width:0;padding:6px 8px;border-radius:4px;background:var(--bg);color:var(--text);border:1px solid var(--border);font-size:.72rem;min-height:34px}
.mission-datetime-display-input:focus{outline:none;border-color:var(--accent)}
.mission-datetime-picker-proxy{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}
.mission-datetime-picker-button{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;font-size:.68rem;flex-shrink:0}
/* ─── Flash Messages ─── */
.flash-stack{margin-bottom:16px}
.flash-message{padding:8px 14px;border-radius:var(--radius);font-size:.78rem;margin-bottom:6px}
.flash-message.success{background:rgba(34,197,94,.1);color:var(--green);border:1px solid rgba(34,197,94,.2)}
.flash-message.error{background:rgba(239,68,68,.1);color:var(--red);border:1px solid rgba(239,68,68,.2)}
/* ─── Empty State ─── */
.empty{text-align:center;padding:40px;color:var(--muted);font-size:.82rem}
/* ─── Utilities ─── */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}
.fi{animation:fadeIn .25s ease-out both}
@keyframes fadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}