.lab-route{min-width:320px}.lab-route [hidden]{display:none!important}.lab-route .site-header{z-index:100}.lab-directory{width:min(1240px,calc(100% - 64px));margin:120px auto 80px}.lab-directory-head{display:flex;align-items:center;justify-content:space-between;gap:24px;padding-bottom:30px;border-bottom:1px solid var(--line)}.lab-directory h1{font:400 34px/1.4 var(--font-serif);margin:0}.lab-directory-head nav{display:flex;gap:12px}.lab-directory-head nav a{padding:12px 16px;min-height:44px;border-bottom:1px solid var(--line);color:var(--dim)}.lab-category{padding-top:38px;scroll-margin-top:85px}.lab-category h2{font-size:18px;font-weight:500;margin:0 0 22px;color:var(--ink)}.lab-entry-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:32px 24px}.lab-entry{min-width:0;border-bottom:1px solid var(--line)}.lab-entry-preview{display:block;aspect-ratio:16/10;background:var(--panel);overflow:hidden}.lab-entry-preview img{display:block;width:100%;height:100%;object-fit:cover}.lab-entry-caption{padding:16px 0 22px}.lab-entry-caption h3{font-size:18px;font-weight:500;line-height:1.5;margin:0 0 8px}.lab-entry-caption a{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px}.lab-entry-caption a span{font-size:20px;color:var(--ice)}.lab-entry-caption p{color:var(--dim);font-size:14px;line-height:1.8;margin:0;max-width:32em}.lab-entry-preview:hover img{filter:brightness(1.06)}
.lab-experiment{width:min(1600px,calc(100% - 40px));margin:80px auto 30px}.lab-runtime{position:relative;height:calc(100dvh - 138px);min-height:570px;background:var(--panel);border:1px solid var(--line);isolation:isolate}.lab-runtime:fullscreen{width:100%;height:100dvh;min-height:0;border:0}.lab-launch{height:100%;position:relative;overflow:hidden;background:var(--panel)}.lab-launch>img{width:100%;height:100%;object-fit:cover;opacity:.42}.lab-launch-panel{position:absolute;inset:auto auto 12% 7%;width:min(430px,85%);padding:24px;background:var(--panel);border:1px solid var(--line)}.lab-launch h1{font:400 30px/1.4 var(--font-serif);margin:0 0 14px}.lab-launch p,.lab-instructions p{font-size:14px;line-height:1.8;color:var(--dim)}.lab-start{background:var(--signal);color:var(--bg);padding:12px 18px;min-height:44px;border:0;cursor:pointer}.lab-instructions{padding:18px 0}.lab-instructions summary{cursor:pointer;color:var(--dim);font-size:14px;min-height:44px;padding:12px 0}.lab-instructions p{margin:6px 0}.lab-runtime #labApp{width:100%;height:100%;margin:0;overflow:hidden;color:var(--ink);background:var(--panel);font-family:var(--font-sans);font-size:14px;--studio-accent:var(--ice);--bg:var(--lab-bg,#0b0e17);--panel:var(--lab-panel,#10141f);--raised:var(--lab-raised,#17212d);--line:var(--lab-line,rgba(191,210,225,.16));--muted:var(--lab-muted,#adb5c0);--text:var(--lab-ink,#eef1e6);--accent:var(--lab-accent,#8fd8ff);--purple:var(--lab-accent,#8fd8ff)}
html[data-theme=light] .lab-runtime{--lab-bg:#faf7ee;--lab-panel:#f1eddf;--lab-raised:#e7e2d4;--lab-line:rgba(51,68,77,.22);--lab-muted:#4d5560;--lab-ink:#1d232a;--lab-accent:#186f9e}
#labApp .lab-app-frame{height:100%;display:flex;flex-direction:column;position:relative}#labApp .lab-app-actions{display:flex;gap:8px;justify-content:flex-end;align-items:center;padding:4px 12px;background:var(--panel);border-bottom:1px solid var(--line);height:46px;flex:none}#labApp .lab-app-actions button{padding:5px 12px;font-size:13px;min-height:36px}#labApp .lab-parameters-toggle{display:none}#labApp .lab-app-content{flex:1;min-height:0;position:relative;overflow:hidden}#labApp .studio-app,#labApp .dotgrid-app,#labApp .game-app{height:100%;min-height:0;width:100%;margin:0;background:var(--bg);color:var(--text)}#labApp .studio-app{--studio-accent:var(--accent)}
#labApp :is(button,input,select,textarea){font-family:var(--font-sans);color:var(--text)}#labApp button{min-height:44px;border-radius:3px;background:var(--raised);border-color:var(--line)}#labApp button:hover{background:color-mix(in srgb,var(--raised),var(--accent) 12%)}#labApp button:focus-visible,#labApp input:focus-visible,#labApp select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}#labApp button.primary,#labApp button.selected,#labApp button[aria-pressed=true]{background:color-mix(in srgb,var(--accent) 14%,var(--panel));color:var(--accent);border-color:var(--accent)}#labApp .icon{width:44px;min-width:44px;min-height:44px}#labApp input,#labApp select{background:var(--bg);color:var(--text);border-color:var(--line);min-height:36px}#labApp input[type=range]{accent-color:var(--accent)}#labApp input[type=color]{width:44px;height:44px}#labApp :is(.studio-header,.studio-rail,.studio-inspector,.studio-statusbar,.studio-section,.studio-dialog,.editor-header,.tool-rail,.side-panel,.timeline,.modal,.modal-card,.game-dialog){background:var(--panel);color:var(--text);border-color:var(--line)}#labApp :is(.studio-stage,.studio-viewport,.canvas-area,.workspace){background-color:var(--bg)}#labApp :is(.studio-field,.studio-range,.studio-range output,.studio-section p,.studio-section h2,.studio-statusbar,.studio-dialog p,.studio-dialog li,.studio-palette>span:last-child,.studio-empty){color:var(--muted)}#labApp :is(.studio-list-item,.studio-palette){background:var(--bg);border-color:var(--line)}#labApp .studio-list-item.selected{background:var(--raised);border-color:var(--accent)}#labApp .studio-section h2 .icon,#labApp .studio-list-item .icon{min-height:44px;min-width:44px;width:44px;height:44px}#labApp .studio-section{padding:16px}#labApp .studio-header h1,#labApp .editor-header h1{font-size:17px}#labApp .studio-statusbar{min-height:44px;gap:10px}#labApp .studio-statusbar button{min-height:32px}#labApp .studio-header .project-name{color:var(--muted)}#labApp .studio-dialog,#labApp .game-dialog{box-shadow:0 15px 65px #0005;border-radius:5px;max-height:calc(100dvh - 40px)}#labApp .studio-toast{position:absolute;background:var(--raised);color:var(--text);border-color:var(--line)}#labApp .studio-progress{background:var(--panel);color:var(--text)}#labApp .studio-progress button{min-height:32px}#labApp .studio-hint{background:var(--panel);color:var(--text)}
#labApp .fox-title h1,#labApp .maze-title h1{font:400 46px/1.4 var(--font-serif)}#labApp .fox-title-content{background:color-mix(in srgb,var(--bg) 85%,transparent);border:1px solid var(--line);padding:24px;max-width:400px}#labApp .fox-title-actions button,#labApp .fox-start{color:var(--text);background:var(--panel)}#labApp .fox-title-content p{color:var(--muted)}#labApp .fox-chapter-num{display:none}#labApp .fox-drop{min-width:44px;min-height:44px}#labApp :is(.fox-hud,.maze-hud){color:#eef1e6}#labApp .fox-hud button{background:#101b2ddd;color:#eef1e6}#labApp .fox-chapters{background:var(--bg)}#labApp .fox-chapter-wrap{color:var(--text)}#labApp .fox-chapter,#labApp .fox-chapter h2{color:var(--text)}#labApp .fox-chapter p{color:var(--muted)}#labApp .lab-runtime-error{padding:40px}#labApp .lab-runtime-error a{padding:12px}
.lab-observation{width:min(1280px,calc(100% - 48px));margin:100px auto 50px}.lab-observation>header{margin-bottom:24px}.lab-observation>header h1{font:400 28px/1.5 var(--font-serif);margin:0 0 8px}.lab-observation>header p{color:var(--dim);font-size:14px;line-height:1.8}.lab-observation .lab-page{padding:0;margin:0;min-height:0;width:100%;display:block}.lab-observation .lab-readout{margin-top:16px;padding:16px;border:1px solid var(--line);background:var(--panel);min-height:0}.lab-observation .lab-viewport{min-height:300px}.lab-observation .lab-slider-row{gap:8px}.lab-observation button{min-height:44px}.lab-observation .lab-console-head{display:none}.lab-observation .astralyn-card-header b{font-size:18px}.lab-observation .astralyn-status{top:15%}.lab-observation .solar-viewport{height:calc(100dvh - 230px);min-height:500px}.lab-observation .solar-index{font-size:12px;width:auto;padding:0 12px}.lab-observation #viewMode{font-family:var(--font-sans)}.lab-observation .lab-hud-status-line{display:none}
@media(max-width:1050px){.lab-entry-grid{grid-template-columns:repeat(2,minmax(0,1fr))}#labApp .studio-inspector{width:250px}#labApp .studio-header{padding:0 10px;gap:8px}}
@media(max-width:760px){.lab-directory{width:calc(100% - 36px);margin-top:90px}.lab-directory-head{align-items:flex-start;flex-direction:column;gap:12px;padding-bottom:18px}.lab-directory h1{font-size:28px}.lab-directory-head nav{gap:10px}.lab-directory-head nav a{padding:10px 16px}.lab-category{padding-top:28px}.lab-entry-grid{grid-template-columns:1fr;gap:24px}.lab-entry-preview{aspect-ratio:16/10}.lab-experiment{width:100%;margin-top:66px}.lab-runtime{height:calc(100dvh - 112px);min-height:620px;border-inline:0}.lab-instructions{padding:0 18px}.lab-launch-panel{inset:auto 18px 10%;width:auto}.lab-runtime #labApp{overflow:hidden}#labApp .lab-app-actions{height:48px;padding:2px 8px;justify-content:space-between}#labApp .lab-app-actions button{min-height:44px}#labApp .lab-parameters-toggle{display:inline-flex}#labApp .studio-app,#labApp .dotgrid-app{overflow:hidden;min-height:0;height:100%}#labApp .studio-header,#labApp .editor-header{position:static;flex-wrap:wrap;height:auto;min-height:100px;padding:8px;gap:4px}#labApp .studio-header h1{flex:1}#labApp .studio-header .project-name{display:block;max-width:48%;width:48%}#labApp .studio-header-actions{width:100%;justify-content:space-between;gap:0;margin:0}#labApp .studio-header-actions .icon{width:44px;min-width:44px}#labApp .studio-header-actions button.primary{padding:8px}#labApp .studio-workspace{display:flex;flex:1;min-height:0}#labApp .studio-rail{width:50px;overflow-y:auto;overscroll-behavior:contain;padding:4px 2px}#labApp .studio-rail button{min-height:48px}#labApp .studio-stage{height:auto;min-height:0;flex:1}#labApp .studio-viewport{padding:12px}#labApp .studio-inspector,#labApp .side-panel{display:none}#labApp .parameters-open .studio-inspector,#labApp .parameters-open .side-panel{display:block;position:absolute;z-index:25;right:0;top:0;bottom:0;width:min(320px,calc(100% - 50px));overflow-y:auto;border:1px solid var(--line);box-shadow:-12px 0 30px #0003;overscroll-behavior:contain}#labApp .studio-statusbar{flex-wrap:wrap;gap:2px;padding:4px 8px}#labApp .studio-statusbar>span:first-child{max-width:100%}#labApp .studio-section{padding:16px}#labApp .studio-grid-options{grid-template-columns:repeat(2,minmax(0,1fr))}#labApp .studio-inspector .studio-list-item{gap:1px}#labApp .studio-header .studio-divider{display:none}#labApp .studio-hint{font-size:12px;bottom:8px}#labApp .studio-progress{bottom:8px;max-width:95%;white-space:normal}#labApp .fox-title h1{font-size:34px}#labApp .fox-title-content{padding:18px;max-width:90%;left:5%;right:5%;margin:auto}#labApp .fox-title-actions{gap:6px}#labApp .fox-hud button{min-height:44px;min-width:44px}#labApp .fox-drop{height:44px;width:44px}#labApp .fox-touch{bottom:14px}.lab-observation{width:calc(100% - 28px);margin-top:90px}.lab-observation .solar-viewport{height:65dvh;min-height:440px}.lab-observation .lab-viewport{min-height:240px}.lab-observation .lab-control-deck{padding:16px 12px}.lab-observation .lab-slider-row{flex-wrap:wrap;justify-content:center}.lab-observation .lab-range-box{order:-1;flex-basis:100%;margin-bottom:12px}.lab-observation .lab-secondary-controls{grid-template-columns:1fr}.lab-observation .lab-command-row{flex-wrap:wrap}.lab-observation .lab-preset-chips{flex-wrap:wrap}.lab-observation .astralyn-card-header b{font-size:14px}}
@media(max-height:560px) and (orientation:landscape){.lab-runtime{height:calc(100dvh - 80px);min-height:330px}#labApp .studio-header{min-height:60px;flex-wrap:nowrap}#labApp .studio-header .project-name{display:none}#labApp .studio-header-actions{width:auto}#labApp .studio-header h1{display:none}#labApp .studio-statusbar{min-height:32px}#labApp .lab-app-actions{height:44px}#labApp .fox-title h1{font-size:30px}#labApp .fox-title-content{padding:10px 18px}#labApp .fox-title-actions{gap:4px}.lab-runtime:fullscreen{min-height:0;height:100dvh}}
#labApp{color-scheme:dark}html[data-theme=light] #labApp{color-scheme:light}
#labApp .studio-viewport{overflow:hidden;padding:24px}#labApp .flow-playback{background:var(--panel);border-color:var(--line)}#labApp .flow-playback>span{color:var(--muted)}
#labApp .indie-game{--base:var(--bg);--panel:var(--lab-panel,#10141f);--hover:var(--raised);--edge:var(--line);--ink:var(--text);--muted:var(--lab-muted,#adb5c0);--accent:var(--lab-accent,#8fd8ff);--accent-ink:var(--bg)}
#labApp .journey-title>img,#labApp .journey-title-shade,#labApp .chapter-menu-backdrop{position:absolute}#labApp .journey-menu{width:min(380px,85%);background:color-mix(in srgb,var(--bg) 90%,transparent);padding:24px;border:1px solid var(--line);margin-left:6%}#labApp .journey-menu h1{font:400 38px/1.4 var(--font-serif);color:var(--text);margin:0 0 20px;letter-spacing:0;text-shadow:none}#labApp .journey-menu nav{max-width:none;gap:4px}#labApp .journey-menu nav button{color:var(--text);letter-spacing:0;padding:10px;min-height:44px}#labApp .journey-menu nav button.journey-primary{color:var(--accent);font-size:17px}#labApp .indie-game .game-dialog{background:var(--panel);color:var(--text);border-color:var(--line)}#labApp .indie-game .game-dialog :is(p,strong,label,.setting-row){color:var(--text)}#labApp .indie-game .game-dialog h2{font-size:26px}#labApp .journey-chapters,#labApp .level-screen{background:var(--bg);color:var(--text)}#labApp .chapter-menu-backdrop{display:none}#labApp .journey-chapter h3,#labApp .chapter-index{color:var(--text)}#labApp .journey-chapter p{color:var(--muted)}#labApp .maze-hud :is(button,strong,span){color:#eef1e6}#labApp .maze-hud button{background:#15283e}#labApp .gate-switch{color:#eef1e6;background:#253e56}#labApp .maze-tools button{color:var(--text);background:var(--panel)}#labApp .maze-bottom .icon{width:44px;min-height:44px}
#labApp .dotgrid-app .brand{font-family:var(--font-sans);letter-spacing:0}#labApp :is(.stage-topline,.stage-bottomline,.pixel-timeline,.pixel-document-bar,.editor-footer,.timeline-controls,.custom-color){background:var(--panel);color:var(--text);border-color:var(--line)}#labApp :is(.stage-name,.section-heading h2,.section-heading>span,.timeline-controls label,.pixel-document-bar span,.zoom-control span,.stage-format,.setting-note,.toggle-row,.used-colors>span,.hex-label>span,.export-setting label,.shortcut-list>div,.shortcut-list kbd,.dialog-body>p){color:var(--muted)}#labApp .zoom-control button{min-width:44px;height:44px}#labApp .stage-bottomline{height:auto;min-height:48px}#labApp .swatch-grid,#labApp .swatch-grid:has(.color-swatch:nth-child(5)){grid-template-columns:repeat(5,minmax(44px,1fr));gap:6px}#labApp .color-swatch{max-height:none;min-height:44px}#labApp .used-colors button{width:44px;height:44px}#labApp .toggle-row{min-height:44px}#labApp .timeline-controls{flex-wrap:wrap}#labApp .timeline-controls button{width:44px;height:44px}#labApp .timeline-controls input{max-width:64px}#labApp .pixel-timeline{flex-shrink:0}
@media(max-width:760px){#labApp .editor-header{min-height:90px}#labApp .editor-header .brand{width:100%}#labApp .editor-header .brand-mark{display:none}#labApp .editor-header .header-actions{width:100%;display:flex;justify-content:space-between;gap:2px}#labApp .editor-header .new-button{display:inline-flex}#labApp .editor-header .icon-button{width:44px;height:44px}#labApp .editor-workspace{display:grid;grid-template-columns:50px minmax(0,1fr);flex:1;min-height:0}#labApp .tool-rail{flex-direction:column;grid-column:1;width:50px;height:100%;min-height:0;padding:3px;overflow-y:auto;overflow-x:hidden;gap:2px}#labApp .tool-button{min-width:44px;width:44px;min-height:48px;height:48px;flex-shrink:0}#labApp .canvas-stage{grid-column:2;height:100%;min-height:0;min-width:0;flex:1}#labApp .canvas-center{padding:10px}#labApp .pixel-document-bar{flex-wrap:wrap;gap:4px;padding:5px 10px}#labApp .pixel-document-bar input{width:50%;flex:1}#labApp .pixel-document-bar span{font-size:12px}#labApp .timeline-controls{gap:2px;padding:4px}#labApp .timeline-controls label{font-size:12px}#labApp .timeline-frames{padding:4px;min-height:52px}#labApp .timeline-frames button{min-width:44px;height:48px}#labApp .stage-topline{min-height:30px;height:30px;padding:0 10px}#labApp .editor-footer{min-height:44px;height:44px}#labApp .journey-menu{margin:20px;width:calc(100% - 40px);padding:22px}#labApp .journey-menu h1{font-size:32px}#labApp .journey-title{align-items:flex-end}#labApp .swatch-grid,#labApp .swatch-grid:has(.color-swatch:nth-child(5)){grid-template-columns:repeat(5,minmax(44px,1fr))}}
@media(prefers-reduced-motion:reduce){.lab-route *,#labApp *{scroll-behavior:auto!important;animation-duration:0s!important;transition-duration:0s!important}}

#labApp .lab-app-actions button,#labApp input:not([type=checkbox]),#labApp select{min-height:44px}#labApp .lab-app-actions{height:52px}#labApp .kaleido-swatches button{min-width:44px;min-height:44px}
#labApp .lab-app-content :is(.studio-statusbar,.kaleido-stage-controls,.flow-playback,.help-dialog,.pixel-document-bar,.pixel-timeline){background:var(--panel);color:var(--text);border-color:var(--line)}
#labApp .lab-app-content :is(.studio-viewport,.canvas-stage,.canvas-viewport){background-color:var(--bg)}
#labApp .lab-app-content :is(.studio-section h2,.kaleido-stage-controls label,.kaleido-stage-controls>button,.flow-playback>span){color:var(--muted)}
#labApp .dotgrid-app :is(.brand h1,.document-tab,.layer-context,.pixel-document-bar input,.pixel-export-kind,.timeline-controls input,.help-dialog h2){color:var(--text)}
#labApp .dotgrid-app :is(.pixel-document-bar input,.pixel-export-kind,.timeline-controls input){background:var(--bg)}
#labApp .dotgrid-app button:enabled:not([aria-pressed=true]){color:var(--text)}
#labApp .dotgrid-app .primary-button:enabled{background:var(--accent);color:var(--bg)}
#labApp .dotgrid-app .document-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--font-sans)}
#labApp .dotgrid-app .layer-context{flex-shrink:0}#labApp .dotgrid-app .toast{position:absolute;color:var(--text);background:var(--raised);border-color:var(--line)}
#labApp .kaleido-swatches{grid-template-columns:repeat(5,minmax(44px,1fr))}#labApp label:has(input[type=checkbox]){min-height:44px;align-items:center}
@media(max-width:900px){#labApp .fox-touch{display:flex}#labApp .move-joystick{display:flex}#labApp .desktop-look{display:none}#labApp .touch-look{display:inline}#labApp .fox-hint{bottom:120px}}
.lab-expanded{overflow:hidden}.lab-runtime.is-expanded{position:fixed;inset:0;z-index:10000;width:100%;height:100dvh;min-height:0;border:0}
#labApp .platformer-app .game-dialog{background:var(--panel);color:var(--text);border-color:var(--line)}#labApp .platformer-app .game-dialog :is(p,li,strong,kbd,label){color:var(--text)}#labApp .platformer-app .game-dialog button{background:var(--raised);color:var(--text);border-color:var(--line)}#labApp .platformer-app .game-dialog button.primary{background:var(--accent);color:var(--bg)}#labApp .platformer-app .game-dialog kbd{background:var(--bg)}
#labApp .lab-app-content .dotgrid-app :is(button,select,input:not([type=checkbox]):not([type=range])){min-width:44px;min-height:44px}
#labApp .lab-app-content .dotgrid-app .size-options{display:grid;grid-template-columns:repeat(3,minmax(44px,1fr))}
#labApp .lab-app-content .dotgrid-app .brush-options{display:grid;grid-template-columns:repeat(4,minmax(44px,1fr))}
#labApp .lab-app-content .dotgrid-app .pixel-layers>div{grid-template-columns:44px minmax(0,1fr) 44px;min-height:44px}
@media (min-width:761px) and (max-width:900px){
 #labApp .lab-parameters-toggle{display:inline-flex}
 #labApp .studio-inspector,#labApp .side-panel{display:none}
 #labApp .parameters-open .studio-inspector,#labApp .parameters-open .side-panel{display:block;position:absolute;z-index:25;right:0;top:0;bottom:0;width:320px;overflow-y:auto;border:1px solid var(--line);overscroll-behavior:contain}
 #labApp .editor-workspace{grid-template-columns:64px minmax(0,1fr)}
}
.lab-observation .solar-lab-section :is(.view-actions button,.planet-label){min-width:44px;min-height:44px}

#labApp .lab-app-content .indie-game button{min-width:44px;min-height:44px}
@media(max-height:560px) and (orientation:landscape){
 .lab-experiment{margin-top:60px}
 .lab-runtime{height:calc(100dvh - 72px);min-height:0}
 #labApp .lab-app-actions{height:48px}
 #labApp .indie-game .maze-tools>button{padding:4px;white-space:nowrap}
 #labApp .indie-game .maze-tools>button span{display:none}
 #labApp .lab-app-content .dotgrid-app{overflow-y:auto}
 #labApp .dotgrid-app .editor-header{position:sticky;top:0;z-index:10}
 #labApp .dotgrid-app .editor-workspace{min-height:360px;flex-shrink:0}
}
.lab-observation .solar-viewport.is-expanded{position:fixed;inset:0;z-index:10000;width:100%;height:100dvh;min-height:0;border:0}
#labApp .lab-app-content .platformer-app button{min-width:44px;min-height:44px}
@media(max-width:760px){
 .lab-route .site-header{padding-inline:12px;gap:8px}
 .lab-route .site-header .brand{font-size:13px;letter-spacing:1px;white-space:nowrap}
 .lab-route .site-header .desktop-nav{display:flex!important;margin-left:auto;gap:0}
 .lab-route .site-header .desktop-nav a{display:flex;align-items:center;min-height:44px;font-size:12px;white-space:nowrap;padding-inline:4px}
 .lab-route .site-header .header-actions{gap:2px}
 .lab-route .site-header .platform-mobile-nav-toggle{display:none}
}
.lab-observation .lab-viewport::after{display:none}
.lab-observation #signalAudio{background:var(--panel);color:var(--ink);border:1px solid var(--line);padding:8px 16px;cursor:pointer}
.lab-observation .lab-freq-badge span{color:#d6ff73}.lab-observation .lab-freq-badge small{color:#cbd5de}
@media(max-width:600px){
 .lab-observation .astralyn-stage{padding:0;min-height:0;background:transparent;box-shadow:none}
 .lab-observation .astralyn-card{position:relative;isolation:isolate;width:100%;height:auto;aspect-ratio:auto;padding:16px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;background:var(--panel);border:1px solid var(--line);border-radius:4px;overflow:hidden}
 .lab-observation .astralyn-card>picture{position:absolute;inset:0;z-index:-1;opacity:.14}
 .lab-observation .astralyn-card>picture img{width:100%;height:100%;object-fit:cover}
 .lab-observation .astralyn-legibility{display:none}
 .lab-observation .astralyn-card>:is(.astralyn-card-header,.astralyn-token,.astralyn-token-split,.astralyn-heat,.astralyn-calls,.astralyn-messages,.astralyn-models){position:relative;inset:auto;width:auto;height:auto;color:var(--ink)}
 .lab-observation .astralyn-card-header,.lab-observation .astralyn-token,.lab-observation .astralyn-token-split,.lab-observation .astralyn-models{grid-column:1/-1}
 .lab-observation .astralyn-card-header b{color:var(--ink);font-size:18px}
 .lab-observation .astralyn-token{gap:12px;flex-wrap:wrap}
 .lab-observation .astralyn-token strong{font-size:26px;color:var(--ink)}
 .lab-observation :is(.astralyn-token span,.astralyn-token-split,.astralyn-calls,.astralyn-messages){font-size:12px;line-height:1.6;color:var(--ink)}
 .lab-observation .astralyn-heat{gap:3px;grid-template-columns:repeat(10,minmax(0,1fr));grid-auto-rows:12px}
 .lab-observation .astralyn-heat [data-tooltip]{width:auto;height:12px;border-radius:2px}
 .lab-observation .astralyn-models{display:grid;grid-template-columns:1fr;gap:8px}
 .lab-observation .astralyn-model-row{height:32px;min-height:32px;grid-template-columns:55% 45%}
 .lab-observation :is(.astralyn-model-name,.astralyn-model-value){font-size:12px;line-height:1.4;height:32px;min-height:32px}
 .lab-observation .astralyn-model-value em{font-size:12px;line-height:32px}
 .lab-observation .astralyn-model-name{padding:0 8px;color:var(--ink);background:var(--panel)}
 .lab-observation .lab-slider-header{align-items:flex-start;gap:8px;flex-wrap:wrap}
 .lab-observation #astralynSampleValue{font-size:13px;line-height:1.6;flex-basis:100%;text-align:left}
}
@media(max-width:600px){
 .lab-observation .astralyn-models{grid-auto-rows:32px}
 .lab-observation .astralyn-messages{background:transparent;padding:0;justify-content:flex-start}
 .lab-observation .astralyn-model-value em{top:0;right:8px}
 .lab-observation .astralyn-model-track{width:calc(100% - 16px);right:8px;bottom:3px;height:2px}
}
.lab-route #solarViewer :is(.planet-label,.view-actions button){min-width:44px;min-height:44px;font-size:12px}
.lab-route #solarViewer .view-caption{font-size:12px}
.lab-route #solarViewer .view-caption small{font-size:11px}
@media(max-width:600px){.lab-route #solarViewer .viewport-top{flex-wrap:wrap}.lab-route #solarViewer .view-actions{margin-left:auto}}
#labApp .lab-app-content .indie-game .maze-hud .icon{min-height:44px;height:44px;min-width:44px;width:44px}
.lab-entry-preview[href="/lab/signal-synth/"]{background:#080c13}

/* Directory: loose artwork prints on the shared observatory backdrop. */
.lab-directory{--dim:var(--ink-dim);margin-top:112px}
.lab-directory h1{font-size:42px;letter-spacing:.08em}
.lab-directory-head{padding-bottom:26px;border-bottom-color:var(--line-strong)}
.lab-directory-head nav a{color:var(--ink-dim);border-color:transparent;transition:color .2s,border-color .2s}
.lab-directory-head nav a:hover,.lab-directory-head nav a:focus-visible{color:var(--signal-text);border-color:var(--signal-text)}
.lab-category{--lab-category-ink:var(--ice);padding-top:54px;scroll-margin-top:90px}
.lab-category#creation{--lab-category-ink:var(--signal-text)}
.lab-category#play{--lab-category-ink:var(--amber)}
.lab-category h2{font:400 28px/1.5 var(--font-serif);letter-spacing:.08em;margin-bottom:12px}
.lab-category.has-artwork-preview{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);align-items:center;gap:0 44px;padding-bottom:42px}
.has-artwork-preview>h2{grid-column:1/-1;display:flex;align-items:center;gap:22px}
.has-artwork-preview>h2::after{content:'';height:1px;flex:1;background:linear-gradient(90deg,var(--line-strong),transparent)}
.lab-catalog-figure{grid-column:1;grid-row:2;position:relative;min-width:0;margin:0;isolation:isolate}
.lab-proof-stack{position:relative;aspect-ratio:4/3;margin-top:8px}
.lab-proof-sheet{position:absolute;inset:20% 7% auto;width:86%;aspect-ratio:16/10;padding:7px;background:color-mix(in srgb,var(--bg) 90%,var(--lab-category-ink));border:1px solid color-mix(in srgb,var(--lab-category-ink) 30%,var(--line));box-shadow:0 20px 42px -20px #0008;transform-origin:50% 85%;transition:transform .3s var(--ease-out)}
.lab-proof-sheet img{display:block;width:100%;height:100%;object-fit:contain;background:#080c13}
.lab-proof-sheet img.is-pixel-art{image-rendering:pixelated}
.lab-proof-unavailable{position:absolute;inset:7px;display:grid;place-items:center;color:var(--ink-dim);font-size:14px}
.lab-proof-sheet[data-depth="3"]{z-index:1;transform:translate(-3%,-12%) rotate(-11deg) scale(.86);opacity:0;pointer-events:none}
.lab-proof-sheet[data-depth="2"]{z-index:2;transform:translate(-3%,-12%) rotate(-11deg) scale(.9);opacity:.45;pointer-events:none}
.lab-proof-sheet[data-depth="1"]{z-index:3;transform:translate(4%,-9%) rotate(7deg) scale(.95);opacity:.72;pointer-events:none}
.lab-proof-sheet[data-depth="0"]{z-index:4;transform:translateY(6%) rotate(-3deg)}
.lab-catalog-stage{display:block;outline-offset:7px}
.lab-catalog-stage:hover,.lab-catalog-stage:focus-visible{transform:translateY(3%) rotate(-1deg)}
.lab-category.has-artwork-preview .lab-entry-grid{display:grid;grid-column:2;grid-row:2;grid-template-columns:1fr;gap:0;padding:10px 0 0}
.has-artwork-preview .lab-entry{position:relative;isolation:isolate;display:grid;grid-template-columns:76px minmax(0,1fr) auto;align-items:center;gap:16px;padding:18px 8px 18px 14px}
.has-artwork-preview .lab-entry-preview{width:76px;aspect-ratio:4/3;border:1px solid var(--line);background:#080c13;opacity:.72;transition:opacity .2s}
.has-artwork-preview .lab-entry.is-preview .lab-entry-preview{opacity:1}
.has-artwork-preview .lab-entry-caption{padding:0}
.has-artwork-preview .lab-entry-caption h3{font-size:19px;font-weight:400;margin-bottom:3px;transition:color .3s}
.has-artwork-preview .lab-entry-caption a{min-height:44px;gap:8px}
.has-artwork-preview .lab-entry-caption a span{font-size:18px;color:var(--lab-category-ink)}
.has-artwork-preview .lab-entry-caption p{font-size:13px;line-height:1.8;color:var(--ink-dim)}
/* Choosing and entering are two steps: the whole row selects a print, the
   enter key on the chosen row opens it (catalog-preview.js). */
.has-artwork-preview .lab-entry:has(.lab-preview-select) .lab-entry-caption a span{display:none}
.lab-entry.is-preview .lab-entry-caption h3{color:var(--lab-category-ink)}
.lab-preview-select{position:absolute;inset:0;z-index:1;width:100%;padding:0;border:0;border-radius:0;background:transparent;cursor:pointer;-webkit-tap-highlight-color:transparent}
.lab-preview-select:focus-visible{outline:1px solid var(--lab-category-ink);outline-offset:-1px}
.lab-entry-marker{position:absolute;inset:0 0 -1px;z-index:-1;border-left:2px solid var(--lab-category-ink);border-bottom:1px solid color-mix(in srgb,var(--lab-category-ink) 55%,transparent);background:linear-gradient(90deg,color-mix(in srgb,var(--lab-category-ink) 10%,transparent),transparent 78%);pointer-events:none}
.lab-entry-enter{position:relative;z-index:2;display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 14px;border:1px solid var(--lab-category-ink);color:var(--lab-category-ink);background:color-mix(in srgb,var(--lab-category-ink) 9%,transparent);font-size:13px;letter-spacing:.06em;white-space:nowrap;visibility:hidden;opacity:0;translate:-10px 0}
.lab-entry-enter i{font-style:normal;font-size:15px;line-height:1}
.lab-entry.is-preview .lab-entry-enter{visibility:visible;opacity:1;translate:0 0}
.lab-entry-enter:hover,.lab-entry-enter:focus-visible{background:var(--lab-category-ink);color:var(--bg)}
.lab-entry-enter:focus-visible{outline:1px solid var(--lab-category-ink);outline-offset:3px}
@media(hover:hover) and (pointer:fine){.has-artwork-preview .lab-entry:not(.is-preview):hover .lab-entry-preview{opacity:.92}.has-artwork-preview .lab-entry:not(.is-preview):hover h3{color:var(--ink)}}
@media(min-width:761px) and (max-width:1050px){
 .lab-category.has-artwork-preview{grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:16px}
 .has-artwork-preview .lab-entry{grid-template-columns:60px minmax(0,1fr) auto;gap:10px;padding-block:14px}
 .lab-entry-enter{padding:0 10px}
 .has-artwork-preview .lab-entry-preview{width:60px}
 .has-artwork-preview .lab-entry-caption h3{font-size:17px}
}
@media(max-width:760px){
 .lab-directory{margin-top:92px}
 .lab-directory h1{font-size:32px}
 .lab-directory-head{gap:16px}
 .lab-category{padding-top:34px}
 .lab-category h2{font-size:25px}
 .lab-category.has-artwork-preview{display:block;padding-bottom:18px}
 .lab-catalog-figure{margin-bottom:18px}
 .lab-proof-stack{margin-top:0}
 .lab-proof-sheet{padding:5px}
 .has-artwork-preview .lab-entry{grid-template-columns:70px minmax(0,1fr) auto;gap:12px;padding:14px 0 14px 10px}
 .lab-entry-enter{padding:0 12px}
 .has-artwork-preview .lab-entry-preview{width:70px}
 .has-artwork-preview .lab-entry-caption h3{font-size:17px}
 .has-artwork-preview .lab-entry-caption p{font-size:13px;line-height:1.7}
}
@media(prefers-reduced-motion:reduce){.lab-proof-sheet{transition:none}.lab-catalog-stage:hover,.lab-catalog-stage:focus-visible{transform:translateY(6%) rotate(-3deg)}}
/* Switching prints: catalog-preview.js moves the prints themselves through the
   pile; CSS transitions stay off meanwhile so they cannot fight that motion.
   One scan line reads the new top print as it lands. Reduced motion swaps the
   pile in place. */
@media(prefers-reduced-motion:no-preference){
 .lab-entry-enter{transition:visibility 0s linear .2s,opacity .2s ease,translate .2s ease,background-color .25s,color .25s}
 .lab-entry.is-preview .lab-entry-enter{transition:visibility 0s,opacity .32s ease .14s,translate .52s var(--motion-settle,cubic-bezier(.16,1,.3,1)) .14s,background-color .25s,color .25s}
 .lab-entry-enter i{transition:translate .28s var(--motion-settle,cubic-bezier(.16,1,.3,1))}
 .lab-entry-enter:hover i{translate:3px 0}
 .is-shuffling .lab-proof-sheet{transition:none}
 .is-shuffling .lab-catalog-stage::after{content:'';position:absolute;left:7px;right:7px;top:7px;height:1px;background:var(--lab-category-ink);box-shadow:0 0 14px 1px color-mix(in srgb,var(--lab-category-ink) 70%,transparent);animation:lab-print-scanline .56s cubic-bezier(.3,.6,.3,1) .26s both;pointer-events:none}
}
@keyframes lab-print-scanline{from{top:7px;opacity:0}12%{opacity:1}85%{opacity:1}to{top:calc(100% - 8px);opacity:0}}
