:root{
  --bg:#f8fbff;--card:#fff;--text:#18212f;--muted:#667085;--line:#e4e7ec;
  --line2:#d0d5dd;--blue:#2563eb;--blueWeak:#eef4ff;--red:#ef4444;--green:#16a34a;
  font-family:Inter,"PingFang SC","Microsoft YaHei",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text)}
.page{max-width:1500px;margin:0 auto;padding:18px}
.topbar{display:flex;align-items:center;gap:10px;margin-bottom:14px;font-size:18px;font-weight:700}
.topbar h1{margin:0;font:inherit}
.mark{width:28px;height:28px;border-radius:9px;background:var(--blueWeak);color:var(--blue);display:grid;place-items:center}
.layout{display:grid;grid-template-columns:390px minmax(0,1fr);gap:14px}
.stack{display:flex;flex-direction:column;gap:14px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px;box-shadow:0 1px 2px rgba(16,24,40,.025)}
.card h2{font-size:15px;margin:0 0 14px;font-weight:700}
.subtle{font-size:12px;color:var(--muted)}
.row{display:grid;grid-template-columns:minmax(0,1fr) 126px 42px;gap:8px;align-items:center;margin-bottom:10px}
.row label{font-size:13px;color:#344054}
input{width:100%;border:1px solid #d9dee8;border-radius:7px;background:#fff;color:#111827;padding:8px 10px;outline:none;font:inherit;font-size:13px}
input:focus{border-color:#9bb8ff;box-shadow:0 0 0 3px #eef4ff}
.unit{font-size:12px;color:var(--muted)}
.section-line{height:1px;background:var(--line);margin:14px 0}
.hidden{display:none!important}

.seg{display:grid;grid-template-columns:1fr 1fr;background:#f2f4f7;border-radius:8px;padding:3px;margin-bottom:14px}
.seg button{border:0;background:transparent;padding:9px 10px;border-radius:6px;cursor:pointer;font-size:13px;color:#344054}
.seg button.active{background:#fff;color:var(--blue);font-weight:700;box-shadow:0 1px 3px rgba(16,24,40,.10)}
.seg.compact{display:flex;width:max-content;gap:2px;margin-bottom:12px}
.seg.compact button{padding:7px 13px}

.hint{background:#f8fafc;border:1px dashed #dbe2ea;border-radius:8px;padding:9px 11px;font-size:12px;color:#667085;line-height:1.55;margin-top:10px}
.error{color:#b42318;background:#fff1f0;border:1px solid #ffd4d1;padding:9px 10px;border-radius:8px;font-size:12px;margin-top:10px}

.btn{border:1px solid #d9dee8;background:#fff;color:#344054;border-radius:7px;padding:7px 11px;font-size:12px;cursor:pointer}
.btn:hover{background:#f8fafc}
.btn.primary{border-color:#bfd0ff;color:#175cd3;background:#f5f8ff}
.btn.copy-ok{color:#067647;border-color:#abefc6;background:#ecfdf3}

.mini-toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.mini-actions{display:flex;align-items:center;gap:7px}

/* Excel-like editable grids */
.excel-wrap{border:1px solid var(--line2);border-radius:7px;overflow:auto;max-height:265px;background:#fff}
.excel{width:100%;border-collapse:collapse;table-layout:fixed;font-size:12px}
.excel th,.excel td{padding:0;border-right:1px solid var(--line2);border-bottom:1px solid var(--line2);height:30px}
.excel th:last-child,.excel td:last-child{border-right:0}
.excel tr:last-child td{border-bottom:0}
.excel th{position:sticky;top:0;z-index:2;background:#f8fafc;color:#475467;text-align:center;font-weight:600;height:31px}
.excel td.action,.excel th.action{width:32px;text-align:center}
.excel input{
  display:block;width:100%;height:29px;border:0;border-radius:0;padding:5px 8px;
  text-align:right;background:#fff;box-shadow:none!important;font-size:12px;
}
.excel input:focus{outline:2px solid #84adff;outline-offset:-2px;position:relative;z-index:1}
.row-delete{border:0;background:transparent;color:#98a2b3;cursor:pointer;font-size:16px;width:100%;height:100%}
.row-delete:hover{color:#b42318;background:#fff5f4}

/* remove number-input spinners globally */
input[type=number]{-moz-appearance:textfield;appearance:textfield}
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}

.toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
.toolbar h2{margin:0}
.pill{font-size:11px;padding:4px 8px;border-radius:999px;background:#f2f4f7;color:#667085}

.result-grid{display:grid;grid-template-columns:repeat(4,minmax(130px,1fr));gap:10px}
.result{padding:12px 13px;border:1px solid var(--line);border-radius:10px;background:#fff}
.result .k{font-size:12px;color:var(--muted);margin-bottom:6px}
.result .v{font-size:17px;font-weight:700;color:var(--blue)}
.result .v small{font-size:11px;font-weight:500;color:var(--muted)}

.chart-wrap{height:465px;position:relative}
#chart{width:100%;height:100%;display:block}
.bottom-grid{display:grid;grid-template-columns:1fr 1.08fr;gap:14px}
.port-viz{height:330px;display:grid;place-items:center}
#portSvg{width:100%;height:100%}

.data-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.data-head h2{margin:0}
.data-controls{display:flex;align-items:center;gap:7px;color:#667085;font-size:12px;flex-wrap:wrap}
.data-controls input{width:70px;padding:6px 8px;text-align:right}
.table-wrap{overflow:auto;max-height:330px;border:1px solid var(--line);border-radius:8px}
.data-table{border-collapse:collapse;width:100%;font-size:12px}
.data-table th,.data-table td{padding:6px 9px;border-bottom:1px solid var(--line);text-align:right;white-space:nowrap}
.data-table th{background:#f8fafc;color:#475467;position:sticky;top:0;z-index:1}
.data-table td:first-child,.data-table th:first-child{text-align:left}

@media(max-width:1050px){
  .layout{grid-template-columns:1fr}
  .result-grid{grid-template-columns:repeat(2,1fr)}
  .bottom-grid{grid-template-columns:1fr}
}
@media(max-width:480px){
  .row{grid-template-columns:minmax(0,1fr) 100px 36px;gap:6px}
  .result-grid{grid-template-columns:1fr}
  .chart-wrap{height:360px}
  .port-viz{height:280px}
  .data-head{align-items:flex-start;flex-direction:column}
}
