:root{--bg:#0b1016;--panel:#121a23;--panel2:#17212c;--line:#263443;--text:#eaf0f5;--muted:#8fa1b2;--accent:#63d5a4;--warn:#efb85f;--danger:#ff7373;--blue:#6fb4ff;--shadow:0 12px 40px rgba(0,0,0,.24)}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 system-ui,-apple-system,"Segoe UI",sans-serif}.hidden{display:none!important}header{height:58px;padding:0 24px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);position:sticky;top:0;background:rgba(11,16,22,.96);z-index:20}.brand{font-weight:750;letter-spacing:.3px}.muted{color:var(--muted)}.small{font-size:12px}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}main{max-width:1580px;margin:0 auto;padding:22px;display:grid;gap:18px}.card{background:linear-gradient(180deg,var(--panel2),var(--panel));border:1px solid var(--line);border-radius:14px;padding:18px;box-shadow:var(--shadow)}.card-title{font-size:11px;font-weight:800;letter-spacing:1.2px;color:var(--muted)}h1,h2{margin:.15em 0 .7em}h2{font-size:18px}.topgrid{display:grid;grid-template-columns:230px 1fr;gap:18px}.uptime-card{display:flex;flex-direction:column;justify-content:center}.uptime{font:700 31px ui-monospace,SFMono-Regular,Consolas,monospace;margin:10px 0}.gauges{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.gauge-card{text-align:center;position:relative;padding-bottom:14px}.gauge{width:min(100%,230px);display:block;margin:0 auto -9px}.track{fill:none;stroke:#293847;stroke-width:15;stroke-linecap:round}.needle{stroke:var(--accent);stroke-width:4;stroke-linecap:round;transform-origin:110px 115px;transform:rotate(-90deg);transition:transform .5s cubic-bezier(.2,.8,.2,1)}.hub{fill:var(--accent)}.gauge-value{font:750 21px ui-monospace,SFMono-Regular,Consolas,monospace}.section-head{display:flex;align-items:center;justify-content:space-between;gap:16px}.live{color:var(--muted);font-size:12px}.live span{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--accent);margin-right:5px;box-shadow:0 0 12px var(--accent)}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;min-width:760px}th{text-align:left;color:var(--muted);font-size:11px;letter-spacing:.6px;text-transform:uppercase;font-weight:700;border-bottom:1px solid var(--line);padding:9px 10px}td{border-bottom:1px solid rgba(38,52,67,.7);padding:10px;vertical-align:middle}tbody tr:hover{background:rgba(255,255,255,.02)}button,select,input{font:inherit}button{border:1px solid #34485b;background:#1b2835;color:var(--text);border-radius:8px;padding:6px 10px;cursor:pointer}button:hover{border-color:#5a7690;background:#213344}button:disabled{opacity:.45;cursor:not-allowed}.primary{background:#177957;border-color:#238d69;font-weight:700}.danger{border-color:#7b3c41;color:#ffb4b4}.flat{background:transparent;border-color:transparent;color:var(--muted)}.actions{display:flex;gap:5px;white-space:nowrap}.status{display:inline-flex;gap:6px;align-items:center}.dot{width:8px;height:8px;border-radius:50%;background:var(--muted)}.status.active .dot{background:var(--accent)}.status.failed .dot{background:var(--danger)}.status.inactive .dot{background:#8090a0}.badge{display:inline-block;border:1px solid var(--line);border-radius:99px;padding:2px 7px;color:var(--muted);font-size:12px}.twocol{display:grid;grid-template-columns:1fr 1fr;gap:18px}#trafficCanvas{width:100%;height:300px;display:block}.journal{display:grid;gap:6px;max-height:420px;overflow:auto}.logline{display:grid;grid-template-columns:185px 160px 1fr;gap:10px;padding:7px 9px;border-bottom:1px solid rgba(38,52,67,.6);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px}.logline .msg{white-space:pre-wrap;overflow-wrap:anywhere}.login{min-height:100vh;display:grid;place-items:center;padding:20px}.login-card{width:min(410px,100%);display:grid;gap:15px;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:30px;box-shadow:var(--shadow)}.login-card label{display:grid;gap:6px;color:var(--muted)}input,select{background:#0e151d;color:var(--text);border:1px solid var(--line);border-radius:8px;padding:9px}.login-card .logo{font:750 14px ui-monospace,monospace;color:var(--accent)}.error-text{color:var(--danger);min-height:20px}.modal{position:fixed;inset:0;background:rgba(0,0,0,.72);display:grid;place-items:center;padding:22px;z-index:40}.modal-card{width:min(1100px,96vw);max-height:88vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:20px;box-shadow:var(--shadow)}.toast{position:fixed;right:22px;bottom:22px;background:#223243;border:1px solid #42617c;border-radius:9px;padding:12px 16px;z-index:50;max-width:500px}.toast.bad{border-color:#813f45;background:#3a1f25}.size{font-family:ui-monospace,monospace;color:#c6d3df}.node{font-family:ui-monospace,monospace;font-weight:700;color:#b7ddff}.warn{color:var(--warn)}.fail{color:var(--danger)}@media(max-width:1000px){.topgrid{grid-template-columns:1fr}.gauges{grid-template-columns:repeat(3,1fr)}.twocol{grid-template-columns:1fr}}@media(max-width:690px){header{padding:0 12px}.muted:not(.small){display:none}main{padding:12px}.gauges{grid-template-columns:1fr}.logline{grid-template-columns:1fr}.topgrid{gap:12px}.gauges{gap:12px}}
.sortable{cursor:pointer;user-select:none;white-space:nowrap}.sortable:hover{color:var(--text)}.sort-arrow{color:var(--accent);font-size:10px}.outbound-scroll{max-height:402px;overflow:auto;border-bottom:1px solid var(--line)}.outbound-scroll thead th{position:sticky;top:0;z-index:3;background:#17212c}.outbound-scroll tbody tr{height:61px}.node-nosession{color:var(--danger)!important;text-shadow:0 0 12px rgba(255,115,115,.2)}.modal-actions{display:flex;justify-content:flex-end;margin:-4px 0 10px}.strong{font-weight:750}.destroy-mark{color:#ffb4b4;border-color:#7b3c41}.confirm-card{width:min(600px,94vw);background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:22px;box-shadow:var(--shadow)}.checkline{display:flex;gap:10px;align-items:flex-start;border:1px solid #5d4346;background:#25191c;border-radius:10px;padding:12px;margin:18px 0}.checkline input{margin-top:3px}.checkline span{display:grid;gap:4px}.checkline small{color:var(--muted)}.confirm-actions{display:flex;justify-content:flex-end;gap:9px}.confirm-card code{color:#ffc1c1}
/* v1.2.0: fixed-height sortable monitoring tables and nodelist popup. */
.errors-scroll,.special-scroll{max-height:535px;overflow:auto;border-bottom:1px solid var(--line)}
.errors-scroll thead th,.special-scroll thead th{position:sticky;top:0;z-index:3;background:#17212c;height:35px}
.errors-scroll tbody tr,.special-scroll tbody tr{height:50px}
.errors-scroll td,.special-scroll td{height:50px;max-height:50px}
.ellipsis{max-width:34rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.node-link{appearance:none;border:0;background:transparent;padding:0;margin:0;border-radius:0;color:#b7ddff;font:700 1em ui-monospace,SFMono-Regular,Consolas,monospace;cursor:pointer;vertical-align:baseline}
.node-link:hover{background:transparent;border:0;color:#d6ecff;text-decoration:underline;text-underline-offset:2px}
.node-link.node-nosession{color:var(--danger)!important}
.node-card{width:min(720px,94vw);max-height:88vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:22px;box-shadow:var(--shadow)}
.node-info{display:grid;grid-template-columns:minmax(120px,170px) 1fr;gap:0;margin:6px 0 0}
.node-info dt,.node-info dd{margin:0;padding:10px 8px;border-bottom:1px solid rgba(38,52,67,.72)}
.node-info dt{color:var(--muted);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.node-info dd{overflow-wrap:anywhere}
@media(max-width:690px){.node-info{grid-template-columns:1fr}.node-info dt{padding-bottom:2px;border-bottom:0}.node-info dd{padding-top:2px}}
.errors-scroll table,.special-scroll table{min-width:700px}
.errors-scroll tbody td,.special-scroll tbody td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* v1.3.0: service logs, historical traffic controls and repair actions. */
.service-link{appearance:none;border:0;background:transparent;padding:0;margin:0;border-radius:0;color:var(--text);font-weight:750;cursor:pointer}
.service-link:hover{background:transparent;border:0;color:#d6ecff;text-decoration:underline;text-underline-offset:2px}
.service-log{min-height:260px;max-height:68vh;overflow:auto;background:#0a1016;border:1px solid var(--line);border-radius:10px;padding:14px;white-space:pre-wrap;overflow-wrap:anywhere;color:#cbd7e1;font:12px/1.45 ui-monospace,SFMono-Regular,Consolas,monospace}
.traffic-range{display:flex;align-items:end;gap:9px;flex-wrap:wrap;margin:0 0 10px}.traffic-range label{display:grid;gap:4px;color:var(--muted);font-size:12px}.traffic-range input{min-width:190px}
.node-actions{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin:0 0 14px}
.optionline{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);background:#111a23;border-radius:10px;padding:12px;margin:10px 0}.optionline input{margin-top:3px}.optionline span{display:grid;gap:3px}.optionline small{color:var(--muted)}
@media(max-width:690px){.traffic-range{align-items:stretch}.traffic-range label,.traffic-range input{width:100%}.node-actions{justify-content:stretch}.node-actions button{flex:1}}
/* v1.4.0: logarithmic traffic view, range statistics and archive diagnostics. */
.traffic-stats-wrap{margin-top:12px;overflow:auto;border:1px solid var(--line);border-radius:10px}
.traffic-stats{min-width:680px}.traffic-stats th,.traffic-stats td{padding:9px 12px}.traffic-stats tbody tr:last-child td{border-bottom:0}
.archives-card{width:min(1280px,97vw)}
.archives-scroll{max-height:64vh;overflow:auto;margin-top:12px;border-bottom:1px solid var(--line)}
.archives-scroll thead th{position:sticky;top:0;z-index:3;background:#17212c}
.archives-scroll table{min-width:980px}
.archive-status{display:inline-block;padding:3px 8px;border:1px solid var(--line);border-radius:999px;font-size:11px;font-weight:750;white-space:nowrap}
.status-ok{color:var(--accent)}.status-no-log{color:var(--warn)}.status-error{color:var(--danger);border-color:#7d3f45}
.archive-error{max-width:360px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--muted)}
/* v1.6.1: versioned R50 echolist workspace. */
header{grid-template-columns:auto 1fr auto}.topnav{display:flex;justify-content:center;gap:6px}.navtab{background:transparent;border-color:transparent;color:var(--muted);padding:8px 14px}.navtab.active{color:var(--text);border-color:#3e566c;background:#172532}.actions.wrap{flex-wrap:wrap;justify-content:flex-end}.echolist-page{max-width:1780px}.echolist-tools{display:flex;gap:10px;margin:8px 0 12px}.echolist-tools input{min-width:360px;flex:1}.echolist-scroll{max-height:68vh;border-bottom:1px solid var(--line)}.echolist-scroll table{min-width:1200px}.echolist-scroll thead th{position:sticky;top:0;z-index:3;background:#17212c}.echolist-scroll td{max-width:420px}.echo-status{display:inline-block;padding:3px 8px;border:1px solid var(--line);border-radius:999px;font-size:11px;font-weight:750}.echo-status.None{color:var(--accent)}.echo-status.Hold{color:var(--warn)}.echo-status.Down{color:var(--danger)}.echo-status.Preparing{color:#8fc7ff;border-color:#365c7d}.echo-tag{font:700 13px ui-monospace,SFMono-Regular,Consolas,monospace;color:#b7ddff}.selection-buttons{display:flex;gap:9px;flex-wrap:wrap}.echo-edit-card{width:min(980px,97vw)}.echo-form{display:grid;gap:14px}.form-grid{display:grid;grid-template-columns:1fr 2fr;gap:12px}.form-grid label{display:grid;gap:5px;color:var(--muted);font-size:12px}.form-grid .wide{grid-column:1/-1}.form-grid textarea,.echolist-modal-card textarea{width:100%;resize:vertical;background:#0e151d;color:var(--text);border:1px solid var(--line);border-radius:8px;padding:9px;font:13px/1.45 ui-monospace,SFMono-Regular,Consolas,monospace}.rules-analysis{border:1px solid var(--line);border-radius:10px;padding:10px;background:#101821;min-height:42px}.echolist-modal-card{width:min(1280px,97vw)}.history-scroll,.selection-scroll{max-height:58vh;overflow:auto}.history-scroll thead th,.selection-scroll thead th{position:sticky;top:0;background:#17212c;z-index:3}.selection-compose{display:grid;gap:9px;margin-top:14px}.selection-compose input,.selection-compose textarea{width:100%}.history-json{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.4 ui-monospace,SFMono-Regular,Consolas,monospace;color:#c7d4df}.rules-pill{font-size:11px}.rules-pill.good{color:var(--accent)}.rules-pill.warn{color:var(--warn)}.rules-pill.bad{color:var(--danger)}
@media(max-width:900px){header{display:flex;flex-wrap:wrap;height:auto;min-height:58px;padding:8px 12px}.topnav{order:3;width:100%}.echolist-tools{flex-direction:column}.echolist-tools input{min-width:0;width:100%}.form-grid{grid-template-columns:1fr}.form-grid .wide{grid-column:auto}}
.history-json.compact{max-height:260px;overflow:auto;margin:.45rem 0 0}.version-changes{max-height:300px;overflow:auto;margin-bottom:1rem}

/* v1.6.1: every titled table column in the echolist UI is clickable/sortable. */
#echolistPage table thead th:not(:empty),
#echoSimpleContent table thead th:not(:empty),
#echoEditModal table thead th:not(:empty){cursor:pointer;user-select:none}
#echolistPage table thead th.sorted-asc::after,
#echoSimpleContent table thead th.sorted-asc::after,
#echoEditModal table thead th.sorted-asc::after{content:' ▲';font-size:.78em;opacity:.8}
#echolistPage table thead th.sorted-desc::after,
#echoSimpleContent table thead th.sorted-desc::after,
#echoEditModal table thead th.sorted-desc::after{content:' ▼';font-size:.78em;opacity:.8}
/* v1.6.5: compact export dialog and preparing-message composer. */
.echolist-modal-card.echo-export-card{width:min(620px,94vw);padding:16px}
.echo-export-card .section-head{align-items:flex-start}
.echo-export-card .section-head h2{margin-bottom:.3em}
.echo-export-card .export-compose{gap:7px;margin-top:7px}
.echo-export-card .export-option{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:10px;border:1px solid var(--line);background:#111a23;border-radius:9px;padding:9px 11px;margin:0}
.echo-export-card .export-option input[type=checkbox]{width:auto;margin:2px 0 0;padding:0}
.echo-export-card .export-option span{display:grid;gap:1px}
.echo-export-card .export-option small{color:var(--muted)}
.echo-export-card .confirm-actions{margin-top:3px}
#prepText{min-height:220px}

/* v1.7 notifications */
.notifications-page{max-width:1800px;margin:0 auto;width:100%}
.notifications-scroll{max-height:62vh;overflow:auto}
.notification-channels{display:flex;gap:10px;flex-wrap:wrap;margin:8px 0 14px}
.notify-channel{display:inline-flex;align-items:center;gap:7px;padding:6px 10px;border:1px solid var(--border);border-radius:999px;font-size:12px}
.notify-level,.notify-delivery{display:inline-block;padding:3px 7px;border-radius:999px;font-size:11px;white-space:nowrap}
.notify-level.info{background:#18314a;color:#9ed1ff}.notify-level.warning{background:#4b3711;color:#ffd978}.notify-level.error{background:#4a1d1d;color:#ffadad}
.notify-delivery.sent{background:#173d2c;color:#9ae6b4}.notify-delivery.pending{background:#4b3711;color:#ffd978}.notify-delivery.failed{background:#4a1d1d;color:#ffadad}.notify-delivery.off{background:#282d35;color:#a9b1bc}
/* v1.8.0: node health, unified timeline and expanded link card. */
.ops-grid{display:grid;grid-template-columns:minmax(420px,.9fr) minmax(520px,1.35fr);gap:16px;margin:16px 0}.health-pill{display:inline-block;margin-left:8px;padding:3px 9px;border-radius:999px;font-size:11px;vertical-align:middle;border:1px solid var(--line)}.health-pill.ok{color:var(--accent);background:#173d2c}.health-pill.warning{color:#ffd978;background:#4b3711}.health-pill.critical{color:#ffadad;background:#4a1d1d}.health-pill.pending{color:var(--muted)}.health-checks{display:grid;gap:2px}.health-row{display:grid;grid-template-columns:14px minmax(0,1fr) auto;gap:9px;align-items:center;padding:8px 4px;border-bottom:1px solid rgba(38,52,67,.65)}.health-row:last-child{border-bottom:0}.health-row small{display:block;color:var(--muted);margin-top:2px}.health-dot{width:9px;height:9px;border-radius:50%;background:#708090}.health-row.ok .health-dot{background:var(--accent)}.health-row.warning .health-dot{background:#ffd978}.health-row.critical .health-dot{background:var(--danger)}.health-value{font:12px ui-monospace,SFMono-Regular,Consolas,monospace;text-align:right}.timeline{max-height:330px;overflow:auto}.timeline-row{display:grid;grid-template-columns:24px minmax(0,1fr);gap:7px;padding:7px 4px;border-bottom:1px solid rgba(38,52,67,.65)}.timeline-icon{font-weight:900;text-align:center}.timeline-row.warning .timeline-icon{color:#ffd978}.timeline-row.error .timeline-icon,.timeline-row.critical .timeline-icon{color:var(--danger)}.node-card{width:min(980px,96vw)}.node-section{margin-top:16px}.node-section h3{margin:0 0 8px;font-size:14px;color:#d7e7f5}.node-summary-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.node-summary-grid>div{border:1px solid var(--line);background:#101821;border-radius:9px;padding:9px}.node-summary-grid span{display:block;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.4px}.node-summary-grid b{display:block;margin-top:4px;overflow-wrap:anywhere}.node-events{margin-top:10px;max-height:270px;overflow:auto;border:1px solid var(--line);border-radius:9px}.node-event{display:grid;grid-template-columns:155px 70px minmax(0,1fr);gap:8px;padding:7px 9px;border-bottom:1px solid rgba(38,52,67,.65);font-size:12px}.node-event:last-child{border-bottom:0}.node-event.failure b{color:var(--danger)}.node-event.success b{color:var(--accent)}
@media(max-width:1050px){.ops-grid{grid-template-columns:1fr}.node-summary-grid{grid-template-columns:1fr}}@media(max-width:690px){.health-row{grid-template-columns:14px 1fr}.health-value{grid-column:2;text-align:left}.node-event{grid-template-columns:1fr}.node-event span,.node-event b{display:block}}
/* v1.8.1: dedicated monitoring tabs and full-height event viewport. */
.health-row.info .health-dot{background:var(--blue)}
.ops-grid{align-items:stretch}
.health-card,.timeline-card{height:clamp(430px,54vh,620px);display:flex;flex-direction:column;min-height:0}
.health-card .section-head,.timeline-card .section-head{flex:0 0 auto}
.health-checks,.timeline{flex:1 1 auto;min-height:0;overflow:auto;max-height:none}
#servicesPage,#queuesPage,#echomailPage{max-width:1780px;width:100%}
#queuesPage .card+ .card{margin-top:0}
@media(max-width:1050px){.health-card,.timeline-card{height:auto;min-height:380px}.timeline{min-height:300px;max-height:60vh}}
@media(max-width:900px){.topnav{overflow-x:auto;justify-content:flex-start}.navtab{flex:0 0 auto}}
/* v1.8.2: asynchronous node statistics and notification range controls. */
.shimmer{display:block;position:relative;overflow:hidden;background:#202d39;border-radius:6px;color:transparent;min-height:12px}
.shimmer::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.08),transparent);animation:fido-shimmer 1.25s infinite}
@keyframes fido-shimmer{100%{transform:translateX(100%)}}
.shimmer-line{height:14px;width:100%;margin:7px 0}.shimmer-short{height:10px;width:42%;margin:2px 0 8px}.shimmer-action{display:inline-block;width:150px;height:32px;margin-right:8px}
.node-shimmer-grid .shimmer-card{min-height:58px}.node-shimmer-events .node-event{align-items:center}.node-actions-placeholder{min-height:34px}
.node-event{grid-template-columns:155px 64px 95px minmax(0,1fr)}
.session-direction{font-size:11px;white-space:nowrap}.session-direction.in{color:#9ed1ff}.session-direction.out{color:#ffd978}.session-direction.unknown{color:var(--muted)}
.notifications-filter{display:flex;gap:10px;align-items:end;flex-wrap:wrap;margin:10px 0 12px}.notifications-filter label{display:grid;gap:4px;color:var(--muted);font-size:11px}.notifications-filter input{min-width:190px}
@media(max-width:720px){.node-event{grid-template-columns:1fr 70px}.node-event>span:nth-child(3),.node-event>span:nth-child(4){grid-column:1/-1}.notifications-filter label{width:100%}.notifications-filter input{width:100%;min-width:0}}
/* v1.9.0 historical metrics */
.metrics-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-top:14px}.metrics-grid>div{min-width:0;border:1px solid var(--line);border-radius:10px;padding:10px;background:#101821}.metrics-grid h3{margin:0 0 8px;font-size:13px;color:#d7e7f5}.metrics-grid canvas{display:block;width:100%;height:230px}.health-row.info .health-dot{background:#708090}.health-row.info{opacity:.86}@media(max-width:1050px){.metrics-grid{grid-template-columns:1fr}}
/* v1.10.0: split node card and fully offline binkd session index. */
.node-tabs{display:flex;gap:6px;margin:4px 0 12px;border-bottom:1px solid var(--line);padding-bottom:8px}.node-subtab{background:#111b25;border:1px solid var(--line);color:var(--muted);padding:7px 13px;border-radius:8px}.node-subtab.active{color:var(--text);border-color:#46627a;background:#1a2936}.node-tabpane{min-height:260px}.node-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}.node-index-freshness{margin:10px 0;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#101821;color:var(--muted);font-size:12px}.node-index-freshness b{color:var(--text)}.node-hpt-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:10px}.node-hpt-grid h4{margin:0 0 6px;color:#d7e7f5;font-size:12px}.node-hpt-grid .table-wrap{max-height:220px;overflow:auto}.node-hpt-grid table{font-size:11px}.node-hpt-grid th{position:sticky;top:0;background:#17212c;z-index:1}@media(max-width:820px){.node-hpt-grid{grid-template-columns:1fr}}

/* v1.11 link administration */
.links-page{max-width:1780px}.links-tools{display:flex;gap:10px;margin:10px 0 12px}.links-tools input{width:min(520px,100%)}.links-scroll{max-height:72vh}.links-scroll thead th{position:sticky;top:0;background:#17212c;z-index:2}.links-scroll table{min-width:980px}.link-flag{display:inline-flex;align-items:center;justify-content:center;min-width:34px;border-radius:999px;border:1px solid var(--line);padding:2px 7px;font-size:11px;font-weight:800}.link-flag.yes{color:var(--accent);border-color:#315c4c}.link-flag.no{color:var(--muted)}
.link-editor-card{width:min(1420px,98vw);max-height:94vh;overflow:hidden;display:flex;flex-direction:column}.link-tabs{display:flex;gap:6px;margin:8px 0 12px;border-bottom:1px solid var(--line);padding-bottom:8px;overflow-x:auto;flex:0 0 auto}.link-subtab{background:#111b25;border:1px solid var(--line);color:var(--muted);padding:7px 13px;border-radius:8px;white-space:nowrap}.link-subtab.active{color:var(--text);border-color:#46627a;background:#1a2936}.link-tabpane{overflow:auto;min-height:0;flex:1;padding:2px 3px 10px}.link-basic-grid,.link-husky-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.link-basic-grid label,.link-husky-grid label{display:grid;gap:5px;color:var(--muted);font-size:12px;min-width:0}.link-basic-grid input,.link-basic-grid select,.link-husky-grid input,.link-husky-grid select{width:100%;min-width:0}.link-basic-grid small{display:block}.link-direct{align-self:end;min-height:45px}.link-warning{margin:12px 0;padding:9px 11px;border:1px solid #715936;border-radius:8px;color:var(--warn);background:#221b11}.link-advanced{margin-top:14px;border:1px solid var(--line);border-radius:10px;padding:10px;background:#101821}.link-advanced summary{cursor:pointer;font-weight:700;color:#d7e7f5}.link-advanced textarea{width:100%;resize:vertical;background:#0e151d;color:var(--text);border:1px solid var(--line);border-radius:8px;padding:9px;font:13px/1.45 ui-monospace,SFMono-Regular,Consolas,monospace}.link-husky-grid{margin-top:12px}.area-filter{display:flex;gap:10px;align-items:center;margin-bottom:10px}.area-filter input{flex:1;min-width:180px}.area-check-list{border:1px solid var(--line);border-radius:10px;max-height:58vh;overflow:auto;background:#0e151d}.area-check{display:flex;gap:10px;align-items:center;padding:7px 10px;border-bottom:1px solid rgba(38,52,67,.55);cursor:pointer}.area-check:last-child{border-bottom:0}.area-check:hover{background:rgba(255,255,255,.025)}.area-check input{flex:0 0 auto}.link-editor-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:12px;border-top:1px solid var(--line);flex:0 0 auto}.link-editor-footer #linkEditorStatus{overflow-wrap:anywhere}.link-editor-card code{overflow-wrap:anywhere}
/* Node HPT details are deliberately vertical: never force the card/window wide. */
.node-hpt-grid{grid-template-columns:minmax(0,1fr)!important}.node-hpt-grid>div{min-width:0}.node-hpt-grid table{min-width:0;width:100%;table-layout:fixed}.node-hpt-grid th,.node-hpt-grid td{overflow-wrap:anywhere;word-break:break-word}.node-hpt-grid .table-wrap{max-width:100%;overflow-x:hidden}
@media(max-width:1050px){.link-basic-grid,.link-husky-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.link-basic-grid,.link-husky-grid{grid-template-columns:1fr}.area-filter{align-items:stretch;flex-direction:column}.link-editor-footer{align-items:stretch;flex-direction:column}.link-editor-footer .actions{justify-content:flex-end}}

/* v1.12 dynamic Link parameter editor */
.link-param-toolbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:10px}
.link-param-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;align-items:start}
.link-param{min-width:0;border:1px solid var(--line);border-radius:10px;background:#0e151d;padding:10px}
.link-param-head{display:flex;align-items:center;gap:7px;margin-bottom:7px;color:var(--text);font-size:12px;font-weight:700;min-width:0}
.link-param-head>span:first-child{overflow-wrap:anywhere}
.param-source{margin-left:auto;color:var(--muted);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
.param-remove{border:0;background:transparent;color:var(--muted);padding:0 4px;font-size:19px;line-height:1;cursor:pointer}
.param-remove:hover{color:var(--bad)}
.link-param input,.link-param select{width:100%;min-width:0}
.link-param select[multiple]{min-height:86px}
.link-param small{display:block;margin-top:5px;color:var(--muted)}
.inline-check{display:flex!important;align-items:center;gap:7px;color:var(--muted);font-size:12px}
.inline-check input{width:auto!important;flex:0 0 auto}
.param-picker-wrap{margin:0 0 12px;padding:10px;border:1px solid var(--line);border-radius:10px;background:#101821}
.param-picker-wrap>input{width:100%;margin-bottom:8px}
.param-picker{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;max-height:270px;overflow:auto}
.param-choice{display:flex;flex-direction:column;align-items:flex-start;text-align:left;gap:3px;min-width:0;background:#111b25;border:1px solid var(--line);color:var(--text);border-radius:8px;padding:8px 10px;cursor:pointer}
.param-choice:hover{border-color:#49677f;background:#172431}
.param-choice b{font-size:12px;overflow-wrap:anywhere}.param-choice small{color:var(--muted);font-size:10px}
@media(max-width:1000px){.link-param-list,.param-picker{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.link-param-list,.param-picker{grid-template-columns:1fr}}
/* v1.13.0: link-table sorting and nodelist presence. */
.links-scroll th.sort-active::after{content:attr(data-sort-dir);font-size:0;margin-left:6px;color:var(--accent)}
.links-scroll th[data-sort-dir="asc"]::after{content:"▲";font-size:9px}
.links-scroll th[data-sort-dir="desc"]::after{content:"▼";font-size:9px}
.node-link.link-missing{color:var(--danger)!important;text-shadow:0 0 12px rgba(255,115,115,.22)}
