/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
:root{--bg-color:#fff;--text-color:#000;--label-color:#666;--indicator-color:var(--primary);--chart-scale:1;--distance-scale:1;--ico-tv:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='20' height='15' x='2' y='7' rx='2' ry='2'/%3E%3Cpolyline points='17 2 12 7 7 2'/%3E%3C/svg%3E");--ico-maximize:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 3H5a2 2 0 0 0-2 2v3'/%3E%3Cpath d='M21 8V5a2 2 0 0 0-2-2h-3'/%3E%3Cpath d='M3 16v3a2 2 0 0 0 2 2h3'/%3E%3Cpath d='M16 21h3a2 2 0 0 0 2-2v-3'/%3E%3C/svg%3E");--ico-minimize:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 3v3a2 2 0 0 1-2 2H3'/%3E%3Cpath d='M21 8h-3a2 2 0 0 1-2-2V3'/%3E%3Cpath d='M3 16h3a2 2 0 0 1 2 2v3'/%3E%3Cpath d='M16 21v-3a2 2 0 0 1 2-2h3'/%3E%3C/svg%3E");--ico-panel:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='18' height='18' x='3' y='3' rx='2'/%3E%3Cpath d='M9 3v18'/%3E%3Cpath d='m16 15-3-3 3-3'/%3E%3C/svg%3E")}body.contrast-reverse{--bg-color:#000;--text-color:#fff;--label-color:#999;--indicator-color:#6cc5bd}body.contrast-low{--bg-color:#f0f0f0;--text-color:#555;--label-color:#888}body{flex-direction:column;height:100dvh;display:flex;overflow:hidden}.ec-layout{flex:auto;width:100%;min-height:0;display:flex;position:relative}body.tv-mode .site-header,body.fullscreen .site-header{display:none}.controls{background-color:var(--card);width:320px;color:var(--foreground);border-right:1px solid var(--border);z-index:30;flex-shrink:0;padding:1.5rem;overflow-y:auto}.controls.hidden{display:none}.ec-floating{z-index:40;min-height:2.75rem;position:absolute;top:.75rem;left:.75rem;box-shadow:0 4px 12px -4px #00000040}.ec-floating:focus-visible{outline:2px solid var(--ring);outline-offset:2px}body.tv-mode .ec-floating{position:absolute;top:auto;bottom:1rem}.controls-content{flex-direction:column;gap:1.25rem;display:flex}.ec-sidebar-head h1{letter-spacing:-.015em;font-size:1.25rem;font-weight:600;line-height:1.75rem}.ec-sidebar-head p{color:var(--muted-foreground);margin-top:.25rem;font-size:.875rem}.ec-section-title{color:var(--muted-foreground);font-size:.875rem;font-weight:500}.ec-sep{margin:.25rem 0}.control-group{flex-direction:column;gap:.5rem;display:flex}.controls .select,.controls .btn,.modal-content .btn,.modal-content .input{min-height:2.5rem}.controls .select{height:2.5rem}.ec-full{width:100%}.ec-start{justify-content:flex-start}.ec-ico:before{content:"";width:1rem;height:1rem;-webkit-mask:var(--ico) center / contain no-repeat;-webkit-mask:var(--ico) center / contain no-repeat;-webkit-mask:var(--ico) center / contain no-repeat;-webkit-mask:var(--ico) center / contain no-repeat;mask:var(--ico) center / contain no-repeat;background-color:currentColor;flex-shrink:0}.ec-ico--tv{--ico:var(--ico-tv)}.ec-ico--fullscreen{--ico:var(--ico-maximize)}body.fullscreen .ec-ico--fullscreen{--ico:var(--ico-minimize)}.ec-ico--panel{--ico:var(--ico-panel)}.tv-mode-toggle{border:1px solid var(--border);border-radius:var(--radius-xl);background-color:var(--muted);gap:.75rem;padding:1rem}.ec-tv-card{align-items:center;gap:.75rem;display:flex}.ec-tv-card__title{font-size:.875rem;font-weight:500}.controls .help-text{color:var(--muted-foreground);font-size:.8125rem}.ec-zoom-label{justify-content:space-between}#zoomLevel{font-variant-numeric:tabular-nums;color:var(--muted-foreground)}.zoom-controls{align-items:center;gap:.75rem;display:flex}.zoom-controls .btn-icon{width:2.5rem;height:2.5rem}.zoom-indicator{background-color:var(--muted);border-radius:9999px;flex:1;height:.5rem;overflow:hidden}.zoom-bar{background-color:var(--primary);border-radius:9999px;height:100%;transition:width .3s}.preset-section{flex-direction:column;gap:.75rem;display:flex}.preset-buttons{flex-direction:column;gap:.5rem;display:flex}.preset-empty{border:1px dashed var(--input);border-radius:var(--radius-md);color:var(--muted-foreground);text-align:center;padding:.75rem;font-size:.8125rem;line-height:1.4}.preset-btn{border:1px solid var(--border);border-radius:var(--radius-md);background-color:var(--card);width:100%;min-height:2.5rem;color:var(--foreground);text-align:left;cursor:pointer;justify-content:space-between;align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.875rem;font-weight:500;transition:background-color .15s,border-color .15s;display:flex;box-shadow:0 1px 2px #0000000d}.preset-btn:hover{background-color:var(--accent);color:var(--accent-foreground)}.preset-btn.active{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.preset-btn.active{border-color:color-mix(in oklab, var(--primary) 45%, transparent)}}.preset-btn.active{background-color:var(--accent);color:var(--accent-foreground)}.preset-btn-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.preset-btn-shortcut{border-radius:var(--radius-sm);background-color:var(--muted);color:var(--muted-foreground);flex-shrink:0;padding:0 .375rem;font-size:.75rem}.preset-actions{flex-direction:column;gap:.5rem;display:flex}.ec-display-group{gap:.5rem}.instructions{flex-direction:column;gap:.75rem;display:flex}.instructions ul,.help-content ul{flex-direction:column;gap:.5rem;display:flex}.instructions li,.help-content li{color:var(--foreground);align-items:center;gap:.75rem;font-size:.875rem;display:flex}.instructions li>span:first-child,.help-content li>span:first-child{min-width:4.5rem;color:var(--muted-foreground);align-items:center;gap:.25rem;display:inline-flex}@media (hover:none) and (pointer:coarse){.instructions>.ec-section-title,.instructions>ul{display:none}}.instructions .note{border:1px solid var(--border);border-radius:var(--radius-md);background-color:var(--muted);color:var(--muted-foreground);padding:.75rem;font-size:.8125rem;line-height:1.5}.ec-notice{border:1px solid var(--border);border-left:3px solid var(--primary);border-radius:var(--radius-md);color:var(--foreground);padding:.75rem;font-size:.8125rem;line-height:1.5}body.tv-mode .ec-notice{grid-column:1/-1}.ec-storage-note{border:1px solid var(--border);border-radius:var(--radius-md);background-color:var(--muted);color:var(--foreground);padding:.75rem;font-size:.8125rem;line-height:1.5}.mode-info{font-size:.8125rem;line-height:1.5}.mode-info p{color:var(--muted-foreground)}.mode-info strong{color:var(--foreground);font-weight:600}.controls :focus-visible,.modal-content :focus-visible,.tv-mode-banner :focus-visible{outline:2px solid var(--ring);outline-offset:2px}.chart-container{background-color:var(--bg-color);flex:1;justify-content:safe center;align-items:safe center;min-width:0;padding:2rem;display:flex;overflow:auto}.chart-container.fullscreen{padding:4rem}.chart{zoom:calc(var(--chart-scale) * var(--distance-scale));font-feature-settings:normal;color:var(--text-color);flex-direction:column;align-items:center;gap:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Arial,sans-serif;line-height:normal;display:flex}@supports not (zoom:1){.chart{transform:scale(calc(var(--chart-scale) * var(--distance-scale)));transition:transform .3s}}.chart-line{opacity:.4;cursor:pointer;align-items:center;gap:1rem;transition:opacity .3s;display:flex}.chart-line:hover,.chart-line.active{opacity:1}.chart-line[data-highlight=true]{opacity:.6}.chart-line[data-highlight=true]:hover,.chart-line[data-highlight=true].active{opacity:1}.line-content{gap:.3em;display:flex}.letter{color:var(--text-color);-webkit-user-select:none;user-select:none;letter-spacing:.1em;font-family:Courier New,monospace;font-weight:700}.chart-line[data-line="1"] .letter{font-size:8rem}.chart-line[data-line="2"] .letter{font-size:6rem}.chart-line[data-line="3"] .letter{font-size:4.5rem}.chart-line[data-line="4"] .letter{font-size:3.5rem}.chart-line[data-line="5"] .letter{font-size:3rem}.chart-line[data-line="6"] .letter{font-size:2.5rem}.chart-line[data-line="7"] .letter{font-size:2rem}.chart-line[data-line="8"] .letter{font-size:1.75rem}.chart-line[data-line="9"] .letter{font-size:1.5rem}.chart-line[data-line="10"] .letter{font-size:1.25rem}.acuity-label{color:var(--label-color);text-align:right;-webkit-user-select:none;user-select:none;min-width:4rem;font-size:1rem;font-weight:600}@media (width>=1920px){.chart-line[data-line="1"] .letter{font-size:10rem}.chart-line[data-line="2"] .letter{font-size:8rem}.chart-line[data-line="3"] .letter{font-size:6rem}.chart-line[data-line="4"] .letter{font-size:5rem}.chart-line[data-line="5"] .letter{font-size:4rem}.chart-line[data-line="6"] .letter{font-size:3.5rem}.chart-line[data-line="7"] .letter{font-size:3rem}.chart-line[data-line="8"] .letter{font-size:2.5rem}.chart-line[data-line="9"] .letter{font-size:2rem}.chart-line[data-line="10"] .letter{font-size:1.75rem}}@media (width<=1366px){.chart-line[data-line="1"] .letter{font-size:6rem}.chart-line[data-line="2"] .letter{font-size:5rem}.chart-line[data-line="3"] .letter{font-size:4rem}.chart-line[data-line="4"] .letter{font-size:3rem}.chart-line[data-line="5"] .letter{font-size:2.5rem}.chart-line[data-line="6"] .letter{font-size:2rem}.chart-line[data-line="7"] .letter{font-size:1.75rem}.chart-line[data-line="8"] .letter{font-size:1.5rem}.chart-line[data-line="9"] .letter{font-size:1.25rem}.chart-line[data-line="10"] .letter{font-size:1rem}}.chart-line.active{position:relative}.chart-line.active:before{content:"►";color:var(--indicator-color);font-size:1.5rem;position:absolute;left:-2rem}.tumbling-e{color:var(--text-color);-webkit-user-select:none;user-select:none;letter-spacing:0;justify-content:center;align-items:center;width:1em;height:1em;font-family:Courier New,monospace;font-weight:700;line-height:1;display:inline-flex;translate:none;rotate:none;scale:none}.tumbling-e.rotate-0{transform:rotate(0)}.tumbling-e.rotate-90{transform:rotate(90deg)}.tumbling-e.rotate-180{transform:rotate(180deg)}.tumbling-e.rotate-270{transform:rotate(270deg)}.landolt-c{border:.15em solid var(--text-color);-webkit-user-select:none;user-select:none;border-radius:50%;display:inline-block;position:relative}.landolt-c.gap-top{border-top-color:#0000}.landolt-c.gap-bottom{border-bottom-color:#0000}.landolt-c.gap-left{border-left-color:#0000}.landolt-c.gap-right{border-right-color:#0000}.chart-line[data-line="1"] .landolt-c{width:8rem;height:8rem}.chart-line[data-line="2"] .landolt-c{width:6rem;height:6rem}.chart-line[data-line="3"] .landolt-c{width:4.5rem;height:4.5rem}.chart-line[data-line="4"] .landolt-c{width:3.5rem;height:3.5rem}.chart-line[data-line="5"] .landolt-c{width:3rem;height:3rem}.chart-line[data-line="6"] .landolt-c{width:2.5rem;height:2.5rem}.chart-line[data-line="7"] .landolt-c{width:2rem;height:2rem}.chart-line[data-line="8"] .landolt-c{width:1.75rem;height:1.75rem}.chart-line[data-line="9"] .landolt-c{width:1.5rem;height:1.5rem}.chart-line[data-line="10"] .landolt-c{width:1.25rem;height:1.25rem}@media (width>=1920px){.chart-line[data-line="1"] .landolt-c{width:10rem;height:10rem}.chart-line[data-line="2"] .landolt-c{width:8rem;height:8rem}.chart-line[data-line="3"] .landolt-c{width:6rem;height:6rem}.chart-line[data-line="4"] .landolt-c{width:5rem;height:5rem}.chart-line[data-line="5"] .landolt-c{width:4rem;height:4rem}.chart-line[data-line="6"] .landolt-c{width:3.5rem;height:3.5rem}.chart-line[data-line="7"] .landolt-c{width:3rem;height:3rem}.chart-line[data-line="8"] .landolt-c{width:2.5rem;height:2.5rem}.chart-line[data-line="9"] .landolt-c{width:2rem;height:2rem}.chart-line[data-line="10"] .landolt-c{width:1.75rem;height:1.75rem}}@media (width<=1366px){.chart-line[data-line="1"] .landolt-c{width:6rem;height:6rem}.chart-line[data-line="2"] .landolt-c{width:5rem;height:5rem}.chart-line[data-line="3"] .landolt-c{width:4rem;height:4rem}.chart-line[data-line="4"] .landolt-c{width:3rem;height:3rem}.chart-line[data-line="5"] .landolt-c{width:2.5rem;height:2.5rem}.chart-line[data-line="6"] .landolt-c{width:2rem;height:2rem}.chart-line[data-line="7"] .landolt-c{width:1.75rem;height:1.75rem}.chart-line[data-line="8"] .landolt-c{width:1.5rem;height:1.5rem}.chart-line[data-line="9"] .landolt-c{width:1.25rem;height:1.25rem}.chart-line[data-line="10"] .landolt-c{width:1rem;height:1rem}}.number{color:var(--text-color);-webkit-user-select:none;user-select:none;letter-spacing:.1em;font-family:Courier New,monospace;font-weight:700}.help-overlay,.modal-overlay{background-color:#00000080;justify-content:center;align-items:center;padding:1rem;display:none;position:fixed;inset:0}.help-overlay{z-index:1000}.modal-overlay{z-index:2000}.help-overlay.visible,.modal-overlay.visible{display:flex}.help-content,.modal-content{border:1px solid var(--border);border-radius:var(--radius-xl);background-color:var(--card);width:100%;max-width:32rem;max-height:90dvh;color:var(--card-foreground);flex-direction:column;gap:1rem;padding:1.5rem;display:flex;overflow-y:auto;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}.help-content h2,.modal-content h2{letter-spacing:-.01em;font-size:1.125rem;font-weight:600;line-height:1.5rem}.modal-content>p{color:var(--muted-foreground);margin-top:-.5rem;font-size:.875rem}.help-content li{font-size:.9375rem}.help-content:focus{outline:none}.help-content li>span:first-child{min-width:6.5rem}.help-content>p{border-top:1px solid var(--border);color:var(--muted-foreground);padding-top:1rem;font-size:.875rem}.form-group{flex-direction:column;gap:.5rem;display:flex}.preset-preview{border:1px solid var(--border);border-radius:var(--radius-md);background-color:var(--muted);padding:.75rem 1rem}.preset-preview h3{color:var(--muted-foreground);margin-bottom:.5rem;font-size:.875rem;font-weight:500}.preset-preview ul{gap:.25rem;display:grid}.preset-preview li{font-size:.875rem}.preset-preview strong,.preset-item-details strong{color:var(--muted-foreground);font-weight:500}.modal-actions{justify-content:flex-end;gap:.5rem;margin-top:.5rem;display:flex}.presets-list{flex-direction:column;gap:.5rem;max-height:400px;display:flex;overflow-y:auto}.preset-item{border:1px solid var(--border);border-radius:var(--radius-lg);background-color:var(--card);padding:.75rem 1rem}.preset-item-header{justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.25rem;display:flex}.preset-item-name{overflow-wrap:anywhere;font-weight:600}.preset-item-actions{gap:.25rem;display:flex}.preset-item-actions .delete-btn{color:var(--destructive)}.preset-item-actions .delete-btn:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.preset-item-actions .delete-btn:hover{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.preset-item-actions .delete-btn:hover{color:var(--destructive)}.preset-item-details{color:var(--foreground);flex-wrap:wrap;gap:.25rem 1rem;font-size:.8125rem;display:flex}.empty-presets{border:1px dashed var(--input);border-radius:var(--radius-lg);color:var(--muted-foreground);text-align:center;padding:2rem 1rem;font-size:.875rem}.calibration-content{max-width:36rem}.calibration-steps{flex-direction:column;gap:.75rem;display:flex}.calibration-step{border:1px solid var(--border);border-radius:var(--radius-lg);gap:.75rem;padding:1rem;display:flex}.calibration-step>div{flex:1;min-width:0}.ec-step-num{background-color:var(--accent);width:1.75rem;height:1.75rem;color:var(--accent-foreground);border-radius:9999px;flex-shrink:0;justify-content:center;align-items:center;font-size:.875rem;font-weight:600;display:inline-flex}.calibration-step h3{margin-bottom:.25rem;font-size:.9375rem;font-weight:600;line-height:1.75rem}.calibration-step p{color:var(--muted-foreground);font-size:.875rem}.calibration-step strong{color:var(--foreground);font-weight:600}.calibration-step .tip{border-radius:var(--radius-md);background-color:var(--muted);margin-top:.75rem;padding:.5rem .75rem;font-size:.8125rem}.calibration-controls{justify-content:center;align-items:center;gap:1rem;margin-top:.75rem;display:flex}.calibration-zoom-level{font-variant-numeric:tabular-nums;text-align:center;min-width:4rem;font-size:1.25rem;font-weight:600}@media (width<=768px){.ec-layout{flex-direction:column}.controls{border-right:none;border-bottom:1px solid var(--border);width:100%;max-height:45%;padding:1rem}.chart-container{flex:auto;min-height:0;padding:1rem}.chart{gap:1rem}.chart-line{flex-direction:column;gap:.5rem}.acuity-label{text-align:center}.modal-content,.help-content{padding:1.25rem}.modal-actions{flex-direction:column-reverse}.modal-actions .btn{width:100%}.calibration-controls{flex-wrap:wrap}.preset-item-header{flex-direction:column;align-items:flex-start;gap:.5rem}}.tv-mode-banner{background-color:var(--primary);min-height:4rem;color:var(--primary-foreground);z-index:3000;flex-wrap:wrap;flex-shrink:0;justify-content:space-between;align-items:center;gap:.5rem 1rem;padding:.5rem 2rem;display:none}body.tv-mode .tv-mode-banner{display:flex}.tv-mode-banner__text{align-items:center;gap:.75rem;font-size:1.125rem;font-weight:500;display:inline-flex}.tv-mode-banner__text svg{flex-shrink:0;width:1.5rem;height:1.5rem}.btn-banner{background-color:var(--primary-foreground);min-height:3rem;color:var(--primary);font-size:1rem}.btn-banner:hover{background-color:var(--accent);color:var(--accent-foreground)}body.tv-mode{overflow:hidden}body.tv-mode .ec-layout{flex-direction:column}@media (width<=640px){.tv-mode-banner{padding:.5rem 1rem}}body.tv-mode .controls{background-color:var(--card);border-top:1px solid var(--border);z-index:1000;border-right:none;flex-shrink:0;order:1;width:100%;height:auto;max-height:40vh;padding:1.25rem 2rem;overflow-y:auto;box-shadow:0 -8px 24px -8px #00000026}body.tv-mode .controls-content{grid-template-columns:repeat(auto-fit,minmax(250px,1fr));align-items:end;gap:1.25rem;max-width:1400px;margin:0 auto;display:grid}body.tv-mode .ec-sidebar-head{text-align:center;grid-column:1/-1}body.tv-mode .ec-sidebar-head p,body.tv-mode .controls-content>.ec-section-title,body.tv-mode .ec-sep,body.tv-mode .instructions,body.tv-mode .tv-mode-toggle{display:none}body.tv-mode .chart-container{flex:auto;justify-content:safe center;align-items:safe center;min-height:0;padding:1rem}body.tv-mode .chart-line{margin:.5rem 0}body.tv-mode .preset-section{grid-column:1/-1}body.tv-mode .preset-actions{flex-flow:wrap}body.tv-mode .preset-actions .btn{flex:200px;width:auto}body.tv-mode .preset-buttons{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.5rem;display:grid}body.tv-mode .controls .btn,body.tv-mode .controls .select,body.tv-mode .preset-btn{height:auto;min-height:3.5rem;font-size:1.125rem}body.tv-mode .zoom-controls .btn-icon{width:3.5rem;height:3.5rem}body.tv-mode .ec-ico:before,body.tv-mode .controls .btn svg{width:1.25rem;height:1.25rem}body.tv-mode .label{font-size:1rem}body.tv-mode .modal-content{max-width:80vw;max-height:70vh}body.tv-mode .modal-content .btn,body.tv-mode .modal-content .input{min-height:3.5rem;font-size:1.125rem}body.tv-mode button,body.tv-mode select,body.tv-mode input,body.tv-mode .preset-btn{cursor:pointer;position:relative}body.tv-mode button:focus,body.tv-mode select:focus,body.tv-mode input:focus,body.tv-mode .preset-btn:focus{outline:4px solid var(--primary);outline-offset:3px;box-shadow:0 0 0 10px var(--primary)}@supports (color:color-mix(in lab, red, red)){body.tv-mode button:focus,body.tv-mode select:focus,body.tv-mode input:focus,body.tv-mode .preset-btn:focus{box-shadow:0 0 0 10px color-mix(in oklab, var(--primary) 22%, transparent)}}body.tv-mode button:focus,body.tv-mode select:focus,body.tv-mode input:focus,body.tv-mode .preset-btn:focus{z-index:10;transform:scale(1.03)}.chart-container:focus-visible{outline:2px solid var(--ring);outline-offset:-4px}body.tv-mode .chart-container:focus{outline:4px solid var(--primary);outline-offset:-6px}body.tv-mode .tv-mode-banner button:focus{outline-color:var(--primary-foreground);box-shadow:0 0 0 10px #ffffff4d}body.tv-mode button:active,body.tv-mode .preset-btn:active{transform:scale(.97)}body.tv-mode .controls::-webkit-scrollbar{width:8px}body.tv-mode .controls::-webkit-scrollbar-track{background:0 0}body.tv-mode .controls::-webkit-scrollbar-thumb{background:var(--input);border-radius:4px}body.tv-mode .modal-overlay.visible{z-index:4000}@media print{body{background:#fff;height:auto;overflow:visible}.site-header,.controls,.ec-floating,.tv-mode-banner,.help-overlay,.help-overlay.visible,.modal-overlay.visible{display:none}.chart-container{width:100%;padding:2rem}.chart-line{page-break-inside:avoid;opacity:1!important}.letter{color:#000!important}}@media (prefers-contrast:high){:root{--bg-color:#fff;--text-color:#000}}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
