:root{--nn-bg:#0f1115;--nn-panel:#171a21;--nn-panel-elevated:#1e222b;--nn-border:#2a2f3a;--nn-text:#e6e9ef;--nn-text-secondary:#9aa3b2;--nn-text-muted:#6b7280;--nn-accent:#3b82f6;--nn-accent-hover:#60a5fa;--nn-canvas-grid:#1c212b;--nn-error:#ef4444;--nn-warning:#f59e0b;--nn-success:#22c55e;--nn-stale:#94a3b8;--nn-info:#38bdf8;--nn-port-ohlcv:#f97316;--nn-port-scalar-series:#3b82f6;--nn-port-bool-series:#a855f7;--nn-port-scalar:#22d3ee;--nn-port-bool:#ec4899;--nn-port-string:#84cc16;--nn-port-signal:#eab308;--nn-family-sources:#10b981;--nn-family-transforms:#14b8a6;--nn-family-indicators:#3b82f6;--nn-family-conditions:#f59e0b;--nn-family-logic:#a855f7;--nn-family-state:#64748b;--nn-family-risk:#ef4444;--nn-family-signals:#eab308;--nn-family-constants:#6b7280;--nn-family-patterns:#ec4899;--nn-font:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--nn-font-mono:ui-monospace,"SF Mono",Consolas,monospace;--nn-text-xs:12px;--nn-text-sm:13px;--nn-text-md:14px;--nn-text-lg:16px;--nn-text-xl:20px;--nn-space-1:4px;--nn-space-2:8px;--nn-space-3:12px;--nn-space-4:16px;--nn-space-6:24px;--nn-radius-node:8px;--nn-radius-panel:8px;--nn-radius-control:6px;--nn-shadow-node:0 2px 8px rgba(0,0,0,.4);--nn-shadow-node-selected:0 0 0 2px var(--nn-accent)}body{background:var(--nn-bg);color:var(--nn-text);font-family:var(--nn-font);font-size:var(--nn-text-sm);margin:0}*{scrollbar-color:var(--nn-border) transparent;scrollbar-width:thin}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--nn-border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--nn-text-muted)}.btn{align-items:center;background:var(--nn-panel-elevated);border:1px solid var(--nn-border);border-radius:var(--nn-radius-control);color:var(--nn-text);cursor:pointer;display:inline-flex;font-size:var(--nn-text-sm);height:32px;justify-content:center;padding:0 var(--nn-space-3);text-decoration:none}.btn:hover:not(:disabled){border-color:var(--nn-accent-hover)}.btn--primary{background:var(--nn-accent);border-color:var(--nn-accent);color:var(--nn-text)}.btn--primary:hover:not(:disabled){background:var(--nn-accent-hover);border-color:var(--nn-accent-hover)}.btn--secondary:hover:not(:disabled){border-color:var(--nn-accent)}.btn--danger{background:var(--nn-error);border-color:var(--nn-error);color:var(--nn-text)}.btn:disabled{cursor:default;opacity:.4}.admin-shell{background:var(--nn-bg);display:flex;flex-direction:column;min-height:100vh}.admin-nav{align-items:center;background:var(--nn-panel);border-bottom:1px solid var(--nn-border);display:flex;gap:var(--nn-space-2);padding:var(--nn-space-2) var(--nn-space-4);position:sticky;top:0;z-index:40}.admin-nav__wordmark{color:var(--nn-accent-hover);font-size:var(--nn-text-md);font-weight:700;margin-right:var(--nn-space-3)}.admin-nav__link{border-radius:var(--nn-radius-control);color:var(--nn-text-secondary);font-size:var(--nn-text-sm);padding:var(--nn-space-1) var(--nn-space-2);text-decoration:none}.admin-nav__link:hover{background:var(--nn-panel-elevated);color:var(--nn-text)}.admin-nav__spacer{flex:1}.admin-nav__user{color:var(--nn-text-secondary);font-size:var(--nn-text-xs)}.admin-main{box-sizing:border-box;flex:1;margin:0 auto;max-width:1200px;padding:var(--nn-space-4);width:100%}.admin-gate{align-items:center;display:flex;flex:1;flex-direction:column;gap:var(--nn-space-3);justify-content:center;padding:var(--nn-space-6)}.admin-forbidden__title{color:var(--nn-warning);font-size:var(--nn-text-xl);margin:0}.admin-forbidden__text{color:var(--nn-text-secondary);margin:0}.login-screen{align-items:center;background:var(--nn-bg);display:flex;justify-content:center;min-height:100vh;padding:var(--nn-space-4)}.login-card{background:var(--nn-panel);border:1px solid var(--nn-border);border-radius:var(--nn-radius-panel);box-shadow:var(--nn-shadow-node);display:flex;flex-direction:column;gap:var(--nn-space-3);padding:var(--nn-space-6);width:min(360px,100%)}.login-card__title{font-size:var(--nn-text-xl);margin:0}.login-card__subtitle{margin:0 0 var(--nn-space-2)}.login-card__field,.login-card__subtitle{color:var(--nn-text-secondary);font-size:var(--nn-text-xs)}.login-card__field{display:flex;flex-direction:column;gap:var(--nn-space-1)}.login-card__control{background:var(--nn-bg);border:1px solid var(--nn-border);border-radius:var(--nn-radius-control);color:var(--nn-text);font-size:var(--nn-text-sm);height:34px;padding:0 var(--nn-space-2)}.login-card__control:focus{border-color:var(--nn-accent)}.login-card__submit{margin-top:var(--nn-space-2)}.page{flex-direction:column}.page,.page__header{display:flex;gap:var(--nn-space-3)}.page__header{align-items:center;justify-content:space-between}.page__title{font-size:var(--nn-text-lg);margin:0}.page__meta{color:var(--nn-text-muted);font-size:var(--nn-text-xs);margin:0}.toolbar{align-items:flex-end;display:flex;gap:var(--nn-space-2)}.toolbar__field{color:var(--nn-text-secondary);display:flex;flex-direction:column;font-size:var(--nn-text-xs);gap:var(--nn-space-1)}.toolbar__field--grow{flex:1}.toolbar__control{background:var(--nn-bg);border:1px solid var(--nn-border);border-radius:var(--nn-radius-control);color:var(--nn-text);font-size:var(--nn-text-sm);height:32px;padding:0 var(--nn-space-2)}.toolbar__control:focus{border-color:var(--nn-accent)}.state{align-items:center;border:1px dashed var(--nn-border);border-radius:var(--nn-radius-panel);color:var(--nn-text-secondary);display:flex;flex-direction:column;gap:var(--nn-space-3);padding:var(--nn-space-6)}.banner,.state__text{margin:0}.banner{border:1px solid var(--nn-border);border-radius:var(--nn-radius-control);color:var(--nn-text-secondary);font-size:var(--nn-text-sm);padding:var(--nn-space-2) var(--nn-space-3)}.banner--error{border-color:var(--nn-error);color:var(--nn-error)}.banner--warn{border-color:var(--nn-warning);color:var(--nn-warning)}.table-wrap{overflow-x:auto}.table{border-collapse:collapse;font-size:var(--nn-text-sm);width:100%}.table__caption{color:var(--nn-text-muted)}.table th,.table__caption{font-size:var(--nn-text-xs);padding:var(--nn-space-2);text-align:left}.table th{color:var(--nn-text-secondary);white-space:nowrap}.table td,.table th{border-bottom:1px solid var(--nn-border)}.table td{padding:var(--nn-space-2);vertical-align:middle}.table-row__primary{font-weight:600}.table-row__secondary{color:var(--nn-text-muted);font-size:var(--nn-text-xs)}.table-row__mono{font-family:var(--nn-font-mono);font-size:var(--nn-text-xs)}.table-row__pairs{color:var(--nn-text-secondary);font-size:var(--nn-text-xs)}.table-row__actions{display:flex;gap:var(--nn-space-1);white-space:nowrap}.table__select{background:var(--nn-bg);border:1px solid var(--nn-border);border-radius:var(--nn-radius-control);color:var(--nn-text);height:28px;padding:0 var(--nn-space-1)}.badge,.table__select{font-size:var(--nn-text-xs)}.badge{border:1px solid var(--nn-border);border-radius:999px;color:var(--nn-text-secondary);display:inline-block;padding:2px var(--nn-space-2)}.badge--ok{border-color:var(--nn-success);color:var(--nn-success)}.badge--warn{border-color:var(--nn-warning);color:var(--nn-warning)}.badge--error{border-color:var(--nn-error);color:var(--nn-error)}.badge--accent{border-color:var(--nn-accent);color:var(--nn-accent-hover)}.badge--neutral{border-color:var(--nn-border);color:var(--nn-text-secondary)}.pagination{gap:var(--nn-space-2)}.pagination,.pagination__size{align-items:center;display:flex}.pagination__size{color:var(--nn-text-secondary);font-size:var(--nn-text-xs);gap:var(--nn-space-1)}.pagination__select{background:var(--nn-bg);border:1px solid var(--nn-border);border-radius:var(--nn-radius-control);color:var(--nn-text);height:28px}.pagination__page{color:var(--nn-text-secondary);font-size:var(--nn-text-xs)}.modal-backdrop{align-items:center;background:color-mix(in srgb,var(--nn-bg) 60%,transparent);display:flex;inset:0;justify-content:center;position:fixed;z-index:60}.modal{background:var(--nn-panel-elevated);border:1px solid var(--nn-border);border-radius:var(--nn-radius-panel);box-shadow:var(--nn-shadow-node);flex-direction:column;font-size:var(--nn-text-sm);max-height:min(80vh,640px);overflow-y:auto;padding:var(--nn-space-4);width:min(460px,calc(100vw - 48px))}.modal,.modal__header{display:flex;gap:var(--nn-space-3)}.modal__header{align-items:center;justify-content:space-between}.modal__title{font-size:var(--nn-text-md);font-weight:600;margin:0}.modal__close{background:none;border:none;color:var(--nn-text-secondary);cursor:pointer;font-size:var(--nn-text-md)}.modal__close:hover{color:var(--nn-text)}.modal__field{color:var(--nn-text-secondary);display:flex;flex-direction:column;font-size:var(--nn-text-xs);gap:var(--nn-space-1)}.modal__control{background:var(--nn-bg);border:1px solid var(--nn-border);border-radius:var(--nn-radius-control);color:var(--nn-text);font-size:var(--nn-text-sm);height:32px;padding:0 var(--nn-space-2)}.modal__control:focus{border-color:var(--nn-accent)}.modal__actions{display:flex;gap:var(--nn-space-2);justify-content:flex-end}.modal__text{color:var(--nn-text-secondary);line-height:1.6;margin:0}.modal__code{background:var(--nn-bg);border:1px solid var(--nn-border);border-radius:var(--nn-radius-control);color:var(--nn-text);font-family:var(--nn-font-mono);padding:2px var(--nn-space-2)}.card{background:var(--nn-panel);border:1px solid var(--nn-border);border-radius:var(--nn-radius-panel);flex-direction:column;padding:var(--nn-space-4)}.card,.card__title{display:flex;gap:var(--nn-space-2)}.card__title{align-items:center;font-size:var(--nn-text-md);margin:0}.card__error{color:var(--nn-error);font-size:var(--nn-text-xs);margin:0}.health-grid{display:grid;gap:var(--nn-space-3);grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.health-value{color:var(--nn-success);font-size:var(--nn-text-xl);font-weight:700;margin:0}.health-list{display:flex;flex-direction:column;gap:var(--nn-space-1);margin:0}.health-list__row{display:flex;font-size:var(--nn-text-sm);gap:var(--nn-space-2);justify-content:space-between}.health-list__row dt{color:var(--nn-text-secondary)}.health-list__row dd{margin:0}.health-log{gap:var(--nn-space-3);margin-top:var(--nn-space-3)}.health-log__select{margin-left:auto}.health-log__list{border:1px solid var(--nn-border);border-radius:var(--nn-radius-control);display:flex;flex-direction:column;font-size:var(--nn-text-xs);gap:var(--nn-space-1);list-style:none;margin:0;max-height:320px;overflow-y:auto;padding:0;padding:var(--nn-space-2)}.health-log__row{align-items:baseline;display:flex;gap:var(--nn-space-2);white-space:nowrap}.health-log__time{color:var(--nn-text-muted);font-variant-numeric:tabular-nums}.health-log__op{color:var(--nn-text-secondary)}.health-log__msg{overflow:hidden;text-overflow:ellipsis}.skeleton{animation:nn-skeleton-pulse 1.2s ease-in-out infinite;background:var(--nn-panel);border-radius:var(--nn-radius-control)}.skeleton--toolbar{height:40px;width:100%}.skeleton--table{height:240px;width:100%}@keyframes nn-skeleton-pulse{0%,to{opacity:1}50%{opacity:.5}}@media(prefers-reduced-motion:reduce){.skeleton{animation:none}}
