:root{--font-display:"Hanken Grotesk",ui-sans-serif,system-ui,sans-serif;--font-sans:"Hanken Grotesk",ui-sans-serif,system-ui,sans-serif;--text-xs:12px;--text-sm:14px;--text-base:16px;--text-lg:18px;--leading-tight:1.2;--leading-snug:1.35;--leading-normal:1.6;--font-weight-regular:400;--font-weight-medium:500;--font-weight-semibold:600;--spacing-1:4px;--spacing-1-5:6px;--spacing-2:8px;--spacing-3:12px;--spacing-4:16px;--spacing-5:20px;--spacing-6:24px;--size-control-md:32px;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--shadow-md:0 4px 12px rgb(18 18 18/0.08);--shadow-lg:0 12px 24px rgb(18 18 18/0.12);--color-page:#fbfbf9;--color-surface:#f3f2f2;--color-hairline:#e2dfdc;--color-ink-body:#312e2c;--color-ink-display:#100f0f;--color-ink-muted:#a4a19e;--color-accent:#4a5534;--color-accent-faded:#eff2e9;--color-accent-display:#21290b;--color-on-accent:#ffffff;--color-signal:#EEBB43;--color-danger:#ab2422;--color-danger-faded:#ffeae7;--color-success:#437742;--color-success-faded:#e5f6e4;--color-success-display:#002902;--color-on-success:#ffffff;--color-info:#007190;--color-disabled:#a4a19e;--color-disabled-bg:#f3f2f2}@media (prefers-reduced-motion:reduce){:root{--duration-instant:0ms;--duration-fast:0ms;--duration-normal:0ms}}#app,body,html{height:100%;margin:0}body{background:var(--color-page);color:var(--color-ink-body);font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--leading-snug)}#view{display:block;width:100%;height:100%;touch-action:none}.flow-chart{position:absolute;left:var(--spacing-3);right:calc(304px + 2 * var(--spacing-3));bottom:var(--spacing-3);height:156px;display:flex;flex-direction:column;gap:var(--spacing-1);box-sizing:border-box;padding:var(--spacing-2) var(--spacing-3);border-radius:var(--radius-xl);border:1px solid var(--color-hairline);background:rgba(242,239,233,.74);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);pointer-events:none}#app.panel-hidden .flow-chart{right:var(--spacing-3)}#app.panel-hidden #panel{display:none}.canvas-tools{position:absolute;top:var(--spacing-3);right:calc(304px + 2 * var(--spacing-3));display:flex;gap:var(--spacing-2)}.canvas-slot{display:contents}.source-link.floating{align-self:center;padding:0 var(--spacing-1);font-size:var(--text-xs);color:var(--color-ink-muted);text-decoration:none}.source-link.floating:hover{color:var(--color-ink-body);text-decoration:underline}.canvas-header{position:absolute;top:var(--spacing-3);left:var(--spacing-3);display:flex;align-items:center;gap:var(--spacing-2);z-index:2}.canvas-tools button{flex:none;width:auto;box-shadow:var(--shadow-lg)}#app.panel-hidden .canvas-tools{right:var(--spacing-3)}.flow-chart .resize{position:absolute;top:0;left:0;right:0;height:24px;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;pointer-events:auto;cursor:ns-resize;touch-action:none}.flow-chart .resize:before{content:"";width:36px;height:3px;border-radius:2px;background:var(--color-ink-muted)}.flow-chart .resize:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.flow-chart header{display:flex;gap:var(--spacing-4);font-size:var(--text-xs);color:var(--color-ink-body)}.flow-chart .key{display:inline-flex;align-items:center;gap:var(--spacing-1-5)}.flow-chart b{font-weight:var(--font-weight-medium);color:var(--color-ink-display);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.flow-chart .swatch{width:14px;height:2px;border-radius:1px}.flow-chart .swatch.walking{background:#1d2126}.flow-chart .swatch.speed{background:#2f6fd6}.flow-chart .swatch.exits{background:repeating-linear-gradient(90deg,#d9480f 0 4px,transparent 4px 7px)}.flow-chart header{flex-wrap:wrap;row-gap:var(--spacing-1)}.flow-chart .phase-key{margin-left:auto;gap:var(--spacing-2)}.flow-chart .phase-chip{display:inline-flex;align-items:center;gap:var(--spacing-1);color:var(--color-ink-muted)}.flow-chart .phase-chip i{width:10px;height:6px;border-radius:1px}.flow-chart canvas{flex:1 1;min-height:0;width:100%}#panel{position:absolute;top:var(--spacing-3);right:var(--spacing-3);width:304px;max-height:calc(100% - 24px);overflow:auto;box-sizing:border-box;padding:var(--spacing-4);border-radius:var(--radius-xl);background:var(--color-surface);border:1px solid var(--color-hairline);box-shadow:var(--shadow-lg)}.pages{display:flex;gap:var(--spacing-3);margin:0 0 var(--spacing-3)}.pages a{color:var(--color-ink-muted);font-size:var(--text-xs);text-decoration:none}.pages a[aria-current=page]{color:var(--color-ink-display);font-weight:var(--font-weight-medium)}#panel h1{margin:0;font-size:var(--text-lg);font-weight:var(--font-weight-semibold);letter-spacing:-.02em;color:var(--color-ink-display)}#panel .sub{margin:var(--spacing-1) 0 var(--spacing-4);color:var(--color-ink-muted);font-size:var(--text-xs)}.section{display:flex;flex-direction:column;gap:var(--spacing-2);margin:0 0 var(--spacing-4);padding:0 0 var(--spacing-4);border-bottom:1px solid var(--color-hairline)}.section:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.section-label{margin:0 0 var(--spacing-1);font-size:var(--text-xs);font-weight:var(--font-weight-medium);color:var(--color-ink-display)}.section.tight{gap:4px}.section-head{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-2)}.section-head .section-label{margin:0}button.copy{flex:none;width:auto;min-height:28px;padding:2px 10px}label.slider.compact{display:grid;grid-template-columns:78px 36px minmax(0,1fr);align-items:center;grid-column-gap:6px;column-gap:6px}label.slider.compact span{display:block;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}label.slider.compact b{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.row{display:flex;gap:var(--spacing-2)}button{flex:1 1;-webkit-appearance:none;-moz-appearance:none;appearance:none;min-height:var(--size-control-md);border:1px solid var(--color-hairline);background:var(--color-accent);color:var(--color-on-accent);border-radius:var(--radius-lg);padding:var(--spacing-1-5) var(--spacing-2);font:inherit;font-size:var(--text-sm);font-weight:var(--font-weight-medium);cursor:pointer}button:hover{background:var(--color-accent-display)}button.secondary{background:var(--color-surface);color:var(--color-ink-body);border-color:var(--color-hairline)}button.secondary:hover,button[aria-pressed=true]{background:var(--color-accent-faded);color:var(--color-accent-display)}button[aria-pressed=true]{border-color:var(--color-accent)}button.secondary[aria-pressed=true]{background:var(--color-accent-faded);color:var(--color-accent-display)}button.spawn{background:var(--color-success);color:var(--color-on-success);border-color:var(--color-success)}button.spawn:hover{background:var(--color-success-display)}label.select,label.slider{display:block;margin:0;font-size:var(--text-xs);color:var(--color-ink-body)}label.select span,label.slider span{display:flex;justify-content:space-between;margin-bottom:var(--spacing-1)}label.select span{display:block}label.slider b{font-weight:var(--font-weight-medium);color:var(--color-ink-display)}label.slider.spawn b{color:var(--color-success)}input[type=range]{width:100%;accent-color:var(--color-accent)}label.slider.spawn input[type=range]{accent-color:var(--color-success)}.rate-row{display:flex;align-items:center;gap:var(--spacing-2)}.rate-row input[type=range]{flex:1 1}.rate-row input[type=number]{width:72px;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;border:1px solid var(--color-hairline);border-radius:var(--radius-md);padding:var(--spacing-1) var(--spacing-1-5);font:inherit;font-size:var(--text-xs)}.rate-row input[type=number],select{min-height:var(--size-control-md);background:var(--color-page);color:var(--color-ink-body)}select{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--color-hairline);border-radius:var(--radius-lg);padding:var(--spacing-1-5) var(--spacing-2);font:inherit;font-size:var(--text-sm)}#status{margin:var(--spacing-1) 0 0;min-height:2.6em;font-size:var(--text-xs);line-height:var(--leading-snug);color:var(--color-ink-body)}#status.error{color:var(--color-danger)}.legend{align-items:center;gap:var(--spacing-1) var(--spacing-3);font-size:var(--text-xs);line-height:var(--leading-snug);color:var(--color-ink-muted)}.legend span{display:inline-flex;align-items:center;gap:var(--spacing-1)}.legend i{flex:none;width:10px;height:10px;border-radius:50%}.legend i.ramp{width:100%;height:6px;border-radius:var(--radius-sm)}.store-label{padding:var(--spacing-1) var(--spacing-2);border-radius:var(--radius-md);background:var(--color-surface);border:1px solid var(--color-hairline);box-shadow:var(--shadow-md);font-size:var(--text-xs);line-height:var(--leading-snug);color:var(--color-ink-body);white-space:nowrap;text-align:center;pointer-events:none}.store-label b{color:var(--color-ink-display);font-weight:var(--font-weight-semibold)}.store-label span{display:block;color:var(--color-ink-muted)}.store-popup{position:fixed;z-index:30;width:232px;box-sizing:border-box;padding:var(--spacing-3);border-radius:var(--radius-lg);background:var(--color-surface);border:1px solid var(--color-hairline);box-shadow:var(--shadow-lg)}.store-popup[hidden]{display:none}.store-popup-title{margin:0;font-size:var(--text-sm);font-weight:var(--font-weight-semibold);color:var(--color-ink-display)}.store-popup .hint{margin:var(--spacing-1) 0 var(--spacing-2)}.store-popup input[type=number]{width:100%;box-sizing:border-box;min-height:var(--size-control-md);border:1px solid var(--color-hairline);background:var(--color-page);color:var(--color-ink-body);border-radius:var(--radius-md);padding:var(--spacing-1) var(--spacing-1-5);font:inherit;font-size:var(--text-sm)}.store-popup-actions{display:flex;gap:var(--spacing-2);margin-top:var(--spacing-2)}.hint{margin:var(--spacing-3) 0 0;font-size:var(--text-xs);line-height:var(--leading-snug);color:var(--color-ink-muted)}.train-status{min-height:2.6em;white-space:pre-line;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.crush-warning{margin:var(--spacing-3) 0 0;padding:var(--spacing-2) var(--spacing-3);border-radius:var(--radius-md);border:1px solid color-mix(in srgb,var(--color-danger) 35%,transparent);font-size:var(--text-xs);line-height:var(--leading-snug);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;color:var(--color-ink-body)}.crush-warning.live{border-color:var(--color-danger);background:color-mix(in srgb,var(--color-danger) 12%,transparent);color:var(--color-danger);font-weight:600}.legend{gap:var(--spacing-2);margin:0}.legend,.legend .los{display:flex;flex-wrap:wrap}.legend .los{width:100%}.chip,.legend .los{gap:var(--spacing-1-5)}.chip{display:inline-flex;align-items:center;font-size:var(--text-xs);color:var(--color-ink-body)}.chip i{width:10px;height:10px;border-radius:var(--radius-sm);display:inline-block}.app-frame{min-height:100%;display:flex;flex-direction:column}.app-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-4);padding:var(--spacing-3) var(--spacing-6);border-bottom:1px solid var(--color-hairline);background:var(--color-page)}.app-name{display:inline-flex;align-items:center;gap:var(--spacing-2);font-size:var(--text-base);color:var(--color-ink-muted)}.app-logo{flex:none;display:block;border-radius:var(--radius-sm)}.app-name b{color:var(--color-ink-display);font-weight:var(--font-weight-semibold)}.app-nav{display:flex;gap:var(--spacing-4)}.app-footer a,.app-nav a{color:var(--color-ink-body);text-decoration:none;font-size:var(--text-sm)}.app-footer a:hover,.app-nav a:hover{color:var(--color-accent-display);text-decoration:underline}.app-main{flex:1 1;width:100%;max-width:1200px;box-sizing:border-box;margin:0 auto;padding:var(--spacing-6)}.app-footer{display:flex;justify-content:space-between;gap:var(--spacing-4);padding:var(--spacing-3) var(--spacing-6);border-top:1px solid var(--color-hairline);font-size:var(--text-xs);color:var(--color-ink-muted)}.page-title{margin:0 0 var(--spacing-1);font-size:28px;line-height:var(--leading-tight);font-weight:var(--font-weight-semibold);letter-spacing:-.02em;color:var(--color-ink-display);text-wrap:balance}.page-lede{max-width:64ch;font-size:var(--text-base);line-height:var(--leading-normal);color:var(--color-ink-body);text-wrap:pretty}.entry-group,.page-lede{margin:0 0 var(--spacing-6)}.entry-group{max-width:880px}.entry-group h2{margin:0 0 var(--spacing-1);font-size:var(--text-lg);font-weight:var(--font-weight-semibold);color:var(--color-ink-display)}.entry-group>p{margin:0 0 var(--spacing-3);color:var(--color-ink-muted)}.entries{margin:0;padding:0;list-style:none;border:1px solid var(--color-hairline);border-radius:var(--radius-xl);background:var(--color-surface);overflow:hidden}.entries li+li{border-top:1px solid var(--color-hairline)}.entry{display:flex;align-items:center;gap:var(--spacing-4);padding:var(--spacing-3) var(--spacing-4) var(--spacing-3) var(--spacing-3);color:inherit;text-decoration:none;transition:background-color .12s ease}.entry:hover{background:var(--color-accent-faded)}.entry:focus-visible{outline:2px solid var(--color-accent);outline-offset:-2px}.entry-plan{position:relative;flex:none;width:128px;aspect-ratio:16/10;overflow:hidden;border:1px solid var(--color-hairline);border-radius:var(--radius-md);background:var(--color-page)}.entry-plan .plan-thumbnail{position:absolute;inset:var(--spacing-1-5);width:calc(100% - 2 * var(--spacing-1-5));height:calc(100% - 2 * var(--spacing-1-5))}.entry-go{flex:none;margin-left:auto;color:var(--color-ink-muted)}.entry:hover .entry-go{color:var(--color-accent-display)}.plan-thumbnail{display:block;width:100%;height:100%}.entry-body{display:flex;flex-direction:column;gap:var(--spacing-1);min-width:0}.entry-body h3{margin:0;font-size:var(--text-base);font-weight:var(--font-weight-semibold);color:var(--color-ink-display)}.entry-body p{margin:0;font-size:var(--text-sm);color:var(--color-ink-body);text-wrap:pretty}.canvas-header .chip-link,.canvas-header button{flex:none;width:auto;display:inline-flex;align-items:center;min-height:var(--size-control-md);padding:var(--spacing-1-5) var(--spacing-3);border:1px solid var(--color-hairline);border-radius:var(--radius-lg);background:var(--color-surface);color:var(--color-ink-body);font:inherit;font-size:var(--text-sm);font-weight:var(--font-weight-medium);text-decoration:none;box-shadow:var(--shadow-lg);cursor:pointer}.canvas-header .chip-link:hover,.canvas-header button:not(:disabled):hover{background:var(--color-accent-faded);color:var(--color-accent-display)}.canvas-header button:disabled{cursor:not-allowed;color:var(--color-disabled)}.canvas-header .chip-link.primary{background:var(--color-accent);color:var(--color-on-accent);border-color:var(--color-accent)}.canvas-header .chip-link.primary:hover{background:var(--color-accent-display);color:var(--color-on-accent)}.canvas-header .crumb{padding:0 var(--spacing-2);font-size:var(--text-sm);font-weight:var(--font-weight-semibold);color:var(--color-ink-display);text-shadow:0 0 6px var(--color-page)}@media (prefers-reduced-motion:reduce){.entry{transition:none}}.editor{display:grid;grid-template-columns:240px minmax(0,1fr) 320px;height:100%;min-height:0;font-size:var(--text-sm);color:var(--color-ink-body);background:var(--color-page)}:where(.editor) button{flex:none;min-height:0;border:0;border-radius:var(--radius-sm);background:transparent;color:inherit;padding:0;font:inherit}:where(.editor) button:hover{background:var(--color-surface);color:inherit}:where(.editor) button[aria-pressed=true]{background:transparent;color:inherit}:where(.editor) select{width:auto;-webkit-appearance:auto;-moz-appearance:auto;appearance:auto;min-height:28px;border-radius:var(--radius-sm);padding:2px var(--spacing-1);background:#fff}.editor input,.editor select,.editor textarea{font:inherit;color:inherit}.editor-inspector,.editor-side{min-height:0;overflow-y:auto;padding:var(--spacing-3);box-sizing:border-box}.editor-side{overflow-x:hidden;border-right:1px solid var(--color-hairline)}.editor-inspector{border-left:1px solid var(--color-hairline);display:flex;flex-direction:column;gap:var(--spacing-4)}.editor-heading{margin:var(--spacing-3) 0 var(--spacing-2);font-size:var(--text-xs);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.06em;color:var(--color-ink-muted)}.editor-heading:first-child{margin-top:0}.editor-center{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0}.editor-options,.editor-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--spacing-2) var(--spacing-3);padding:var(--spacing-2) var(--spacing-3);border-bottom:1px solid var(--color-hairline)}.editor-options{min-height:40px;box-sizing:border-box;background:var(--color-surface)}.editor-options label{display:inline-flex;align-items:center;gap:var(--spacing-1-5)}.editor-options input[type=number]{width:4.5em}.options-spacer{flex:1 1}.option-unit{color:var(--color-ink-muted);font-size:var(--text-xs)}.tool-group{gap:2px;padding:2px;border-radius:var(--radius-md);background:var(--color-surface)}.tool,.tool-group{display:inline-flex}.tool{align-items:center;gap:var(--spacing-1-5);height:28px;padding:0 var(--spacing-2);border:0;border-radius:var(--radius-sm);background:transparent;cursor:pointer}.tool:hover:not(:disabled){background:var(--color-page)}.tool[aria-pressed=true]{background:var(--color-accent);color:var(--color-on-accent)}.tool:disabled{color:var(--color-disabled);cursor:default}.tool kbd{font:inherit;font-size:10px;opacity:.6}.icon-tool{position:relative;justify-content:center;width:30px;height:30px;padding:0;--icon-fill:var(--color-page)}.icon-tool[aria-pressed=true]{--icon-fill:var(--color-accent)}.icon-tool[data-tip]:focus-visible:after,.icon-tool[data-tip]:hover:after{content:attr(data-tip);position:absolute;top:calc(100% + 6px);left:50%;z-index:30;transform:translateX(-50%);padding:3px var(--spacing-2);border-radius:var(--radius-sm);background:var(--color-ink-display);color:#fff;font-size:var(--text-xs);font-weight:var(--font-weight-regular);white-space:nowrap;pointer-events:none}.snap-group{align-items:center}.snap-group .grid-size{min-height:26px;margin-right:var(--spacing-1);border:0;background:transparent;font-size:var(--text-xs)}.help-sheet{position:absolute;top:92px;right:var(--spacing-3);z-index:25;width:min(640px,calc(100% - 2 * var(--spacing-3)));max-height:calc(100% - 140px);overflow-y:auto;box-sizing:border-box;padding:var(--spacing-3) var(--spacing-4) var(--spacing-4);border:1px solid var(--color-hairline);border-radius:var(--radius-lg);background:var(--color-page);box-shadow:var(--shadow-lg)}.help-head{display:flex;align-items:center;justify-content:space-between}.help-head h2{margin:0;font-size:var(--text-base);color:var(--color-ink-display)}.help-columns{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);grid-gap:var(--spacing-4);gap:var(--spacing-4)}.help-columns dl{margin:var(--spacing-2) 0 0}.help-columns dl>div{display:grid;grid-template-columns:minmax(64px,auto) minmax(0,1fr);grid-gap:var(--spacing-3);gap:var(--spacing-3);padding:3px 0;border-bottom:1px solid var(--color-hairline)}.help-columns dt{white-space:nowrap}.help-columns dd{margin:0;line-height:var(--leading-snug)}.help-columns kbd{padding:1px 5px;border:1px solid var(--color-hairline);border-radius:var(--radius-sm);background:var(--color-surface);font:inherit;font-size:var(--text-xs)}.editor-message{position:absolute;left:50%;bottom:44px;transform:translateX(-50%);display:flex;align-items:center;gap:var(--spacing-3);max-width:80%;padding:var(--spacing-2) var(--spacing-3);border-radius:var(--radius-md);background:var(--color-danger-faded);color:var(--color-danger);box-shadow:var(--shadow-md)}.editor-message button{border:0;background:none;cursor:pointer;font-size:var(--text-base)}.plan{position:relative;flex:1 1;min-height:0;overflow:hidden;background:#fff}.plan-svg{position:absolute;inset:0;display:block;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:default}.plan-svg.picking,.plan-svg:not(.tool-select):not(.tool-vertex){cursor:crosshair}.plan-grid{pointer-events:none}.plan-grid-line{fill:none;stroke:#eceae4;stroke-width:1}.plan-grid-line.major{stroke:#ddd9d0}.plan-shape{fill-opacity:.5;stroke-width:1}.plan-shape.role-floor{fill-opacity:.7}path.plan-shape[fill=none]{stroke-width:2.5}.plan-shape.selected{stroke:var(--color-accent);stroke-width:2.5;fill-opacity:.65}path.plan-shape.selected[fill=none]{stroke-width:4}.plan-shape.invalid{stroke:var(--color-danger);stroke-dasharray:5 3;stroke-width:2}.plan-point{stroke:#fff;stroke-width:1.5}.plan-point.selected{stroke:var(--color-accent);stroke-width:3}.plan-point.invalid{stroke:var(--color-danger)}.plan-vertex{fill:#fff;stroke:var(--color-accent);stroke-width:1.5;cursor:move}.plan-mid{fill:var(--color-accent-faded);stroke:var(--color-accent);stroke-width:1;cursor:copy}.plan-draft{fill:rgb(74 85 52/.08);stroke:var(--color-accent);stroke-width:1.5;stroke-dasharray:4 3}polyline.plan-draft{fill:none}.plan-draft-vertex{fill:var(--color-accent)}.plan-marquee{fill:rgb(0 113 144/.06);stroke:var(--color-info);stroke-dasharray:3 3}.plan-snap{fill:none;stroke:var(--color-signal);stroke-width:2;pointer-events:none}.plan-pick{fill:var(--color-signal)}.plan-ghosts{opacity:.25}.plan-ghost{fill-opacity:.3;stroke-width:1.5;stroke-dasharray:4 3;pointer-events:none}.plan-ghost.line{fill:none!important}.plan-ghost.lower{fill:var(--color-info);stroke:var(--color-info)}.plan-ghost.upper{fill:#b5654a;stroke:#b5654a}.plan-door{fill:var(--color-signal);fill-opacity:.55;stroke:var(--color-signal);stroke-width:1;pointer-events:none}.plan-zone-arrow{fill:#312e2c;fill-opacity:.72;stroke:none;pointer-events:none}.plan-vertex.picked{fill:var(--color-accent)}.plan-transform-box{fill:none;stroke:var(--color-info);stroke-width:1;stroke-dasharray:4 3;pointer-events:none}.plan-scale-handle{fill:#fff;stroke:var(--color-info);stroke-width:1.5}.plan-scale-handle.h0,.plan-scale-handle.h4{cursor:nwse-resize}.plan-scale-handle.h2,.plan-scale-handle.h6{cursor:nesw-resize}.plan-scale-handle.h1,.plan-scale-handle.h5{cursor:ns-resize}.plan-scale-handle.h3,.plan-scale-handle.h7{cursor:ew-resize}.plan-rotate-handle{fill:var(--color-info);stroke:#fff;stroke-width:1.5;cursor:-webkit-grab;cursor:grab}.plan-snap-target{stroke:var(--color-signal);stroke-width:3;stroke-opacity:.6}.plan-guide-line{stroke:var(--color-signal);stroke-width:1;stroke-dasharray:5 4}.plan-guide.extension .plan-guide-line{stroke-dasharray:1.5 3;stroke-width:1.5}.plan-guide-ref{stroke:var(--color-signal);stroke-width:2;stroke-opacity:.45}.plan-guide-tick{fill:none;stroke:var(--color-signal);stroke-width:1.5}.plan-dim,.plan-snap-label{fill:var(--color-ink-body);font-size:11px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;paint-order:stroke;stroke:#fff;stroke-width:3px;stroke-linejoin:round}.plan-dims{pointer-events:none}.plan-status{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;gap:var(--spacing-3);padding:var(--spacing-1-5) var(--spacing-3);border-top:1px solid var(--color-hairline);background:rgb(251 251 249/.92);font-size:var(--text-xs)}.plan-coords{min-width:15em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.plan-help{flex:1 1;color:var(--color-ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plan-fit{border:1px solid var(--color-hairline);border-radius:var(--radius-sm);background:var(--color-page);padding:2px var(--spacing-2);cursor:pointer}.level-switcher{display:flex;flex-direction:column;gap:2px}.layer-items button,.layer-toggle,.level-switcher button{display:flex;align-items:center;gap:var(--spacing-2);width:100%;min-height:28px;padding:2px var(--spacing-2);border:0;border-radius:var(--radius-sm);background:transparent;text-align:left;cursor:pointer}.layer-items button:hover,.layer-toggle:hover,.level-switcher button:hover{background:var(--color-surface)}.layer-items button.selected,.level-switcher button[aria-selected=true]{background:var(--color-accent-faded);color:var(--color-accent-display);font-weight:var(--font-weight-medium)}.level-names{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--color-ink-muted);font-size:var(--text-xs);font-weight:var(--font-weight-regular)}.layer-list ul{list-style:none;margin:0;padding:0}.layer-group{margin:var(--spacing-3) 0 var(--spacing-1);font-size:var(--text-xs);font-weight:var(--font-weight-medium);color:var(--color-ink-muted)}.layer-row{display:flex;align-items:center}.attr-swatch,.layer-swatch{flex:none;width:10px;height:10px;border-radius:2px}.layer-count{margin-left:auto;font-size:var(--text-xs);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.layer-count,.layer-eye{color:var(--color-ink-muted)}.layer-eye{flex:none;min-width:56px;height:24px;margin-left:var(--spacing-1);border:0;border-radius:var(--radius-sm);background:transparent;font-size:var(--text-xs);cursor:pointer}.layer-eye:hover{background:var(--color-surface)}.layer-eye.off{text-decoration:line-through}.layer-items{padding-left:var(--spacing-4)!important}.layer-items button{min-height:24px;font-size:var(--text-xs)}.layer-empty{color:var(--color-ink-muted)}.layer-ghosts{display:flex;align-items:center;gap:var(--spacing-2);min-height:28px;padding:0 var(--spacing-2);font-size:var(--text-xs)}.attr-group,.attr-transform{display:flex;flex-direction:column;gap:var(--spacing-2)}.attr-members{list-style:none;margin:0;padding:0}.attr-members button{display:flex;align-items:center;gap:var(--spacing-2);width:100%;min-height:24px;padding:0 var(--spacing-2);border:0;border-radius:var(--radius-sm);background:transparent;font-size:var(--text-xs);text-align:left;cursor:pointer}.attr-members button.current{background:var(--color-accent-faded);color:var(--color-accent-display)}.attr-check{display:flex;align-items:center;gap:var(--spacing-2)}.editor-inspector .attr-check input[type=checkbox]{margin-top:0;align-self:center}.attr-stops{display:flex;flex-direction:column;gap:2px}.attr-unit-inline{color:var(--color-ink-muted);font-size:var(--text-xs)}.attr-panel{display:flex;flex-direction:column;gap:var(--spacing-2)}.attr-title{margin:0;font-size:var(--text-base);font-weight:var(--font-weight-semibold);color:var(--color-ink-display)}.attr-subtitle{margin:var(--spacing-3) 0 var(--spacing-1);font-size:var(--text-xs);color:var(--color-ink-muted)}.attr-head{display:flex;align-items:center;gap:var(--spacing-2)}.attr-id{flex:1 1;display:flex;flex-direction:column}.attr-id input{font-size:var(--text-base)!important;font-weight:var(--font-weight-semibold);border-color:transparent!important}.attr-id input:focus,.attr-id input:hover{border-color:var(--color-hairline)!important}.attr-hint{margin:0;color:var(--color-ink-muted);font-size:var(--text-xs);line-height:var(--leading-snug)}.attr-row{display:grid;grid-template-columns:104px minmax(0,1fr);align-items:start;grid-gap:var(--spacing-2);gap:var(--spacing-2)}.attr-label{padding-top:6px;line-height:var(--leading-tight)}.attr-required{margin-left:2px;color:var(--color-danger)}.attr-unit{display:block;color:var(--color-ink-muted);font-size:var(--text-xs)}.attr-control{display:flex;flex-direction:column;gap:var(--spacing-1);min-width:0}.editor-inspector input:not([type=checkbox]),.editor-inspector select,.editor-inspector textarea{width:100%;min-height:28px;box-sizing:border-box;padding:2px var(--spacing-1-5);border:1px solid var(--color-hairline);border-radius:var(--radius-sm);background:#fff}.editor-inspector input[type=checkbox]{align-self:flex-start;margin-top:7px}.editor-inspector textarea{resize:vertical;font-family:ui-monospace,monospace;font-size:var(--text-xs)}.attr-row.has-error input:not([type=checkbox]),.attr-row.has-error select,.editor-inspector textarea.invalid{border-color:var(--color-danger)}.attr-help{color:var(--color-ink-muted)}.attr-error,.attr-help,.attr-issue{font-size:var(--text-xs);line-height:var(--leading-snug)}.attr-error,.attr-issue{color:var(--color-danger)}.attr-issue.warning{color:#8a6100}.attr-checks,.attr-chips,.attr-inline{display:flex;flex-wrap:wrap;gap:var(--spacing-1) var(--spacing-3)}.attr-checks label{display:inline-flex;align-items:center;gap:var(--spacing-1)}.attr-checks input[type=checkbox]{margin-top:0!important}.attr-chip{display:inline-flex;align-items:center;gap:2px;padding:0 0 0 var(--spacing-2);border-radius:var(--radius-sm);background:var(--color-surface)}.attr-chip button,.attr-weight button{border:0;background:none;cursor:pointer;padding:0 var(--spacing-1-5)}.attr-points,.attr-weights{display:flex;flex-direction:column;gap:var(--spacing-1)}.attr-point,.attr-tuple,.attr-weight{display:flex;align-items:center;gap:var(--spacing-1)}.attr-weight span{flex:1 1;overflow:hidden;text-overflow:ellipsis}.attr-weight input{width:5em!important}.attr-actions{display:flex;gap:var(--spacing-2);margin-top:var(--spacing-2)}.attr-actions button,.attr-inline button,.attr-more{min-height:28px;padding:0 var(--spacing-3);border:1px solid var(--color-hairline);border-radius:var(--radius-sm);background:var(--color-page);cursor:pointer}.attr-more{align-self:flex-start}.attr-actions button.danger{color:var(--color-danger)}.editor-issues summary{cursor:pointer;font-weight:var(--font-weight-medium)}.issue-list{list-style:none;margin:var(--spacing-2) 0 0;padding:0;display:flex;flex-direction:column;gap:2px}.issue{width:100%;border:0;border-radius:var(--radius-sm);padding:var(--spacing-1) var(--spacing-2);text-align:left;font-size:var(--text-xs);line-height:var(--leading-snug);cursor:pointer}.issue.error{background:var(--color-danger-faded);color:var(--color-danger)}.issue.warning{background:#fff4dc;color:#8a6100}.issue-empty{margin:var(--spacing-2) 0 0;color:var(--color-success);font-size:var(--text-xs)}.button{display:inline-flex;align-items:center;justify-content:center;flex:none;width:auto;min-height:32px;box-sizing:border-box;padding:0 var(--spacing-3);border:1px solid var(--color-hairline);border-radius:var(--radius-md);background:var(--color-page);color:var(--color-ink-body);font:inherit;font-size:var(--text-sm);font-weight:var(--font-weight-medium);text-decoration:none;cursor:pointer;list-style:none}.button:hover{background:var(--color-surface);color:var(--color-ink-display)}.button.primary{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-on-accent)}.button.primary:hover{background:var(--color-accent-display);color:var(--color-on-accent)}.button:disabled{background:var(--color-disabled-bg);color:var(--color-disabled);cursor:default}.muted{color:var(--color-ink-muted)}.home{display:flex;flex-direction:column;gap:var(--spacing-6);max-width:760px}.home-note{margin:0;padding:var(--spacing-4);border:1px solid var(--color-hairline);border-radius:var(--radius-xl);background:var(--color-signal);border-color:var(--color-signal);font-size:var(--text-sm);line-height:var(--leading-snug);color:var(--color-ink-body);text-wrap:pretty}.home-note a{color:var(--color-ink-display);font-weight:var(--font-weight-medium);text-decoration:underline;text-underline-offset:2px}.home-note a:hover{color:var(--color-accent-display)}.home-note a.home-note-github{display:inline-flex;align-items:center;justify-content:center;width:1.25em;height:1.25em;margin-left:.15em;vertical-align:-.28em;text-decoration:none}.home-note-github svg{width:2em;height:2em}.home-links{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,3fr);grid-gap:var(--spacing-3);gap:var(--spacing-3)}.home-card{display:flex;flex-direction:column;align-items:flex-start;gap:var(--spacing-1);min-height:5.5rem;padding:var(--spacing-4);border:1px solid var(--color-hairline);border-radius:var(--radius-xl);background:var(--color-surface);color:inherit;text-decoration:none;transition-property:background-color,scale;transition-duration:.12s;transition-timing-function:ease,cubic-bezier(.2,0,0,1)}.home-card:hover{background:var(--color-accent-faded)}.home-card-method{flex-direction:row;align-items:center;gap:var(--spacing-3)}.home-card-book{flex:none;width:36px;height:36px}.home-card-pantograf{flex-direction:row;align-items:center;gap:var(--spacing-3);background:var(--color-accent-faded);border-color:var(--color-accent-faded);color:var(--color-ink-display)}.home-card-pantograf:hover{background:color-mix(in srgb,var(--color-accent-faded) 70%,var(--color-accent))}.home-card-mark{flex:none;width:72px;height:72px}.home-card-copy{display:flex;flex-direction:column;gap:var(--spacing-1);min-width:0}.home-card-pantograf .home-card-ext{color:inherit}.home-card:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.home-card:active{scale:.96}.home-card strong{font-size:var(--text-base);font-weight:var(--font-weight-semibold);color:var(--color-ink-display)}.home-card-copy>span,.home-card>span{font-size:var(--text-sm);line-height:var(--leading-snug);color:var(--color-ink-body);text-wrap:pretty}.home-card-ext{font-weight:var(--font-weight-regular);color:var(--color-ink-muted)}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (prefers-reduced-motion:reduce){.home-card:active{scale:none}}.home-intro h1{display:flex;align-items:center;gap:var(--spacing-3);margin:0 0 var(--spacing-2);font-size:28px;letter-spacing:-.02em;color:var(--color-ink-display)}.home .entries{max-width:none}.home .entry .entry-body{flex:1 1;min-width:0;text-decoration:none;color:inherit}.home .entry a.entry-body:hover h3{color:var(--color-accent-display)}.home-intro p{margin:0;max-width:62ch;font-size:var(--text-base);line-height:var(--leading-normal)}.drop-zone{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-4);padding:var(--spacing-6) var(--spacing-5);border:2px dashed var(--color-hairline);border-radius:var(--radius-xl);background:var(--color-surface);text-align:center}.drop-zone.over{border-color:var(--color-accent);background:var(--color-accent-faded)}.drop-title{margin:0;font-size:var(--text-base);color:var(--color-ink-body)}.drop-actions{display:flex;gap:var(--spacing-3)}.home-error{margin:0;color:var(--color-danger)}.home-section h2{margin:0 0 var(--spacing-3);font-size:var(--text-lg);color:var(--color-ink-display)}.recent-list,.sample-links{list-style:none;margin:0;padding:0}.recent-list li{display:flex;align-items:center;gap:var(--spacing-3);border-bottom:1px solid var(--color-hairline)}.recent-open{flex:1 1;display:flex;flex-direction:column;padding:var(--spacing-2) 0;color:inherit;text-decoration:none}.recent-open:hover .recent-name{text-decoration:underline}.recent-name{font-weight:var(--font-weight-medium);color:var(--color-ink-display)}.recent-meta{font-size:var(--text-xs);color:var(--color-ink-muted)}button.recent-remove{flex:none;width:auto;min-height:28px;background:none;border:0;color:var(--color-ink-muted);font-weight:var(--font-weight-regular)}button.recent-remove:hover{background:var(--color-surface);color:var(--color-danger)}.sample-links{display:flex;flex-wrap:wrap;gap:var(--spacing-2) var(--spacing-4)}.sample-links a{color:var(--color-accent-display)}.workspace{display:flex;flex-direction:column;height:100%}.workspace-error,.workspace-loading{padding:var(--spacing-6)}.workspace-error h1{margin:0 0 var(--spacing-2);font-size:var(--text-lg)}.workspace-bar{display:flex;align-items:center;gap:var(--spacing-3);padding:var(--spacing-2) var(--spacing-3);border-bottom:1px solid var(--color-hairline);background:var(--color-page)}.workspace-home{display:inline-flex;align-items:center;gap:var(--spacing-2);color:var(--color-ink-muted);text-decoration:none;white-space:nowrap}.workspace-home b{color:var(--color-ink-display);font-weight:var(--font-weight-semibold)}.workspace-file{display:inline-flex;align-items:center;gap:var(--spacing-1-5);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:var(--font-weight-medium)}.dirty-dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--color-signal)}.mode-toggle{display:inline-flex;padding:2px;border-radius:var(--radius-md);background:var(--color-surface)}.mode-toggle button{position:relative;display:inline-flex;align-items:center;gap:var(--spacing-1-5);flex:none;min-height:28px;padding:0 var(--spacing-3) 0 var(--spacing-2);border:0;border-radius:var(--radius-sm);background:transparent;color:var(--color-ink-body)}.mode-toggle button:hover{background:var(--color-page);color:var(--color-ink-display)}.mode-toggle button[aria-selected=true]{background:var(--color-accent);color:var(--color-on-accent)}.mode-count{min-width:16px;padding:0 4px;border-radius:8px;background:var(--color-danger);color:#fff;font-size:var(--text-xs);line-height:16px;text-align:center}.button.icon-button{position:relative;width:32px;padding:0}.workspace-bar [data-tip]:focus-visible:after,.workspace-bar [data-tip]:hover:after{content:attr(data-tip);position:absolute;top:calc(100% + 6px);left:50%;z-index:30;transform:translateX(-50%);padding:3px var(--spacing-2);border-radius:var(--radius-sm);background:var(--color-ink-display);color:#fff;font-size:var(--text-xs);font-weight:var(--font-weight-regular);white-space:nowrap;pointer-events:none}.export-menu[open]>summary[data-tip]:after{display:none}.bar-spacer{flex:1 1}.bar-link{font-size:var(--text-sm);color:var(--color-ink-body);white-space:nowrap}.export-menu{position:relative}.export-menu summary::-webkit-details-marker{display:none}.export-items{position:absolute;right:0;top:calc(100% + 4px);z-index:10;display:flex;flex-direction:column;min-width:200px;padding:var(--spacing-1);border:1px solid var(--color-hairline);border-radius:var(--radius-md);background:var(--color-page);box-shadow:var(--shadow-lg)}.export-items button{display:flex;justify-content:space-between;min-height:32px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--color-ink-body);text-align:left;font-weight:var(--font-weight-regular)}.export-items button:hover{background:var(--color-surface);color:var(--color-ink-display)}.export-items span{color:var(--color-ink-muted)}.workspace-banner{display:flex;align-items:flex-start;gap:var(--spacing-3);padding:var(--spacing-2) var(--spacing-4);font-size:var(--text-xs)}.workspace-banner ul{flex:1 1;margin:0;padding-left:var(--spacing-4)}.workspace-banner.warning{background:#fff4dc;color:#6b4b00}.workspace-banner.error{background:var(--color-danger-faded);color:var(--color-danger);align-items:center}.workspace-banner.error span{flex:1 1}.workspace-banner>button:not(.button){flex:none;width:auto;min-height:0;border:0;background:none;color:inherit;font-size:var(--text-base)}.workspace-toast{position:fixed;left:50%;bottom:var(--spacing-6);transform:translateX(-50%);z-index:20;padding:var(--spacing-2) var(--spacing-4);border-radius:var(--radius-md);background:var(--color-ink-display);color:#fff;box-shadow:var(--shadow-lg)}.workspace-body{position:relative;flex:1 1;min-height:0}.run-pane{position:absolute;inset:0}.run-pane #app{position:relative}.run-error{position:absolute;left:var(--spacing-3);right:calc(304px + 2 * var(--spacing-3));top:56px;z-index:5;border-radius:var(--radius-md);box-shadow:var(--shadow-md)}.app-main:has(.split-home){max-width:none;padding:0}.split-home{display:grid;grid-template-columns:minmax(20rem,1fr) minmax(24rem,1.15fr);align-items:stretch;min-height:100%}.split-pane{padding:var(--spacing-6);box-sizing:border-box}.split-pane+.split-pane{border-left:1px solid var(--color-hairline)}.split-pane .home-intro h1,.split-pane .page-title{font-size:22px}.split-pane .page-lede{margin-bottom:var(--spacing-4)}.split-pane .entry-group,.split-pane .home{max-width:none}.split-pane .entry-plan{width:96px}@media (max-width:880px){.split-home{grid-template-columns:1fr}.split-pane+.split-pane{border-left:0;border-top:1px solid var(--color-hairline)}}.app-main:has(.method){max-width:1100px}.method{display:grid;grid-template-columns:12.5rem minmax(0,1fr);grid-gap:var(--spacing-6);gap:var(--spacing-6);align-items:start}.method-nav{position:-webkit-sticky;position:sticky;top:var(--spacing-6)}.method-nav ol{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--spacing-1)}.method-nav a{display:block;padding:var(--spacing-1-5) var(--spacing-3);border-radius:var(--radius-md);color:var(--color-ink-body);text-decoration:none;font-size:var(--text-sm)}.method-nav a:hover{background:var(--color-surface);color:var(--color-ink-display)}.method-nav a[aria-current=page]{background:var(--color-accent-faded);color:var(--color-accent-display);font-weight:var(--font-weight-medium)}.method-nav a:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.method-article{min-width:0;max-width:72ch;color:var(--color-ink-body);font-size:var(--text-base);line-height:var(--leading-normal);overflow-wrap:break-word}.method-article>:first-child{margin-top:0}.method-article h1{margin:0 0 var(--spacing-4);font-size:28px;line-height:var(--leading-tight);letter-spacing:-.02em}.method-article h1,.method-article h2{font-weight:var(--font-weight-semibold);color:var(--color-ink-display)}.method-article h2{margin:var(--spacing-6) 0 var(--spacing-3);font-size:var(--text-lg)}.method-article h3{margin:var(--spacing-5) 0 var(--spacing-2);font-size:var(--text-base);font-weight:var(--font-weight-semibold);color:var(--color-ink-display)}.method-article ol,.method-article p,.method-article ul{margin:0 0 var(--spacing-4)}.method-article li+li{margin-top:var(--spacing-2)}.method-article a{color:var(--color-accent-display)}.method-article a:hover{text-decoration:underline}.method-article pre,.method-mermaid-error{padding:var(--spacing-3) var(--spacing-4);border:1px solid var(--color-hairline);border-radius:var(--radius-md);background:var(--color-surface);font-size:var(--text-sm);line-height:var(--leading-snug)}.method-article pre,.method-mermaid,.method-mermaid-error{margin:0 0 var(--spacing-4);overflow-x:auto}.method-mermaid svg{display:block;max-width:100%;height:auto}.method-article .katex-display{margin:0 0 var(--spacing-4);overflow-x:auto;overflow-y:hidden}.method-article code{font-family:ui-monospace,Cascadia Code,Segoe UI Mono,monospace;font-size:.92em}.method-article :not(pre)>code{padding:.1em .35em;border-radius:var(--radius-sm);background:var(--color-surface)}.method-table{margin:0 0 var(--spacing-4);overflow-x:auto}.method-article table{width:100%;border-collapse:collapse;font-size:var(--text-sm)}.method-article td,.method-article th{padding:var(--spacing-2) var(--spacing-3);border-bottom:1px solid var(--color-hairline);text-align:start;vertical-align:top}.method-article th{font-weight:var(--font-weight-semibold);color:var(--color-ink-display)}@media (max-width:720px){.method{grid-template-columns:1fr}.method-nav{position:static}.method-nav ol{flex-direction:row;flex-wrap:wrap;gap:var(--spacing-1)}}