:root{--safe-top:env(safe-area-inset-top,0px);--safe-right:env(safe-area-inset-right,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px);--ui-top:calc(10px + var(--safe-top));--ui-right:calc(10px + var(--safe-right));--ui-bottom:calc(10px + var(--safe-bottom));--ui-left:calc(10px + var(--safe-left))}html,body{height:100%;margin:0;overscroll-behavior:none}body{overflow:hidden;background:#000;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;-webkit-user-select:none;-webkit-touch-callout:none}#workspace{position:fixed;inset:0;background-color:#000;user-select:none;touch-action:none;cursor:grab}#workspace.panning{cursor:grabbing}#workspace.ruler-active,#workspace.ruler-active .interactionHandle,#workspace.ruler-active .interactionHandle:active{cursor:crosshair !important}#workspace.angle-active,#workspace.angle-active .interactionHandle,#workspace.angle-active .interactionHandle:active{cursor:crosshair !important}#opticsCanvas{position:fixed;inset:0;width:100%;height:100%;display:block;pointer-events:none;z-index:25}#rayCanvas{position:fixed;inset:0;width:100%;height:100%;display:block;pointer-events:none;z-index:35}#annotationsCanvas{position:fixed;inset:0;width:100%;height:100%;display:block;pointer-events:none;z-index:42}#overlay{position:fixed;inset:0;pointer-events:none;z-index:50}#topLeftTools{position:fixed;top:var(--ui-top);left:var(--ui-left);right:calc(var(--ui-right) + 78px);display:flex;gap:6px;flex-wrap:wrap;align-items:stretch;z-index:1000}#addBtn{width:32px;height:32px;border-radius:10px;border:1px solid rgba(255,255,255,0.25);background:rgba(255,255,255,0.08);color:#fff;font-size:20px;display:grid;place-items:center;cursor:pointer;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);flex-shrink:0}#addBtn:hover{background:rgba(255,255,255,0.13)}#opticsEditorBtn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:0 12px;border-radius:10px;border:1px solid rgba(255,255,255,0.25);background:rgba(255,255,255,0.08);color:#fff;cursor:pointer;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);overflow:hidden}#opticsEditorBtn .oe-label,#opticsEditorBtn .oe-main{font-size:14px;font-weight:400;line-height:1;color:#fff;white-space:nowrap}#opticsEditorBtn:hover{background:rgba(255,255,255,0.13)}#measureToolbox{display:flex;flex-direction:column;border-radius:10px;border:1px solid rgba(255,255,255,0.25);background:rgba(255,255,255,0.08);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);overflow:hidden}.measure-buttons{display:flex}#rulerBtn,#showAnglesBtn,#protractorBtn,#rayTracerBtn{width:32px;height:32px;border:none;background:none;color:#fff;display:grid;place-items:center;cursor:pointer;user-select:none;padding:0}#rulerBtn,#showAnglesBtn,#protractorBtn{border-right:1px solid rgba(255,255,255,0.18)}#rulerBtn:hover,#showAnglesBtn:hover,#protractorBtn:hover,#rayTracerBtn:hover{background:rgba(255,255,255,0.12)}#rulerBtn.active,#showAnglesBtn.active,#protractorBtn.active,#rayTracerBtn.active{background:rgba(255,255,255,0.22)}#objectImagePanel{display:flex;flex-direction:column;border-radius:10px;border:1px solid rgba(255,255,255,0.25);background:rgba(255,255,255,0.08);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);overflow:hidden;flex:0 0 auto;width:max-content;max-width:calc(100vw - var(--ui-left) - var(--ui-right) - 150px)}.objimg-row{display:flex;height:30px;width:max-content}#historyToolbar{display:flex;flex-direction:column;border-radius:10px;border:1px solid rgba(255,255,255,0.25);background:rgba(255,255,255,0.08);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);overflow:hidden;flex:0 0 auto}.history-labels{display:grid;grid-template-columns:repeat(2,32px);align-items:center;justify-items:center;padding:4px 0 3px;border-bottom:1px solid rgba(255,255,255,0.10);font-size:8px;line-height:1;font-weight:600;color:rgba(255,255,255,0.58);text-transform:uppercase;letter-spacing:0.04em}.history-buttons{display:flex;height:30px}#historyUndoBtn,#historyRedoBtn{width:32px;height:100%;border:none;background:none;color:#fff;display:grid;place-items:center;cursor:pointer;padding:0}#historyUndoBtn{border-right:1px solid rgba(255,255,255,0.18)}#historyUndoBtn:hover:not(:disabled),#historyRedoBtn:hover:not(:disabled){background:rgba(255,255,255,0.12)}#historyUndoBtn:disabled,#historyRedoBtn:disabled{opacity:0.35;cursor:default}#addPointObjectBtn{flex:0 0 auto;height:100%;border:none;border-right:1px solid rgba(255,255,255,0.18);background:none;color:#fff;font-size:11px;cursor:pointer;padding:0 8px;white-space:nowrap}#addPointObjectBtn:hover{background:rgba(255,255,255,0.12)}#addExtObjBtn{flex:0 0 auto;height:100%;border:none;border-right:1px solid rgba(255,255,255,0.18);background:none;color:#fff;font-size:11px;cursor:pointer;padding:0 8px;white-space:nowrap}#addExtObjBtn:hover{background:rgba(255,255,255,0.12)}.measure-label{font-size:9px;font-weight:600;letter-spacing:0.06em;text-transform:uppercase;color:rgba(255,255,255,0.60);text-align:center;padding:4px 10px 3px;border-bottom:1px solid rgba(255,255,255,0.14)}.measureHandle{position:absolute;width:10px;height:10px;border-radius:50%;background:rgba(255,210,60,0.85);border:1.5px solid rgba(255,235,120,0.95);box-shadow:0 0 6px rgba(255,200,40,0.35);cursor:grab;user-select:none;z-index:210;transform:translate(-50%,-50%);box-sizing:border-box;pointer-events:auto}.measureHandle:hover{background:rgba(255,230,80,0.95)}.measureHandle:active{cursor:grabbing}.measureHandle.pending{background:rgba(255,210,60,0.35);border-color:rgba(255,235,120,0.45);cursor:default;pointer-events:none}#addMenu{position:fixed;top:calc(var(--ui-top) + 40px);left:var(--ui-left);width:200px;max-width:calc(100vw - var(--ui-left) - var(--ui-right));max-height:calc(100dvh - var(--ui-top) - var(--ui-bottom) - 50px);overflow-y:auto;border-radius:12px;border:1px solid rgba(255,255,255,0.18);background:rgba(20,20,20,0.92);color:#fff;padding:8px;z-index:1000;display:none;box-shadow:0 12px 30px rgba(0,0,0,0.6);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}#settingsGearBtn,#fullscreenBtn{position:fixed;top:var(--ui-top);width:32px;height:32px;border-radius:10px;border:1px solid rgba(255,255,255,0.25);background:rgba(255,255,255,0.08);color:#fff;font-size:16px;display:grid;place-items:center;cursor:pointer;z-index:1000;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}#settingsGearBtn{right:var(--ui-right)}#fullscreenBtn{right:calc(var(--ui-right) + 40px)}#settingsGearBtn:hover,#fullscreenBtn:hover{background:rgba(255,255,255,0.13)}#settingsGearBtn.active{background:rgba(255,255,255,0.20);border-color:rgba(255,255,255,0.4)}.menuItem{padding:10px 10px;border-radius:10px;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:space-between}.menuItem:hover{background:rgba(255,255,255,0.08)}.menuSeparator{height:1px;background:rgba(255,255,255,0.12);margin:5px 4px}.menuArrow{opacity:0.5;font-size:13px;flex-shrink:0;display:inline-block;transition:transform 0.15s}.menuItemHasSub{border-radius:8px;overflow:hidden}.menuItemHasSub.open>.menuItemHeader .menuArrow{transform:rotate(90deg)}.subMenu{display:none;background:rgba(255,255,255,0.04);border-top:1px solid rgba(255,255,255,0.08);padding:4px 0 4px 12px}.subMenu .menuItem{border-radius:6px}.menuItemHasSub.open>.subMenu{display:block}#settingsMenu{position:fixed;top:calc(var(--ui-top) + 40px);right:var(--ui-right);width:360px;max-width:calc(100vw - var(--ui-left) - var(--ui-right));border-radius:10px;border:1px solid rgba(255,255,255,0.18);background:rgba(20,20,20,0.95);color:#fff;padding:0;z-index:1600;display:none;box-shadow:0 12px 30px rgba(0,0,0,0.6);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);overflow:hidden}#settingsMenuHeader{display:flex;align-items:stretch;border-bottom:1px solid rgba(255,255,255,0.15);background:rgba(255,255,255,0.04)}.settingsTabs{display:flex;flex:1;gap:0;margin:0;padding:0;border:none;align-items:stretch}.settingsTab{font-size:12px;padding:9px 14px;cursor:pointer;border:none;border-right:1px solid rgba(255,255,255,0.08);color:rgba(255,255,255,0.50);background:none;border-radius:0;white-space:nowrap;transition:background 0.1s,color 0.1s}.settingsTab:first-child{border-left:none}.settingsTab:hover{color:#fff;background:rgba(255,255,255,0.07)}.settingsTab.active{color:#fff;background:rgba(255,255,255,0.10);box-shadow:inset 0 -2px 0 #5597ff}.settingsTabPanel{display:none;padding:8px 12px 8px}.settingsTabPanel.active{display:block}#closeSettingsBtn{background:none;border:none;border-left:1px solid rgba(255,255,255,0.08);color:rgba(255,255,255,0.40);font-size:13px;cursor:pointer;padding:0 10px;border-radius:0;line-height:1;flex-shrink:0}#closeSettingsBtn:hover{color:#fff;background:rgba(255,255,255,0.09)}.settingsRow{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 0}.settingsIndented{padding-left:8px}.settingsLabel{font-size:12px;color:rgba(255,255,255,0.80);flex:1}.settingsSelect{background:rgba(255,255,255,0.08);border:1px solid rgba(255,255,255,0.20);border-radius:6px;color:#fff;font-size:12px;padding:4px 6px;cursor:pointer;outline:none}.settingsSelect:hover{background:rgba(255,255,255,0.13)}input[type="number"].settingsInput{width:64px;background:rgba(255,255,255,0.08);border:1px solid rgba(255,255,255,0.20);border-radius:6px;color:#fff;font-size:12px;padding:4px 6px;text-align:right;outline:none}input[type="number"].settingsInput:focus{border-color:rgba(255,255,255,0.45)}.settingsError{font-size:10px;color:#ff7070;min-height:14px;padding-left:8px}.settingsSlider{width:108px;height:3px;cursor:pointer;accent-color:#5597ff;flex-shrink:0}.settingsSliderVal{font-size:11px;color:rgba(255,255,255,0.50);min-width:26px;text-align:right;flex-shrink:0}.settingsSectionHead{font-size:10px;font-weight:600;letter-spacing:0.06em;color:rgba(255,255,255,0.35);text-transform:uppercase;padding:6px 0 1px}#panel{position:fixed;left:var(--ui-left);bottom:var(--ui-bottom);width:270px;max-width:calc(100vw - var(--ui-left) - var(--ui-right));max-height:calc(100dvh - var(--ui-top) - var(--ui-bottom) - 60px);flex-direction:column;border-radius:14px;border:1px solid rgba(255,255,255,0.18);background:rgba(20,20,20,0.92);color:#fff;padding:10px 10px 12px;z-index:1200;display:none;box-shadow:0 12px 30px rgba(0,0,0,0.6);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}#panelBody{overflow-y:auto;min-height:0;flex:1}.panelRow{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:8px}.panelTitle{font-size:13px;opacity:0.9}.panelText{font-size:13px;opacity:0.9}.pill{font-size:12px;border:1px solid rgba(255,255,255,0.18);background:rgba(255,255,255,0.06);color:#fff;padding:6px 10px;border-radius:999px;cursor:pointer;white-space:nowrap}.pill:hover{background:rgba(255,255,255,0.10)}.danger{border-color:rgba(255,120,120,0.35);background:rgba(255,120,120,0.10)}.danger:hover{background:rgba(255,120,120,0.18)}.hint{margin-top:8px;font-size:12px;opacity:0.75;line-height:1.35}.objectTabbedPanel{display:flex;flex-direction:column}.objectTabPanel{display:none}.objectTabPanel.active{display:block}.objectTabFooter{margin-top:2px}.objectTabBar{display:flex;align-items:flex-end;margin-top:12px}.objectTab{flex:1;font-size:12px;border:1px solid rgba(255,255,255,0.14);border-top:none;background:rgba(255,255,255,0.05);color:rgba(255,255,255,0.62);padding:8px 10px;cursor:pointer}.objectTab + .objectTab{border-left:none}.objectTab:first-child{border-bottom-left-radius:10px}.objectTab:last-child{border-bottom-right-radius:10px}.objectTab:hover{color:#fff;background:rgba(255,255,255,0.09)}.objectTab.active{color:#fff;background:rgba(255,255,255,0.12);border-color:rgba(255,255,255,0.20);box-shadow:inset 0 2px 0 #5597ff}.objectTabNote{margin-top:10px;font-size:12px;line-height:1.35;color:rgba(255,255,255,0.70)}.field{display:grid;grid-template-columns:1fr 120px;gap:10px;align-items:center;margin-top:10px}.fieldCheckbox{grid-template-columns:1fr auto}.panelCheckbox{width:16px;height:16px;cursor:pointer;accent-color:#5597ff;justify-self:end}input[type="number"]{width:100%;box-sizing:border-box;border-radius:10px;border:1px solid rgba(255,255,255,0.18);background:rgba(255,255,255,0.06);color:#fff;padding:7px 10px;outline:none}#timeController{position:fixed;left:50%;bottom:calc(14px + var(--safe-bottom));transform:translateX(-50%);z-index:1250;display:none;align-items:center;gap:10px;padding:8px 10px;border-radius:14px;border:1px solid rgba(255,255,255,0.16);background:rgba(18,18,18,0.92);box-shadow:0 10px 28px rgba(0,0,0,0.50);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fff}.timeCluster{display:flex;align-items:center;gap:8px}.timeScaleCluster{gap:6px}.timeDivider{width:1px;height:22px;background:rgba(255,255,255,0.12)}.timeLabel{font-size:11px;color:rgba(255,255,255,0.56);text-transform:uppercase;letter-spacing:0.04em}.timeToggleBtn{border:none;background:none;padding:0;cursor:pointer}.timeToggleBtn:hover,.timeToggleBtn[aria-expanded="true"]{color:rgba(255,255,255,0.86)}#timeCurrentLabel{min-width:88px;text-align:center;font-size:12px;color:rgba(255,255,255,0.82);font-variant-numeric:tabular-nums}#timeScaleSlider{width:92px;height:3px;cursor:pointer;accent-color:#5597ff}input[type="number"].timeScaleInput{width:50px;background:rgba(255,255,255,0.08);border:1px solid rgba(255,255,255,0.20);border-radius:8px;color:#fff;font-size:12px;padding:4px 6px;text-align:right;outline:none}.timeBtn{min-width:38px;height:32px;display:flex;align-items:center;justify-content:center;gap:6px;padding:0 10px;border-radius:10px;border:1px solid rgba(255,255,255,0.18);background:rgba(255,255,255,0.06);color:#fff;cursor:pointer}.timeBtn:hover{background:rgba(255,255,255,0.12)}.timeBtn.is-playing{background:rgba(85,162,255,0.22);border-color:rgba(120,185,255,0.75)}.timeBtn svg{display:block}.timeBtn .pauseGlyph{display:none}.timeBtn.is-playing .playGlyph{display:none}.timeBtn.is-playing .pauseGlyph{display:block}#timePlayLabel{font-size:12px;line-height:1}.interactionHandle{pointer-events:auto;touch-action:none;transition:filter 120ms ease,opacity 120ms ease}.interactionHandle .tag{color:rgba(255,255,255,0.78);opacity:0.72;transition:opacity 120ms ease,color 120ms ease,text-shadow 120ms ease}.interactionHandle.is-selected{filter:drop-shadow(0 0 8px rgba(255,255,255,0.30))}.interactionHandle.is-selected .tag{color:rgba(255,255,255,0.98);opacity:1;text-shadow:0 0 10px rgba(255,255,255,0.30)}.laser{position:absolute;width:52px;height:10px;border-radius:999px;border:1px solid rgba(255,255,255,0.22);background:rgba(255,255,255,0.10);cursor:grab;user-select:none;z-index:200;transform-origin:50% 50%;box-sizing:border-box}.laser::after{content:"";position:absolute;right:-2px;top:50%;width:8px;height:8px;transform:translateY(-50%);border-radius:999px;background:rgba(255,255,255,0.35);border:1px solid rgba(255,255,255,0.25)}.laser:active{cursor:grabbing}.laser.on{border-color:rgba(255,255,255,0.40);background:rgba(255,255,255,0.16)}.pointImageHandle{position:absolute;width:14px;height:14px;border-radius:50%;background:rgba(255,152,74,0.96);border:1px solid rgba(255,236,196,0.95);box-shadow:0 0 0 2px rgba(255,120,48,0.34),0 0 18px rgba(255,146,76,0.45);cursor:grab;user-select:none;z-index:205;transform:translate(-50%,-50%);box-sizing:border-box}.pointImageHandle:active{cursor:grabbing}.pointImageHandle .tag{top:-20px}.pointSourceHandle{position:absolute;width:16px;height:16px;border-radius:50%;background:rgba(255,244,210,0.98);border:1px solid rgba(255,255,255,0.96);box-shadow:0 0 0 2px rgba(255,216,120,0.26),0 0 18px rgba(255,228,150,0.38);cursor:grab;user-select:none;z-index:205;transform:translate(-50%,-50%);box-sizing:border-box}.pointSourceHandle:active{cursor:grabbing}.pointSourceHandle .tag{top:-20px}.extendedObjectHandle{position:absolute;border-radius:12px;border:1px solid rgba(255,200,80,0.00);background:rgba(255,180,80,0.00);cursor:grab;user-select:none;z-index:205;transform-origin:50% 50%;box-sizing:border-box}.extendedObjectHandle:active{cursor:grabbing}.interactionHandle.extendedObjectHandle.is-selected{border-color:rgba(255,210,80,0.32);background:rgba(255,180,80,0.05);box-shadow:0 0 0 1px rgba(255,210,80,0.08) inset}.tag{position:absolute;left:50%;top:-18px;transform:translateX(-50%);font-size:11px;opacity:0.75;white-space:nowrap;pointer-events:none}.ifaceHandle{position:absolute;width:180px;height:26px;border-radius:999px;background:rgba(255,255,255,0.00);border:1px solid rgba(255,255,255,0.00);cursor:grab;user-select:none;z-index:180;transform-origin:50% 50%}.ifaceHandle:active{cursor:grabbing}.ifaceHandle .tag{top:-20px}.mirrorHandle{position:absolute;height:10px;border-radius:3px;background:rgba(255,255,255,0.00);border:1px solid rgba(255,255,255,0.00);cursor:grab;user-select:none;z-index:190;transform-origin:50% 50%;box-sizing:border-box}.mirrorHandle:active{cursor:grabbing}.mirrorHandle .tag{top:-20px}#paraxial-info-box{position:fixed;right:var(--ui-right);bottom:calc(14px + var(--safe-bottom));min-width:195px;max-width:min(270px,calc(100vw - var(--ui-left) - var(--ui-right)));background:rgba(10,10,24,0.88);border:1px solid rgba(90,110,200,0.30);border-radius:8px;padding:6px 9px 6px;z-index:1200;display:none;pointer-events:none;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}#paraxial-info-box.pib-visible{display:block}.pib-title{font-size:8.5px;font-weight:600;letter-spacing:0.09em;text-transform:uppercase;color:rgba(160,180,255,0.42);margin-bottom:4px}.pib-entry{display:flex;align-items:center;gap:7px;padding:1.5px 0}.pib-badge{font-size:11px;font-weight:700;font-family:'Courier New',monospace;min-width:24px}.pib-badge.pib-real{color:rgba(100,220,255,0.95)}.pib-badge.pib-virtual{color:rgba(160,160,255,0.55)}.pib-type-text{font-size:10px;color:rgba(185,205,255,0.68)}.pib-warning{font-size:10px;color:rgba(255,190,80,0.90);line-height:1.35}.pib-infinity{font-size:10px;color:rgba(185,205,255,0.45);font-style:italic}.leg-meta{margin-top:2px;font-size:10px;color:rgba(255,255,255,0.48);line-height:1.35}.pib-marker{position:fixed;transform:translate(-50%,-50%);pointer-events:none;z-index:1100}.pib-marker-label{position:fixed;transform:translate(-50%,-100%);margin-top:-12px;font-size:11px;font-weight:700;font-family:'Courier New',monospace;pointer-events:none;z-index:1101;white-space:nowrap}.pib-marker-label.pib-real{color:rgba(100,220,255,0.95)}.pib-marker-label.pib-virtual{color:rgba(160,160,255,0.70)}#scaleReadout{position:fixed;right:calc(14px + var(--safe-right));bottom:calc(14px + var(--safe-bottom));z-index:1400;pointer-events:none;display:grid;justify-items:end;gap:4px;color:rgba(255,255,255,0.92);font-size:12px;text-shadow:0 1px 3px rgba(0,0,0,0.85)}#scaleBar{height:0;border-top:2px solid rgba(255,255,255,0.95);position:relative;width:120px}#scaleBar::before,#scaleBar::after{content:"";position:absolute;top:-6px;width:0;height:10px;border-left:2px solid rgba(255,255,255,0.95)}#scaleBar::before{left:0}#scaleBar::after{right:0}#gi-overlay{position:fixed;inset:0;pointer-events:none;z-index:1050;overflow:hidden}#gi-ext-arrows-svg{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:1050;overflow:visible;display:none}.gi-guess-pin{position:absolute;width:24px;height:24px;border-radius:50%;background:rgba(255,200,50,0.15);border:2px solid rgba(255,210,60,0.85);transform:translate(-50%,-50%);pointer-events:none;display:grid;place-items:center}.gi-pin-lbl{font-size:9px;font-weight:700;color:rgba(255,220,80,0.95);font-family:'Courier New',monospace}.gi-reveal-marker{position:absolute;width:26px;height:26px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;display:grid;place-items:center}.gi-reveal-marker.gi-img-real{background:rgba(50,180,255,0.18);border:2px solid rgba(80,210,255,0.85)}.gi-reveal-marker.gi-img-virtual{background:rgba(160,100,255,0.18);border:2px dashed rgba(180,130,255,0.80)}.gi-marker-lbl{font-size:9px;font-weight:700;font-family:'Courier New',monospace}.gi-reveal-marker.gi-img-real .gi-marker-lbl{color:rgba(100,220,255,0.95)}.gi-reveal-marker.gi-img-virtual .gi-marker-lbl{color:rgba(180,140,255,0.95)}.gi-connector{position:absolute;height:1.5px;background:rgba(255,220,80,0.38);transform-origin:left center;pointer-events:none}#gi-guess-panel{position:fixed;bottom:calc(14px + var(--safe-bottom));left:var(--ui-left);width:min(280px,calc(100vw - var(--ui-left) - var(--ui-right)));min-width:0;max-width:none;background:rgba(10,10,24,0.90);border:1px solid rgba(255,200,50,0.22);border-radius:10px;padding:8px 10px 10px;z-index:1200;display:none;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);font-size:12px;color:rgba(255,255,255,0.88)}.gi-panel-header{font-size:9px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;color:rgba(255,200,50,0.70);margin-bottom:7px}.gi-pin-slot{display:flex;align-items:center;gap:8px;border:1.5px dashed rgba(255,200,50,0.45);border-radius:8px;padding:6px 8px;cursor:grab;user-select:none;margin-bottom:5px}.gi-pin-slot:hover{border-color:rgba(255,210,60,0.75);background:rgba(255,200,50,0.06)}.gi-pin-slot:active{cursor:grabbing}.gi-pin-slot-icon{width:24px;height:24px;border-radius:50%;flex-shrink:0;border:2px solid rgba(255,200,50,0.85);background:rgba(255,200,50,0.12);display:grid;place-items:center}.gi-drag-hint{font-size:11px;color:rgba(255,255,255,0.50)}.gi-placed-count{font-size:11px;color:rgba(255,255,255,0.38);margin:4px 0 6px}.gi-ext-editor{margin:6px 0 8px;padding:7px 8px;border-radius:8px;background:rgba(255,180,80,0.08);border:1px solid rgba(255,190,90,0.18)}.gi-ext-editor-title{font-size:10px;font-weight:700;letter-spacing:0.04em;color:rgba(255,215,120,0.88);margin-bottom:6px;text-transform:uppercase}.gi-ext-editor-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:5px}.gi-ext-field{display:flex;flex-direction:column;gap:3px;font-size:10px;color:rgba(255,255,255,0.62)}.gi-ext-field input{min-width:0;border:1px solid rgba(255,220,120,0.16);border-radius:6px;background:rgba(8,8,18,0.86);color:rgba(255,245,220,0.92);font-size:11px;padding:5px 6px;outline:none}.gi-ext-field input:focus{border-color:rgba(255,220,120,0.46);box-shadow:0 0 0 1px rgba(255,220,120,0.18)}.gi-ext-editor-hint{font-size:10px;line-height:1.4;color:rgba(255,255,255,0.44)}.gi-row{display:flex;gap:6px;align-items:center;margin-top:2px}.gi-btn{flex:1;padding:5px 0;border:none;border-radius:6px;cursor:pointer;font-size:11px;font-weight:600;background:rgba(255,255,255,0.10);color:rgba(255,255,255,0.80)}.gi-btn:hover{background:rgba(255,255,255,0.18)}.gi-primary-btn{background:rgba(255,200,50,0.22);color:rgba(255,220,80,0.95)}.gi-primary-btn:hover{background:rgba(255,200,50,0.36)}.gi-undo-btn{flex:0 0 auto;padding:5px 10px}#image-legend{position:fixed;right:var(--ui-right);bottom:calc(14px + var(--safe-bottom));width:min(290px,calc(100vw - var(--ui-left) - var(--ui-right)));min-width:0;max-width:none;background:rgba(10,10,24,0.90);border:1px solid rgba(80,160,255,0.25);border-radius:10px;padding:8px 10px 10px;z-index:1200;display:none;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);font-size:12px;color:rgba(255,255,255,0.88)}#image-legend.has-entries{display:block}.leg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.leg-title{font-size:9px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;color:rgba(100,180,255,0.70)}#gi-mode-body{margin-top:4px}.gi-fb-row{background:rgba(255,255,255,0.04);border-radius:7px;padding:6px 8px;margin-bottom:5px}.gi-fb-top{display:flex;align-items:center;gap:8px;margin-bottom:3px}.gi-badge{font-size:10px;font-weight:700;padding:1px 5px;border:1px solid rgba(255,255,255,0.20);border-radius:4px;font-family:'Courier New',monospace}.gi-score{font-size:13px;font-weight:700}.gi-fb-msg{font-size:11px;color:rgba(255,255,255,0.72);line-height:1.4}.gi-fb-meta{font-size:10px;color:rgba(255,255,255,0.38);margin-top:2px}.gi-missed{font-size:11px;color:rgba(255,180,60,0.80);margin:4px 0}.gi-hint{font-size:11px;color:rgba(255,255,255,0.38)}.gi-reveal-progress{font-size:11px;color:rgba(100,200,255,0.65);margin-bottom:5px}.gi-retry-btn{background:rgba(255,200,50,0.18);color:rgba(255,220,80,0.90)}.gi-retry-btn:hover{background:rgba(255,200,50,0.32)}.gi-exit-btn{background:rgba(255,80,80,0.14);color:rgba(255,140,100,0.88)}.gi-exit-btn:hover{background:rgba(255,80,80,0.28)}#gi-prompt{position:fixed;inset:0;z-index:2100;background:rgba(0,0,0,0.45);display:none;place-items:center}#gi-prompt.visible{display:grid}.gi-prompt-box{background:rgba(12,12,28,0.96);border:1px solid rgba(255,200,50,0.30);border-radius:12px;padding:18px 20px 14px;max-width:310px;text-align:center;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.gi-prompt-msg{font-size:13px;color:rgba(255,255,255,0.88);line-height:1.5;margin-bottom:14px}.gi-prompt-btns{display:flex;gap:8px;justify-content:center}.gi-prompt-btns .gi-btn{flex:0 0 auto;padding:6px 16px}body:has(#image-legend.has-entries) #paraxial-info-box{display:none !important}body.gi-guess-active #rayCanvas,body.gi-guess-active #annotationsCanvas{display:none !important}#objectEditor{position:fixed;inset:0;z-index:1300;display:none}#objectEditor.open{display:block}body:has(#objectEditor.open) #topLeftTools,body:has(#objectEditor.open) #settingsGearBtn,body:has(#objectEditor.open) #fullscreenBtn,body:has(#objectEditor.open) #addMenu,body:has(#objectEditor.open) #settingsMenu,body:has(#objectEditor.open) #paraxial-info-box,body:has(#objectEditor.open) #scaleReadout{display:none !important}#cutModeBar{position:fixed;display:none;align-items:center;gap:6px;padding:5px 10px;border-radius:10px;border:1px solid rgba(255,255,255,0.15);background:rgba(18,18,18,0.92);box-shadow:0 8px 20px rgba(0,0,0,0.5);backdrop-filter:blur(6px);z-index:3;pointer-events:auto;white-space:nowrap}#cutModeBar.visible{display:flex}.cutModeLabel{font-size:11px;color:rgba(255,255,255,0.5);margin-right:2px}.cutModeBtn.active{background:rgba(255,60,60,0.22) !important;border-color:rgba(255,80,80,0.55) !important}#editorBackdrop{display:none}#editorCanvas{position:absolute;inset:0;display:block;width:100%;height:100%;touch-action:none;cursor:crosshair;pointer-events:auto}#editorToolbar{position:fixed;top:10px;left:10px;right:10px;z-index:1301;display:flex;align-items:center;justify-content:space-between;gap:10px;pointer-events:auto}#editorTools,#editorActions{display:flex;align-items:center;gap:8px;padding:8px;border-radius:12px;border:1px solid rgba(255,255,255,0.18);background:rgba(18,18,18,0.92);box-shadow:0 10px 28px rgba(0,0,0,0.5);backdrop-filter:blur(6px)}.toolBtn{border-radius:9px;border:1px solid rgba(255,255,255,0.20);background:rgba(255,255,255,0.06);color:#fff;padding:6px 10px;font-size:12px;cursor:pointer}.toolBtn:hover:not(:disabled){background:rgba(255,255,255,0.12)}.toolBtn:disabled{opacity:0.35;cursor:default}.toolBtn.active{background:rgba(85,162,255,0.30);border-color:rgba(120,185,255,0.95)}#editorHint{position:absolute;left:10px;bottom:10px;max-width:520px;z-index:3;pointer-events:none;font-size:12px;line-height:1.35;opacity:0.86;padding:8px 10px;border-radius:10px;border:1px solid rgba(255,255,255,0.15);background:rgba(18,18,18,0.86);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);color:#fff}#riPicker{position:fixed;z-index:4;width:230px;border-radius:12px;border:1px solid rgba(255,255,255,0.20);background:rgba(18,18,18,0.96);box-shadow:0 14px 30px rgba(0,0,0,0.55);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);padding:8px;display:none;pointer-events:auto}#riPicker .row{margin-top:6px;display:grid;gap:6px}#riPicker .row:first-child{margin-top:0}#riPicker .label{font-size:11px;opacity:0.8}#riPicker .actions{margin-top:8px;display:flex;gap:8px;justify-content:flex-end}.sphericalMirrorHandle{position:absolute;width:24px;height:24px;border-radius:50%;background:rgba(255,255,255,0.00);cursor:grab;touch-action:none;user-select:none;transform-origin:50% 50%;box-sizing:border-box}.sphericalMirrorHandle:active{cursor:grabbing}.sphericalMirrorHandle .tag{top:-20px}.objectHandle{position:absolute;width:24px;height:24px;border-radius:50%;background:rgba(255,255,255,0.00);cursor:grab;touch-action:none;user-select:none;z-index:190;transform-origin:50% 50%;box-sizing:border-box}.objectHandle:active{cursor:grabbing}.objectHandle .tag{top:-20px}.mirrorSlabHandle{position:absolute;border-radius:3px;background:rgba(255,255,255,0.00);border:1px solid rgba(255,255,255,0.00);cursor:grab;user-select:none;z-index:190;transform-origin:50% 50%;box-sizing:border-box}.mirrorSlabHandle:active{cursor:grabbing}.mirrorSlabHandle .tag{top:-20px}#mirrorDialog{position:fixed;inset:0;z-index:2000;display:none;pointer-events:none}.mirrorDialogBox{position:absolute;top:calc(var(--ui-top) + 50px);left:calc(6px + var(--safe-left));pointer-events:all;background:rgba(20,20,20,0.97);border:1px solid rgba(255,255,255,0.18);border-radius:14px;padding:20px;color:#fff;box-shadow:0 20px 40px rgba(0,0,0,0.7);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);max-width:calc(100vw - var(--ui-left) - var(--ui-right));max-height:calc(100dvh - var(--ui-top) - 50px - var(--ui-bottom) - 16px);overflow:auto}.mirrorDialogTitle{font-size:15px;font-weight:600;margin-bottom:16px}.mirrorDialogBody{display:flex;gap:16px;align-items:flex-start}.mirrorFieldsCol{display:flex;flex-direction:column;gap:8px;min-width:185px}#mirrorPreviewCanvas{border-radius:8px;border:1px solid rgba(255,255,255,0.12);background:rgba(255,255,255,0.04);flex-shrink:0}.mirrorDialogActions{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}select{width:100%;box-sizing:border-box;border-radius:10px;border:1px solid rgba(255,255,255,0.18);background:rgba(255,255,255,0.06);color:#fff;padding:7px 10px;outline:none;cursor:pointer}select option{background:#1e1e2e;color:#fff}#prismDialog{position:fixed;inset:0;z-index:2000;display:none;pointer-events:none}.prismDialogBox{position:absolute;top:calc(var(--ui-top) + 50px);left:calc(6px + var(--safe-left));pointer-events:all;background:rgba(20,20,20,0.97);border:1px solid rgba(255,255,255,0.18);border-radius:14px;padding:20px;color:#fff;box-shadow:0 20px 40px rgba(0,0,0,0.7);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);max-width:calc(100vw - var(--ui-left) - var(--ui-right));max-height:calc(100dvh - var(--ui-top) - 50px - var(--ui-bottom) - 16px);overflow:auto}.prismDialogTitle{font-size:15px;font-weight:600;margin-bottom:16px}.prismDialogBody{display:flex;gap:16px;align-items:flex-start}.prismSideCol,.prismAngleCol{display:flex;flex-direction:column;gap:8px;min-width:160px}.prismFieldGroup{display:flex;flex-direction:column;gap:4px}.prismFieldGroup label{font-size:12px;opacity:0.75}.prismFieldGroup input{width:140px;box-sizing:border-box;border-radius:8px;border:1px solid rgba(255,255,255,0.18);background:rgba(255,255,255,0.06);color:#fff;padding:6px 8px;outline:none;font-size:13px}#prismPreviewCanvas{border-radius:8px;border:1px solid rgba(255,255,255,0.12);background:rgba(255,255,255,0.04)}#prismDialogError{font-size:12px;color:#ff7070;min-height:18px;margin:8px 0 4px}#prismDialog .prismDialogBox{display:flex;flex-direction:column;width:min(440px,calc(100vw - var(--ui-left) - var(--ui-right)));padding:16px 16px 14px}#prismDialog .prismDialogBody{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px;overflow-y:auto;flex:1 1 auto;min-height:0}#prismDialog .prismSideCol,#prismDialog .prismAngleCol{min-width:0;gap:6px}#prismDialog .prismFieldGroup{gap:3px}#prismDialog .prismFieldGroup input{width:100%;padding:5px 8px}#prismDialog .mirrorDialogActions{margin-top:10px}#lensDialog{position:fixed;inset:0;z-index:2000;display:none;pointer-events:none}.lensTypeTabs{display:flex;gap:6px;margin-bottom:12px}.lensTypeTab{padding:5px 16px;border-radius:8px;border:1px solid rgba(255,255,255,0.20);background:rgba(255,255,255,0.06);color:#fff;font-size:13px;cursor:pointer}.lensTypeTab.active{background:rgba(100,160,255,0.28);border-color:rgba(120,180,255,0.55)}#lensPreviewCanvas{border-radius:8px;border:1px solid rgba(255,255,255,0.12);background:rgba(255,255,255,0.04)}#lensDialogError{font-size:12px;color:#ff7070;min-height:18px;margin:8px 0 4px}#mobileLandscapeGuard{position:fixed;inset:0;z-index:2600;display:none;align-items:center;justify-content:center;padding:24px;background:rgba(0,0,0,0.82);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);text-align:center;cursor:pointer}body.mobile-portrait-lock #mobileLandscapeGuard{display:flex}body.mobile-portrait-lock>*:not(#mobileLandscapeGuard){pointer-events:none}.mobileLandscapeCard{width:min(320px,calc(100vw - 32px));border-radius:16px;border:1px solid rgba(255,255,255,0.18);background:rgba(14,14,24,0.94);box-shadow:0 18px 42px rgba(0,0,0,0.52);padding:22px 18px 18px;color:rgba(255,255,255,0.92)}.mobileLandscapeIcon{width:56px;height:56px;margin:0 auto 14px;display:grid;place-items:center;border-radius:14px;color:rgba(255,210,90,0.96);background:rgba(255,210,90,0.10);border:1px solid rgba(255,210,90,0.28)}.mobileLandscapeTitle{font-size:16px;font-weight:700;margin-bottom:8px}.mobileLandscapeText{font-size:13px;line-height:1.5;color:rgba(255,255,255,0.72)}.mobileLandscapeBtn{margin-top:14px;width:100%;border:1px solid rgba(255,210,90,0.25);border-radius:10px;background:rgba(255,210,90,0.16);color:rgba(255,225,140,0.96);font-size:13px;font-weight:600;padding:10px 12px;cursor:pointer}.mobileLandscapeBtn:hover{background:rgba(255,210,90,0.24)}@media (max-width:1080px),(max-height:820px){#topLeftTools{gap:5px}#objectImagePanel{flex:0 0 auto;min-width:0;max-width:calc(100vw - var(--ui-left) - var(--ui-right) - 132px)}#settingsMenu{width:min(360px,calc(100vw - var(--ui-left) - var(--ui-right)))}}@media (max-width:900px),(max-height:620px){#topLeftTools{right:calc(var(--ui-right) + 70px)}#addBtn,#rulerBtn,#showAnglesBtn,#protractorBtn,#rayTracerBtn,#historyUndoBtn,#historyRedoBtn,#settingsGearBtn,#fullscreenBtn{width:30px;height:30px}#settingsGearBtn{right:calc(8px + var(--safe-right))}#fullscreenBtn{right:calc(44px + var(--safe-right))}#opticsEditorBtn{padding:0 10px}#opticsEditorBtn .oe-label,#opticsEditorBtn .oe-main{font-size:13px}.measure-label{font-size:8px;padding:3px 8px 2px}.objimg-row{height:28px}.history-labels{grid-template-columns:repeat(2,30px);font-size:7px;padding:3px 0 2px}.history-buttons{height:28px}#addPointObjectBtn,#addExtObjBtn{font-size:10px;padding:0 8px}#panel{width:min(255px,calc(100vw - var(--ui-left) - var(--ui-right)))}#panelBody{overflow-y:auto;min-height:0;flex:1}#timeController{max-width:calc(100vw - var(--ui-left) - var(--ui-right));padding:7px 8px;gap:8px}#scaleReadout{right:calc(10px + var(--safe-right));bottom:calc(10px + var(--safe-bottom));font-size:11px}#scaleBar{width:92px}.mirrorDialogBox,.prismDialogBox{padding:16px}.mirrorDialogBody,.prismDialogBody{flex-direction:column}#prismDialog .prismDialogBox{width:min(420px,calc(100vw - var(--ui-left) - var(--ui-right)));padding:14px}#prismDialog .prismDialogBody{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 10px}}@media (max-width:720px),(max-height:520px){#topLeftTools{gap:4px;right:calc(var(--ui-right) + 64px)}#addMenu{width:min(220px,calc(100vw - var(--ui-left) - var(--ui-right)))}#settingsMenu{width:min(340px,calc(100vw - var(--ui-left) - var(--ui-right)))}#panel{width:min(240px,calc(100vw - var(--ui-left) - var(--ui-right)));padding:9px 9px 10px}#panelBody{overflow-y:auto;min-height:0;flex:1}#timeController{left:var(--ui-left);right:var(--ui-right);transform:none;justify-content:center;flex-wrap:wrap}#gi-guess-panel,#image-legend,#paraxial-info-box{width:min(250px,calc(100vw - var(--ui-left) - var(--ui-right)))}#prismDialog .prismDialogBox{width:min(320px,calc(100vw - var(--ui-left) - var(--ui-right)))}#prismDialog .prismDialogBody{grid-template-columns:1fr}#scaleReadout{display:none}}@media (pointer:coarse){#topLeftTools{right:calc(var(--ui-right) + 108px);gap:8px}#addBtn,#rulerBtn,#showAnglesBtn,#protractorBtn,#rayTracerBtn,#historyUndoBtn,#historyRedoBtn,#settingsGearBtn,#fullscreenBtn{width:44px;height:44px}#fullscreenBtn{right:calc(var(--ui-right) + 52px)}#opticsEditorBtn{min-height:44px;padding:0 14px}.measure-buttons{min-height:44px}.history-labels{grid-template-columns:repeat(2,44px);padding:5px 0 4px}.history-buttons{height:44px}.objimg-row{min-height:44px;height:44px}#addPointObjectBtn,#addExtObjBtn{min-height:44px;padding:0 10px}}