:root{--bg: #0f1218;--bg-panel: #161b24;--bg-hover: #1d2430;--border: #2a3342;--text: #dbe2ee;--text-dim: #8b96a8;--accent: #4f7cff;--accent-hover: #6890ff;--danger: #e5484d;--ok: #46a758;--warn: #f5a623;--indeterminate: #e8d44d;--radius: 8px}*{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--border) transparent}*::-webkit-scrollbar{width:8px;height:8px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background:var(--border);border-radius:999px;border:2px solid transparent;background-clip:padding-box}*::-webkit-scrollbar-thumb:hover{background:var(--text-dim);border:2px solid transparent;background-clip:padding-box}*::-webkit-scrollbar-corner{background:transparent}html,body,#root{margin:0;height:100%}body{background:var(--bg);color:var(--text);font:14px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}a{color:var(--accent);text-decoration:none}.app{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:10px;height:52px;padding:0 16px;background:var(--bg-panel);border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;line-height:0}.brand svg{display:block}.topbar .spacer{flex:1}.main{display:flex;flex:1;min-height:0}.sidebar-shell{position:relative;display:flex;flex-shrink:0;min-height:0;border-inline-end:1px solid var(--border);background:var(--bg-panel)}.sidebar-shell .sidebar{border-inline-end:none}.sidebar-shell.collapsed .sidebar{width:0;padding-inline:0;overflow:hidden;opacity:0;pointer-events:none}.sidebar-shell.collapsed{background:transparent}.sidebar-edge-toggle{position:absolute;inset-inline-end:0;top:50%;transform:translate(50%,-50%);z-index:4;width:22px;height:40px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:999px;border:1px solid var(--border);background:var(--bg-panel);color:var(--text-dim);box-shadow:0 1px 4px #0000002e;cursor:pointer}.sidebar-edge-toggle:hover{color:var(--text);background:var(--bg-hover)}.sidebar{width:200px;padding:12px 8px;border-inline-end:1px solid var(--border);background:var(--bg-panel);display:flex;flex-direction:column;gap:2px;min-height:0;overflow:auto;transition:width .18s ease,padding .18s ease,opacity .15s ease}.sidebar a{display:block;padding:8px 12px;border-radius:var(--radius);color:var(--text-dim)}button.rename{all:unset;cursor:pointer;font:inherit;color:inherit;display:inline-flex;align-items:center;gap:6px;border-radius:4px;padding:0 2px}button.rename:hover,button.rename:focus-visible{color:var(--accent);outline:none}button.rename span[aria-hidden]{opacity:0;font-size:11px;transition:opacity .1s}button.rename:hover span[aria-hidden],button.rename:focus-visible span[aria-hidden]{opacity:.9}.vlan-combo{position:relative}.vlan-combo-list{position:absolute;z-index:20;left:0;right:0;margin-top:2px;max-height:220px;overflow:auto;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 24px #0006}.vlan-combo-list button{display:block;width:100%;text-align:start;background:transparent;color:var(--text);border:none;border-radius:0;padding:7px 10px;font:inherit}.vlan-combo-list button:hover{background:var(--bg-hover)}.vlan-combo-list button.sel{color:var(--accent)}.vlan-combo-list button.free{color:var(--warn);border-top:1px solid var(--border)}.progress{height:6px;background:var(--bg);border:1px solid var(--border);border-radius:999px;overflow:hidden}.progress>div{height:100%;background:var(--accent);transition:width .3s}.upgrade-cell{display:flex;flex-direction:column;gap:2px;align-items:flex-start}.upgrade-cell .badge{margin-inline-start:6px}.sidebar-footer{margin-top:auto;padding:10px 12px 2px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:1px;font-size:11px;color:var(--text-dim)}.sidebar-footer .mono{font-size:10px;opacity:.75}.sidebar a.active,.sidebar a:hover{background:var(--bg-hover);color:var(--text)}.sidebar .section{margin:12px 12px 4px;font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--text-dim)}.content{flex:1;min-height:0;overflow:hidden;padding:20px;display:flex;flex-direction:column}.content-scroll{flex:1 1 auto;min-height:0;overflow:auto}.content-scroll:has(>.page2col),.content-scroll:has(>.plan-page){display:flex;flex-direction:column;overflow:hidden}.content-scroll>.page2col,.content-scroll>.plan-page{flex:1 1 auto;min-height:0}@media(max-width:720px){.main,.sidebar-shell{flex-direction:column}.sidebar-shell.collapsed .sidebar{width:auto;max-height:0;padding-block:0}.sidebar-edge-toggle{position:static;transform:none;align-self:center;width:auto;height:28px;padding:0 10px;margin:4px 0;border-radius:var(--radius)}.sidebar{width:auto;flex-direction:row;flex-wrap:wrap;border-inline-end:none;border-bottom:1px solid var(--border)}.sidebar .section{display:none}}h1{font-size:20px;margin:0 0 16px}h1 .sub{font-size:13px;font-weight:400;color:var(--text-dim);margin-inline-start:10px}.card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:16px}table{width:100%;border-collapse:collapse}th,td{text-align:start;padding:8px 10px;border-bottom:1px solid var(--border)}th{color:var(--text-dim);font-weight:500;font-size:12px;text-transform:uppercase;letter-spacing:.5px}tr:hover td{background:var(--bg-hover)}button,.btn{background:var(--accent);color:#fff;border:none;border-radius:var(--radius);padding:8px 14px;font:inherit;cursor:pointer}button:hover,.btn:hover{background:var(--accent-hover);color:#fff}button.secondary{background:var(--bg-hover);color:var(--text);border:1px solid var(--border)}button.danger{background:transparent;color:var(--danger);border:1px solid var(--danger)}button.danger:hover{background:var(--danger);color:#fff}button.ghost{background:transparent;color:var(--text-dim);padding:4px 8px}button.ghost:hover{color:var(--text);background:var(--bg-hover)}button:disabled{opacity:.5;cursor:default}input,select,textarea{background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;font:inherit;width:100%}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent)}input[type=color]{padding:2px;height:36px;width:48px}input[type=checkbox]{width:auto}label{display:block;margin-bottom:12px}label .lbl{display:block;margin-bottom:4px;color:var(--text-dim);font-size:12px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;gap:10px;flex-wrap:wrap}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;padding:16px;z-index:50}.modal{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);padding:20px;width:100%;max-width:480px;max-height:90vh;overflow:auto}.modal.modal-wide{max-width:720px}.modal h2{margin:0 0 16px;font-size:16px}.deploy-list{list-style:none;margin:4px 0 0;padding:0}.deploy-list>li{padding:4px 0;border-bottom:1px solid var(--border)}.deploy-list>li:last-child{border-bottom:none}.modal .actions{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}.vlan-chip{display:inline-block;width:14px;height:14px;border-radius:3px;vertical-align:-2px;margin-inline-end:8px;border:1px solid rgba(255,255,255,.25)}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;background:var(--bg-hover);border:1px solid var(--border);color:var(--text-dim)}.badge.admin{color:var(--accent);border-color:var(--accent)}.proto-pills{display:inline-flex;align-items:center;gap:4px}.badge.proto-up{color:var(--ok);border-color:var(--ok);background:color-mix(in srgb,var(--ok) 14%,transparent);font-weight:700;letter-spacing:.04em;text-transform:uppercase}.badge.proto-down{color:var(--danger);border-color:var(--danger);background:color-mix(in srgb,var(--danger) 14%,transparent);font-weight:700;letter-spacing:.04em;text-transform:uppercase}.badge.proto-blind{color:var(--indeterminate);border-color:var(--indeterminate);background:color-mix(in srgb,var(--indeterminate) 14%,transparent);font-weight:700;letter-spacing:.04em;text-transform:uppercase}.badge.proto-unknown{font-weight:700;letter-spacing:.04em;text-transform:uppercase}.error{color:var(--danger);margin:8px 0}.empty{color:var(--text-dim);padding:24px;text-align:center}pre.code{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:12px;overflow:auto;font-size:12px;white-space:pre}.note{color:var(--text-dim);font-size:12px}.helptip{display:inline-flex;vertical-align:middle;line-height:0}.helptip-btn{all:unset;cursor:help;flex:none;display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;margin-inline-start:5px;border-radius:50%;border:1px solid var(--border);color:var(--text-dim);background:transparent;font-size:10px;font-weight:700;line-height:1;letter-spacing:normal;text-transform:none;position:relative}.helptip-btn:after{content:"";position:absolute;top:-7px;right:-8px;bottom:-4px;left:-8px}.helptip-btn:hover,.helptip-btn:focus-visible,.helptip-btn.on{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}.helptip-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.helptip-bubble{position:fixed;z-index:90;max-height:60vh;overflow:auto;padding:10px 12px;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 24px #00000073;color:var(--text);font-size:12px;font-weight:400;line-height:1.55;letter-spacing:normal;text-transform:none;text-align:start;white-space:normal}.helptip-bubble>p{margin:0 0 8px}.helptip-bubble>p:last-child,.helptip-bubble>ul:last-child{margin-bottom:0}.helptip-bubble ul{margin:0 0 8px;padding-inline-start:18px}.helptip-bubble li{margin:3px 0}.helptip-bubble code,.helptip-bubble .mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.helptip-bubble span{display:inline}.tabs{display:flex;align-items:stretch;align-self:stretch;margin-inline-start:8px}.tabs .tab{display:flex;align-items:center;padding:0 15px;font-size:12.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--text-dim);border-bottom:2px solid transparent;text-decoration:none;white-space:nowrap}.tabs .tab:hover{color:var(--text);background:var(--bg-hover)}.tabs .tab.active{color:var(--text);border-bottom-color:var(--accent)}.tabs .tab[aria-disabled=true]{opacity:.35;cursor:default}.topbar .brand{padding-inline-end:6px}@media(max-width:820px){.topbar{height:auto;flex-wrap:wrap;padding:8px 12px}.tabs{order:3;width:100%;overflow-x:auto;margin-inline-start:0}.tabs .tab{padding:8px 12px}}.tile-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:16px}.tile{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}.tile-label{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim)}.tile-value{display:flex;align-items:center;gap:8px;font-size:24px;font-weight:700;line-height:1.25;margin-top:4px;font-variant-numeric:tabular-nums}.tile-sub{font-size:11px;color:var(--text-dim)}.dash-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:16px;align-items:stretch}.dash-grid>.card{display:flex;flex-direction:column;align-items:stretch}@media(max-width:1000px){.dash-grid{grid-template-columns:1fr}}.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.chart{position:relative;width:100%}.chart svg{display:block;overflow:visible}.chart-ymax{position:absolute;top:-2px;right:0;font-size:10px;color:var(--text-dim);background:var(--bg-panel);padding-inline-start:4px}.chart-ymin{position:absolute;bottom:18px;right:0;font-size:10px;color:var(--text-dim);background:var(--bg-panel);padding-inline-start:4px}.chart-bipolar .chart-legend{margin-top:4px}.chart-legend{display:flex;gap:14px;font-size:11px;color:var(--text-dim);margin-top:2px}.chart-legend span{display:flex;align-items:center;gap:5px}.chart-legend i{width:10px;height:2px;border-radius:1px;display:block}.chart-tip{position:absolute;top:4px;pointer-events:none;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:6px 8px;font-size:11px;min-width:140px;box-shadow:0 6px 18px #0006}.chart-tip-x{color:var(--text-dim);margin-bottom:3px}.chart-tip-row{display:flex;align-items:center;gap:6px}.chart-tip-row b{margin-inline-start:auto;font-variant-numeric:tabular-nums}.barlist{display:flex;flex-direction:column;gap:6px}.barlist-row{display:grid;grid-template-columns:minmax(120px,1.1fr) 1fr auto;align-items:center;gap:10px;font-size:12px}.barlist-label{display:flex;align-items:center;gap:6px;min-width:0}.barlist-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.barlist-track{height:10px;background:var(--bg-hover);border-radius:3px;overflow:hidden}.barlist-fill{display:block;height:100%;border-radius:0 4px 4px 0}.barlist-value{font-variant-numeric:tabular-nums;color:var(--text-dim);font-size:11px;white-space:nowrap}.sev{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:2px 7px;border-radius:999px;border:1px solid}.sev-dim,.sev-info{color:var(--text-dim);border-color:var(--border)}.sev-notice{color:var(--accent);border-color:var(--accent)}.sev-warn{color:var(--warn);border-color:var(--warn)}.sev-error{color:var(--danger);border-color:var(--danger)}.journal td{vertical-align:top;font-size:12px}.ev-compact{display:flex;flex-direction:column}.ev-compact-row{display:flex;gap:10px;font-size:12px;padding:6px 0;border-bottom:1px solid var(--border)}.ev-time{flex:none;font-variant-numeric:tabular-nums}.sitesel{position:relative}.sitesel-btn{display:flex;align-items:center;gap:8px;width:210px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);padding:7px 10px;font-size:13px;text-align:start}.sitesel-btn:hover{border-color:var(--accent);background:var(--bg)}.sitesel-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sitesel-pop{position:absolute;top:calc(100% + 4px);right:0;width:280px;z-index:70;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 12px 32px #00000080;padding:8px}.sitesel-search{margin-bottom:6px}.sitesel-list{max-height:300px;overflow:auto;display:flex;flex-direction:column;gap:2px}.sitesel-opt{display:flex;align-items:center;gap:8px;background:transparent;border:none;border-radius:var(--radius);color:var(--text);font-size:13px;padding:7px 9px;text-align:start}.sitesel-opt .note{margin-inline-start:auto}.sitesel-opt.cursor{background:var(--bg-hover)}.sitesel-opt.sel{color:var(--accent);font-weight:600}.sitesel-empty{padding:10px 9px}.ports-table td{padding:5px 8px;vertical-align:middle}.ports-table th{padding:6px 8px}.desc-input{min-height:26px;font-size:12px;padding:3px 7px;background:transparent;border-color:transparent}.desc-input:hover{border-color:var(--border);background:var(--bg)}.desc-input:focus{background:var(--bg);border-color:var(--accent)}.action-btn{display:inline-flex;align-items:center;gap:6px}.action-btn svg{flex-shrink:0}.cred-actions-cell{width:1%;vertical-align:top}.cred-actions{display:flex;flex-direction:column;align-items:stretch;gap:2px}.cred-actions .action-btn,.cred-actions .badge{justify-content:flex-start;white-space:nowrap}.cred-actions .row{flex-wrap:wrap}.creds-table{table-layout:fixed;width:100%}.creds-col-scope{width:22%;max-width:14rem}.creds-col-scope .note{overflow-wrap:anywhere}.creds-col-user{width:12%}.creds-col-kind{width:14%;white-space:nowrap}.creds-kind-row{display:inline-flex;align-items:center;gap:2px}.creds-col-rotation{width:auto;min-width:12rem}.creds-col-actions{width:9rem}.title-input{font-size:20px;font-weight:700;background:transparent;border:1px solid transparent;padding:2px 6px;width:auto;min-width:220px}.title-input:hover{border-color:var(--border)}.title-input:focus{background:var(--bg);border-color:var(--accent)}.chips{display:flex;flex-wrap:wrap;gap:4px}.chip{display:inline-block;font-size:10px;letter-spacing:.02em;padding:1px 6px;border-radius:999px;background:var(--bg-hover);border:1px solid var(--border);color:var(--text-dim);white-space:nowrap}.chip.home{border-color:var(--accent);color:var(--accent)}.confirm-box{background:var(--bg);border:1px solid var(--warn);border-radius:var(--radius);padding:12px;margin-top:12px}.token-box{background:var(--bg);border:1px solid var(--accent);border-radius:var(--radius);padding:10px 12px;margin-bottom:12px}.page2col{display:grid;grid-template-columns:1fr 300px;gap:20px;align-items:stretch;flex:1 1 auto;min-height:0;overflow:hidden}.page2col.wide-panel{grid-template-columns:1fr 348px}.page2col>main,.page2col>.side-panel{min-height:0;min-width:0}.page2col>main{overflow:auto}.page2col>.side-panel{overflow-x:hidden;overflow-y:auto}@media(max-width:960px){.page2col,.page2col.wide-panel{grid-template-columns:1fr;overflow:visible;flex:none;min-height:auto}.page2col>main,.page2col>.side-panel{overflow:visible}.content,.content-scroll,.content-scroll:has(>.page2col),.content-scroll:has(>.plan-page){overflow:auto;display:block}.content-scroll>.page2col,.content-scroll>.plan-page{flex:none;min-height:auto}.plan-body{flex-direction:column}}.side-panel{border-inline-start:1px solid var(--border);padding-inline-start:16px;min-width:0;max-width:100%}.side-panel select,.side-panel input,.side-panel textarea,.side-panel button{max-width:100%}.side-panel .note,.side-panel-group-body{overflow-wrap:anywhere;word-break:break-word}@media(max-width:960px){.side-panel{border-inline-start:none;padding-inline-start:0}}.side-panel-group{border-top:1px solid var(--border);padding:8px 0 4px}.side-panel-group:first-child{border-top:none;padding-top:0}.side-panel-group>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;-webkit-user-select:none;user-select:none;min-height:22px}.side-panel-group>summary::-webkit-details-marker{display:none}.side-panel-group>summary:before{content:"▸";flex:none;font-size:10px;color:var(--text-dim);transition:transform .12s ease}.side-panel-group[open]>summary:before{transform:rotate(90deg)}.side-panel-group-meta{margin-inline-start:auto;font-size:11px;display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:55%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.side-panel-group-body{margin-top:10px;min-width:0}.kicker{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim)}.dot{width:9px;height:9px;border-radius:50%;flex:none;display:inline-block}.kv{display:grid;grid-template-columns:92px minmax(0,1fr);row-gap:7px;font-size:12px;min-width:0}.kv .k{font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);padding-top:2px}.mgmt-caps-list{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:11px;font-variant-numeric:tabular-nums}.mgmt-caps-list span{color:var(--text)}.meter{height:5px;background:var(--bg-hover);border-radius:3px;overflow:hidden;margin-top:5px}.meter>div{height:100%}.spark{display:block;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-panel)}.alert-list{display:flex;flex-direction:column;gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin:0 0 16px}.alert-row{display:flex;align-items:center;gap:10px;background:var(--bg-panel);border:none;border-radius:0;padding:9px 12px;text-align:start;cursor:pointer;color:var(--text);font-size:12px;font-weight:600}.alert-row:hover{background:var(--bg-hover)}.alert-banner{display:flex;align-items:center;gap:10px;border:1px solid var(--danger);border-radius:var(--radius);padding:10px 12px;margin:0 0 16px;font-size:12px;font-weight:600}.device-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:12px}.device-card{cursor:pointer;gap:9px;display:flex;flex-direction:column;margin-bottom:0}.device-card:hover{background:var(--bg-hover)}.device-card-foot{display:flex;gap:14px;font-size:11px;color:var(--text-dim);border-top:1px solid var(--border);padding-top:8px}.port-legend{display:flex;align-items:center;gap:18px;margin-top:16px;padding-top:10px;border-top:1px solid var(--border);font-size:11px;color:var(--text-dim);flex-wrap:wrap}.port-legend span{display:flex;align-items:center;gap:6px}.port-legend .sw{width:11px;height:11px;border-radius:2px;display:block}.port-legend .sw.poe{width:5px;height:5px;background:var(--text-dim)}.port-label-input{margin-top:8px;font-weight:700;font-size:14px}.prof-row{display:flex;align-items:center;gap:8px;text-align:start;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);padding:7px 10px;cursor:pointer;color:var(--text);width:100%}.prof-row:hover{background:var(--bg-hover)}.prof-row.sel{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}.prof-row:disabled{opacity:.45;cursor:not-allowed}.seg3{display:flex;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:10px}.seg3 button{flex:1;background:transparent;color:var(--text-dim);border:none;border-radius:0;font-size:12px;font-weight:700;letter-spacing:.04em;padding:7px 4px}.seg3 button+button{border-inline-start:1px solid var(--border)}.seg3 button.on{background:var(--accent);color:#fff}.seg3 button:not(.on):hover{background:var(--bg-hover)}.vlan-pick{display:flex;flex-direction:column;gap:3px;max-height:340px;overflow:auto}.vlan-row{display:flex;align-items:center;gap:8px;background:transparent;border:1px solid var(--border);border-radius:var(--radius);padding:6px 9px;text-align:start;cursor:pointer;color:var(--text);font-size:12px}.vlan-row:hover{background:var(--bg-hover)}.vlan-row.sel{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}.plan-page{display:flex;flex-direction:column;min-height:0;height:100%}.plan-page>.toolbar{flex:none;margin-bottom:8px}.plan-diagnostics{flex:none;max-height:120px;overflow:auto;margin-bottom:8px}.plan-body{flex:1 1 auto;min-height:0;display:flex;gap:0}.plan-node-ghost{border-style:solid;border-color:var(--border);background:var(--bg);opacity:1;pointer-events:auto;cursor:grab}.plan-node-ghost:active{cursor:grabbing}.plan-ghost-dot{width:8px;height:8px;border-radius:50%;background:color-mix(in srgb,var(--ok) 55%,var(--text-dim));flex:none}.plan-wrap{flex:1 1 auto;min-width:0;min-height:0;overflow:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-panel)}.plan-stage,.plan-canvas{position:relative}.plan-canvas.linking,.plan-canvas.linking .plan-node{cursor:crosshair}.plan-node.plan-node-link-src{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 45%,transparent)}.plan-node.plan-node-link-tgt:hover{border-color:var(--ok);box-shadow:0 0 0 2px color-mix(in srgb,var(--ok) 40%,transparent)}.plan-link-traffic{position:fixed;z-index:50;padding:10px 12px 8px;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 10px 32px color-mix(in srgb,#000 30%,transparent);pointer-events:none}.plan-link-traffic-head{margin-bottom:6px}.plan-link-traffic-title{font-size:12px;font-weight:700;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plan-link-hint{font-size:12px;color:var(--text-dim);max-width:280px;line-height:1.3}.zoom-ctl{display:flex;align-items:center;gap:4px}.zoom-level{min-width:46px;text-align:center;font-size:11px;font-variant-numeric:tabular-nums;color:var(--text-dim)}.plan-links{position:absolute;left:0;top:0;overflow:visible}.plan-zone{position:absolute;border:1px dashed var(--border);border-radius:var(--radius);pointer-events:none}.plan-zone span{position:absolute;top:6px;left:8px;font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:var(--text-dim)}.plan-node{position:absolute;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:none}.plan-node:hover{border-color:var(--accent)}.plan-node-stp{display:flex;flex-direction:column;gap:1px;margin:2px 0 0 15px;font-size:9px;line-height:1.35;color:var(--text)}.plan-stp-root{font-size:9px;font-weight:700;letter-spacing:.06em;color:var(--accent);border:1px solid var(--accent);border-radius:3px;padding:0 4px;flex:none}button.secondary.on{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}.plan-toggle-btn{display:inline-flex;align-items:center;padding:8px 14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-hover);color:var(--text);font:inherit;line-height:1.2;cursor:pointer;-webkit-user-select:none;user-select:none}.plan-toggle-btn:hover{background:color-mix(in srgb,var(--bg-hover) 70%,var(--border))}.plan-toggle-btn.on{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}.plan-toggle-btn .switch{align-items:center;gap:8px;margin:0;cursor:inherit}.plan-toggle-btn .switch-track{width:28px;height:16px;margin-top:0;border-radius:8px}.plan-toggle-btn .switch-thumb{width:12px;height:12px;margin:1px}.plan-toggle-btn .switch input:checked+.switch-track .switch-thumb{transform:translate(12px)}.plan-toggle-btn .switch-label{font-size:inherit;font-weight:inherit;line-height:inherit;white-space:nowrap}.plan-toggle-btn .switch-text{display:block}.toast{position:fixed;left:20px;bottom:20px;z-index:60;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 12px 32px #00000080;padding:10px 14px;display:flex;align-items:center;gap:10px;font-size:12px;font-weight:600;animation:toastin .18s ease-out}.toast-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);flex:none}@keyframes toastin{0%{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}.login-wrap{height:100%;display:flex;align-items:center;justify-content:center;padding:16px}.login-card{width:100%;max-width:360px}.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:20px}.login-brand h1{margin:0;font-size:22px;letter-spacing:.5px}.login-lang{margin-top:16px;display:flex;justify-content:center}.langsel{position:relative}.langsel-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);line-height:1}.langsel-btn:hover,.langsel-btn.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--bg))}.langsel-flag{font-size:16px;line-height:1}.langsel-pop{position:absolute;top:calc(100% + 4px);inset-inline-end:0;z-index:70;min-width:180px;max-height:320px;overflow:auto;display:flex;flex-direction:column;gap:2px;padding:6px;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 12px 32px #00000080}.langsel-opt{display:flex;align-items:center;gap:10px;width:100%;padding:7px 9px;background:transparent;border:none;border-radius:var(--radius);color:var(--text);font-size:13px;text-align:start}.langsel-opt:hover,.langsel-opt.cursor{background:var(--bg-hover)}.langsel-opt.sel{color:var(--accent);font-weight:600}.langsel-label{flex:1}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.search{min-width:320px;flex:1;max-width:560px}.chip-row{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.warn-text{color:var(--warn)}.warn-list{margin:8px 0 0;padding-inline-start:18px;font-size:11px;line-height:1.6;color:var(--warn)}.badge.warn{border-color:var(--warn);color:var(--warn)}.choice-list{display:flex;flex-direction:column;gap:6px;margin:6px 0 4px}.choice{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius);cursor:pointer}.choice.active{border-color:var(--accent)}.choice input{margin-top:2px;width:auto;flex:none}.choice>span{display:flex;flex-direction:column;gap:3px;font-size:12px}.raw-output,.raw-input{width:100%;max-height:320px;overflow:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;color:var(--text);white-space:pre}.raw-input{max-height:none;resize:vertical}.reset-list{display:flex;flex-direction:column;gap:12px}.reset-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;margin-top:10px}.reset-steps{margin:6px 0 0;padding-inline-start:20px;font-size:12px;line-height:1.7}.reset-steps code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;background:var(--bg);border:1px solid var(--border);border-radius:3px;padding:1px 5px}.switch{display:inline-flex;align-items:flex-start;gap:10px;cursor:pointer;-webkit-user-select:none;user-select:none}.switch.is-disabled{cursor:not-allowed;opacity:.55}.switch input{position:absolute;opacity:0;width:0;height:0}.switch-track{flex:none;width:38px;height:22px;margin-top:1px;border-radius:11px;background:var(--bg);border:1px solid var(--border);transition:background .15s ease,border-color .15s ease}.switch-thumb{display:block;width:16px;height:16px;margin:2px;border-radius:50%;background:var(--text-dim);transition:transform .15s ease,background .15s ease}.switch input:checked+.switch-track{background:var(--accent);border-color:var(--accent)}.switch input:checked+.switch-track .switch-thumb{transform:translate(16px);background:#fff}.switch input:focus-visible+.switch-track{outline:2px solid var(--accent);outline-offset:2px}.switch-text{display:flex;flex-direction:column;gap:2px}.switch-label{line-height:1.4}.switch-hint{color:var(--text-dim);font-size:12px;line-height:1.35}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px 16px;align-items:start}.form-grid.cols-2{grid-template-columns:repeat(2,minmax(200px,1fr))}@media(max-width:620px){.form-grid.cols-2{grid-template-columns:1fr}}.form-grid>label{min-width:0}.form-grid input,.form-grid select{width:100%;box-sizing:border-box}@keyframes port-fade-pending{0%,to{box-shadow:0 0 #4f7cff00}50%{box-shadow:0 0 0 2px #4f7cfff2}}@keyframes port-fade-drift{0%,to{box-shadow:0 0 #f5a62300}50%{box-shadow:0 0 0 2px #f5a623f2}}.port-pending{animation:port-fade-pending 1.6s ease-in-out infinite}.port-drift{animation:port-fade-drift 1.6s ease-in-out infinite}@keyframes port-fade-applying{0%,to{box-shadow:0 0 #4f7cff33}50%{box-shadow:0 0 0 3px #4f7cff}}.port-applying{animation:port-fade-applying .85s ease-in-out infinite}.quicktip-inline{display:inline-flex;flex:none;vertical-align:top;max-width:100%}.quicktip-block{display:block}.port-square-tip{display:inline-flex;flex:none;vertical-align:top;max-width:100%}@media(prefers-reduced-motion:reduce){.port-pending,.port-drift,.port-applying{animation:none}.port-pending{box-shadow:0 0 0 2px #4f7cfff2}.port-drift{box-shadow:0 0 0 2px #f5a623f2}.port-applying{box-shadow:0 0 0 3px #4f7cff}}.drift-banner{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap;border:1px solid var(--warn);border-inline-start-width:3px;border-radius:var(--radius);background:#f5a62314;padding:12px 14px;margin-bottom:16px}.drift-banner .drift-text{flex:1;min-width:260px}.drift-banner .drift-title{color:var(--warn);font-weight:600;margin-bottom:4px}.drift-banner ul{margin:6px 0 0;padding-inline-start:18px;color:var(--text-dim);font-size:12px}.pill-suggest{position:absolute;z-index:30;top:calc(100% + 2px);left:0;min-width:180px;max-height:190px;overflow-y:auto;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 24px #00000073;padding:4px}.pill-suggest button{display:block;width:100%;text-align:start;background:none;border:0;color:var(--text);font-size:12px;padding:5px 8px;border-radius:4px;min-height:0}.pill-suggest button:hover,.pill-suggest button.on{background:var(--bg-hover)}.info-banner{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap;border:1px solid var(--border);border-inline-start-width:3px;border-radius:var(--radius);background:var(--bg-hover);padding:12px 14px;margin-bottom:16px}.info-banner .info-title{font-weight:600;margin-bottom:4px}.info-banner ul{margin:6px 0 0;padding-inline-start:18px;color:var(--text-dim);font-size:12px}.tag-list{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.badge.tag{display:inline-flex;align-items:center;gap:4px;padding-inline-end:3px}.badge.tag-rule{border-style:dashed}.badge.tag-technical{border-style:solid;border-color:var(--accent);background:#4f7cff24;cursor:help}.badge.tag .tag-drop{background:none;border:none;border-radius:999px;color:var(--text-dim);cursor:pointer;font-size:13px;line-height:1;padding:1px 4px}.badge.tag .tag-drop:hover:not(:disabled){background:var(--bg-hover);color:var(--danger)}.badge.tag .tag-drop:disabled{cursor:default;opacity:.4}.tag-combo{position:relative}.tag-input{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-height:36px;padding:5px 8px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);cursor:text}.tag-input:focus-within{border-color:var(--accent)}.tag-input input{flex:1 1 90px;min-width:90px;width:auto;border:none;background:transparent;padding:2px 0;font-size:12px}.tag-input input:focus{outline:none;border:none}@keyframes dot-fade-pending{0%,to{box-shadow:0 0 #4f7cff00}50%{box-shadow:0 0 0 3px #4f7cff8c}}@keyframes dot-fade-drift{0%,to{box-shadow:0 0 #f5a62300}50%{box-shadow:0 0 0 3px #f5a6238c}}.dot.dot-pending{animation:dot-fade-pending 1.6s ease-in-out infinite}.dot.dot-drift{animation:dot-fade-drift 1.6s ease-in-out infinite}@keyframes dot-fade-applying{0%,to{box-shadow:0 0 #4f7cff26}50%{box-shadow:0 0 0 4px #4f7cffd9}}.dot.dot-applying{animation:dot-fade-applying .85s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.dot.dot-pending,.dot.dot-drift,.dot.dot-applying{animation:none}.dot.dot-applying{box-shadow:0 0 0 4px #4f7cffd9}}.debug-log{max-height:65vh;overflow:auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.6}.debug-line{display:grid;grid-template-columns:74px 52px 1fr;gap:8px;padding:1px 0;border-bottom:1px solid transparent;word-break:break-word}.debug-line:hover{background:var(--bg-hover)}.debug-ts,.debug-attrs{color:var(--text-dim)}@keyframes mgmt-warn-fade{0%,to{border-color:var(--warn);box-shadow:0 0 #f5a62300}50%{border-color:var(--warn);box-shadow:0 0 0 3px #f5a62359}}.mgmt-warn-banner{animation:mgmt-warn-fade 1.6s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.mgmt-warn-banner{animation:none;box-shadow:0 0 0 3px #f5a62359}}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;font-size:16px;line-height:1}@keyframes spin{to{transform:rotate(360deg)}}.icon-btn .spin{display:inline-block;animation:spin .9s linear infinite}.tele-block{margin-top:18px;padding-top:14px;border-top:1px solid var(--border)}.tele-charts{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}.tile-missing{border-style:dashed}.tile-missing .tile-sub{margin-top:4px;line-height:1.45;white-space:normal}.tile-unavailable{border-style:dashed;border-color:var(--warn);cursor:help}.tile-bang{color:var(--warn);font-size:28px;font-weight:800;line-height:1.1;justify-content:center}.tile-poe-stack{flex-direction:column;align-items:flex-start;gap:2px;font-size:18px}.tile-poe-dir{display:inline-block;min-width:2.4em;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim)}button.chip{cursor:pointer;background:transparent;font:inherit;font-size:10px;padding:2px 8px}button.chip:hover{border-color:var(--accent);color:var(--text)}button.chip.on{border-color:var(--accent);color:var(--accent);font-weight:600}.stp-dual{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:14px 12px;align-items:stretch;margin-top:18px;max-width:760px;padding:14px;background:linear-gradient(180deg,rgba(79,124,255,.06),transparent 48%),var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius)}.stp-dual--readonly{opacity:.85}.stp-col{display:flex;flex-direction:column;gap:8px;min-width:0}.stp-col-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;min-height:1.2em}.stp-col-head .kicker{margin:0}.stp-col-count{flex:none;min-width:1.4em;padding:1px 7px;border-radius:999px;border:1px solid var(--border);background:var(--bg);color:var(--text-dim);font-size:11px;font-variant-numeric:tabular-nums;text-align:center}.stp-col--preferred .stp-col-count{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));color:var(--accent-hover)}.stp-list{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;min-height:220px;margin:0;padding:6px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);font:inherit;font-variant-numeric:tabular-nums;line-height:1.45;cursor:pointer;outline:none;transition:border-color .12s ease,box-shadow .12s ease}.stp-list:hover:not(:disabled){border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}.stp-list:focus-visible{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 28%,transparent)}.stp-list:disabled{cursor:not-allowed;color:var(--text-dim)}.stp-list--preferred{border-color:color-mix(in srgb,var(--accent) 40%,var(--border));background:linear-gradient(180deg,rgba(79,124,255,.07),transparent 42%),var(--bg)}.stp-list--empty{color:var(--text-dim);font-style:italic;cursor:default}.stp-list option{padding:8px 10px;margin:2px 0;border-radius:6px;background:transparent;color:var(--text)}.stp-list option:checked,.stp-list option:hover{background:color-mix(in srgb,var(--accent) 22%,var(--bg-hover));color:var(--text)}.stp-list option:disabled{color:var(--text-dim);font-style:italic}.stp-actions{display:flex;flex-direction:column;gap:8px;justify-content:center;align-self:center;flex:none;padding:4px 0}.stp-actions-sep{height:1px;margin:4px 2px;background:var(--border)}.stp-action-btn{min-width:7.5rem;justify-content:flex-start}.stp-action-btn:disabled{opacity:.4}@media(max-width:720px){.stp-dual{grid-template-columns:1fr;max-width:none}.stp-actions{flex-direction:row;flex-wrap:wrap;justify-content:stretch;padding:0}.stp-actions-sep{display:none}.stp-action-btn{flex:1 1 calc(50% - 4px);min-width:0;justify-content:center}.stp-list{min-height:160px}}.console-backdrop{z-index:60;padding:24px}.console-panel{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);width:min(1400px,96vw);height:min(860px,92vh);display:flex;flex-direction:column;gap:10px;padding:16px;overflow:hidden}.console-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.console-device{font-size:16px;font-weight:700;margin-top:4px}.console-note{padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:12px}.console-note.error{border-color:var(--warn);color:var(--warn)}.console-term{flex:1 1 auto;min-height:0;background:#0b0e14;border:1px solid var(--border);border-radius:8px;padding:8px;overflow:hidden}.console-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-height:24px}.console-state{font-size:10px;letter-spacing:.06em;text-transform:uppercase;font-weight:700}.console-state.connecting{color:var(--text-dim)}.console-state.open{color:var(--ok)}.console-state.closed{color:var(--warn)}.console-webnote{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.console-frame{flex:1 1 auto;min-height:0;width:100%;border:1px solid var(--border);border-radius:8px;background:#fff}.console-frame-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:transparent}@keyframes port-errdisabled-pulse{0%,to{background-color:#e5484d26}50%{background-color:#e5484d8c}}.port-errdisabled{animation:port-errdisabled-pulse 1s ease-in-out infinite}.check{display:inline-flex;align-items:center;gap:8px;margin:0;cursor:pointer;-webkit-user-select:none;user-select:none}.check input[type=checkbox]{position:absolute;opacity:0;width:1px;height:1px;margin:0;pointer-events:none}.check .box{flex:none;width:18px;height:18px;border:1px solid var(--border);border-radius:4px;background:var(--bg);display:inline-flex;align-items:center;justify-content:center;transition:background .12s,border-color .12s}.check .box:after{content:"";width:5px;height:9px;border:solid var(--bg);border-width:0 2px 2px 0;transform:rotate(45deg) translate(-1px,-1px);opacity:0;transition:opacity .12s}.check input:checked+.box{background:var(--accent);border-color:var(--accent)}.check input:checked+.box:after{opacity:1}.check input:focus-visible+.box{outline:2px solid var(--accent);outline-offset:2px}.check input:disabled+.box{opacity:.45}.check input:disabled~span{opacity:.45}.optgroup{border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;margin:0 0 12px}.optgroup>.optgroup-head{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-dim);margin-bottom:8px}.optgroup .row{gap:16px;flex-wrap:wrap}.pillbox{position:relative}.pillbox-field{display:flex;flex-wrap:wrap;align-items:center;gap:4px;min-height:36px;padding:4px 6px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);cursor:text}.pillbox-field:focus-within{border-color:var(--accent)}.pillbox .chip.sel{display:inline-flex;align-items:center;gap:6px;background:var(--bg-hover);border-color:var(--accent);color:var(--text);padding:2px 4px 2px 8px}.pillbox .chip.sel button{background:none;border:0;color:var(--text-dim);font-size:14px;line-height:1;padding:0 2px;min-height:0;cursor:pointer}.pillbox .chip.sel button:hover{color:var(--danger)}.pillbox-field input{flex:1 1 80px;min-width:80px;border:0;background:none;padding:2px;height:auto;min-height:0}.pillbox-field input:focus{outline:none}.vendor-badge{display:inline-flex;align-items:center;gap:7px;min-width:0}.vendor-logo{flex:none}.vendor-mono{flex:none;width:18px;height:18px;border-radius:4px;color:#fff;font-size:9px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;letter-spacing:.03em}.vendor-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:150px}.clients-filters{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:10px 0 12px}.clients-filter{display:flex;align-items:center;gap:6px;flex:0 1 auto}.clients-filter .pillbox{min-width:200px}.clients-filter .kicker{margin-right:0}.clients-table td{vertical-align:middle}.lag-row{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--border);flex-wrap:wrap}.lag-row:last-of-type{border-bottom:none}.lag-swatch{width:14px;height:6px;border-radius:3px;flex:none}.lag-members{display:inline-flex;gap:4px;flex-wrap:wrap}.lag-editor{margin-top:10px;padding:12px;border:1px solid var(--border);border-radius:var(--radius);display:flex;flex-direction:column;gap:10px}.lag-editor-head,.lag-editor-vlan,.lag-editor-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.lag-editor-head label,.lag-editor-vlan label{display:inline-flex;align-items:center;gap:6px}.lag-editor-members{display:flex;align-items:center;gap:4px;flex-wrap:wrap}a.gear-btn{display:inline-flex;align-items:center;justify-content:center;color:var(--text-dim);background:var(--bg-hover);border:1px solid var(--border);border-radius:var(--radius)}a.gear-btn:hover{color:var(--text);border-color:var(--accent);background:var(--bg-hover)}a.gear-btn.active{border-color:var(--accent);color:var(--accent)}.hard-stage{margin:10px 0;padding:10px 12px;border:1px solid var(--border);border-left:4px solid var(--accent);border-radius:var(--radius)}.hard-stage-act{border-left-color:var(--warn);background:color-mix(in srgb,var(--warn) 12%,transparent);font-size:15px}.hard-stage-title{font-weight:700;margin-bottom:4px}.hard-steps{list-style:none;margin:12px 0;padding:0;display:flex;flex-direction:column;gap:6px}.hard-step{display:flex;align-items:baseline;gap:8px}.hard-step.pending,.hard-step.done{color:var(--text-dim)}.hard-step.done .hard-step-dot{color:var(--ok)}.hard-step.active{color:var(--text);font-weight:600}.hard-step.active .hard-step-dot{color:var(--accent)}.hard-step.loud{color:var(--warn);font-size:15px}.hard-step.loud .hard-step-dot{color:var(--warn);animation:hardpulse 1s ease-in-out infinite}@keyframes hardpulse{50%{opacity:.25}}.hard-step-dot{flex:none;width:16px;text-align:center}
