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>
383 lines
30 KiB
CSS
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)}}
|