:root,[data-theme=dark]{--md-primary: #8AB8E0;--md-on-primary: #0D2440;--md-primary-container: #1A3A5C;--md-on-primary-container: #D4E4F7;--md-secondary: #90C2F0;--md-on-secondary: #0C2D4A;--md-secondary-container: #1F3A56;--md-on-secondary-container: #C8DDF2;--md-tertiary: #57CEF7;--md-on-tertiary: #003A52;--md-link: #5BA8FF;--md-tertiary-container: #003A52;--md-on-tertiary-container: #B3E6FA;--md-error: #FFB4AB;--md-on-error: #690005;--md-error-container: #4A0F0C;--md-on-error-container: #FDDAD7;--md-background: #0A1520;--md-on-background: #D6E4F0;--md-surface: #0D1B2A;--md-surface-1: #112334;--md-surface-2: #16293D;--md-surface-3: #1B3047;--md-surface-container: #112334;--md-surface-container-high: #16293D;--md-surface-container-highest: #1B3047;--md-on-surface: #D6E4F0;--md-surface-variant: #1E3347;--md-on-surface-variant: #A8BED0;--md-outline: #5C7A94;--md-outline-variant: #1E3347;--md-inverse-surface: #EEF2F6;--md-inverse-on-surface: #1A2D40;--md-inverse-primary: #15539E;--snack-bg: #222B36;--snack-fg: #ECF1F7;--snack-action: #7FB4F2;--snack-dismiss: #AFC0D4;--md-scrim: rgba(0, 0, 0, .65);--signal-ok: #5AC88A;--signal-warn: #FBBF24;--signal-error: #FFB4AB;--signal-idle: #A8BED0;--signal-pending: #57CEF7;--diagram-wire: #90C2F0;--diagram-bus: #57CEF7;--diagram-block: #112334;--diagram-block-2: #16293D;--diagram-block-border: #2E4A66;--diagram-block-header: #1B3047;--diagram-selected: #57CEF7;--diagram-grid: rgba(168, 190, 208, .08);--diagram-grid-major: rgba(168, 190, 208, .14);--part-highlight: rgba(87, 206, 247, .18);--connector-active: #5AC88A;--connector-inactive: #5C7A94;--owner-1: #1F4F87;--owner-2: #7B4A00;--owner-3: #0E5934;--owner-4: #4A2A8C;--owner-5: #8E1F1F}[data-theme=light]{--md-primary: #1A3A5C;--md-on-primary: #FFFFFF;--md-primary-container: #D4E4F7;--md-on-primary-container: #0D2440;--md-secondary: #2E6DA4;--md-on-secondary: #FFFFFF;--md-secondary-container: #C8DDF2;--md-on-secondary-container: #0C2D4A;--md-tertiary: #00A3E0;--md-on-tertiary: #FFFFFF;--md-link: #1565E0;--md-tertiary-container: #B3E6FA;--md-on-tertiary-container: #003A52;--md-error: #CF3B35;--md-on-error: #FFFFFF;--md-error-container: #FDDAD7;--md-on-error-container: #5C0B08;--md-background: #F5F7FA;--md-on-background: #0D1B2A;--md-surface: #FFFFFF;--md-surface-1: #F5F7FA;--md-surface-2: #EDF1F6;--md-surface-3: #E5EBF2;--md-surface-container: #F5F7FA;--md-surface-container-high: #EDF1F6;--md-surface-container-highest: #E5EBF2;--md-on-surface: #0D1B2A;--md-surface-variant: #DDE4ED;--md-on-surface-variant: #3A4D60;--md-outline: #6B8299;--md-outline-variant: #C0CDD9;--md-inverse-surface: #1A2D40;--md-inverse-on-surface: #EEF2F6;--md-inverse-primary: #9CC9F2;--snack-bg: #222B36;--snack-fg: #ECF1F7;--snack-action: #7FB4F2;--snack-dismiss: #AFC0D4;--md-scrim: rgba(13, 27, 42, .45);--signal-ok: #1E7A4A;--signal-warn: #B45309;--signal-error: #CF3B35;--signal-idle: #6B8299;--signal-pending: #00A3E0;--diagram-wire: #2E6DA4;--diagram-bus: #00A3E0;--diagram-block: #FFFFFF;--diagram-block-2: #F5F7FA;--diagram-block-border: #C0CDD9;--diagram-block-header: #EDF1F6;--diagram-selected: #00A3E0;--diagram-grid: rgba(13, 27, 42, .05);--diagram-grid-major: rgba(13, 27, 42, .09);--part-highlight: #D4E4F7;--connector-active: #1E7A4A;--connector-inactive: #6B8299;--owner-1: #1F4F87;--owner-2: #7B4A00;--owner-3: #0E5934;--owner-4: #4A2A8C;--owner-5: #8E1F1F}:root{--font-sans: "IBM Plex Sans", system-ui, -apple-system, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--t-display-s: 38px / 46px var(--font-sans);--t-headline-m: 30px / 38px var(--font-sans);--t-headline-s: 26px / 34px var(--font-sans);--t-title-l: 24px / 30px var(--font-sans);--t-title-m: 18px / 26px var(--font-sans);--t-title-s: 16px / 22px var(--font-sans);--t-label-l: 15px / 20px var(--font-sans);--t-label-m: 13px / 18px var(--font-sans);--t-label-s: 12px / 16px var(--font-sans);--t-body-l: 17px / 26px var(--font-sans);--t-body-m: 15px / 22px var(--font-sans);--t-body-s: 13px / 18px var(--font-sans);--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 24px;--s-6: 32px;--s-7: 48px;--s-8: 64px;--r-1: 4px;--r-2: 8px;--r-3: 12px;--r-4: 16px;--r-5: 28px;--r-pill: 9999px;--el-1: 0 1px 2px rgba(0, 0, 0, .3), 0 1px 3px 1px rgba(0, 0, 0, .15);--el-2: 0 1px 2px rgba(0, 0, 0, .3), 0 2px 6px 2px rgba(0, 0, 0, .15);--el-3: 0 4px 8px 3px rgba(0, 0, 0, .15), 0 1px 3px rgba(0, 0, 0, .3)}[data-theme=light]{--el-1: 0 1px 2px rgba(13, 27, 42, .08), 0 1px 3px rgba(13, 27, 42, .05);--el-2: 0 2px 6px rgba(13, 27, 42, .1), 0 1px 3px rgba(13, 27, 42, .06);--el-3: 0 6px 14px rgba(13, 27, 42, .12), 0 2px 4px rgba(13, 27, 42, .06)}body{font:var(--t-body-m);font-feature-settings:"ss01","ss02","cv11";background:var(--md-background);color:var(--md-on-background);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow:hidden}input,textarea{font:inherit;color:inherit}::selection{background:var(--part-highlight);color:var(--md-on-surface)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--md-outline-variant);border-radius:var(--r-pill);border:2px solid var(--md-background)}::-webkit-scrollbar-thumb:hover{background:var(--md-outline)}.app{display:grid;grid-template-rows:56px 1fr;grid-template-columns:1fr 6px var(--panel-w, 380px);grid-template-areas:"title  title  title" "main   psplit panel";height:100vh;background:var(--md-background);color:var(--md-on-background)}.title-bar{grid-area:title}.app.is-readonly .main-area{grid-template-rows:1fr}.app.is-readonly{grid-template-rows:0 1fr}.app.is-readonly .title-bar{display:none}.zoom-panel{display:inline-flex;align-items:center;gap:2px;padding:4px;border-radius:var(--r-2);background:color-mix(in srgb,var(--md-surface) 88%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--md-outline-variant);box-shadow:var(--el-2)}.zoom-panel button{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-1);color:var(--md-on-surface-variant)}.zoom-panel button:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.zoom-panel .icon{font:18px/1 Material Symbols Outlined}.zoom-panel .zoom-readout{font:var(--t-label-m);font-family:var(--font-mono);color:var(--md-on-surface-variant);min-width:42px;text-align:center}.app.is-readonly .block-head{cursor:default}.app.is-readonly .sp-icon-btn,.app.is-readonly .sp-action-row,.app.is-readonly .port-bulk,.app.is-readonly .port-table th.chk,.app.is-readonly .port-table td.chk,.app.is-readonly .pm-save,.app.is-readonly .frepl,.app.is-readonly .ver-restore,.app.is-readonly .elbow-handle{display:none!important}.app.is-readonly .kv-field,.app.is-readonly .bl-input,.app.is-readonly .port-bulk-tie input,.app.is-readonly .field input,.app.is-readonly .field textarea,.app.is-readonly .radio-row input{pointer-events:none;opacity:.7}.app.is-readonly .btn-filled,.app.is-readonly .btn-tonal,.app.is-readonly .btn-danger{display:none}.main-area{grid-area:main;display:grid;grid-template-rows:1fr 6px var(--console-h, 25vh);min-height:0}.side-panel{grid-area:panel;min-height:0}.panel-splitter{grid-area:psplit;position:relative;background:var(--md-outline-variant);cursor:ew-resize;z-index:5;transition:background .12s ease}.panel-splitter:before{content:"";position:absolute;top:0;right:-4px;bottom:0;left:-4px;z-index:1}.panel-splitter:after{content:"";position:absolute;top:50%;left:50%;width:2px;height:36px;border-radius:2px;background:var(--md-on-surface-variant);opacity:.35;transform:translate(-50%,-50%);transition:opacity .12s ease}.panel-splitter:hover,.panel-splitter.is-dragging{background:var(--md-primary)}.panel-splitter:hover:after,.panel-splitter.is-dragging:after{opacity:.9;background:var(--md-on-primary)}body.is-resizing-panel{cursor:ew-resize;-webkit-user-select:none;user-select:none}body.is-resizing-panel *{cursor:ew-resize!important}.canvas-wrap{position:relative;min-height:0;overflow:hidden}.console-panel{min-height:0;border-top:1px solid var(--md-outline-variant)}.console-splitter{position:relative;background:var(--md-outline-variant);cursor:ns-resize;z-index:5;transition:background .12s ease}.console-splitter:before{content:"";position:absolute;top:-4px;right:0;bottom:-4px;left:0;z-index:1}.console-splitter:after{content:"";position:absolute;left:50%;top:50%;width:36px;height:2px;border-radius:2px;background:var(--md-on-surface-variant);opacity:.35;transform:translate(-50%,-50%);transition:opacity .12s ease}.console-splitter:hover,.console-splitter.is-dragging{background:var(--md-primary)}.elbow-handle .elbow-grip{fill:var(--md-surface);stroke:var(--md-on-surface-variant);stroke-width:1.25;filter:drop-shadow(0 1px 2px rgba(0,0,0,.25));transition:fill .12s ease,stroke .12s ease}.elbow-handle:hover .elbow-grip{fill:var(--md-primary-container);stroke:var(--md-primary)}.elbow-handle .elbow-grip.is-error{stroke:var(--signal-error)}.elbow-handle .elbow-grip.is-warn{stroke:var(--signal-warn)}.elbow-handle .elbow-grip-inner{fill:var(--md-on-surface-variant);opacity:.5}.elbow-handle:hover .elbow-grip-inner{fill:var(--md-primary);opacity:1}.console-splitter:hover:after,.console-splitter.is-dragging:after{opacity:.9;background:var(--md-on-primary)}body.is-resizing-console{cursor:ns-resize;-webkit-user-select:none;user-select:none}body.is-resizing-console *{cursor:ns-resize!important}.title-bar{display:flex;align-items:center;gap:var(--s-3);padding:0 var(--s-4) 0 var(--s-3);background:var(--md-surface);border-bottom:1px solid var(--md-outline-variant);z-index:20}.tb-logo{display:flex;align-items:center;gap:var(--s-2);padding:0 var(--s-2);height:36px;border-radius:var(--r-2);cursor:pointer;transition:background .12s}.tb-logo:hover{background:var(--md-surface-2)}.tb-logo-mark{width:22px;height:22px;border-radius:5px;background:linear-gradient(135deg,var(--md-primary) 0 50%,transparent 50%),var(--md-tertiary);position:relative}.tb-logo-mark:after{content:"";position:absolute;top:5px;right:5px;bottom:5px;left:5px;background:var(--md-surface);border-radius:2px}.tb-logo-name{font:600 14px/1 var(--font-sans);letter-spacing:.04em}.tb-divider{width:1px;height:22px;background:var(--md-outline-variant)}.tb-project{display:flex;align-items:center;gap:var(--s-2);padding:6px var(--s-3);border-radius:var(--r-2);font:var(--t-title-s);cursor:pointer;transition:background .12s;min-width:0}.tb-project:hover,.tb-project.is-open{background:var(--md-surface-2)}.tb-project-name{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:clamp(90px,14vw,280px)}.tb-project-wrap{position:relative}.proj-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:30;width:360px;max-height:70vh;overflow:auto;background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:14px;box-shadow:0 16px 48px #0006;padding:14px}.proj-menu-sec{display:flex;flex-direction:column;gap:8px}.proj-menu-label{font:var(--t-label-m);letter-spacing:.06em;text-transform:uppercase;color:var(--md-on-surface-variant)}.proj-menu-divider{height:1px;background:var(--md-outline-variant);margin:14px 0}.proj-name-edit{display:flex;gap:6px}.proj-name-edit input{flex:1;height:38px;padding:0 12px;border-radius:10px;background:var(--md-surface-container-highest);color:var(--md-on-surface);border:1px solid var(--md-outline-variant);outline:none;font:var(--t-body-m)}.proj-name-edit input:focus{border-color:var(--md-primary)}.pm-save{width:38px;height:38px;border-radius:10px;flex-shrink:0;background:var(--md-primary);color:var(--md-on-primary);display:inline-flex;align-items:center;justify-content:center}.pm-save:hover{filter:brightness(1.08)}.pm-save .icon{font-size:20px}.pm-cancel{width:38px;height:38px;border-radius:10px;flex-shrink:0;background:var(--md-surface-2);color:var(--md-on-surface-variant);border:1px solid var(--md-outline-variant);display:inline-flex;align-items:center;justify-content:center}.pm-cancel:hover{background:var(--md-surface-3);color:var(--md-on-surface)}.pm-cancel .icon{font-size:20px}.ver-list{display:flex;flex-direction:column}.ver-row{display:grid;grid-template-columns:14px 1fr auto;gap:10px;padding:10px 0;align-items:start;border-bottom:1px solid var(--md-outline-variant)}.ver-row:last-child{border-bottom:0}.ver-dot{width:9px;height:9px;border-radius:50%;background:var(--md-outline);margin-top:4px}.ver-row.is-current .ver-dot{background:var(--signal-ok);box-shadow:0 0 0 3px color-mix(in oklab,var(--signal-ok) 25%,transparent)}.ver-top{display:flex;align-items:center;gap:8px}.ver-name{font:500 13px/1 var(--font-mono);color:var(--md-on-surface)}.ver-badge{font:var(--t-label-s);padding:2px 7px;border-radius:999px;background:color-mix(in oklab,var(--signal-ok) 18%,transparent);color:var(--signal-ok)}.ver-ts{font:var(--t-label-m);color:var(--md-on-surface-variant);margin-top:3px;font-family:var(--font-mono)}.ver-note{font:var(--t-body-s);color:var(--md-on-surface-variant);margin-top:3px}.ver-restore{display:inline-flex;align-items:center;gap:4px;align-self:center;height:30px;padding:0 12px;border-radius:999px;white-space:nowrap;font:var(--t-label-l);color:var(--md-link);border:1px solid color-mix(in oklab,var(--md-link) 40%,var(--md-outline-variant))}.ver-restore:hover{background:color-mix(in oklab,var(--md-link) 12%,transparent)}.ver-restore .icon{font-size:16px}.ver-actions{display:flex;flex-direction:column;gap:6px;align-self:center}.ver-view{display:inline-flex;align-items:center;gap:4px;justify-content:center;height:30px;padding:0 12px;border-radius:999px;white-space:nowrap;font:var(--t-label-l);color:var(--md-on-surface-variant);border:1px solid var(--md-outline-variant)}.ver-view:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.ver-view .icon{font-size:16px}.ver-confirm-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:var(--md-scrim);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center}.ver-confirm{width:min(440px,92vw);background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:16px;box-shadow:0 20px 60px #00000073;padding:24px;text-align:center}.ver-confirm .vc-icon{width:48px;height:48px;border-radius:50%;margin:0 auto 14px;background:var(--md-error-container);color:var(--md-on-error-container);display:flex;align-items:center;justify-content:center}.ver-confirm .vc-icon .icon{font-size:26px}.ver-confirm h3{margin:0 0 8px;font:var(--t-title-l);font-weight:600}.ver-confirm p{margin:0 0 20px;font:var(--t-body-m);color:var(--md-on-surface-variant);line-height:1.5}.ver-confirm .vc-actions{display:flex;gap:10px;justify-content:center}.ver-confirm .btn-danger{background:var(--md-error);color:var(--md-on-error)}.ver-confirm .btn-danger:hover{filter:brightness(1.05)}.ver-view-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:70;background:var(--md-scrim);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);display:flex;align-items:center;justify-content:center;padding:32px}.ver-view-modal{width:min(1200px,95vw);height:min(760px,90vh);background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:16px;box-shadow:0 24px 70px #00000080;display:flex;flex-direction:column;overflow:hidden}.vv-head{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--md-outline-variant);background:var(--md-surface-1)}.vv-head .vv-eye{font-size:22px;color:var(--md-on-surface-variant)}.vv-titles{flex:1;min-width:0}.vv-title{font:var(--t-title-m);font-weight:600}.vv-sub{font:var(--t-label-m);color:var(--md-on-surface-variant);margin-top:2px}.vv-ro{font:600 11px/1 var(--font-mono);letter-spacing:.08em;padding:5px 10px;border-radius:999px;background:color-mix(in oklab,var(--signal-warn) 16%,transparent);color:var(--signal-warn)}.vv-body{flex:1;display:block;min-height:0;background:var(--md-background)}.vv-canvas{position:relative;overflow:hidden;background-color:var(--md-background);background-image:radial-gradient(var(--diagram-grid) 1px,transparent 1px);background-size:16px 16px}.vv-canvas img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:contain}.vv-panel{border-left:1px solid var(--md-outline-variant);padding:18px;background:var(--md-surface);overflow:auto}.vv-panel-kicker{font:var(--t-label-m);letter-spacing:.08em;text-transform:uppercase;color:var(--md-on-surface-variant)}.vv-panel-title{font:var(--t-title-l);font-weight:600;margin:4px 0 16px}.vv-kv{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--md-outline-variant);font:var(--t-body-s);color:var(--md-on-surface-variant)}.vv-kv b{color:var(--md-on-surface)}.vv-note{margin-top:14px;font:var(--t-body-s);color:var(--md-on-surface-variant);line-height:1.5}.vv-lock{margin-top:18px;display:flex;align-items:center;gap:8px;font:var(--t-label-l);color:var(--md-on-surface-variant);padding:10px 12px;border-radius:10px;background:var(--md-surface-1)}.vv-lock .icon{font-size:17px}.tb-project-version{font:var(--t-label-m);font-family:var(--font-mono);color:var(--md-on-surface-variant);background:var(--md-surface-2);padding:2px 8px;border-radius:var(--r-pill)}.tb-project .caret{color:var(--md-on-surface-variant);font-size:16px;line-height:1}.tb-spacer{flex:1}.tb-utility{display:inline-flex;align-items:center;height:36px;padding:0 4px;border-radius:var(--r-2);background:var(--md-surface-2);gap:2px}.tb-utility button{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:var(--r-1);color:var(--md-on-surface-variant);font:var(--t-label-m);letter-spacing:.04em}.tb-utility button:hover{background:var(--md-surface-3);color:var(--md-on-surface)}.tb-utility .icon{font:16px/1 Material Symbols Outlined}.tb-utility .zoom-readout{font:var(--t-label-m);font-family:var(--font-mono);color:var(--md-on-surface-variant);padding:0 8px;min-width:44px;text-align:center}.tb-cta{display:inline-flex;align-items:center;gap:var(--s-2);height:36px;min-width:0;flex-shrink:1;padding:0 var(--s-4);border-radius:var(--r-pill);background:var(--md-primary);color:var(--md-on-primary);font:500 14px/1 var(--font-sans);letter-spacing:.02em;transition:filter .12s}.tb-cta:hover{filter:brightness(1.08)}.tb-cta .icon{font:18px/1 Material Symbols Outlined;flex-shrink:0}.tb-cta .cta-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.tb-icon-btn{width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-2);color:var(--md-on-surface-variant)}.tb-icon-btn:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.tb-icon-btn .icon{font:20px/1 Material Symbols Outlined}.canvas{position:absolute;top:0;right:0;bottom:0;left:0;background-color:var(--md-background);background-image:radial-gradient(var(--diagram-grid) 1px,transparent 1px);background-size:16px 16px;background-position:0 0;overflow:hidden;cursor:default}.canvas.is-panning{cursor:grabbing}.canvas-stage{position:absolute;top:0;left:0;width:2400px;height:1600px;transform-origin:0 0;will-change:transform}.canvas-overlay{position:absolute;pointer-events:none;z-index:3}.canvas-overlay>*{pointer-events:auto}.canvas-overlay-tl{top:var(--s-3);left:var(--s-3)}.canvas-overlay-tr{top:var(--s-3);right:var(--s-3);display:flex;gap:var(--s-2)}.canvas-overlay-bl{bottom:var(--s-3);left:var(--s-3)}.canvas-overlay-bc{bottom:var(--s-4);left:50%;transform:translate(-50%)}.canvas-overlay-br{bottom:var(--s-4);right:var(--s-4)}.breadcrumb{display:flex;align-items:center;gap:var(--s-2);padding:6px var(--s-3);background:color-mix(in srgb,var(--md-surface) 80%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--md-outline-variant);border-radius:var(--r-pill);font:var(--t-label-m);color:var(--md-on-surface-variant)}.breadcrumb b{color:var(--md-on-surface);font-weight:500}.breadcrumb .sep{opacity:.5}.canvas-status{display:flex;gap:var(--s-3);padding:6px var(--s-3);background:color-mix(in srgb,var(--md-surface) 80%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--md-outline-variant);border-radius:var(--r-pill);font:var(--t-label-m);font-family:var(--font-mono);color:var(--md-on-surface-variant)}.canvas-status .stat{display:inline-flex;align-items:center;gap:6px}.canvas-status .dot{width:7px;height:7px;border-radius:50%}.block{position:absolute;background:var(--diagram-block);border:1px solid var(--diagram-block-border);border-radius:var(--r-2);box-shadow:var(--el-1);-webkit-user-select:none;user-select:none;font-family:var(--font-sans);transition:border-color .12s,box-shadow .12s}.block:hover{border-color:var(--md-secondary)}.block.is-selected{border-color:var(--diagram-selected);box-shadow:0 0 0 1px var(--diagram-selected),var(--el-2)}.block.is-dimmed{opacity:.35}.block-head{display:flex;align-items:center;gap:var(--s-2);padding:8px 10px 6px;background:var(--diagram-block-header);border-bottom:1px solid var(--diagram-block-border);border-radius:var(--r-2) var(--r-2) 0 0;cursor:grab}.block.is-selected .block-head{cursor:grab}.block-kind{display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:var(--r-1);font:600 11px/1 var(--font-mono);letter-spacing:.06em;text-transform:uppercase;background:var(--md-surface-3);color:var(--md-on-surface-variant)}.block-kind.kind-cpu{background:#8ab8e02e;color:var(--md-primary)}.block-kind.kind-bus{background:#57cef72e;color:var(--md-tertiary)}.block-kind.kind-mem{background:#c7a8f52e;color:#c7a8f5}.block-kind.kind-clk{background:#fbbf2429;color:var(--signal-warn)}.block-kind.kind-perf{background:#5ac88a29;color:var(--signal-ok)}[data-theme=light] .block-kind.kind-cpu{background:#2e6da41a;color:var(--md-secondary)}[data-theme=light] .block-kind.kind-bus{background:#00a3e01a;color:var(--md-tertiary)}[data-theme=light] .block-kind.kind-mem{background:#6e48bc1a;color:#6e48bc}[data-theme=light] .block-kind.kind-clk{background:#b453091a;color:var(--signal-warn)}[data-theme=light] .block-kind.kind-perf{background:#1e7a4a1a;color:var(--signal-ok)}.block-name{flex:1;font:600 16px/1.1 var(--font-mono);color:var(--md-on-surface);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.block-owners{display:flex}.block-owners .avatar{margin-left:-4px;box-shadow:0 0 0 2px var(--diagram-block-header, var(--md-surface-1))}.block-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.block-body{display:grid;grid-template-columns:1fr 1fr;padding:6px 0;gap:0 var(--s-4);background:var(--diagram-block);border-radius:0 0 var(--r-2) var(--r-2)}.block-col{display:flex;flex-direction:column;gap:1px;min-width:0}.block-col.in{align-items:flex-start}.block-col.out{align-items:flex-end}.block-body.is-scroll{align-content:start}.block-body.is-scroll::-webkit-scrollbar{width:8px}.block-body.is-scroll::-webkit-scrollbar-thumb{background:var(--md-outline-variant);border-radius:999px;border:2px solid var(--diagram-block)}.block-body.is-scroll::-webkit-scrollbar-thumb:hover{background:var(--md-outline)}.block-foot{display:flex;align-items:center;gap:var(--s-2);padding:6px 10px;border-top:1px dashed var(--diagram-block-border);font:var(--t-label-s);font-family:var(--font-mono);color:var(--md-on-surface-variant)}.block-foot .pill{padding:1px 6px;border-radius:var(--r-1);background:var(--md-surface-2)}.port{position:relative;display:flex;align-items:center;gap:6px;padding:3px 10px;width:100%;font:var(--t-label-m);font-family:var(--font-mono);color:var(--md-on-surface-variant);cursor:pointer;transition:background 80ms,color 80ms}.port.in{padding-left:18px;padding-right:8px;flex-direction:row}.port.out{padding-right:18px;padding-left:8px;flex-direction:row-reverse;text-align:right}.port:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.port.is-selected{background:var(--part-highlight);color:var(--md-on-surface)}.port.is-traced{color:var(--md-on-surface);background:#57cef71a}.port-marker{position:absolute;top:50%;width:10px;height:10px;transform:translateY(-50%)}.port.in .port-marker{left:0;transform:translate(-50%,-50%)}.port.out .port-marker{right:0;transform:translate(50%,-50%)}.port-marker svg{display:block;width:100%;height:100%}.port-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.port-badges{display:inline-flex;gap:4px;flex-shrink:0}.port-badge{font:600 11px/15px var(--font-mono);padding:0 5px;height:14px;border-radius:3px;background:var(--md-surface-container-highest);color:var(--md-on-surface);letter-spacing:.02em}.port-badge.bus{background:#0e3a52;color:#c7eefc}.port-badge.warn{background:#4a2e0b;color:#ffe2a8}.port-badge.err{background:#5a1f1b;color:#ffd7d2}.port:hover .port-badge,.port.is-selected .port-badge,.port.is-traced .port-badge{background:var(--md-surface-container-high);color:var(--md-on-surface)}.port:hover .port-badge.bus,.port.is-selected .port-badge.bus,.port.is-traced .port-badge.bus{background:#114a6a;color:#def5ff}[data-theme=light] .port-badge{background:#e5edf6;color:#0c2d4a}[data-theme=light] .port-badge.bus{background:#b3e6fa;color:#003a52}[data-theme=light] .port-badge.warn{background:#ffe2a8;color:#5c3a00}[data-theme=light] .port-badge.err{background:#ffd7d2;color:#5a1410}[data-theme=light] .port:hover .port-badge.bus,[data-theme=light] .port.is-selected .port-badge.bus,[data-theme=light] .port.is-traced .port-badge.bus{background:#93d7f2;color:#002a3d}.port-badge.top-in{background:#4a2a8c;color:#fff;letter-spacing:.5px;font-weight:700}[data-theme=light] .port-badge.top-in{background:#2c1466;color:#fff}.port.is-topinput .port-name{color:var(--md-on-surface)}.port.is-topinput .port-name:after{content:"";display:inline-block;width:4px;height:4px;margin-left:6px;border-radius:50%;background:#b19cff;vertical-align:2px}[data-theme=light] .port.is-topinput .port-name:after{background:#4a2a8c}.topio{border:1px solid var(--md-outline-variant);border-radius:12px;overflow:hidden;background:var(--md-surface)}.topio-head{display:flex;align-items:center;gap:8px;padding:10px 12px;background:var(--md-surface-1);border-bottom:1px solid var(--md-outline-variant);font:var(--t-label-l);color:var(--md-on-surface)}.topio-head .icon{font:18px/1 Material Symbols Outlined;color:var(--md-on-surface-variant)}.topio-title{flex:1}.topio-count{font:600 11px/1 var(--font-mono);padding:3px 8px;border-radius:999px;background:var(--md-surface-2);color:var(--md-on-surface-variant)}.topio-empty{padding:16px 14px;font:var(--t-body-s);color:var(--md-on-surface-variant);line-height:1.55}.topio-empty b{color:var(--md-on-surface);font-weight:600}.topio-groups{padding:8px;display:flex;flex-direction:column;gap:2px}.topio-grouplabel{display:flex;align-items:center;justify-content:space-between;padding:8px 6px 4px;font:var(--t-label-m);letter-spacing:.08em;text-transform:uppercase;color:var(--md-on-surface-variant)}.topio-grouplabel span{font:600 11px/1 var(--font-mono)}.topio-row{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:7px 8px;border:0;border-radius:8px;background:transparent;color:var(--md-on-surface);cursor:pointer;font:var(--t-body-s)}.topio-row:hover{background:var(--md-surface-2)}.topio-dir{font:16px/1 Material Symbols Outlined;color:var(--md-on-surface-variant);flex:none}.topio-port{flex:1;font-family:var(--font-mono);font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topio-mod{font:11px/1 var(--font-mono);color:var(--md-on-surface-variant);flex:none}.topio-w{font:600 10px/1 var(--font-mono);color:var(--md-on-surface-variant);background:var(--md-surface-2);padding:3px 6px;border-radius:5px;flex:none}.topio-none{padding:4px 8px 8px;font:var(--t-body-s);color:var(--md-on-surface-variant)}.block-trunc-toggle{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-1);color:var(--md-on-surface-variant);margin-left:4px;flex-shrink:0}.block-trunc-toggle:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.block-trunc-toggle .icon{font-size:16px}.port.port-more{cursor:pointer;font-style:italic;color:var(--md-on-surface-variant)}.port.port-more:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.port-badge.expand-hint{background:transparent;color:var(--md-on-surface-variant);border:1px dashed var(--md-outline);font-style:normal;letter-spacing:.3px}.wires-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:1}.wires-layer .wire-hit{fill:none;stroke:transparent;stroke-width:14;pointer-events:stroke;cursor:pointer}.wire{fill:none;stroke-linecap:round;stroke-linejoin:round;transition:opacity .12s,stroke-width .12s}.wire.bus{stroke-width:3}.wire.wire-single{stroke-width:1.6}.wire.is-ok{stroke:var(--signal-ok)}.wire.is-warn{stroke:var(--signal-warn)}.wire.is-error{stroke:var(--signal-error)}.wire.is-pending{stroke:var(--signal-pending);stroke-dasharray:6 4}.wire.is-idle{stroke:var(--connector-inactive)}.wire.is-dimmed{opacity:.18}.wire.is-traced{filter:drop-shadow(0 0 6px currentColor);stroke-width:4}.wire.is-traced.wire-single{stroke-width:2.2}.wire.is-selected{filter:drop-shadow(0 0 8px var(--diagram-selected))}.bus-cap{fill:none;stroke-width:2}.wire-label{font:500 11px/1 var(--font-mono);fill:var(--md-on-surface-variant);paint-order:stroke;stroke:var(--md-background);stroke-width:4}.block-layer{position:relative;z-index:2}.port-hidden-badge{position:absolute;z-index:4;display:inline-flex;align-items:center;gap:1px;height:18px;padding:0 5px 0 2px;border-radius:9px;background:var(--md-primary);color:var(--md-on-primary);border:1.5px solid var(--diagram-block);box-shadow:0 1px 4px #00000047;cursor:pointer;font:600 11px/1 var(--font-mono)}.port-hidden-badge:hover{filter:brightness(1.08)}.port-hidden-badge .icon{font:15px/1 Material Symbols Outlined}.port-hidden-badge.top{top:37px}.port-hidden-badge.bottom{top:398px}.port-hidden-badge.in{left:-10px}.port-hidden-badge.out{right:-10px}.toolbox{display:inline-flex;align-items:stretch;background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:var(--r-3);box-shadow:var(--el-3);padding:6px;gap:2px;z-index:3}.toolbox.toolbox-collapsed{background:var(--md-primary);border-color:var(--md-primary);padding:4px}.toolbox.toolbox-collapsed .tool{color:var(--md-on-primary);width:auto;padding:0 12px;height:30px;flex-direction:row;gap:6px}.toolbox.toolbox-collapsed .tool:hover{background:color-mix(in oklab,var(--md-on-primary) 16%,transparent);color:var(--md-on-primary)}.toolbox.toolbox-collapsed .tool .label{font:500 13px/1 var(--font-sans);letter-spacing:.02em}.toolbox.toolbox-collapsed .tool .icon{font-size:17px}.toolbox .tool{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;width:64px;height:56px;border-radius:var(--r-2);color:var(--md-on-surface-variant)}.toolbox .tool:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.toolbox .tool.is-active{background:var(--md-secondary-container);color:var(--md-on-secondary-container)}.toolbox .tool .icon{font:22px/1 Material Symbols Outlined}.toolbox .tool .label{font:var(--t-label-s);letter-spacing:.04em}.toolbox .divider{width:1px;margin:8px 4px;background:var(--md-outline-variant)}.side-panel{background:var(--md-surface);border-left:1px solid var(--md-outline-variant);display:flex;flex-direction:column;font-family:var(--font-sans)}.sp-head{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4);border-bottom:1px solid var(--md-outline-variant);min-height:56px}.sp-head .title{flex:1;font:var(--t-title-l);font-weight:600}.sp-head--block{flex-wrap:wrap;gap:var(--s-2) var(--s-3)}.sp-head-actions{display:inline-flex;gap:2px;flex-shrink:0}.sp-icon-btn{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-2);color:var(--md-on-surface-variant);border:1px solid transparent;transition:background .12s,color .12s,border-color .12s}.sp-icon-btn:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.sp-icon-btn.danger:hover{background:color-mix(in oklab,var(--md-error) 14%,transparent);color:var(--md-error);border-color:color-mix(in oklab,var(--md-error) 35%,transparent)}.sp-icon-btn .icon{font-size:19px}.sp-head .kicker{font:var(--t-label-m);text-transform:uppercase;letter-spacing:.08em;color:var(--md-on-surface-variant)}.sp-head .status-pills{display:inline-flex;gap:4px}.status-pill{width:18px;height:18px;border-radius:var(--r-1);background:var(--md-surface-3);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:filter .12s}.status-pill:hover{filter:brightness(1.1)}.status-pill.ok{background:var(--signal-ok)}.status-pill.err{background:var(--signal-error)}.status-pill.warn{background:var(--signal-warn)}.status-pill.idle{background:var(--md-outline-variant)}.block-health{display:inline-flex;align-items:center;gap:5px;padding:3px 9px 3px 7px;border-radius:var(--r-pill);font:600 12px/1 var(--font-sans);white-space:nowrap;border:1px solid transparent}.status-pill-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 10px 3px 7px;border-radius:var(--r-pill);font:600 12px/1 var(--font-sans);white-space:nowrap;border:1px solid transparent;cursor:default}.status-pill-chip .icon{font-size:15px}.status-pill-chip.ok{color:var(--signal-ok);background:color-mix(in oklab,var(--signal-ok) 14%,transparent);border-color:color-mix(in oklab,var(--signal-ok) 35%,transparent)}.status-pill-chip.warn{color:var(--signal-warn);background:color-mix(in oklab,var(--signal-warn) 16%,transparent);border-color:color-mix(in oklab,var(--signal-warn) 38%,transparent)}.status-pill-chip.err{color:var(--signal-error);background:color-mix(in oklab,var(--signal-error) 16%,transparent);border-color:color-mix(in oklab,var(--signal-error) 38%,transparent)}.block-health .icon{font-size:15px}.block-health.ok{color:var(--signal-ok);background:color-mix(in oklab,var(--signal-ok) 14%,transparent);border-color:color-mix(in oklab,var(--signal-ok) 35%,transparent)}.block-health.warn{color:var(--signal-warn);background:color-mix(in oklab,var(--signal-warn) 16%,transparent);border-color:color-mix(in oklab,var(--signal-warn) 38%,transparent)}.block-health.err{color:var(--signal-error);background:color-mix(in oklab,var(--signal-error) 16%,transparent);border-color:color-mix(in oklab,var(--signal-error) 38%,transparent)}.sp-body{flex:1;overflow:auto}.sp-section{border-bottom:1px solid var(--md-outline-variant)}.sp-section-head{display:flex;align-items:center;justify-content:space-between;padding:var(--s-3) var(--s-4);cursor:pointer;font:var(--t-title-s);font-weight:500;-webkit-user-select:none;user-select:none}.sp-section-head:hover{background:var(--md-surface-1)}.sp-section-head .icon{font:18px/1 Material Symbols Outlined;color:var(--md-on-surface-variant);transition:transform .2s}.sp-section.is-collapsed .sp-section-head .icon{transform:rotate(-90deg)}.sp-section-body{padding:var(--s-3) var(--s-4) var(--s-4);display:grid;gap:10px}.sp-section.is-collapsed .sp-section-body{display:none}.kv{display:grid;grid-template-columns:100px 1fr;align-items:baseline;gap:var(--s-3);font:var(--t-body-s)}.kv .k{color:var(--md-on-surface-variant);font:var(--t-label-m)}.kv .v{color:var(--md-on-surface)}.kv .v.mono{font-family:var(--font-mono);font-size:13px}.kv .v.warn{color:var(--signal-warn)}.kv .v.ok{color:var(--signal-ok)}.kv .v.err{color:var(--signal-error)}.tool.is-draggable{cursor:grab}.tool.is-draggable:active{cursor:grabbing}.canvas.is-drop-target:after{content:"Drop to create block";position:absolute;top:12px;right:12px;bottom:12px;left:12px;border-radius:16px;border:2px dashed var(--md-primary);background:color-mix(in oklab,var(--md-primary) 8%,transparent);pointer-events:none;z-index:8;display:grid;place-items:center;font:var(--t-label-l);color:var(--md-primary);letter-spacing:.04em}.cb-dialog{width:min(720px,92vw);max-height:80vh;display:flex;flex-direction:column}.cb-popover{position:fixed;z-index:70;width:560px;max-width:calc(100vw - 24px);max-height:min(80vh,600px);display:flex;flex-direction:column;background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:16px;box-shadow:0 18px 50px #0000006b;overflow:hidden;animation:cb-pop-in .12s ease-out}@keyframes cb-pop-in{0%{opacity:0;transform:translateY(-4px) scale(.99)}to{opacity:1;transform:none}}.cb-popover .cb-list,.cb-popover .cb-detail{max-height:300px}.cb-search{display:flex;align-items:center;gap:8px;padding:8px 12px;margin:0 16px 12px;background:var(--md-surface-container-highest);border:1px solid var(--md-outline-variant);border-radius:8px}.cb-search:focus-within{border-color:var(--md-primary)}.cb-search .icon{font:18px/1 Material Symbols Outlined;color:var(--md-on-surface-variant)}.cb-search input{flex:1;background:transparent;border:0;outline:0;color:var(--md-on-surface);font:var(--t-body-m)}.cb-cols{display:grid;grid-template-columns:280px 1fr;gap:12px;padding:0 16px;flex:1;min-height:0}.cb-list{overflow-y:auto;max-height:340px;display:flex;flex-direction:column;gap:4px;padding:4px 4px 4px 0}.cb-item{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:center;padding:8px 10px;border-radius:8px;background:transparent;border:1px solid transparent;color:var(--md-on-surface);cursor:pointer;text-align:left}.cb-item:hover{background:var(--md-surface-2)}.cb-item.is-on{background:var(--md-primary-container);border-color:var(--md-primary)}.cb-item-body{display:flex;flex-direction:column;min-width:0}.cb-item-title{font:var(--t-label-l)}.cb-item-id{font:12px/1.4 var(--font-mono);color:var(--md-on-surface-variant);margin-top:2px}.cb-detail{background:var(--md-surface-container);border:1px solid var(--md-outline-variant);border-radius:10px;padding:14px;overflow-y:auto;max-height:340px}.cb-empty{color:var(--md-on-surface-variant);font:var(--t-body-s);text-align:center;padding:24px 12px}.cb-empty .icon-large{font:36px/1 Material Symbols Outlined;color:var(--md-outline);display:block;margin:0 auto 8px}.cb-d-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}.cb-d-title{font:var(--t-title-s)}.cb-d-desc{font:var(--t-body-s);color:var(--md-on-surface-variant);margin-bottom:12px}.cb-d-field{margin-bottom:12px}.cb-d-field label{display:block;font:var(--t-label-m);color:var(--md-on-surface-variant);margin-bottom:4px}.cb-d-field .bl-input,.cb-d-field input{width:100%;background:var(--md-surface-container-highest);color:var(--md-on-surface);border:1px solid var(--md-outline-variant);border-radius:6px;padding:7px 9px;font:13px/1.4 var(--font-mono);outline:none}.cb-d-field input:focus{border-color:var(--md-primary);box-shadow:0 0 0 3px color-mix(in oklab,var(--md-primary) 18%,transparent)}.cb-warn{font:12px/1.4 var(--t-body-s);color:var(--signal-warn);margin-top:4px}.cb-d-section .cb-d-h{font:11px/1 var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--md-on-surface-variant);margin-bottom:6px}.cb-d-ports{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px;font:12px/1.5 var(--font-mono)}.cb-port{display:flex;align-items:center;gap:6px;color:var(--md-on-surface)}.cb-port.in .cb-port-dir{color:var(--connector-input, var(--md-tertiary))}.cb-port.out .cb-port-dir{color:var(--connector-output, var(--signal-warn))}.cb-port-w{color:var(--md-on-surface-variant)}.cb-port-bus{font-size:10px;padding:1px 5px;border-radius:999px;background:var(--md-surface-2);color:var(--signal-pending)}.kv.kv-input{align-items:center}.kv.kv-input .k{display:flex;flex-direction:column;gap:2px}.kv.kv-input .k .k-hint{font-family:var(--font-mono);font-size:11px;color:var(--md-on-surface-variant);opacity:.7;letter-spacing:0}.kv-field{width:100%;background:var(--md-surface-container-highest);color:var(--md-on-surface);border:1px solid var(--md-outline-variant);border-radius:6px;padding:6px 8px;font-size:13px;font-family:var(--font-mono);outline:none;transition:border-color .12s ease,background .12s ease,box-shadow .12s ease}.kv-field::placeholder{color:var(--md-on-surface-variant);opacity:.55}.kv-field:hover{border-color:var(--md-outline)}.kv-field:focus{border-color:var(--md-primary);background:var(--md-surface);box-shadow:0 0 0 3px color-mix(in oklab,var(--md-primary) 18%,transparent)}.sp-link{display:inline-flex;align-items:center;gap:4px;font:var(--t-body-s);font-family:var(--font-mono);color:var(--md-link);text-decoration:none;cursor:pointer}.sp-link:hover{text-decoration:underline}.sp-link .icon{font:14px/1 Material Symbols Outlined}.sp-action-row{display:flex;gap:var(--s-2);padding:var(--s-3) var(--s-4);border-top:1px solid var(--md-outline-variant);background:var(--md-surface-1)}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .btn{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 var(--s-3);border-radius:var(--r-pill);font:500 14px/1 var(--font-sans);letter-spacing:.02em;white-space:nowrap;transition:background .12s,color .12s}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .btn .icon{font:18px/1 Material Symbols Outlined}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .btn-filled{background:var(--md-primary);color:var(--md-on-primary)}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .btn-filled:hover{filter:brightness(1.08)}.btn-tonal{background:var(--md-secondary-container);color:var(--md-on-secondary-container)}.btn-tonal:hover{filter:brightness(1.08)}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .btn-outlined{background:transparent;color:var(--md-on-surface);box-shadow:inset 0 0 0 1px var(--md-outline)}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .btn-outlined:hover{background:var(--md-surface-2)}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .btn-text{color:var(--md-primary);padding:0 var(--s-2)}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .btn-text:hover{background:var(--md-surface-2)}.btn-danger{background:var(--md-error-container);color:var(--md-on-error-container)}.toggle-group{display:inline-flex;background:var(--md-surface-2);border-radius:var(--r-pill);padding:2px;gap:2px}.toggle-group button{height:28px;padding:0 12px;border-radius:var(--r-pill);font:var(--t-label-l);color:var(--md-on-surface-variant)}.toggle-group button.is-on{background:var(--md-primary);color:var(--md-on-primary)}.avatar{width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font:600 10px/1 var(--font-sans);letter-spacing:.02em;color:var(--md-on-primary);text-transform:uppercase;flex-shrink:0}.avatar.sz-sm{width:20px;height:20px;font-size:10px}.avatar.sz-lg{width:32px;height:32px;font-size:13px}.avatar.c1{background:var(--owner-1);color:#fff}.avatar.c2{background:var(--owner-2);color:#fff}.avatar.c3{background:var(--owner-3);color:#fff}.avatar.c4{background:var(--owner-4);color:#fff}.avatar.c5{background:var(--owner-5);color:#fff}.endpoint{display:grid;grid-template-columns:24px 1fr;gap:var(--s-3);align-items:start;padding:8px 0}.endpoint .marker{width:22px;display:flex;align-items:center;justify-content:center;margin-top:6px}.endpoint .marker .label{font:500 10px/1 var(--font-mono);letter-spacing:.05em;color:var(--md-on-surface-variant);text-transform:uppercase}.field{display:flex;align-items:center;gap:var(--s-2);height:36px;background:var(--md-surface-2);border:1px solid transparent;border-radius:var(--r-2);padding:0 var(--s-3);transition:border-color .12s,background .12s}.field:focus-within{border-color:var(--md-primary);background:var(--md-surface)}.field .icon{font:18px/1 Material Symbols Outlined;color:var(--md-on-surface-variant)}.field input,.field textarea{flex:1;min-width:0;background:transparent;border:0;outline:none;font:var(--t-body-m);color:var(--md-on-surface)}.field input::placeholder{color:var(--md-on-surface-variant)}.field:has(textarea){height:auto;align-items:stretch;padding-top:6px;padding-bottom:6px}.field textarea{resize:none;padding:0;min-height:60px;line-height:1.4}.field textarea::placeholder{color:var(--md-on-surface-variant)}.field-mono input{font-family:var(--font-mono);font-size:14px}.radio-row{display:flex;align-items:center;gap:var(--s-2);padding:var(--s-2) 0;font:var(--t-body-m);cursor:pointer}.radio-row input{accent-color:var(--md-primary)}.console-panel{background:var(--md-surface);display:grid;grid-template-rows:auto 1fr;min-height:0;font-family:var(--font-sans)}.console-tabs{display:flex;align-items:center;gap:0;padding:0 var(--s-3);border-bottom:1px solid var(--md-outline-variant);height:40px;flex-shrink:0}.console-tab{display:inline-flex;align-items:center;gap:6px;height:100%;padding:0 var(--s-3);font:var(--t-label-l);color:var(--md-on-surface-variant);border-bottom:2px solid transparent;margin-bottom:-1px}.console-tab .count{font:500 10px/14px var(--font-mono);height:14px;min-width:14px;padding:0 4px;border-radius:7px;background:var(--md-surface-3);color:var(--md-on-surface-variant)}.console-tab.is-active{color:var(--md-on-surface);border-bottom-color:var(--md-primary)}.console-tab.is-active.has-issue{border-bottom-color:var(--signal-warn)}.console-tab .icon{font:16px/1 Material Symbols Outlined}.console-spacer{flex:1}.console-actions{display:flex;gap:4px}.console-actions .icon-btn{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-1);color:var(--md-on-surface-variant)}.console-actions .icon-btn:hover{background:var(--md-surface-2)}.console-actions .icon-btn .icon{font:18px/1 Material Symbols Outlined}.console-body{overflow:auto;min-height:0;padding:6px 0;position:relative}.console-empty{padding:var(--s-6) var(--s-4);text-align:center;color:var(--md-on-surface-variant);font:var(--t-body-m)}.issue-row{display:grid;grid-template-columns:22px 110px 90px 1fr auto;gap:var(--s-3);align-items:center;padding:6px var(--s-4);font:var(--t-body-s);border-left:2px solid transparent;cursor:pointer}.issue-row:hover{background:var(--md-surface-1)}.issue-row.sev-error{border-left-color:var(--signal-error)}.issue-row.sev-warn{border-left-color:var(--signal-warn)}.issue-row.sev-info,.issue-row.sev-pending{border-left-color:var(--signal-pending)}.issue-row.is-dimmed{opacity:.32}.issue-row.is-highlighted{background:color-mix(in oklab,var(--md-primary) 16%,transparent);box-shadow:inset 3px 0 0 0 var(--md-primary);animation:hygiene-pulse .5s ease}@keyframes hygiene-pulse{0%{background:color-mix(in oklab,var(--md-primary) 38%,transparent)}to{background:color-mix(in oklab,var(--md-primary) 16%,transparent)}}.issue-icon{font:18px/1 Material Symbols Outlined}.issue-icon.sev-error{color:var(--signal-error)}.issue-icon.sev-warn{color:var(--signal-warn)}.issue-icon.sev-info{color:var(--signal-pending)}.issue-code{font:500 11px/1 var(--font-mono);color:var(--md-on-surface-variant);letter-spacing:.03em;text-transform:uppercase}.issue-target{font:13px/1.2 var(--font-mono);color:var(--md-on-surface)}.issue-target .obj{color:var(--md-link);cursor:pointer}.issue-target .obj:hover{text-decoration:underline}.issue-msg{color:var(--md-on-surface)}.issue-meta{font:var(--t-label-m);color:var(--md-on-surface-variant);display:flex;gap:var(--s-2);align-items:center}.code-pane{font:13px/1.6 var(--font-mono);padding:var(--s-3) var(--s-4);color:var(--md-on-surface);white-space:pre;overflow:auto}.code-pane .ln{color:var(--md-on-surface-variant);padding-right:12px;-webkit-user-select:none;user-select:none;display:inline-block;min-width:24px;text-align:right}.code-pane .kw{color:#c7a8f5}[data-theme=light] .code-pane .kw{color:#6e48bc}.code-pane .id{color:var(--md-tertiary)}.code-pane .num{color:var(--signal-warn)}.code-pane .str{color:var(--signal-ok)}.code-pane .cmt{color:var(--md-on-surface-variant);font-style:italic}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--md-scrim);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:50;display:flex;align-items:center;justify-content:center}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .dialog{width:480px;max-width:calc(100vw - 32px);background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:var(--r-4);box-shadow:var(--el-3);font-family:var(--font-sans);overflow:hidden}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .dialog-head{padding:var(--s-4) var(--s-5);display:flex;gap:var(--s-3);align-items:flex-start}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .dialog-head .dialog-icon{width:36px;height:36px;border-radius:50%;background:var(--md-error-container);color:var(--md-on-error-container);display:flex;align-items:center;justify-content:center}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .dialog-head .dialog-icon .icon{font:20px/1 Material Symbols Outlined}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .dialog-head .dialog-text{flex:1}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .dialog-head h3{margin:0;font:var(--t-title-l);font-weight:500}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .dialog-head p{margin:4px 0 0;color:var(--md-on-surface-variant);font:var(--t-body-m)}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .dialog-body{padding:0 var(--s-5) var(--s-4);display:grid;gap:var(--s-3)}.dialog-actions{padding:var(--s-3) var(--s-4);display:flex;gap:var(--s-2);justify-content:flex-end;align-items:center;background:var(--md-surface-1);border-top:1px solid var(--md-outline-variant)}.gen-dialog{width:560px;max-width:calc(100vw - 32px)}.gen-dialog .dialog-body{max-height:46vh;overflow-y:auto}.gen-clean{display:flex;align-items:center;gap:8px;padding:18px 4px;color:var(--signal-ok);font:var(--t-body-m)}.gen-clean .icon{font-size:20px}.gen-summary{display:flex;gap:8px;flex-wrap:wrap}.gen-pill{display:inline-flex;align-items:center;gap:5px;font:var(--t-label-m);padding:3px 10px;border-radius:999px}.gen-pill .icon{font-size:15px}.gen-pill.err{color:var(--signal-error);background:color-mix(in oklab,var(--signal-error) 14%,transparent)}.gen-pill.warn{color:var(--signal-warn);background:color-mix(in oklab,var(--signal-warn) 16%,transparent)}.gen-pill.info{color:var(--md-on-surface-variant);background:var(--md-surface-2)}.gen-issue-list{display:flex;flex-direction:column;gap:6px}.gen-issue{display:flex;align-items:flex-start;gap:10px;width:100%;text-align:left;padding:10px 12px;border-radius:10px;border:1px solid var(--md-outline-variant);background:var(--md-surface);cursor:pointer;transition:background .12s,border-color .12s}.gen-issue:hover{background:var(--md-surface-2)}.gen-issue .gi-ic{font:18px/1 Material Symbols Outlined;flex:none;margin-top:1px}.gen-issue.sev-error .gi-ic{color:var(--signal-error)}.gen-issue.sev-error{border-color:color-mix(in oklab,var(--signal-error) 32%,transparent)}.gen-issue.sev-warn .gi-ic{color:var(--signal-warn)}.gen-issue.sev-info .gi-ic{color:var(--md-on-surface-variant)}.gi-body{flex:1;min-width:0}.gi-top{display:flex;align-items:center;gap:8px}.gi-code{font:600 11px/1 var(--font-mono);letter-spacing:.04em;color:var(--md-on-surface-variant);background:var(--md-surface-2);padding:2px 6px;border-radius:5px}.gi-target{font:12px/1.3 var(--font-mono);color:var(--md-on-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gi-msg{display:block;margin-top:4px;font:var(--t-body-s);color:var(--md-on-surface-variant)}.gen-issue .gi-go{font:18px/1 Material Symbols Outlined;flex:none;color:var(--md-on-surface-variant);align-self:center}.gen-block-note{display:inline-flex;align-items:center;gap:6px;font:var(--t-label-m);color:var(--signal-error)}.gen-block-note .icon{font-size:15px}.gen-block-note.warnnote{color:var(--md-on-surface-variant)}.gen-loading{padding:48px 32px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px}.gen-loading .icon.spin{font:40px/1 Material Symbols Outlined;color:var(--md-primary);animation:ai-spin .9s linear infinite}.gen-loading-title{font:var(--t-title-m);font-weight:600;color:var(--md-on-surface)}.gen-loading-sub{font:var(--t-body-s);color:var(--md-on-surface-variant)}.gen-preview{margin:0;max-height:260px;overflow:auto;background:var(--md-surface-2);border:1px solid var(--md-outline-variant);border-radius:10px;padding:12px 14px;font:12px/1.55 var(--font-mono);color:var(--md-on-surface);white-space:pre}.diff-row{display:grid;grid-template-columns:1fr 24px 1fr;gap:var(--s-3);align-items:center;padding:var(--s-3);background:var(--md-surface-1);border:1px solid var(--md-outline-variant);border-radius:var(--r-2)}.diff-row .col{display:grid;gap:4px}.diff-row .col .lbl{font:var(--t-label-m);color:var(--md-on-surface-variant)}.diff-row .col .val{font:500 14px/1.3 var(--font-mono)}.diff-row .col .val.bad{color:var(--signal-error)}.diff-row .arrow{font:20px/1 Material Symbols Outlined;color:var(--md-on-surface-variant)}.snackbar{position:fixed;bottom:28px;left:50%;transform:translate(-50%);background:var(--snack-bg);color:var(--snack-fg);padding:12px 16px;border-radius:var(--r-2);display:flex;align-items:center;gap:var(--s-3);font:var(--t-body-m);box-shadow:var(--el-3);z-index:60}.snackbar .icon{font:18px/1 Material Symbols Outlined}.snackbar .snack-undo{color:var(--snack-action)!important;font-weight:600;display:inline-flex;align-items:center;gap:4px}.snackbar .snack-undo:hover{background:color-mix(in oklab,var(--snack-action) 18%,transparent)}.snackbar .snack-undo .icon{font-size:16px}.snackbar .snack-dismiss{color:var(--snack-dismiss)!important;font-weight:600}.snackbar .snack-dismiss:hover{background:color-mix(in oklab,var(--snack-dismiss) 18%,transparent)}.snackbar.sev-ok>.icon{color:var(--signal-ok)}.snackbar.sev-warn>.icon{color:var(--signal-warn)}.snackbar .snack-undo .icon{color:inherit}.row{display:flex;align-items:center}.port-table{width:100%;border-collapse:collapse;font:var(--t-body-s)}.port-table thead th{text-align:left;font:600 10px/1 var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--md-on-surface-variant);padding:0 8px 6px;border-bottom:1px solid var(--md-outline-variant);white-space:nowrap}.port-table thead th.num{text-align:right}.port-table tbody td{padding:5px 8px;border-bottom:1px solid var(--md-outline-variant);vertical-align:middle;white-space:nowrap}.port-table tbody td.num{text-align:right}.port-table tbody td.mono{font-family:var(--font-mono);font-size:12px}.port-table tbody td:first-child{width:14px;padding-right:0}.port-table-row{cursor:pointer;transition:background .1s}.port-table-row:hover{background:var(--md-surface-2)}.port-table-row:hover td:first-child{box-shadow:inset 2px 0 0 var(--md-primary)}.port-table-row:last-child td{border-bottom:0}.port-dot{display:inline-block;width:8px;height:8px;border-radius:2px;vertical-align:middle}.dir-tag{display:inline-block;min-width:30px;text-align:center;font:600 10px/14px var(--font-mono);letter-spacing:.04em;padding:0 5px;border-radius:3px}.dir-tag.dir-in{background:#0e3a52;color:#c7eefc}.dir-tag.dir-out{background:#3a2e0b;color:#fbe3a6}[data-theme=light] .dir-tag.dir-in{background:#d4e8f5;color:#06314a}[data-theme=light] .dir-tag.dir-out{background:#f4e6c4;color:#4a3206}.bus-tag{margin-left:6px;font:600 9px/12px var(--font-sans);letter-spacing:.04em;text-transform:uppercase;color:var(--md-tertiary);border:1px solid color-mix(in oklab,var(--md-tertiary) 45%,transparent);border-radius:3px;padding:0 3px;vertical-align:1px}.port-filter{display:flex;gap:8px;align-items:center;margin-bottom:0;padding-bottom:10px;position:sticky;top:0;z-index:3;background:var(--md-surface)}.port-search{flex:1;display:flex;align-items:center;gap:6px;height:32px;padding:0 8px;background:var(--md-surface-container-highest);border:1px solid var(--md-outline-variant);border-radius:8px;transition:border-color .12s,box-shadow .12s}.port-search:focus-within{border-color:var(--md-primary);box-shadow:0 0 0 3px color-mix(in oklab,var(--md-primary) 16%,transparent)}.port-search .icon{font-size:16px;color:var(--md-on-surface-variant)}.port-search input{flex:1;min-width:0;background:transparent;border:0;outline:0;color:var(--md-on-surface);font:12px/1 var(--font-mono)}.port-search input::placeholder{color:var(--md-on-surface-variant)}.port-search .clear{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:4px;color:var(--md-on-surface-variant)}.port-search .clear:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.port-search .clear .icon{font-size:14px}.port-dir-seg{display:inline-flex;border:1px solid var(--md-outline-variant);border-radius:8px;padding:2px;background:var(--md-surface-2);gap:2px;flex-shrink:0}.port-dir-seg button{height:26px;padding:0 9px;border-radius:6px;font:var(--t-label-m);color:var(--md-on-surface-variant)}.port-dir-seg button.is-on{background:var(--md-primary);color:var(--md-on-primary)}.port-hl{background:var(--part-highlight);color:var(--md-on-surface);border-radius:2px;padding:0 1px}.port-empty{padding:18px 8px;text-align:center;font:var(--t-body-s);color:var(--md-on-surface-variant)}.port-cap-note{padding:8px;font:var(--t-label-m);color:var(--md-on-surface-variant);border-top:1px dashed var(--md-outline-variant);text-align:center}.sp-body--fill{display:flex;flex-direction:column;min-height:0;padding-bottom:0}.sp-body--fill .sp-section.is-grow{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.sp-body--fill .sp-section.is-grow .sp-section-body{flex:1 1 auto;min-height:0;overflow:auto}.sp-body--fill .sp-section:not(.is-grow){flex:0 0 auto}.port-table th.chk,.port-table td.chk{width:22px;padding-left:2px;padding-right:2px;text-align:center}.port-table td.chk{cursor:pointer}.port-table input[type=checkbox]{width:14px;height:14px;accent-color:var(--md-primary);cursor:pointer;vertical-align:middle}.port-table-row.is-checked{background:color-mix(in oklab,var(--md-primary) 12%,transparent)}.port-table-row.is-checked:hover{background:color-mix(in oklab,var(--md-primary) 18%,transparent)}.tie-tag{margin-left:6px;font:600 10px/14px var(--font-mono);color:var(--signal-pending);background:color-mix(in oklab,var(--signal-pending) 16%,transparent);border-radius:3px;padding:0 4px;vertical-align:1px}.port-bulk{display:flex;flex-direction:column;gap:8px;padding:8px;margin-bottom:8px;background:var(--md-primary-container);border:1px solid var(--md-primary);border-radius:8px;position:sticky;top:42px;z-index:2;box-shadow:0 2px 8px #0000002e}.port-bulk-count{display:flex;align-items:center;gap:6px;font:600 12px/1 var(--font-sans);color:var(--md-on-primary-container)}.port-bulk-count .icon{font-size:16px}.port-bulk-tie{display:flex;align-items:center;gap:6px}.port-bulk-tie .kv-field{flex:1;height:30px}.port-bulk-tie .btn{white-space:nowrap}.gap-2{gap:var(--s-2)}.gap-3{gap:var(--s-3)}.muted{color:var(--md-on-surface-variant)}.mono{font-family:var(--font-mono)}.ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.tb-search-wrap{position:relative;display:inline-flex}.gsearch{position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%);z-index:80;width:min(560px,80vw);background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:14px;box-shadow:0 16px 48px #00000047;overflow:hidden;display:flex;flex-direction:column;max-height:64vh}.gsearch-field{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--md-outline-variant)}.gsearch-field .icon{font-size:22px;color:var(--md-on-surface-variant)}.gsearch-field input{flex:1;min-width:0;background:transparent;border:0;outline:0;color:var(--md-on-surface);font:400 16px/1.3 var(--font-sans)}.gsearch-field input::placeholder{color:var(--md-on-surface-variant)}.gsearch-esc{font:600 11px/1 var(--font-mono);color:var(--md-on-surface-variant);background:var(--md-surface-2);border:1px solid var(--md-outline-variant);border-radius:6px;padding:4px 7px}.gsearch-results{overflow-y:auto;padding:6px}.gsearch-empty{padding:28px 16px;text-align:center;color:var(--md-on-surface-variant);font:var(--t-body-m)}.gsearch-row{width:100%;display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:10px 12px;border-radius:10px;background:transparent;border:0;cursor:pointer;text-align:left}.gsearch-row.is-active{background:var(--md-surface-2)}.gs-tag{display:inline-flex;align-items:center;gap:5px;font:600 11px/1 var(--font-sans);letter-spacing:.04em;text-transform:uppercase;padding:4px 9px 4px 7px;border-radius:999px;white-space:nowrap}.gs-tag .icon{font-size:15px}.gs-tag.module{color:var(--md-link);background:color-mix(in oklab,var(--md-link) 13%,transparent)}.gs-tag.connector{color:var(--md-tertiary);background:color-mix(in oklab,var(--md-tertiary) 15%,transparent)}.gs-body{display:flex;flex-direction:column;min-width:0;gap:3px}.gs-label{font:500 14px/1.2 var(--font-mono);color:var(--md-on-surface);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gs-sub{font:var(--t-label-m);color:var(--md-on-surface-variant);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gs-go{font-size:18px;color:var(--md-on-surface-variant);opacity:0}.gsearch-row.is-active .gs-go{opacity:1}.gsearch-foot{display:flex;align-items:center;gap:16px;padding:10px 16px;border-top:1px solid var(--md-outline-variant);background:var(--md-surface-1);font:var(--t-label-m);color:var(--md-on-surface-variant)}.gsearch-foot .muted{margin-left:auto}.gsearch-foot kbd{font:600 11px/1 var(--font-mono);color:var(--md-on-surface-variant);background:var(--md-surface-2);border:1px solid var(--md-outline-variant);border-radius:5px;padding:3px 6px;margin-right:3px}.fp-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;background:color-mix(in oklab,var(--md-scrim) 78%,transparent);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);display:flex;align-items:center;justify-content:center;padding:5vh 16px}.fp-dialog{width:min(760px,94vw);max-height:82vh;display:flex;flex-direction:column;background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:16px;box-shadow:0 24px 64px #00000073;overflow:hidden}.fp-head{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--md-outline-variant)}.fp-head>.icon{font-size:22px;color:var(--md-on-surface-variant)}.fp-path{flex:1;min-width:0}.fp-name{font:600 14px/1.2 var(--font-mono);color:var(--md-on-surface)}.fp-full{font:var(--t-label-m);color:var(--md-on-surface-variant);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fp-x{width:34px;height:34px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;color:var(--md-on-surface-variant)}.fp-x:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.fp-body{margin:0;padding:12px 0;overflow:auto;background:var(--md-surface-1);flex:1}.fp-line{display:flex;gap:14px;padding:0 16px;font:13px/1.7 var(--font-mono)}.fp-line:hover{background:var(--md-surface-2)}.fp-ln{width:28px;text-align:right;color:var(--md-on-surface-variant);opacity:.5;-webkit-user-select:none;user-select:none;flex-shrink:0}.fp-code{color:var(--md-on-surface);white-space:pre-wrap;word-break:break-word}.fp-foot{padding:10px 18px;border-top:1px solid var(--md-outline-variant);background:var(--md-surface);font:var(--t-label-m)}.ai-cli{display:flex;flex-direction:column;height:100%;min-height:0;font-family:var(--font-mono)}.ai-body{flex:1;overflow-y:auto;padding:12px 16px;display:flex;flex-direction:column;gap:7px;cursor:text}.ai-line{display:flex;gap:8px;align-items:flex-start;font:13px/1.5 var(--font-mono)}.ai-prompt{color:var(--md-primary);font-weight:700;flex-shrink:0}.ai-ic{font-size:16px;flex-shrink:0;margin-top:1px}.ai-text{color:var(--md-on-surface);white-space:pre-wrap;word-break:break-word}.ai-system{color:var(--md-on-surface-variant)}.ai-system .ai-ic{color:var(--md-primary)}.ai-hint{color:var(--md-on-surface-variant);opacity:.8;font-size:12px;padding-left:24px}.ai-input{color:var(--md-on-surface)}.ai-input .ai-text{font-weight:500}.ai-result{color:var(--md-on-surface)}.ai-result .ai-ic{color:var(--signal-ok)}.ai-error,.ai-error .ai-ic{color:var(--signal-error)}.ai-thinking{color:var(--md-on-surface-variant)}.ai-thinking .ai-ic{color:var(--md-tertiary)}.ai-jump{display:inline-flex;align-items:center;gap:4px;margin-left:10px;padding:2px 9px;border-radius:999px;font:600 11px/1 var(--font-sans);color:var(--md-link);border:1px solid color-mix(in oklab,var(--md-link) 40%,var(--md-outline-variant));vertical-align:1px}.ai-jump:hover{background:color-mix(in oklab,var(--md-link) 12%,transparent)}.ai-jump .icon{font-size:14px}.ai-input-row{display:flex;align-items:center;gap:8px;padding:10px 16px;border-top:1px solid var(--md-outline-variant);background:var(--md-surface-1)}.ai-input-row input{flex:1;background:transparent;border:0;outline:0;color:var(--md-on-surface);font:13px/1.4 var(--font-mono)}.ai-input-row input::placeholder{color:var(--md-on-surface-variant)}.ai-send{width:30px;height:30px;border-radius:8px;flex-shrink:0;background:var(--md-primary);color:var(--md-on-primary);display:inline-flex;align-items:center;justify-content:center}.ai-send:disabled{opacity:.4;cursor:not-allowed}.ai-send .icon{font-size:17px}:where(.app,.fp-dialog,.ver-confirm,.ver-view-modal) .icon.spin,.ai-send .icon{animation:none}.ai-thinking .icon.spin{animation:ai-spin .9s linear infinite;display:inline-block}@keyframes ai-spin{to{transform:rotate(360deg)}}.ai-cli .icon,.ai-input-row .icon,.ai-send .icon,.ai-jump .icon{font-family:Material Symbols Outlined!important}.canvas.tool-block,.canvas.tool-block .block-layer,.canvas.tool-block .port{cursor:cell}.canvas.tool-note,.canvas.tool-note .block-layer,.canvas.tool-note .block,.canvas.tool-note .port{cursor:none}.canvas.tool-connector .port{cursor:crosshair}.canvas.tool-connector .port:hover{background:color-mix(in oklab,var(--md-tertiary) 22%,transparent);box-shadow:inset 0 0 0 1px var(--md-tertiary)}.canvas:not(.tool-block):not(.tool-note):not(.tool-connector) .port:hover{box-shadow:inset 0 0 0 1px var(--md-tertiary);cursor:grab}.canvas.is-connecting .port:hover,.canvas:not(.tool-block):not(.tool-note):not(.tool-connector) .port:active{cursor:grabbing}.port.is-tie-eligible{box-shadow:inset 0 0 0 1.5px var(--signal-warn);background:color-mix(in oklab,var(--signal-warn) 14%,transparent);cursor:cell}.canvas.tool-tie .port.is-tie-eligible:hover{background:color-mix(in oklab,var(--signal-warn) 26%,transparent)}.canvas.tool-tie{cursor:cell}.canvas.is-connecting .port:hover{background:color-mix(in oklab,var(--signal-ok) 25%,transparent);box-shadow:inset 0 0 0 2px var(--signal-ok)}.conn-preview{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:6;overflow:visible}.conn-preview-path{fill:none;stroke:var(--md-tertiary);stroke-width:2;stroke-dasharray:6 5}.conn-preview-path.sev-ok{stroke:var(--signal-ok)}.conn-preview-path.sev-warn{stroke:var(--signal-warn)}.conn-preview-path.sev-error{stroke:var(--signal-error)}.conn-preview-dot{fill:var(--md-tertiary)}.conn-preview-end{fill:var(--md-surface);stroke:var(--md-tertiary);stroke-width:2}.conn-preview-end.is-snapped{fill:var(--signal-ok);stroke:var(--signal-ok)}.conn-preview-end.is-snapped.sev-warn{fill:var(--signal-warn);stroke:var(--signal-warn)}.conn-preview-end.is-snapped.sev-error{fill:var(--signal-error);stroke:var(--signal-error)}.note-pin{position:absolute;z-index:4;transform:translate(-4px,-28px);width:28px;height:28px;border-radius:50% 50% 50% 2px;background:var(--md-primary);color:var(--md-on-primary);display:flex;align-items:center;justify-content:center;box-shadow:0 3px 8px #0000004d;cursor:pointer}.note-pin .icon{font-size:16px}.note-pin.is-draft{box-shadow:0 3px 8px #0000004d,0 0 0 4px color-mix(in oklab,var(--md-primary) 28%,transparent)}.comment-cursor{position:absolute;z-index:60;pointer-events:none;transform:translate(-2px,-26px);width:28px;height:28px;border-radius:50% 50% 50% 2px;background:var(--md-primary);color:var(--md-on-primary);display:flex;align-items:center;justify-content:center;box-shadow:0 3px 10px #00000059}.comment-cursor .icon{font-size:16px;font-family:Material Symbols Outlined!important}.comments-panel .sp-head{display:flex;align-items:center;gap:8px}.cp-close{width:28px;height:28px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;color:var(--md-on-surface-variant)}.cp-close:hover{background:var(--md-surface-variant);color:var(--md-on-surface)}.cp-close .icon{font-size:18px}.comments-panel .icon,.note-viewer .icon{font-family:Material Symbols Outlined!important}.cmt-list{display:flex;flex-direction:column;gap:4px}.cmt-item{display:flex;align-items:flex-start;gap:10px;width:100%;text-align:left;padding:12px;border-radius:12px;background:transparent;border:1px solid transparent;cursor:pointer}.cmt-item:hover{background:var(--md-surface-variant)}.cmt-item.is-active{background:color-mix(in oklab,var(--md-primary) 12%,transparent);border-color:color-mix(in oklab,var(--md-primary) 40%,transparent)}.cmt-avatar{flex:none;width:30px;height:30px;border-radius:50%;background:var(--md-primary);color:var(--md-on-primary);display:flex;align-items:center;justify-content:center;font:600 12px/1 var(--font-sans)}.cmt-main{flex:1;min-width:0}.cmt-meta{display:flex;align-items:baseline;gap:8px}.cmt-meta b{font:var(--t-label-l);color:var(--md-on-surface)}.cmt-ts{font:var(--t-label-m);color:var(--md-on-surface-variant)}.cmt-text{margin-top:3px;font:var(--t-body-s);color:var(--md-on-surface);white-space:pre-wrap;word-break:break-word}.cmt-tags{margin-top:6px;display:flex;flex-wrap:wrap;gap:4px}.cmt-empty{padding:36px 16px;text-align:center;color:var(--md-on-surface-variant);font:var(--t-body-s);line-height:1.6}.cmt-avatar .icon{font-size:17px}.cmt-resolved-tag{font:var(--t-label-s);color:var(--signal-ok);background:color-mix(in oklab,var(--signal-ok) 16%,transparent);padding:1px 7px;border-radius:999px}.cmt-actions{flex:none;display:flex;gap:2px;align-self:flex-start}.cmt-act{width:30px;height:30px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;color:var(--md-on-surface-variant);opacity:0;transition:opacity .12s,background .12s,color .12s}.cmt-act .icon{font-size:18px}.cmt-item:hover .cmt-act,.cmt-item.is-active .cmt-act,.cmt-item.is-resolved .cmt-resolve{opacity:1}.cmt-act:hover{background:var(--md-surface-variant);color:var(--md-on-surface)}.cmt-resolve:hover{background:color-mix(in oklab,var(--signal-ok) 16%,transparent);color:var(--signal-ok)}.cmt-item.is-resolved{opacity:.6}.cmt-item.is-resolved:hover{opacity:1}.cmt-item.is-resolved .cmt-avatar{background:var(--signal-ok);color:#fff}.cmt-item.is-resolved .cmt-resolve{color:var(--signal-ok)}.note-viewer{position:absolute;z-index:65;width:296px;transform:translate(10px,-6px);background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:14px;box-shadow:0 12px 32px #00000059;padding:12px}.nv-head{display:flex;align-items:center;gap:8px}.nv-meta{flex:1;display:flex;flex-direction:column;min-width:0}.nv-meta b{font:var(--t-label-l);color:var(--md-on-surface)}.nv-text{margin-top:8px;font:var(--t-body-s);color:var(--md-on-surface);white-space:pre-wrap;word-break:break-word}.nv-tags{margin-top:8px;display:flex;flex-wrap:wrap;gap:4px}.note-pin{transition:box-shadow .12s ease}.note-pin.is-selected{box-shadow:0 3px 8px #0000004d,0 0 0 4px color-mix(in oklab,var(--md-primary) 45%,transparent);z-index:6}.note-pin.is-resolved{background:var(--signal-ok);color:#fff}.nv-ts{font:var(--t-label-m);color:var(--md-on-surface-variant)}.nv-resolve,.nc-x{flex:none}.nv-resolve{width:28px;height:28px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;color:var(--md-on-surface-variant)}.nv-resolve:hover{background:color-mix(in oklab,var(--signal-ok) 16%,transparent);color:var(--signal-ok)}.nv-resolve .icon{font-size:19px}.nv-actions{margin-top:12px;display:flex}.nv-ai{display:inline-flex;align-items:center;gap:6px;font:600 12px/1 var(--font-sans);color:var(--md-on-surface-variant);padding:7px 12px;border-radius:999px;border:1px solid var(--md-outline-variant);transition:background .12s,color .12s,border-color .12s}.nv-ai:hover{background:color-mix(in oklab,var(--md-primary) 12%,transparent);color:var(--md-primary);border-color:color-mix(in oklab,var(--md-primary) 40%,transparent)}.nv-ai .icon{font-size:16px}.note-composer{position:fixed;z-index:70;width:320px;background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:14px;box-shadow:0 16px 48px #00000059;padding:12px;display:flex;flex-direction:column;gap:8px}.nc-head{display:flex;align-items:center;gap:8px}.nc-avatar{width:26px;height:26px;border-radius:50%;background:var(--owner-1, #1F4F87);color:#fff;display:inline-flex;align-items:center;justify-content:center;font:600 10px/1 var(--font-sans)}.nc-title{font:600 14px/1 var(--font-sans);flex:1}.nc-x{width:26px;height:26px;border-radius:6px;color:var(--md-on-surface-variant);display:inline-flex;align-items:center;justify-content:center}.nc-x:hover{background:var(--md-surface-2)}.nc-x .icon{font-size:18px}.nc-text{width:100%;min-height:64px;resize:vertical;background:var(--md-surface-container-highest);color:var(--md-on-surface);border:1px solid var(--md-outline-variant);border-radius:10px;padding:8px 10px;font:var(--t-body-m);outline:none}.nc-text:focus{border-color:var(--md-primary)}.nc-input{width:100%;height:34px;background:var(--md-surface-container-highest);color:var(--md-on-surface);border:1px solid var(--md-outline-variant);border-radius:8px;padding:0 10px;font:var(--t-body-s);outline:none}.nc-input:focus{border-color:var(--md-primary)}.nc-tagrow{display:flex;flex-wrap:wrap;gap:5px}.nc-tag{font:500 12px/1 var(--font-sans);color:var(--md-link);background:color-mix(in oklab,var(--md-link) 13%,transparent);padding:4px 8px;border-radius:999px}.nc-imgprev img{max-width:100%;border-radius:8px;display:block}.nc-urlchip{display:inline-flex;align-items:center;gap:5px;font:var(--t-label-m);color:var(--md-link);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nc-urlchip .icon{font-size:15px}.nc-mention summary{display:flex;align-items:center;gap:6px;cursor:pointer;font:var(--t-label-l);color:var(--md-on-surface-variant);list-style:none;padding:2px 0}.nc-mention summary::-webkit-details-marker{display:none}.nc-mention summary .icon{font-size:16px}.nc-people{display:flex;flex-wrap:wrap;gap:5px;padding:6px 0 2px}.nc-person{font:var(--t-label-m);padding:4px 9px;border-radius:999px;border:1px solid var(--md-outline-variant);color:var(--md-on-surface-variant)}.nc-person.on{background:var(--md-primary);color:var(--md-on-primary);border-color:var(--md-primary)}.nc-toolbar{display:flex;align-items:center;gap:6px;padding-top:2px}.nc-tool{width:32px;height:32px;border-radius:8px;color:var(--md-on-surface-variant);display:inline-flex;align-items:center;justify-content:center}.nc-tool:hover{background:var(--md-surface-2)}.nc-tool.on{background:var(--md-secondary-container);color:var(--md-on-secondary-container)}.nc-tool .icon{font-size:18px}.nc-cancel{font:var(--t-label-l);color:var(--md-on-surface-variant);padding:0 10px;height:32px;border-radius:999px}.nc-cancel:hover{background:var(--md-surface-2)}.nc-save{font:600 13px/1 var(--font-sans);color:var(--md-on-primary);background:var(--md-primary);padding:0 14px;height:32px;border-radius:999px}.nc-save:disabled{opacity:.4;cursor:not-allowed}.note-composer .icon,.note-pin .icon{font-family:Material Symbols Outlined!important}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font:var(--t-body-m);background:var(--md-background);color:var(--md-on-background);-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;background:transparent;border:0;cursor:pointer}:where(.home,.login-screen) .icon{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:"liga";font-feature-settings:"liga";-webkit-font-smoothing:antialiased}.home{display:grid;grid-template-columns:232px 1fr;grid-template-rows:60px 1fr;grid-template-areas:"brand topbar" "nav main";height:100vh}.brand{grid-area:brand;display:flex;align-items:center;gap:10px;padding:0 20px;border-right:1px solid var(--md-outline-variant);border-bottom:1px solid var(--md-outline-variant)}.brand-mark{width:24px;height:24px;border-radius:6px;background:linear-gradient(135deg,var(--md-primary) 0 50%,transparent 50%),var(--md-tertiary);position:relative}.brand-mark:after{content:"";position:absolute;top:5px;right:5px;bottom:5px;left:5px;background:var(--md-surface);border-radius:2px}.brand-name{font:600 16px/1 var(--font-sans);letter-spacing:.04em}.topbar{grid-area:topbar;display:flex;align-items:center;gap:16px;padding:0 20px;border-bottom:1px solid var(--md-outline-variant)}.searchbar{flex:1;max-width:560px;display:flex;align-items:center;gap:8px;height:38px;padding:0 12px;background:var(--md-surface-container-highest);border:1px solid var(--md-outline-variant);border-radius:10px}.searchbar .icon{font-size:18px;color:var(--md-on-surface-variant)}.searchbar input{flex:1;background:transparent;border:0;outline:0;color:var(--md-on-surface);font:var(--t-body-m)}.topbar .spacer{flex:1}.topbar .iconbtn{width:38px;height:38px;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;color:var(--md-on-surface-variant)}.topbar .iconbtn:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.topbar .avatar{width:34px;height:34px;border-radius:50%;background:var(--owner-1, #1F4F87);color:#fff;display:inline-flex;align-items:center;justify-content:center;font:600 13px/1 var(--font-sans)}.nav{grid-area:nav;border-right:1px solid var(--md-outline-variant);padding:16px 12px;display:flex;flex-direction:column;gap:4px;overflow:auto}.nav .new-btn{display:flex;align-items:center;gap:8px;height:44px;padding:0 14px;margin-bottom:12px;background:var(--md-primary);color:var(--md-on-primary);border-radius:12px;font:600 15px/1 var(--font-sans)}.nav .new-btn:hover{filter:brightness(1.08)}.nav .new-btn .icon{font-size:20px}.nav-item{display:flex;align-items:center;gap:10px;height:38px;padding:0 12px;border-radius:8px;color:var(--md-on-surface-variant);font:var(--t-body-m);text-align:left}.nav-item:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.nav-item.active{background:var(--md-secondary-container);color:var(--md-on-secondary-container);font-weight:500}.nav-item .icon{font-size:20px}.nav-tree{margin:4px 0 4px 8px;display:flex;flex-direction:column;gap:2px;border-left:1px solid var(--md-outline-variant);padding-left:8px}.nav-tree .nav-item{height:32px;font:var(--t-body-s)}.nav-sep{height:1px;background:var(--md-outline-variant);margin:12px 4px}.main{grid-area:main;display:grid;grid-template-columns:1fr;overflow:hidden}.main.with-edu{grid-template-columns:1fr 320px}.content{padding:24px 28px;overflow:auto}.content-head{display:flex;align-items:center;gap:12px;margin-bottom:20px}.content-head h1{margin:0;font:var(--t-headline-s);font-weight:500}.back-btn{width:40px;height:40px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;color:var(--md-on-surface-variant);border:0;background:transparent}.back-btn .icon{font-size:20px}.back-btn:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.crumb-link{cursor:pointer;color:var(--md-link)}.crumb-link:hover{text-decoration:underline}.content-head .crumb{color:var(--md-on-surface-variant);font:var(--t-body-s)}.content-head .spacer{flex:1}.view-toggle{display:inline-flex;background:var(--md-surface-2);border-radius:8px;padding:2px}.view-toggle button{width:32px;height:30px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;color:var(--md-on-surface-variant)}.view-toggle button.on{background:var(--md-surface);color:var(--md-on-surface)}.view-toggle .icon{font-size:18px}.section-label{font:var(--t-label-m);letter-spacing:.08em;text-transform:uppercase;color:var(--md-on-surface-variant);margin:18px 0 10px}.folders{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;margin-bottom:8px}.folder{display:flex;align-items:center;gap:10px;padding:14px;border:1px solid var(--md-outline-variant);border-radius:12px;background:var(--md-surface-container);cursor:pointer}.folder:hover{border-color:var(--md-primary);background:var(--md-surface-container-high)}.folder .icon{font-size:22px;color:var(--md-primary)}.folder .f-meta{min-width:0}.folder .f-name{font:500 14px/1.2 var(--font-sans)}.folder .f-count{font:var(--t-label-m);color:var(--md-on-surface-variant)}.proj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(248px,1fr));gap:16px}.proj-card{border:1px solid var(--md-outline-variant);border-radius:14px;overflow:hidden;background:var(--md-surface-container);cursor:pointer;transition:border-color .12s,transform .12s}.proj-card:hover{border-color:var(--md-primary);transform:translateY(-2px)}.proj-thumb{height:132px;position:relative;background:radial-gradient(circle at 1px 1px,var(--md-outline-variant) 1px,transparent 0);background-size:14px 14px;background-color:var(--md-surface-1);border-bottom:1px solid var(--md-outline-variant)}.proj-thumb svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.canvas-thumb{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;background:var(--md-background)}.canvas-snap{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;object-position:18% 28%;display:block}.proj-info{padding:12px 14px}.proj-name{font:500 14px/1.3 var(--font-sans);margin-bottom:6px;display:flex;align-items:center;gap:6px}.proj-name .icon{font-size:16px;color:var(--md-tertiary)}.proj-meta{display:flex;align-items:center;gap:8px;font:var(--t-label-m);color:var(--md-on-surface-variant)}.status-dot{width:7px;height:7px;border-radius:50%}.proj-foot{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;border-top:1px solid var(--md-outline-variant);background:color-mix(in oklab,var(--md-surface-container-high) 60%,transparent)}.tagpill{font:var(--t-label-m);padding:2px 8px;border-radius:999px;background:var(--md-surface-2);color:var(--md-on-surface-variant)}.proj-list{width:100%;border-collapse:collapse}.proj-list th{text-align:left;font:var(--t-label-m);letter-spacing:.06em;text-transform:uppercase;color:var(--md-on-surface-variant);padding:8px 12px;border-bottom:1px solid var(--md-outline-variant)}.proj-list td{padding:12px;border-bottom:1px solid var(--md-outline-variant);font:var(--t-body-s)}.proj-list tr{cursor:pointer}.proj-list tbody tr:hover{background:var(--md-surface-1)}.proj-list .name-cell{display:flex;align-items:center;gap:8px;font:500 14px/1 var(--font-sans)}.proj-list .name-cell .icon{font-size:18px;color:var(--md-tertiary)}.edu{border-left:1px solid var(--md-outline-variant);padding:20px;overflow:auto}.edu-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.edu-head h3{margin:0;font:var(--t-title-m);font-weight:600}.edu-head .x{color:var(--md-on-surface-variant)}.edu-card{border:1px solid var(--md-outline-variant);border-radius:12px;padding:14px;margin-bottom:12px;background:var(--md-surface-container);cursor:pointer}.edu-card:hover{border-color:var(--md-primary)}.edu-card .ec-icon{width:34px;height:34px;border-radius:8px;background:var(--md-secondary-container);color:var(--md-on-secondary-container);display:inline-flex;align-items:center;justify-content:center;margin-bottom:10px}.edu-card h4{margin:0 0 4px;font:var(--t-title-s);font-weight:500}.edu-card p{margin:0;font:var(--t-body-s);color:var(--md-on-surface-variant)}:where(.home,.login-screen) .scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--md-scrim);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:50;display:flex;align-items:center;justify-content:center}:where(.home,.login-screen) .dialog{width:min(720px,94vw);max-height:88vh;display:flex;flex-direction:column;background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:18px;box-shadow:0 20px 60px #0006;overflow:hidden}:where(.home,.login-screen) .dialog-head{padding:20px 24px 0}:where(.home,.login-screen) .dialog-head .row{display:flex;align-items:flex-start;gap:12px}:where(.home,.login-screen) .dialog-head h2{margin:0;font:var(--t-title-l);font-weight:600}:where(.home,.login-screen) .dialog-head p{margin:4px 0 0;color:var(--md-on-surface-variant);font:var(--t-body-m)}:where(.home,.login-screen) .dialog-head .x{margin-left:auto;width:34px;height:34px;border-radius:8px;color:var(--md-on-surface-variant);display:inline-flex;align-items:center;justify-content:center}:where(.home,.login-screen) .dialog-head .x:hover{background:var(--md-surface-2)}:where(.home,.login-screen) .dialog-body{padding:20px 24px;overflow:auto}.dialog-foot{padding:14px 24px;display:flex;gap:10px;justify-content:flex-end;border-top:1px solid var(--md-outline-variant);background:var(--md-surface-1)}:where(.home,.login-screen) .btn{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 18px;border-radius:999px;font:600 14px/1 var(--font-sans)}:where(.home,.login-screen) .btn .icon{font-size:18px}:where(.home,.login-screen) .btn-filled{background:var(--md-primary);color:var(--md-on-primary)}:where(.home,.login-screen) .btn-filled:hover{filter:brightness(1.08)}:where(.home,.login-screen) .btn-filled:disabled{opacity:.4;cursor:not-allowed}:where(.home,.login-screen) .btn-text{color:var(--md-on-surface-variant)}:where(.home,.login-screen) .btn-text:hover{background:var(--md-surface-2)}:where(.home,.login-screen) .btn-outlined{box-shadow:inset 0 0 0 1px var(--md-outline)}:where(.home,.login-screen) .btn-outlined:hover{background:var(--md-surface-2)}.mode-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.mode-card{text-align:left;padding:20px;border:1.5px solid var(--md-outline-variant);border-radius:14px;background:var(--md-surface-container);transition:border-color .12s,background .12s}.mode-card:hover{border-color:var(--md-primary);background:var(--md-surface-container-high)}.mode-card.sel{border-color:var(--md-primary);background:color-mix(in oklab,var(--md-primary) 10%,transparent)}.mode-card .m-icon{width:44px;height:44px;border-radius:12px;background:var(--md-secondary-container);color:var(--md-on-secondary-container);display:inline-flex;align-items:center;justify-content:center;margin-bottom:12px}.mode-card .m-icon .icon{font-size:24px}.mode-card h3{margin:0 0 6px;font:var(--t-title-m);font-weight:600}.mode-card p{margin:0;font:var(--t-body-s);color:var(--md-on-surface-variant)}.field-row{margin-top:18px}.field-row label{display:block;font:var(--t-label-m);color:var(--md-on-surface-variant);margin-bottom:6px}.field-row input{width:100%;height:40px;padding:0 12px;background:var(--md-surface-container-highest);color:var(--md-on-surface);border:1px solid var(--md-outline-variant);border-radius:10px;outline:none;font:var(--t-body-m)}.field-row input:focus{border-color:var(--md-primary)}.dropzone{border:2px dashed var(--md-outline);border-radius:14px;padding:32px;text-align:center;background:var(--md-surface-1);transition:border-color .12s,background .12s}.dropzone.drag{border-color:var(--md-primary);background:color-mix(in oklab,var(--md-primary) 8%,transparent)}.dropzone .big-icon{font-size:40px;color:var(--md-on-surface-variant)}.dropzone h3{margin:8px 0 4px;font:var(--t-title-s);font-weight:500}.dropzone p{margin:0;font:var(--t-body-s);color:var(--md-on-surface-variant)}.dropzone .pick{margin-top:12px}.supported{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:14px}.supported .ext{font:500 11px/1 var(--font-mono);padding:4px 8px;border-radius:6px;background:var(--md-surface-2);color:var(--md-on-surface-variant)}.supported .ext.bad{background:color-mix(in oklab,var(--signal-error) 14%,transparent);color:var(--signal-error);text-decoration:line-through}.hint-row{margin-top:14px;display:flex;gap:8px;align-items:flex-start;font:var(--t-body-s);color:var(--md-on-surface-variant)}.hint-row .icon{font-size:16px;flex-shrink:0;margin-top:1px}.filelist{margin-top:18px;display:flex;flex-direction:column;gap:6px}.filerow{display:flex;align-items:center;gap:10px;padding:8px 12px;border:1px solid var(--md-outline-variant);border-radius:10px;background:var(--md-surface-container)}.filerow.bad{border-color:color-mix(in oklab,var(--signal-error) 45%,var(--md-outline-variant))}.filerow .fi{font-size:18px;color:var(--md-on-surface-variant)}.filerow.bad .fi{color:var(--signal-error)}.filerow .fname{flex:1;font:13px/1.2 var(--font-mono)}.filerow .fbadge{font:var(--t-label-m);padding:2px 8px;border-radius:999px}.fbadge.ok{background:color-mix(in oklab,var(--signal-ok) 16%,transparent);color:var(--signal-ok)}.fbadge.bad{background:color-mix(in oklab,var(--signal-error) 16%,transparent);color:var(--signal-error)}.filerow .fx{color:var(--md-on-surface-variant);width:26px;height:26px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center}.filerow .fx:hover{background:var(--md-surface-2);color:var(--md-on-surface)}.filerow .frepl{display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 10px;border-radius:999px;font:var(--t-label-m);color:var(--md-tertiary);border:1px solid color-mix(in oklab,var(--md-tertiary) 45%,var(--md-outline-variant))}.filerow .frepl:hover{background:color-mix(in oklab,var(--md-tertiary) 14%,transparent)}.filerow .frepl .icon{font-size:15px}.stepper{display:flex;align-items:center;gap:0;margin-bottom:24px}.step{display:flex;align-items:center;gap:10px}.step .dot{width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font:600 12px/1 var(--font-mono);border:1.5px solid var(--md-outline);color:var(--md-on-surface-variant);flex-shrink:0}.step.done .dot{background:var(--signal-ok);border-color:var(--signal-ok);color:#03240f}.step.active .dot{background:var(--md-primary);border-color:var(--md-primary);color:var(--md-on-primary)}.step .slabel{font:var(--t-body-s);color:var(--md-on-surface-variant);white-space:nowrap}.step.active .slabel,.step.done .slabel{color:var(--md-on-surface)}.step-line{flex:1;height:1.5px;background:var(--md-outline-variant);margin:0 12px;min-width:16px}.step-line.done{background:var(--signal-ok)}.parse-log{font:13px/1.7 var(--font-mono);background:var(--md-surface-1);border:1px solid var(--md-outline-variant);border-radius:10px;padding:14px 16px;max-height:220px;overflow:auto}.parse-log .ln{display:flex;gap:8px}.parse-log .ln .ic{font-size:14px}.parse-log .ln.ok .ic{color:var(--signal-ok)}.parse-log .ln.warn .ic{color:var(--signal-warn)}.parse-log .ln.run .ic{color:var(--md-tertiary)}.parse-log .ln .t{color:var(--md-on-surface-variant)}.review-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:18px}.rs-card{border:1px solid var(--md-outline-variant);border-radius:12px;padding:12px 14px;background:var(--md-surface-container)}.rs-card .n{font:600 24px/1 var(--font-sans)}.rs-card .l{font:var(--t-label-m);color:var(--md-on-surface-variant);margin-top:4px}.io-table{width:100%;border-collapse:collapse;font:var(--t-body-s)}.io-table th{text-align:left;font:var(--t-label-m);letter-spacing:.05em;text-transform:uppercase;color:var(--md-on-surface-variant);padding:8px;border-bottom:1px solid var(--md-outline-variant)}.io-table td{padding:8px;border-bottom:1px solid var(--md-outline-variant);font-family:var(--font-mono);font-size:12px}.iface-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--md-outline-variant);border-radius:10px;margin-bottom:8px;background:var(--md-surface-container)}.iface-row .badge-bus{font:600 10px/1 var(--font-mono);padding:3px 7px;border-radius:6px;background:#0e3a52;color:#c7eefc}[data-theme=light] .iface-row .badge-bus{background:#b3e6fa;color:#003a52}.iface-row .iname{font:500 14px/1.2 var(--font-mono)}.iface-row .imeta{font:var(--t-label-m);color:var(--md-on-surface-variant)}.iface-row .suggest{margin-left:auto;font:var(--t-body-s);color:var(--md-link);display:flex;align-items:center;gap:6px}.tieoff-box{margin-top:8px;padding:12px 14px;border-radius:10px;background:color-mix(in oklab,var(--signal-warn) 10%,transparent);border:1px solid color-mix(in oklab,var(--signal-warn) 30%,transparent)}.tieoff-box .th{font:600 13px/1 var(--font-sans);color:var(--signal-warn);display:flex;align-items:center;gap:6px;margin-bottom:8px}.tieoff-line{display:flex;align-items:center;gap:10px;padding:5px 0;font:var(--t-body-s)}.tieoff-line .sig{font-family:var(--font-mono);font-size:12px}.tieoff-line .acts{margin-left:auto;display:flex;gap:6px}.mini-btn{font:var(--t-label-m);padding:3px 9px;border-radius:999px;border:1px solid var(--md-outline);color:var(--md-on-surface-variant)}.mini-btn.on{background:var(--md-primary);color:var(--md-on-primary);border-color:var(--md-primary)}.review-section-title{font:var(--t-title-s);font-weight:600;margin:18px 0 10px}.login-screen{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(1100px 560px at 50% -8%,var(--md-surface-2),transparent 62%),var(--md-background)}.login-card{width:100%;max-width:400px;background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:18px;box-shadow:var(--el-3);padding:36px 32px 26px;display:flex;flex-direction:column;gap:15px}.login-brand{display:flex;align-items:center;gap:10px}.login-brand .brand-mark{width:28px;height:28px}.login-brand .brand-name{font:600 17px/1 var(--font-sans);letter-spacing:.05em}.login-title{margin:10px 0 0;font:var(--t-headline-s);font-weight:600;color:var(--md-on-surface)}.login-sub{margin:0 0 6px;font:var(--t-body-s);color:var(--md-on-surface-variant)}.login-field{display:flex;flex-direction:column;gap:6px}.login-field>span{font:var(--t-label-m);font-weight:500;color:var(--md-on-surface-variant)}.login-input{display:flex;align-items:center;gap:8px;height:46px;padding:0 12px;background:var(--md-surface-1);border:1px solid var(--md-outline-variant);border-radius:12px;transition:border-color .15s,box-shadow .15s}.login-input:focus-within{border-color:var(--md-secondary);box-shadow:0 0 0 3px color-mix(in oklab,var(--md-secondary) 22%,transparent)}.login-input .icon{font-size:20px;color:var(--md-on-surface-variant)}.login-input input{flex:1;min-width:0;background:transparent;border:0;outline:0;color:var(--md-on-surface);font:var(--t-body-m)}.login-eye{display:inline-flex;align-items:center;color:var(--md-on-surface-variant)}.login-eye:hover{color:var(--md-on-surface)}.login-err{display:flex;align-items:center;gap:6px;font:var(--t-body-s);color:var(--md-error)}.login-err .icon{font-size:18px}.login-btn{margin-top:4px;height:48px;display:flex;align-items:center;justify-content:center;gap:8px;background:var(--md-primary);color:var(--md-on-primary);border-radius:12px;font:600 15px/1 var(--font-sans);transition:filter .15s}.login-btn:hover{filter:brightness(1.08)}.login-btn .icon{font-size:20px}.login-hint{text-align:center;font:var(--t-label-m);color:var(--md-on-surface-variant);padding-top:6px}.login-hint b{color:var(--md-on-surface);font-weight:600;font-family:var(--font-mono)}.usermenu{position:relative;display:inline-flex}.topbar .avatar{border:0;cursor:pointer;transition:box-shadow .15s,filter .15s}.topbar .avatar:hover{filter:brightness(1.08)}.topbar .avatar.is-open{box-shadow:0 0 0 3px color-mix(in oklab,var(--md-secondary) 30%,transparent)}.usermenu-pop{position:absolute;top:calc(100% + 10px);right:0;width:300px;z-index:60;background:var(--md-surface);border:1px solid var(--md-outline-variant);border-radius:14px;box-shadow:var(--el-3);padding:8px;animation:um-in .12s ease-out}@keyframes um-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.um-email{padding:8px 10px 4px;font:var(--t-label-m);color:var(--md-on-surface-variant)}.um-org{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px}.um-org-mark{width:32px;height:32px;flex:0 0 auto;border-radius:50%;background:var(--md-surface-2);color:var(--md-on-surface-variant);display:inline-flex;align-items:center;justify-content:center;font:600 12px/1 var(--font-sans)}.um-org-text{flex:1;min-width:0}.um-org-name{font:var(--t-body-m);font-weight:600;color:var(--md-on-surface);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.um-org-sub{font:var(--t-label-m);color:var(--md-on-surface-variant)}.um-check{color:var(--md-link);font-size:20px}.um-sep{height:1px;background:var(--md-outline-variant);margin:6px 4px}.um-item{width:100%;display:flex;align-items:center;gap:12px;padding:10px;border-radius:10px;font:var(--t-body-m);color:var(--md-on-surface);text-align:left;cursor:pointer;transition:background .12s}.um-item:hover{background:var(--md-surface-2)}.um-item .icon{font-size:20px;color:var(--md-on-surface-variant)}
