@font-face{font-family:Alte Haas Grotesk;src:url(/fonts/AlteHaasGroteskRegular.ttf)format("truetype");font-weight:400;font-display:swap}@font-face{font-family:Alte Haas Grotesk;src:url(/fonts/AlteHaasGroteskBold.ttf)format("truetype");font-weight:700;font-display:swap}@font-face{font-family:Atkinson Hyperlegible Next;src:url(/fonts/AtkinsonHyperlegibleNext.woff2)format("woff2");font-weight:200 800;font-display:swap;unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible Next;src:url(/fonts/AtkinsonHyperlegibleNextExt.woff2)format("woff2");font-weight:200 800;font-display:swap;unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}:root{--graphite:#232425;--graphite-deep:#1a1b1c;--bone:#e8e4da;--bone-dim:#b8b4aa;--amber:#ffb000;--amber-dim:#8a6200;--safelight-red:#e03616;--panel-w:300px;--radius:10px;--sans:"Atkinson Hyperlegible Next", "Alte Haas Grotesk", "Helvetica Neue", Helvetica, sans-serif;--mono:"SF Mono", "JetBrains Mono", ui-monospace, Menlo, monospace}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--graphite-deep);height:100%;color:var(--bone);font-family:var(--sans);-webkit-user-select:none;user-select:none;touch-action:manipulation;font-size:13px;overflow:hidden}#app{height:100%;display:flex}#stage-wrap{background:radial-gradient(ellipse at 50% 40%, #2a2b2c 0%, var(--graphite-deep) 75%);flex:1;justify-content:center;align-items:center;display:flex;position:relative}#gpu-canvas,#overlay-canvas{width:100%;height:100%;position:absolute;top:0;left:0}#overlay-canvas{pointer-events:auto}#stage-wrap.filmstrip:before,#stage-wrap.filmstrip:after{content:"";z-index:5;pointer-events:none;background:#0e0f10 url(/film-tile.svg) 0 0/864px 30px repeat-x;height:30px;position:absolute;left:0;right:0;box-shadow:0 1px #000c,0 4px 14px #00000073}#stage-wrap.filmstrip:before{top:0}#stage-wrap.filmstrip:after{bottom:0;transform:scale(-1)}#hud{z-index:10;pointer-events:none;position:absolute;inset:0}.hud-back{top:calc(14px + env(safe-area-inset-top,0px));left:calc(14px + env(safe-area-inset-left,0px));pointer-events:auto;border-radius:50%;width:46px;height:46px;padding:0;font-size:19px;line-height:1;position:absolute}.hud-crumbs{top:calc(22px + env(safe-area-inset-top,0px));-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto;background:#0e0f10c7;border:1px solid #000000b3;border-radius:999px;align-items:center;gap:6px;padding:5px 12px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.hud-crumbs:after,.hud-tools:after{content:"";border-radius:inherit;mix-blend-mode:overlay;opacity:.55;pointer-events:none;background:url(/grain.svg);position:absolute;inset:0}#stage-wrap.filmstrip .hud-back{top:calc(44px + env(safe-area-inset-top,0px))}#stage-wrap.filmstrip .hud-crumbs{top:calc(46px + env(safe-area-inset-top,0px))}button.hud-crumb{box-shadow:none;letter-spacing:.16em;color:var(--bone-dim);cursor:default;background:0 0;border:none;padding:4px 8px;font-size:10px}@media (hover:hover){button.hud-crumb:hover{background:0 0}}button.hud-crumb:active{box-shadow:none;transform:none}button.hud-crumb.current{color:var(--amber);text-shadow:0 0 10px #ffb00066}button.hud-crumb.link{cursor:pointer}@media (hover:hover){button.hud-crumb.link:hover{color:var(--bone)}}button.hud-crumb:disabled{opacity:.3}.hud-actions{bottom:calc(22px + env(safe-area-inset-bottom,0px));pointer-events:auto;gap:10px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.hud-actions button{min-width:150px}#stage-wrap.filmstrip .hud-actions{bottom:calc(44px + env(safe-area-inset-bottom,0px))}.hud-stack{flex-direction:column;align-items:center;gap:6px;display:flex}.hud-shake-hint{letter-spacing:.08em;text-transform:uppercase;text-align:center;color:var(--bone-dim);font-size:10px}.hud-tools{bottom:calc(22px + env(safe-area-inset-bottom,0px));left:calc(18px + env(safe-area-inset-left,0px));border-radius:var(--radius);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto;background:#0e0f10c7;border:1px solid #000000b3;flex-direction:column;gap:8px;width:176px;padding:12px;display:flex;position:absolute}.hud-tools h3{letter-spacing:.18em;color:var(--bone-dim);text-transform:uppercase;font-size:10px;font-weight:700}.hud-note{letter-spacing:.06em;color:var(--amber);font-size:10px;line-height:1.5}.hud-bench{pointer-events:auto;background-blend-mode:overlay, normal;padding:calc(66px + env(safe-area-inset-top,0px)) calc(18px + env(safe-area-inset-right,0px)) calc(18px + env(safe-area-inset-bottom,0px)) calc(18px + env(safe-area-inset-left,0px));background:url(/grain.svg),linear-gradient(#232427 0%,#17181a 100%);display:flex;position:absolute;inset:0}.bench-glass{background-blend-mode:overlay, normal, normal;background:url(/grain.svg),radial-gradient(110% 85% at 50% 40%,#fff4d638 0%,#fff4d60f 62%,#fff4d600 100%),linear-gradient(#26282b 0%,#1d1e21 100%);border:1px solid #000;border-radius:14px;flex-direction:column;flex:1;gap:14px;min-width:0;padding:16px 20px 20px;display:flex;position:relative;box-shadow:inset 0 0 90px #fff0c817,inset 0 2px 6px #00000080,inset 0 1px #ffffff17,0 0 0 7px #232427,0 0 0 8px #0a0a0b,0 10px 30px #0000008c}.bench-glass.off{background-blend-mode:overlay, normal, normal;background:url(/grain.svg),radial-gradient(110% 85% at 50% 40%,#fff4d60d 0%,#fff4d600 70%),linear-gradient(#1e1f22 0%,#161719 100%);box-shadow:inset 0 2px 6px #00000080,inset 0 1px #ffffff0d,0 0 0 7px #232427,0 0 0 8px #0a0a0b,0 10px 30px #0000008c}.bench-group-label{letter-spacing:.2em;text-transform:uppercase;color:var(--bone-dim);opacity:.7;text-align:center;font-size:9px;font-weight:700}.bench-film{flex:none;justify-content:center;max-width:100%;display:flex}.bench-film .cassette-row{flex-wrap:wrap;justify-content:center;padding:14px 4px 4px}.bench-tests{opacity:.7;flex-direction:column;flex:none;align-items:center;gap:8px;display:flex}.bench-tests .cassette-row{flex-wrap:wrap;justify-content:center;max-width:100%;padding:14px 20px 6px}.cassette-row{align-items:flex-end;gap:28px;display:flex}.cassette-slot{transform:rotate(var(--tilt,0deg));padding:13px 0 4px}.cassette{background-blend-mode:overlay, normal, normal;cursor:grab;pointer-events:auto;touch-action:none;background:url(/grain.svg),linear-gradient(90deg,#00000080 0%,#ffffff0d 8%,#ffffff47 18%,#ffffff14 30%,#fff0 48%,#0003 74%,#00000085 100%),linear-gradient(#2b2c2f 0%,#1d1e21 55%,#141517 100%);border:1px solid #000;border-radius:6px;width:64px;height:92px;transition:transform .22s,box-shadow .22s;position:relative;box-shadow:0 5px 12px #0000008c,inset 0 1px #ffffff12}.cassette:before,.cassette:after{content:"";z-index:1;pointer-events:none;background:linear-gradient(90deg,#0000008c 0%,#ffffff1f 10%,#fff3 18%,#ffffff0d 32%,#fff0 50%,#0000004d 76%,#0009 100%),linear-gradient(#2a2b2e 0%,#17181a 100%);border:1px solid #000;border-radius:4px;height:9px;position:absolute;left:-3px;right:-3px;box-shadow:inset 0 1px #ffffff1f,0 2px 4px #0006}.cassette:before{top:-3px}.cassette:after{background:linear-gradient(90deg,#0000008c 0%,#ffffff1f 10%,#fff3 18%,#ffffff0d 32%,#fff0 50%,#0000004d 76%,#0009 100%),linear-gradient(#1d1e21 0%,#111214 100%);bottom:-3px}.cassette-spool{background:repeating-linear-gradient(90deg,#ffffff1a 0 1px,#0000 1px 3px),linear-gradient(90deg,#0006 0%,#ffffff14 25%,#0000 55%,#00000073 100%),linear-gradient(#2c2d30 0%,#131416 100%);border:1px solid #000;border-radius:3px 3px 0 0;width:20px;height:16px;position:absolute;top:-12px;left:50%;transform:translate(-50%);box-shadow:inset 0 1px #ffffff1a}.cassette-spool:before{content:"";background:#000;border-radius:1px;width:10px;height:3px;position:absolute;top:3px;left:50%;transform:translate(-50%);box-shadow:0 1px #ffffff1f}.cassette-leader{clip-path:polygon(0 0,24% 0,31% 45%,52% 45%,52% 100%,0 100%);filter:drop-shadow(1px 2px 3px #00000080);pointer-events:none;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='4'%3E%3Crect x='0.8' y='0.5' width='4.4' height='2.6' rx='0.9' fill='%23040405' stroke='%23d98a3f' stroke-opacity='0.4' stroke-width='0.6'/%3E%3C/svg%3E") 3px 4px/6px 4px repeat-x,linear-gradient(90deg,#060707 0 3px,#333436 4px,#191a1c 60%,#141516 100%);border:1px solid #000;border-left:none;width:46px;height:10px;transition:clip-path .32s cubic-bezier(.22,.9,.3,1.15);position:absolute;bottom:14px;right:-39px}.cassette.drag .cassette-leader{clip-path:polygon(0 0,24% 0,31% 45%,100% 45%,100% 100%,0 100%)}@media (hover:hover){.cassette:hover .cassette-leader{clip-path:polygon(0 0,24% 0,31% 45%,100% 45%,100% 100%,0 100%)}}@media (prefers-reduced-motion:reduce){.cassette-leader{transition:none}}.cassette-label{font-family:var(--mono);letter-spacing:.03em;text-align:center;color:#2a2b2d;word-break:break-word;background:linear-gradient(90deg,#00000057 0%,#0000000d 10%,#ffffff38 18%,#fff0 32%,#0000000f 60%,#0000004d 100%),linear-gradient(#d6d1c4 0%,#c4bfb1 100%);border-top:1px solid #0000008c;border-bottom:1px solid #0000008c;padding:10px 3px 6px;font-size:9px;font-weight:700;line-height:1.2;position:absolute;top:50%;left:3px;right:3px;transform:translateY(-50%)}.cassette-label:before{content:"";background:linear-gradient(90deg, #0006 0%, #00000014 10%, #ffffff47 18%, #fff0 32%, #0000001a 60%, #00000061 100%), var(--amber);height:5px;position:absolute;top:1px;left:0;right:0}.cassette-label:after{content:"";opacity:.85;background:repeating-linear-gradient(90deg,#26272a 0 1px,#0000 1px 3px,#26272a 3px 5px,#0000 5px 6px,#26272a 6px 7px,#0000 7px 10px),#d6d1c4;width:68%;height:6px;margin:5px auto 0;display:block}.cassette.load-slot:before,.cassette.load-slot:after{display:none}@media (hover:hover){.cassette:hover{box-shadow:0 8px 16px #0009,0 0 0 1px #ffb00059}}.cassette.drag{cursor:grabbing;z-index:40;transition:none;box-shadow:0 16px 30px #000000b3}.cassette.load-slot{color:var(--bone-dim);cursor:pointer;background:radial-gradient(90% 60% at 50% 0,#00000080 0%,#0000 70%),linear-gradient(#0e0f11 0%,#16171a 100%);border:1px solid #000;flex-direction:column;justify-content:center;align-items:center;gap:5px;display:flex;box-shadow:inset 0 3px 9px #000000d9,inset 0 -1px #ffffff0d,inset 2px 0 4px #0006,0 1px #ffffff12}.cassette.load-slot .load-plus{color:var(--amber);text-shadow:0 0 8px #ffb00059}.cassette.load-slot.is-drop{color:var(--bone);border-color:#ffb0008c;box-shadow:inset 0 3px 9px #000000d9,inset 0 0 14px #ffb0001f,0 1px #ffffff12,0 0 14px #ffb00024}@media (hover:hover){.cassette.load-slot:hover{color:var(--bone);border-color:#ffb0008c;box-shadow:inset 0 3px 9px #000000d9,inset 0 0 14px #ffb0001f,0 1px #ffffff12,0 0 14px #ffb00024}}.cassette.load-slot.is-drop{color:var(--amber);background:radial-gradient(90% 60% at 50% 0,#0006 0%,#0000 70%),linear-gradient(#171307 0%,#1d180a 100%)}.cassette.load-slot.is-loading{border-color:var(--amber);color:var(--amber);cursor:progress}.cassette.load-slot.is-loading .load-plus{animation:.9s ease-in-out infinite keypulse}.cassette.load-slot.is-error{border-color:var(--safelight-red);color:var(--safelight-red);border-style:solid}.load-plus{font-size:20px;font-weight:400;line-height:1}.load-text{letter-spacing:.14em;text-align:center;font-size:9px;font-weight:700;line-height:1.25}.neg-spread{flex:auto;min-height:0;position:relative;overflow:hidden}.bench-zone.glass-dock{z-index:45;opacity:0;flex-direction:row;gap:12px;width:auto;padding:12px 26px;transition:opacity .18s,transform .22s cubic-bezier(.22,.9,.3,1.15);position:absolute;top:14px;left:50%;transform:translate(-50%)translateY(-18px)}.bench-glass.grabbing-enlarger .glass-dock[data-accepts=enlarger],.bench-glass.grabbing-tank .glass-dock[data-accepts=tank]{opacity:1;transform:translate(-50%)}@media (prefers-reduced-motion:reduce){.bench-zone.glass-dock{transition:opacity .12s;transform:translate(-50%)}}@media (pointer:coarse){.bench-zone.glass-dock{padding:16px 34px}}.neg-spread.empty{justify-content:center;align-items:center;display:flex}.glass-hint{font-family:var(--mono);letter-spacing:.18em;color:var(--bone-dim);opacity:.5;text-align:center;font-size:10px;font-weight:700}.neg-cell{transform:translate(-50%, -50%) rotate(var(--tilt,0deg));flex-direction:column;align-items:flex-start;gap:3px;display:flex;position:absolute}.negative{background-blend-mode:overlay, normal;cursor:grab;pointer-events:auto;touch-action:none;background:url(/grain.svg),linear-gradient(#141516 0%,#0b0c0d 100%);border:1px solid #000;border-left:3px solid #ffb00059;border-radius:3px;width:auto;padding:10px 6px;transition:transform .22s,box-shadow .22s;position:relative;box-shadow:0 3px 8px #00000080,inset 0 1px #ffffff0d}.negative:before,.negative:after{content:"";pointer-events:none;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Crect x='1.5' y='0.75' width='7' height='4.5' rx='1.5' fill='%23040405' stroke='%23d98a3f' stroke-opacity='0.4' stroke-width='0.75'/%3E%3C/svg%3E") 0/10px 6px repeat-x;height:6px;position:absolute;left:6px;right:6px}.negative:before{top:2px}.negative:after{bottom:2px}.negative-img{background-position:50%;background-size:cover;border-radius:1px;width:auto;height:148px;display:block}@media (hover:hover){.negative:hover{border-left-color:var(--amber);box-shadow:0 5px 12px #0009,0 0 0 1px #ffb0004d}}.negative.drag{cursor:grabbing;z-index:40;transition:none;box-shadow:0 14px 28px #000000a6}.neg-label{max-width:250px;font-family:var(--mono);letter-spacing:.06em;color:var(--bone-dim);white-space:nowrap;text-overflow:ellipsis;padding-left:3px;font-size:9px;overflow:hidden}.neg-del{width:20px;height:20px;color:var(--bone);cursor:pointer;pointer-events:auto;opacity:0;background:#141516f2;border:1px solid #ffffff2e;border-radius:50%;padding:0;font-size:10px;line-height:1;transition:opacity .14s,color .14s,border-color .14s;position:absolute;top:-6px;right:-6px;box-shadow:0 2px 6px #0009}.neg-cell:hover .neg-del{opacity:1}.neg-del:hover{color:var(--safelight-red);border-color:var(--safelight-red)}@media (hover:none){.neg-del{opacity:.8}}@media (pointer:coarse){.neg-del:after{content:"";position:absolute;inset:-14px -14px -10px -10px}}.neg-edge{height:8px;line-height:8px;font-family:var(--mono);letter-spacing:.12em;text-align:center;white-space:nowrap;color:#d98a3f;opacity:0;pointer-events:none;background:#0b0c0deb;font-size:7px;font-weight:700;transition:opacity .16s;position:absolute;bottom:1px;left:6px;right:6px;overflow:hidden}.negative.drag .neg-edge{opacity:1}@media (hover:hover){.negative:hover .neg-edge{opacity:1}}@media (hover:none){.neg-edge{opacity:1}}.loupe-cell{z-index:38;pointer-events:none;position:absolute;transform:translate(-50%,-50%)}.loupe-cell.drag{z-index:44}.loupe{cursor:grab;pointer-events:auto;touch-action:none;background:repeating-conic-gradient(#ffffff17 0deg 2.5deg,#0000004d 2.5deg 5deg),radial-gradient(circle at 32% 26%,#3c3d40 0%,#232427 55%,#121314 100%);border:1px solid #000;border-radius:50%;width:118px;height:118px;transition:transform .16s,box-shadow .16s;position:relative;box-shadow:0 10px 22px #0000008c,0 2px 4px #00000080,inset 0 2px 3px #ffffff24,inset 0 -3px 6px #0000008c}.loupe:before{content:"";background:linear-gradient(160deg,#2d2e31 0%,#191a1c 100%);border:1px solid #000;border-radius:50%;position:absolute;inset:11px;box-shadow:inset 0 1px #ffffff1a,0 1px 3px #0009}.loupe.drag{cursor:grabbing;transition:none;transform:scale(1.06);box-shadow:0 20px 38px #000000a6,0 4px 8px #00000080,inset 0 2px 3px #ffffff24,inset 0 -3px 6px #0000008c}.loupe-lens{pointer-events:none;background-color:#101112;background-repeat:no-repeat;border:1px solid #000;border-radius:50%;position:absolute;inset:19px;overflow:hidden;box-shadow:inset 0 0 18px #000000bf,inset 0 2px 6px #0009}.loupe-lens:not(.reading){background-image:radial-gradient(circle at 50% 42%,#fff4d626 0%,#fff4d60a 58%,#fff4d600 100%)}.loupe-lens:after{content:"";background:radial-gradient(circle at 32% 24%,#fff3 0%,#ffffff0a 20%,#fff0 36%),radial-gradient(circle,#0000 60%,#0000006b 100%);border-radius:50%;position:absolute;inset:0}.loupe-plate{font-family:var(--mono);letter-spacing:.16em;color:#d98a3f;pointer-events:none;background:linear-gradient(#1c1d1f 0%,#101112 100%);border:1px solid #000;border-radius:999px;padding:2px 8px;font-size:7px;font-weight:700;position:absolute;bottom:-5px;left:50%;transform:translate(-50%);box-shadow:0 2px 4px #00000080,inset 0 1px #ffffff14}@media (prefers-reduced-motion:reduce){.loupe,.loupe.drag{transition:none;transform:none}}.bench-zone{width:104px;color:var(--bone-dim);background-blend-mode:overlay, normal;border-radius:var(--radius);pointer-events:none;background:url(/grain.svg),linear-gradient(#28292c 0%,#1c1d1f 100%);border:1px solid #000;flex-direction:column;justify-content:center;align-items:center;gap:7px;padding:18px 10px 12px;display:flex;position:relative;box-shadow:0 5px 12px #00000080,inset 0 1px #ffffff14}.bench-zone svg{opacity:.8}.bench-zone-label{letter-spacing:.16em;font-size:9px;font-weight:700}.zone-lamp{background:var(--amber);border-radius:50%;width:6px;height:6px;position:absolute;top:7px;right:8px;box-shadow:0 0 7px #ffb000cc}.bench-zone.off{color:#b8b4aa73}.bench-zone.off svg{opacity:.35}.bench-zone.off .zone-lamp{background:#3a3b3d;box-shadow:inset 0 1px 1px #0009}.bench-zone.hot{border-color:var(--amber);color:var(--amber);background-blend-mode:overlay, normal;background:url(/grain.svg),linear-gradient(#2e2410 0%,#201804 100%);box-shadow:0 0 18px #ffb00040,inset 0 0 12px #ffb0001f}.bench-toast{top:calc(84px + env(safe-area-inset-top,0px));font-family:var(--mono);letter-spacing:.14em;color:var(--bone-dim);pointer-events:auto;background:#0e0f10eb;border:1px solid #ffffff24;border-radius:999px;align-items:center;gap:12px;padding:7px 8px 7px 16px;font-size:10px;font-weight:700;display:flex;position:absolute;left:50%;transform:translate(-50%);box-shadow:0 6px 16px #00000080}.bench-toast button{min-width:0;padding:6px 14px}#panel{width:var(--panel-w);background:url(/grain.svg) repeat var(--graphite);background-blend-mode:overlay;padding:calc(18px + env(safe-area-inset-top,0px)) calc(16px + env(safe-area-inset-right,0px)) calc(18px + env(safe-area-inset-bottom,0px)) 16px;border-left:1px solid #000;flex-direction:column;gap:20px;display:flex;overflow-y:auto}#panel.hidden{display:none}.module{border-bottom:1px dashed #ffffff14;flex-direction:column;gap:10px;padding-bottom:20px;display:flex}.module:last-child{border-bottom:none;padding-bottom:0}.module h3{letter-spacing:.18em;color:var(--bone-dim);text-transform:uppercase;font-size:10px;font-weight:700}.readout{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--amber);text-shadow:0 0 12px #ffb00059;letter-spacing:.04em;text-transform:uppercase;font-size:26px}.dial{margin:2px auto;display:block}.readout.dim{color:var(--amber-dim);text-shadow:none}.readout.sm{font-size:18px}button,.btn{appearance:none;font-family:var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--bone);background-blend-mode:overlay, normal;cursor:pointer;background:url(/grain.svg),linear-gradient(#37383a 0%,#2b2c2e 100%);border:1px solid #131415;border-radius:8px;padding:12px 14px;font-size:12px;font-weight:700;transition:transform 60ms,box-shadow 60ms,background .12s;box-shadow:0 2px #141516,inset 0 1px #ffffff12}@media (hover:hover){button:hover{background-blend-mode:overlay, normal;background:url(/grain.svg),linear-gradient(#3d3e40 0%,#303133 100%)}}button:active{transform:translateY(2px);box-shadow:0 0 #141516,inset 0 1px 2px #00000080}@media (pointer:coarse){#panel button:not(.sw-track),.hud-actions button{min-height:44px}}button.accent{color:#1a1b1c;background:url(/grain.svg) repeat, linear-gradient(180deg, #ffc233 0%, var(--amber) 100%);background-blend-mode:overlay, normal;border-color:#7a5800;box-shadow:0 2px #7a5800,inset 0 1px #ffffff59}@media (hover:hover){button.accent:hover{filter:brightness(1.06)}}button.danger{color:var(--bone);background:url(/grain.svg) repeat, linear-gradient(180deg, #f04a26 0%, var(--safelight-red) 100%);background-blend-mode:overlay, normal;border-color:#6b1a0a;box-shadow:0 2px #6b1a0a,inset 0 1px #fff3}button:disabled{opacity:.35;cursor:default;pointer-events:none}.keyrow{gap:8px;display:flex}button.key{height:46px;color:var(--bone-dim);background-blend-mode:overlay, normal;background:url(/grain.svg),linear-gradient(#1d1e1f 0%,#101112 100%);border:1px solid #000;border-radius:7px;flex:1;justify-content:center;align-items:center;padding:0;display:flex;box-shadow:0 3px #000,inset 0 1px #ffffff12}@media (hover:hover){button.key:hover{background-blend-mode:overlay, normal;background:url(/grain.svg),linear-gradient(#242526 0%,#151617 100%)}}button.key:active{transform:translateY(2px);box-shadow:0 1px #000,inset 0 1px 2px #0009}@media (pointer:coarse){button.key{height:48px}}button.key svg{display:block}button.key.ember{color:#ff5a24}button.key.lit{color:var(--amber);background-blend-mode:overlay, normal;background:url(/grain.svg),linear-gradient(#2b2413 0%,#191307 100%);box-shadow:0 3px #000,inset 0 0 12px #ffb0004d}button.key.wide{gap:8px}button.key.wide span{letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:700}button.key.go{color:#1a1b1c;background:url(/grain.svg) repeat, linear-gradient(180deg, #ffc233 0%, var(--amber) 100%);background-blend-mode:overlay, normal;border-color:#7a5800;box-shadow:0 3px #7a5800,inset 0 1px #ffffff59}@media (hover:hover){button.key.go:hover{filter:brightness(1.06);background:url(/grain.svg) repeat, linear-gradient(180deg, #ffc233 0%, var(--amber) 100%);background-blend-mode:overlay, normal}}button.key.go:active{box-shadow:0 1px #7a5800,inset 0 1px 2px #00000059}button.key.pulse{animation:1.3s ease-in-out infinite keypulse}@keyframes keypulse{50%{box-shadow:0 3px #000,inset 0 0 16px #e036168c}}.switch{align-items:center;gap:10px;display:flex}.sw-lbl{letter-spacing:.14em;text-transform:uppercase;color:var(--bone-dim);opacity:.55;cursor:pointer;font-size:10px;font-weight:700;transition:color .12s,opacity .12s}.sw-lbl.on{color:var(--bone);opacity:1}button.sw-track{background:#0b0c0d;border:1px solid #000;border-radius:5px;flex:none;width:46px;height:22px;padding:0;position:relative;box-shadow:inset 0 2px 5px #000c,0 1px #ffffff0d}@media (hover:hover){button.sw-track:hover{background:#0e0f10}}button.sw-track:active{transform:none;box-shadow:inset 0 2px 5px #000c,0 1px #ffffff0d}@media (pointer:coarse){button.sw-track:after{content:"";position:absolute;inset:-12px -8px}}.sw-knob{background-blend-mode:overlay, normal, normal;background:url(/grain.svg),repeating-linear-gradient(90deg,#0000 0 4px,#00000047 4px 5px),linear-gradient(#3f4042 0%,#2a2b2d 100%);border-radius:3px;width:21px;height:16px;transition:left .1s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #000c,inset 0 1px #ffffff24}button.sw-track.right .sw-knob{left:21px}button.sw-track.lit{box-shadow:inset 0 2px 5px #000c,inset 0 0 9px #ffb00066}button.sw-track.lit .sw-knob:after{content:"";background:var(--amber);border-radius:50%;width:4px;height:4px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 0 5px #ffb000cc}button.mix-key{letter-spacing:.16em;border-radius:6px;padding:5px 11px;font-size:9px;box-shadow:0 1px #141516,inset 0 1px #ffffff12}.row{align-items:center;gap:8px;display:flex}.row>*{flex:1}.paper-grid{grid-template-columns:repeat(2,1fr);gap:8px;display:grid}.paper-grid.three{grid-template-columns:repeat(3,1fr)}.paper-grid button{flex-direction:column;align-items:center;gap:3px;padding:10px 8px;font-size:11px;display:flex}.paper-grid button[aria-pressed=true],button.station[aria-pressed=true]{color:var(--bone);background-blend-mode:overlay, normal;border-color:var(--amber-dim);background:url(/grain.svg),radial-gradient(120% 90% at 50% 0,#4a3812 0%,#2b2009 55%,#211807 100%);box-shadow:0 2px #141516,0 0 8px #ffb0001f,inset 0 0 16px #ffb0004d,inset 0 1px #ffc85047}.paper-grid button[aria-pressed=true] .btn-sub{opacity:.75}.btn-sub{letter-spacing:.08em;opacity:.6;white-space:nowrap;font-size:8px;font-weight:400}label.field{letter-spacing:.12em;text-transform:uppercase;color:var(--bone-dim);flex-direction:column;gap:4px;font-size:10px;display:flex}select,input[type=number]{font-family:var(--mono);color:var(--bone);background:#161718;border:1px solid #0c0d0e;border-radius:6px;padding:8px;font-size:13px}.slider{padding-bottom:7px;position:relative}input[type=range]{appearance:none;cursor:ew-resize;background:0 0;width:100%;height:20px;display:block}@media (pointer:coarse){input[type=range]{height:44px}}input[type=range]::-webkit-slider-runnable-track{background:#0b0c0d;border:1px solid #000;border-radius:5px;height:12px;box-shadow:inset 0 2px 5px #000c,0 1px #ffffff0d}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-blend-mode:overlay, normal, normal;background:url(/grain.svg),repeating-linear-gradient(90deg,#0000 0 4px,#00000047 4px 5px),linear-gradient(#3f4042 0%,#2a2b2d 100%);border:1px solid #000;border-radius:3px;width:22px;height:18px;margin-top:-4px;box-shadow:0 1px 2px #000c,inset 0 1px #ffffff24}input[type=range]::-moz-range-track{background:#0b0c0d;border:1px solid #000;border-radius:5px;height:12px;box-shadow:inset 0 2px 5px #000c,0 1px #ffffff0d}input[type=range]::-moz-range-thumb{background-blend-mode:overlay, normal, normal;background:url(/grain.svg),repeating-linear-gradient(90deg,#0000 0 4px,#00000047 4px 5px),linear-gradient(#3f4042 0%,#2a2b2d 100%);border:1px solid #000;border-radius:3px;width:22px;height:18px;box-shadow:0 1px 2px #000c,inset 0 1px #ffffff24}.slider-tick{bottom:0;left:calc(11px + (100% - 22px) * var(--frac,.5));background:var(--bone-dim);opacity:.55;pointer-events:none;width:2px;height:5px;position:absolute;transform:translate(-50%)}.slider.scaled{padding-bottom:0}.slider.scaled>.slider-tick{display:none}.slider-scale{pointer-events:none;height:7px;margin-top:1px;position:relative}.scale-tick{top:0;left:calc(11px + (100% - 22px) * var(--frac,0));background:var(--bone-dim);opacity:.3;width:1px;height:4px;position:absolute}.scale-tick.major{opacity:.55;width:2px;height:7px;transform:translate(-.5px)}.scale-tick.detent{background:var(--bone);opacity:.85}.slider-band{height:3px;top:0;left:calc(11px + (100% - 22px) * var(--f0,0));width:calc((100% - 22px) * (var(--f1,0) - var(--f0,0)));background:var(--safelight-red);opacity:.55;border-radius:1px;position:absolute}.slider-numerals{pointer-events:none;height:13px;position:relative}.slider-numerals span{top:3px;left:calc(11px + (100% - 22px) * var(--frac,0));font-family:var(--mono);letter-spacing:.08em;color:var(--bone-dim);opacity:.7;white-space:nowrap;font-size:8px;font-weight:700;position:absolute;transform:translate(-50%)}.slider-ends{letter-spacing:.08em;text-transform:uppercase;color:var(--bone-dim);opacity:.6;justify-content:space-between;gap:8px;margin-top:3px;font-size:8px;font-weight:700;display:flex}.module-head{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.bath-row{align-items:flex-start;gap:8px;display:flex}.bath-row .slider{flex:auto;min-width:0}.bath-row button.key.nudge{flex:0 0 44px;height:38px;display:none}@media (pointer:coarse){.bath-row button.key.nudge{height:44px;display:flex}.bath-row input[type=range]{pointer-events:none}}button.key.mono{font-family:var(--mono);letter-spacing:.04em;font-size:12px;font-weight:700}.notice{text-align:center;max-width:460px;color:var(--bone-dim);margin:auto;padding:24px;line-height:1.6}.notice b{color:var(--safelight-red)}.notice-glyph{margin-bottom:16px;font-size:32px}.notice-body{margin-top:12px}.notice-hint{color:var(--bone-dim);opacity:.8;margin-top:12px;font-size:12px}.notice-retry{margin-top:20px}@media (width<=699.98px){:root{--drawer-clearance:calc(64px + env(safe-area-inset-bottom,0px));--tray-gutter:16px}#panel{z-index:60;width:auto;height:min(var(--drawer-detent,440px), 60dvh);background-blend-mode:overlay, normal;-webkit-backdrop-filter:blur(12px);transform:translateY(var(--drawer-shift,0px));will-change:transform;background:url(/grain.svg),linear-gradient(#1a150db8 0%,#100d09e6 100%);border-top:1px solid #ffb00066;border-left:none;border-radius:12px 12px 0 0;gap:0;padding:0;transition:transform .24s cubic-bezier(.22,.9,.3,1.1);position:fixed;bottom:0;left:0;right:0;overflow:hidden;box-shadow:0 -1px #000000d9,0 -14px 34px #0000008c,inset 0 1px #ffffff0f}#panel.dragging{transition:none}.panel-rail{padding:5px var(--tray-gutter) 8px;cursor:grab;touch-action:none;border-bottom:1px solid #000000a6;flex-direction:column;flex:none;gap:2px;display:flex;position:relative;box-shadow:inset 0 -1px #ffffff0d}.panel-rail:before,.panel-rail:after{content:"";background:linear-gradient(115deg,#0000 0 44%,#000c 44% 56%,#0000 56% 100%),radial-gradient(circle at 35% 30%,#3a3b3e 0%,#1c1d1f 70%,#0c0d0e 100%);border-radius:50%;width:7px;height:7px;position:absolute;top:10px;box-shadow:0 1px #ffffff14,inset 0 1px 1px #000000b3}.panel-rail:before{left:8px}.panel-rail:after{right:8px}.rail-grip{flex-direction:column;align-self:center;align-items:center;gap:3px;width:60%;padding:8px 0 6px;display:flex}.rail-grip:before{content:"";background-blend-mode:overlay, normal, normal;background:url(/grain.svg),repeating-linear-gradient(90deg,#0000 0 4px,#00000047 4px 5px),linear-gradient(#3f4042 0%,#2a2b2d 100%);border-radius:3px;width:88px;height:9px;box-shadow:0 1px 2px #000c,inset 0 1px #ffffff24}.rail-grip-hint{letter-spacing:.16em;color:var(--bone-dim);opacity:.75;font-size:9px;font-weight:700}.rail-row{align-items:center;gap:10px;min-height:46px;display:flex}.rail-readout{min-width:0;font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;text-overflow:ellipsis;color:var(--amber);text-shadow:0 0 10px #ffb0004d;flex:auto;font-size:11px;font-weight:700;line-height:1.35;overflow:hidden}.rail-readout.warn{color:var(--safelight-red);text-shadow:0 0 10px #e0361659}.rail-keys{flex:none;gap:8px;display:flex}.rail-keys .key{flex:none;min-width:68px;height:46px;padding:0 14px}.rail-cap{flex:none}.rail-cap .key{width:42px;min-width:42px;height:38px;padding:0}.panel-rail.locked{cursor:default}.panel-rail.locked .rail-grip{display:none}.panel-rail.locked .rail-readout{flex:none}.panel-rail.locked .rail-keys{flex:auto}.panel-rail.locked .rail-keys .key{flex:auto;width:auto}.panel-body{overscroll-behavior:contain;min-height:0;padding:14px var(--tray-gutter) calc(16px + env(safe-area-inset-bottom,0px));flex-flow:wrap;flex:auto;align-content:flex-start;gap:16px;display:flex;overflow:hidden auto}.panel-body .module{flex:100%;min-width:0;padding-bottom:16px}.panel-body .module[data-module=paper],.panel-body .module[data-module=cards]{flex:150px;min-width:140px}.panel-body .module[data-module=paper]{border-bottom:none;padding-bottom:0}.panel-body .keyrow{justify-content:center;gap:12px}.panel-body .keyrow .key{flex:none;min-width:72px;height:44px;padding:0 16px}.panel-body .switch{flex-wrap:wrap;row-gap:4px}.panel-body .module[data-module=film] .paper-grid{touch-action:pan-x;scrollbar-width:none;scroll-snap-type:x proximity;flex-wrap:nowrap;gap:8px;padding-bottom:4px;display:flex;overflow-x:auto;-webkit-mask-image:linear-gradient(90deg,#000 0% calc(100% - 26px),#0000 100%);mask-image:linear-gradient(90deg,#000 0% calc(100% - 26px),#0000 100%)}.panel-body .module[data-module=film] .paper-grid::-webkit-scrollbar{display:none}.panel-body .module[data-module=film] .paper-grid>*{scroll-snap-align:start;flex:none;min-width:128px}#panel.console{height:auto;max-height:60dvh;box-shadow:none;-webkit-backdrop-filter:none;pointer-events:none;background:0 0;border:none;border-radius:0;padding:0;transition:none;overflow:visible;transform:none}#panel.console>*{pointer-events:auto}.console-face{cursor:default;padding:0 var(--tray-gutter) calc(16px + env(safe-area-inset-bottom,0px));flex-direction:column;gap:10px;display:flex}.console-readout{align-items:center;gap:8px;min-height:20px;padding:0 2px;display:none}.console-readout.lit{display:flex}.console-keys{justify-content:space-between;align-items:center;gap:14px;display:flex}.console-keys .console-toggle{border-radius:50%;flex-direction:column;flex:none;justify-content:center;align-items:center;gap:2px;width:66px;min-width:66px;height:66px;padding:0 4px;font-weight:700;display:flex}.console-toggle .toggle-label{letter-spacing:.14em;opacity:.65;font-size:8px}.console-toggle .toggle-value{max-width:100%;font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:.03em;color:var(--amber);text-shadow:0 0 8px #ffb0004d;font-size:9px;line-height:1.2;overflow:hidden}.console-keys .console-toggle[aria-pressed=true]{color:var(--amber);box-shadow:0 0 0 1px #ffb0008c,0 0 12px #ffb00040}.console-keys .key.go{letter-spacing:.06em;border-radius:50%;flex-direction:column;flex:none;gap:3px;width:76px;min-width:76px;height:76px;padding:0;font-size:8px}.console .panel-body{background-blend-mode:overlay, normal;-webkit-backdrop-filter:blur(12px);background:url(/grain.svg),linear-gradient(#1a150dc7 0%,#100d09eb 100%);border:1px solid #ffb00047;border-radius:12px;flex-flow:column;gap:14px;max-height:calc(60dvh - 130px);margin:0 10px 12px;padding:14px 16px;animation:.16s ease-out plate-rise;overflow-y:auto;box-shadow:0 10px 28px #0000008c,inset 0 1px #ffffff0f}@keyframes plate-rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.console .panel-body .module{flex:none;min-width:0;padding-bottom:0;display:none}.console .panel-body[data-plate=""]{display:none}.console .panel-body[data-plate=film] .module,.console .panel-body[data-plate=chem] .module{border-bottom:none}.console .panel-body[data-plate=film] .module[data-module=film],.console .panel-body[data-plate=chem] .module[data-module=chem],.console .panel-body[data-plate=rack] .module[data-module=mix],.console .panel-body[data-plate=rack] .module[data-module=bath],.console .panel-body[data-plate=rack] .module[data-module=clock],.console .panel-body[data-plate=rack] .module[data-module=commit]{display:block}.hud-actions,#stage-wrap.filmstrip .hud-actions{bottom:calc(var(--drawer-clearance) + 12px)}#stage-wrap #ansel{bottom:var(--ansel-clearance,calc(var(--drawer-clearance) + 12px))}.hud-actions.cut-dock{flex-direction:column;align-items:center;gap:8px;width:max-content}.cut-dock .row button{min-width:130px}.cut-dock .hud-note{text-align:center;text-shadow:0 1px 3px #000c}button.hud-crumb{white-space:nowrap}.crumb-lamp{background:var(--amber);vertical-align:1px;border-radius:50%;width:6px;height:6px;margin-left:6px;display:inline-block;box-shadow:0 0 7px #ffb000cc}.hud-bench{padding:calc(62px + env(safe-area-inset-top,0px)) calc(10px + env(safe-area-inset-right,0px)) calc(12px + env(safe-area-inset-bottom,0px)) calc(10px + env(safe-area-inset-left,0px))}.bench-glass{padding:12px 12px 14px}.cassette-row{gap:16px}.bench-zone.glass-dock{width:auto;padding:14px 16px;top:42%;left:10px;right:10px;transform:translateY(-12px)}.bench-glass.grabbing-enlarger .glass-dock[data-accepts=enlarger],.bench-glass.grabbing-tank .glass-dock[data-accepts=tank]{transform:translateY(0)}}@media (width<=699.98px) and (prefers-reduced-motion:reduce){#panel{transition:none}.console .panel-body{animation:none}.bench-zone.glass-dock,.bench-glass.grabbing-enlarger .glass-dock[data-accepts=enlarger],.bench-glass.grabbing-tank .glass-dock[data-accepts=tank]{transition:opacity .12s;transform:translateY(0)}}.hint{color:var(--bone-dim);font-size:11px;line-height:1.5}.hint.warn{color:var(--safelight-red)}.meta{flex-direction:column;gap:3px;margin-top:4px;display:flex}.meta-row{font-family:var(--mono);letter-spacing:.06em;justify-content:space-between;gap:12px;font-size:11px;display:flex}.meta-label{color:var(--bone-dim)}.meta-value{color:var(--amber-dim);text-align:right;text-transform:uppercase}#devpanel{border-radius:var(--radius);z-index:50;background:#141516f0;border:1px solid #000;width:320px;max-height:calc(100% - 20px);padding:12px;display:none;position:absolute;top:10px;left:10px;overflow-y:auto}#devpanel.open{display:block}#devpanel .dev-row{color:var(--bone-dim);grid-template-columns:130px 1fr 52px;align-items:center;gap:6px;margin-bottom:4px;font-size:10px;display:grid}#devpanel .dev-row output{color:var(--amber);text-align:right}#devpanel h4{color:var(--amber);letter-spacing:.15em;margin:10px 0 6px;font-size:10px}#ansel{bottom:calc(22px + env(safe-area-inset-bottom,0px));right:calc(18px + env(safe-area-inset-right,0px));z-index:30;flex-direction:column;align-items:flex-end;gap:4px;display:flex;position:absolute}.ansel-unit{background:#08090a;border:1px solid #000;border-radius:8px;align-items:center;gap:8px;padding:6px 10px 6px 4px;transition:transform .24s,opacity .2s;display:flex;position:relative;box-shadow:0 4px 10px #00000073,inset 0 2px 8px #000000b3,inset 0 -1px #ffffff0a}.ansel-unit:after{content:"";border-radius:inherit;pointer-events:none;background:repeating-linear-gradient(#ffffff0b 0 1px,#0000 1px 3px);position:absolute;inset:0}.ansel-plate{align-items:center;gap:8px;padding-right:2px;transition:opacity .2s;display:flex}#ansel.off .ansel-unit{opacity:0;pointer-events:none;transform:translateY(16px)}#ansel.off .ansel-plate{opacity:0;pointer-events:none}button.ansel-face{min-width:0;box-shadow:none;background:0 0;border:none;border-radius:4px;padding:2px 4px}@media (hover:hover){button.ansel-face:hover{background:#ffb00012}}button.ansel-face:active{box-shadow:none;transform:none}button.ansel-face canvas{width:72px;height:66px;image-rendering:pixelated;filter:drop-shadow(0 0 4px #ffb0004d);display:block}.ansel-text{width:150px;max-height:62px;font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--amber);text-shadow:0 0 5px #ffb00059;opacity:0;font-size:9px;font-weight:700;line-height:1.6;transition:opacity .16s;overflow:hidden}#ansel.talking .ansel-text{opacity:1}.ansel-name{font-family:var(--mono);letter-spacing:.18em;color:var(--bone-dim);font-size:8px;font-weight:700}button.ansel-off{min-width:0;font-family:var(--mono);letter-spacing:.14em;color:var(--bone-dim);border-radius:5px;padding:4px 7px;font-size:8px}button.ansel-call{width:46px;min-width:0;height:46px;font-family:var(--mono);letter-spacing:.12em;color:var(--bone-dim);opacity:0;pointer-events:none;border-radius:50%;padding:0;font-size:8px;font-weight:700;transition:opacity .2s,transform .2s;position:absolute;bottom:0;right:0;transform:translateY(6px)}#ansel.off button.ansel-call{opacity:1;pointer-events:auto;transition-delay:.22s;transform:none}@media (prefers-reduced-motion:reduce){.ansel-text,.ansel-unit,.ansel-plate,button.ansel-call{transition:none}}
