.ray-graph-stage{position:relative}.ray-overlay{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;-webkit-user-select:none;user-select:none}.ray-overlay-scrub{pointer-events:auto}.ray-overlay-active{pointer-events:auto;touch-action:none;cursor:crosshair}.ray-overlay-active .tangent-anchor{cursor:ew-resize}.tangent-direction{cursor:grab}.tangent-preview .tangent-direction{cursor:grabbing}.tangent-probe{stroke:#899f94;stroke-width:1.4;stroke-dasharray:4 5;opacity:.65}.developer-tools{position:fixed;z-index:30;bottom:max(12px,env(safe-area-inset-bottom));left:50%;transform:translate(-50%);width:min(600px,calc(100% - 24px));display:flex;align-items:center;gap:18px;padding:9px 10px 9px 16px;border:1px solid #d9dfd5;border-radius:10px;background:#fbfcfa;box-shadow:0 4px 22px #34413918;font-size:12px}.developer-strength{flex:1;min-width:0;display:grid;grid-template-columns:auto minmax(60px,1fr) 4ch;align-items:center;gap:10px}.developer-strength input{width:100%;min-width:0;height:28px;margin:0;accent-color:#4a7655;cursor:pointer}.developer-strength output{text-align:right;font-variant-numeric:tabular-nums;color:var(--muted)}.developer-answer{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;cursor:pointer}.developer-answer input{width:15px;height:15px;margin:0;accent-color:#4a7655;cursor:pointer}.developer-tools-close{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:32px;height:32px;padding:0;border-radius:5px;color:var(--muted);font-size:22px;line-height:1}.developer-tools-spacer{height:76px}@media(max-width:520px){.developer-tools{flex-wrap:wrap;gap:6px 18px;padding:10px 12px}.developer-strength{flex-basis:100%}.developer-tools-close{margin-left:auto}.developer-tools-spacer{height:112px}}.studio-workspace{max-width:1700px;padding:30px 34px 38px;min-height:calc(100svh - 64px)}.lab-heading{margin:0 0 12px}.lab-heading h1{margin:0;font-size:19px;line-height:1.4}.tutorial-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;max-width:650px}.tutorial-cue{width:210px;height:56px;flex-shrink:0;fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.5}.cue-axis{stroke:#c2cbbd;stroke-width:1}.cue-source{stroke:#718273}.cue-measure{stroke:#b78c59;stroke-dasharray:3 3;stroke-width:1.5}.cue-point{fill:#b78c59}.cue-arrow{stroke:#87927d;stroke-width:1.5}.cue-draft{stroke:#3f6d9c}.cue-erased{stroke:#3f6d9c;opacity:.2;stroke-dasharray:3 5}.cue-frontier{stroke:#b78c59;stroke-dasharray:3 5;stroke-width:1}.cue-output{stroke:#c18447}.cue-target{stroke:#c18447;stroke-dasharray:3 3;stroke-width:1.5}.studio-layout{display:grid;grid-template-columns:minmax(0,1fr) 202px;gap:26px;align-items:start}.studio-main{min-width:0}.studio-workspace .graph-pair{margin:0;padding:15px 0 18px;grid-template-columns:minmax(0,1fr) 24px minmax(0,1fr);align-items:start}.studio-workspace .graph-relation{transform:rotate(180deg);align-self:center;margin-top:-34px;color:#b49a74}.studio-workspace .plot-label{margin:0 4% 12px 7.7%;gap:8px;font-style:normal;font-size:14px;font-weight:500;min-height:32px;align-items:start}.studio-workspace .function-label{font:italic 23px/1 Georgia,serif}.checkpoint-progress{display:flex;align-items:center;gap:6px}.checkpoint-dot{display:grid;place-items:center;width:16px;height:16px;border:1px dashed #b78c59;border-radius:50%;color:#4b765d}.checkpoint-dot.hit{border:1px solid #6e987f;background:#6e987f15}.studio-workspace .grid-line{stroke:#e6e9e2;stroke-width:.8}.studio-workspace .axis-line{stroke:#bdc6b7;stroke-width:1.2}.studio-workspace .axis-label{font-size:11px;fill:#8a9382}.occupied-space{fill:#adc4d5;opacity:.095;pointer-events:none}.drawing-frontier{stroke:#6386a3;stroke-width:1.3;stroke-dasharray:5 5;opacity:.6}.drawing-frontier.correcting{stroke:#b47a47;stroke-width:2}.scrub-line{stroke:#af9374;stroke-width:1.6;stroke-dasharray:4 6;pointer-events:none}.marker-label{fill:#847054;font-family:inherit;font-size:13px;font-weight:500}.output-graph{position:relative}.result-lock{position:absolute;top:12px;right:5%;display:flex;align-items:center;gap:5px;padding:5px 8px;background:#fbfbfae8;color:#8b745a;border:1px solid #e5ddcf;border-radius:30px;font-size:10px;pointer-events:none}.attempt-finished .output-graph{animation:finalize .7s ease both}.attempt-finished .output-graph:after{content:"";position:absolute;inset:4% 4% 8% 8%;pointer-events:none;background:linear-gradient(110deg,transparent 25%,#fff8 48%,transparent 68%);background-size:280% 100%;animation:final-sheen 1.2s ease-out both}@keyframes finalize{0%{transform:scale(1)}38%{transform:scale(.965)}to{transform:scale(.985)}}@keyframes final-sheen{0%{background-position:130% 0;opacity:1}to{background-position:-40% 0;opacity:0}}.studio-controls{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;border-top:1px solid #e3e7dd;padding:18px 0 0;gap:14px;margin:0 2.3%}.drawing-controls{display:flex;align-items:center;gap:6px}.secondary-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:9px 11px;min-height:36px;border-radius:5px;border:1px solid #dce1d5;font-size:12px;white-space:nowrap}.join-control{font-size:10px;color:#8a9283;display:grid;gap:2px;padding-left:8px;border-left:1px solid #e0e5d9}.join-control select{border:0;background:transparent;color:#5f6f5b;font-size:11px;padding:2px 18px 2px 0;max-width:100px;cursor:pointer}.studio-controls .main-action{gap:12px}.studio-controls .match-score{display:grid;gap:2px;font-size:10px}.studio-controls .match-score strong{font-weight:500;font-size:21px;color:#4e6852}.building-status{font-size:12px;color:#ad824e}.review-note{display:flex;align-items:center;justify-content:center;gap:9px;color:#7f8377;font-size:11px;line-height:1.5;margin:20px 3% 0}.review-note svg{flex-shrink:0}.heatmap-key{display:flex;gap:6px;justify-content:center;align-items:center;color:#8a9084;font-size:10px;margin-top:14px}.heatmap-key>span{width:7px;height:7px;border-radius:50%;margin-left:10px}.key-close{background:#87a491}.key-near{background:#c2a677}.key-far{background:#c48f83}.download-notice{text-align:center;font-size:11px;color:#6d7a63;margin:12px 0 0}.export-text{display:block;width:94%;height:180px;margin:12px auto;padding:12px;font:11px/1.5 ui-monospace,monospace;color:#55684d;background:#f6f8f3;border:1px solid #dce3d3;border-radius:5px;resize:vertical}.attempt-history{border-left:1px solid #e1e6db;padding:18px 0 0 20px}.history-heading{display:flex;justify-content:space-between;align-items:center}.history-heading h2{margin:0;font-size:13px;font-weight:500}.history-heading>span{color:#96a08b;font-size:11px}.attempt-history ol{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:10px;max-height:58vh;overflow-y:auto}.attempt-card{border:1px solid #dfe4d7;border-radius:8px;padding:12px;width:100%;background:#f7f8f4;text-align:left;animation:archive-entry .4s ease-out both}.attempt-card.selected{border-color:#a4b494;background:#eff3e9}.attempt-card-heading{display:flex;align-items:center;justify-content:space-between;font-size:11px}.attempt-card svg{display:block;width:100%;margin:5px 0;overflow:hidden}.attempt-card-score{font-size:9px;color:#869079;line-height:1.5}.lock-mark{color:#93a085;font-size:10px}.archive-banner{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:5px;background:#eef2e8;font-size:11px}.archive-banner button{display:inline-flex;align-items:center;gap:5px;font-size:11px;padding:5px}@keyframes archive-entry{0%{opacity:0;transform:translateY(-8px) scale(.96)}to{opacity:1;transform:none}}@media(min-width:1500px){.studio-workspace{padding:40px 48px}.studio-layout{grid-template-columns:minmax(0,1fr) 220px;gap:36px}}@media(max-width:1150px){.studio-layout{grid-template-columns:minmax(0,1fr) 168px;gap:16px}.studio-workspace{padding:24px 20px}.attempt-history{padding-left:14px}.studio-controls{gap:10px}.studio-controls .main-action{gap:8px}}@media(max-width:900px){.studio-layout{grid-template-columns:1fr}.attempt-history{border-left:0;border-top:1px solid #e1e6db;padding:18px 0 0;min-height:0}.attempt-history ol{display:flex;overflow-x:auto;max-height:none}.attempt-history li{width:180px;flex-shrink:0}.studio-workspace .graph-pair{max-width:none;width:100%;grid-template-columns:minmax(0,1fr) 20px minmax(0,1fr)}}@media(max-width:580px){.studio-workspace{padding:20px 14px}.tutorial-heading{gap:10px}.tutorial-heading h1{font-size:17px}.tutorial-cue{width:150px;height:44px}.studio-workspace .graph-pair{grid-template-columns:1fr;gap:24px}.studio-workspace .graph-relation{display:none}.studio-workspace .plot-label{margin-bottom:2px}.studio-controls{justify-content:center}.heatmap-key{font-size:9px}}@media(prefers-reduced-motion:reduce){.attempt-finished .output-graph,.attempt-card{animation:none}.attempt-finished .output-graph:after{display:none}}.studio-home{width:min(980px,100%);margin:0 auto;padding:48px 36px 72px}.studio-heading{max-width:600px;margin-bottom:42px}.studio-heading h1{margin:0;font-size:clamp(28px,4vw,34px);font-weight:450;letter-spacing:-.035em;line-height:1.2}.studio-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-top:18px}.studio-section-heading h2{margin:0 0 7px;font-size:18px;font-weight:450}.activity-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;list-style:none;margin:22px 0 34px;padding:0}.activity-card{display:flex;flex-direction:column;min-width:0;padding:21px 20px 15px;border:1px solid #dce2d8;border-radius:8px;background:#f5f7f2}.activity-card-top{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:28px}.activity-number{color:#62745d;font-size:13px;font-variant-numeric:tabular-nums}.activity-status{color:var(--muted);font-size:10px}.activity-card h3{margin:0;font-size:16px;font-weight:500;line-height:1.4}.activity-link{display:flex;align-items:center;justify-content:space-between;gap:8px;width:calc(100% + 12px);min-height:40px;margin:auto -6px 0;padding:9px 6px;border-radius:4px;text-align:left;font-size:inherit;font-weight:inherit}.practice-library{border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.practice-library>summary{display:flex;align-items:center;gap:15px;min-height:64px;padding:16px 4px;list-style:none;cursor:pointer;font-size:14px}.practice-library>summary::-webkit-details-marker{display:none}.practice-library-count{margin-left:auto;color:var(--muted);font-size:12px}.practice-library[open]>summary>svg{transform:rotate(90deg)}.practice-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:40px;padding:12px 4px 24px}.practice-columns h3{margin:0 0 8px;color:var(--muted);font-size:11px;font-weight:500}.practice-columns ul{list-style:none;margin:0;padding:0}.practice-link{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:42px;padding:10px 8px;border-radius:4px;text-align:left;font-size:13px}.practice-link-status{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:11px}@media(max-width:700px){.studio-home{padding:30px 22px 48px}.studio-heading{margin-bottom:38px}.activity-grid{grid-template-columns:1fr;gap:12px}.activity-card{padding:17px 20px 11px}.activity-card-top{margin-bottom:15px}.practice-columns{gap:20px}}@media(max-width:380px){.practice-columns{grid-template-columns:1fr}}.workspace.compression-challenge{width:100%;min-height:0}.compression-prompt{margin:0 auto 4px;color:var(--muted);font-size:13px;text-align:center}.compression-challenge .compression-pair{margin:16px 0 0;padding-top:20px;padding-bottom:18px}.compression-transform{position:relative}.compression-tangents{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.compression-original-tangent{fill:none;stroke-width:2;stroke-dasharray:5 6;opacity:.45}.compression-domain,.compression-target-key,.compression-source-key{font-size:12px;font-style:normal;white-space:nowrap}.compression-domain{color:var(--muted)}.compression-target-key{color:#718273}.compression-target-key:before,.compression-source-key:before{content:"";display:inline-block;width:18px;margin:0 5px 3px 0;border-top:2px solid currentColor}.sketch-plot .plot-label>.compression-source-key{color:#84928a}.compression-source-key:before{border-top-style:dashed}.compression-inspector{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px 18px;margin:0 7.7% 18px}.compression-factor{display:flex;align-items:center;gap:10px;font-size:13px}.compression-factor>span{font-family:Georgia,serif;font-style:italic;font-size:17px}.compression-factor input{width:min(180px,31vw);accent-color:#435b49}.compression-factor output{min-width:31px;font-variant-numeric:tabular-nums}.compression-slopes{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 16px;font-size:12px;font-variant-numeric:tabular-nums}.compression-controls{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px;margin:0 3.7% 0 7.7%}@media(max-width:650px){.compression-pair{padding-top:18px;padding-bottom:12px;margin-inline:auto}.compression-pair .plot-label{gap:10px}.compression-pair>.plot+.plot{margin-top:20px}.compression-inspector{margin-inline:0}.compression-slopes{width:100%}.compression-controls{gap:8px;margin-inline:0}}.activity-navigation{display:flex;align-items:center;justify-content:space-between;gap:20px;width:min(1200px,100%);margin:18px auto 0;padding:0 36px}.activity-navigation .text-button{display:inline-flex;align-items:center;gap:6px;font-size:12px}.activity-step-dots{display:flex;align-items:center;gap:8px}.activity-step-dots span{width:7px;height:7px;border-radius:50%;background:#dce2d8}.activity-step-dots span.visited{background:#a6b29f}.activity-step-dots span.current{background:#476e55;box-shadow:0 0 0 4px #e7ece3}.activity-instruction{margin:5px 0 0;color:var(--muted);font-size:13px}@media(max-width:700px){.activity-navigation{padding:0 22px}}@font-face{font-family:DM Sans Variable;font-style:normal;font-display:swap;font-weight:100 1000;src:url(./dm-sans-latin-ext-wght-normal-BOFOeGcA.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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}@font-face{font-family:DM Sans Variable;font-style:normal;font-display:swap;font-weight:100 1000;src:url(./dm-sans-latin-wght-normal-Xz1IZZA0.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{font-family:DM Sans Variable,system-ui,sans-serif;color:#344139;background:#fbfbfa;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;font-weight:400;--muted: #667269;--line: #e5e8e3}*{box-sizing:border-box}body{margin:0;min-width:320px;-webkit-user-select:none;user-select:none}input,textarea,[contenteditable=true]{-webkit-user-select:text;user-select:text}button,input,select{font:inherit}button,summary{-webkit-tap-highlight-color:transparent}button{color:inherit;cursor:pointer}button:disabled{opacity:.38;cursor:default}button,summary,input,select{outline-offset:4px}:focus-visible{outline:2px solid #3f6d9c}button{border:0;background:none}button:hover:not(:disabled),summary:hover{background-color:#edf0eb}button svg,summary svg{flex-shrink:0}.app-header{height:64px;padding:0 30px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center}.app-symbol{font-family:Georgia,serif;font-style:italic;font-size:24px;padding-left:10px}.header-end{justify-self:end}.home-button{display:inline-flex;align-items:center;gap:8px;padding:9px 10px;border-radius:5px;font-size:13px}.level-label{font-size:12px;letter-spacing:.06em;color:var(--muted);font-variant-numeric:tabular-nums}.icon-button{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:5px;padding:0;color:#6e7971}.icon-button[aria-pressed=true]{background:#e9eee7;color:#344139}.text-button{padding:10px;font-size:13px;border-radius:4px;color:var(--muted)}.workspace{max-width:1400px;margin:0 auto;min-height:calc(100svh - 64px);display:flex;flex-direction:column;padding:32px 48px 44px}.task-heading{text-align:center;min-height:76px}h1{font-size:21px;line-height:1.4;font-weight:400;margin:0 0 18px}.graph-pair{display:grid;grid-template-columns:minmax(0,1fr) 44px minmax(0,1fr);align-items:center;margin:auto 0;padding:28px 0 36px}.plot{min-width:0}.plot-label{margin:0 3.7% 10px 7.7%;display:flex;justify-content:space-between;align-items:center;font-size:17px;font-style:italic}.plot-label output{font-size:12px;font-style:normal;font-variant-numeric:tabular-nums;color:var(--muted)}.sketch-plot .plot-label>span{color:#3f6d9c}.ray-entry{padding:5px 9px;margin:-5px 0;border:1px solid #ccd5c7;border-radius:4px;font-size:12px;font-style:normal;color:#435b49}.ray-workspace .graph-pair{align-items:start}.ray-workspace .graph-relation{align-self:center}.ray-target-waiting{opacity:.55}.graph-relation{justify-self:center;color:#a8b1a5}.graph-container{width:100%}.graph-container svg{display:block;width:100%;overflow:visible;-webkit-user-select:none;user-select:none}.graph-interactive svg{touch-action:none;cursor:crosshair}.grid-line{stroke:#e9ece6;stroke-width:.8}.axis-line{stroke:#b7c0b3;stroke-width:1}.axis-label{fill:#687560;font-size:12px;font-family:inherit}.axis-name{fill:#687560;font-size:13px;font-style:italic}.probe-handle{cursor:grab}.probe-handle:active{cursor:grabbing}.probe-handle:focus-visible{outline:2px solid #3f6d9c}.probe-pulse{animation:pulse 2s ease-in-out infinite;transform-box:fill-box;transform-origin:center}@keyframes pulse{0%,to{opacity:.25;transform:scale(.8)}50%{opacity:.8;transform:scale(1.08)}}.control-area{width:100%;max-width:780px;margin:0 auto;min-height:88px}.single-action{display:flex;justify-content:center;min-height:42px}.action-bar{display:flex;align-items:center;gap:16px;justify-content:center;min-height:42px}.sketch-tools,.main-action{display:flex;align-items:center;gap:5px}.main-action:empty{display:none}.main-action{gap:18px}.tool-divider{height:20px;width:1px;background:var(--line);margin:0 6px}.primary-button{display:inline-flex;gap:12px;align-items:center;justify-content:center;min-height:40px;padding:10px 17px;border-radius:5px;background:#435b49;color:#fff;font-size:13px}.primary-button:hover:not(:disabled){background:#344b3b}.match-score{color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums}.point-editor{display:flex;justify-content:center;gap:22px;align-items:center;margin-top:20px;font-size:13px;color:var(--muted)}.point-editor label{display:flex;align-items:center;gap:7px}.point-editor input,.point-editor select{color:#344139;width:72px;border:0;border-bottom:1px solid #bcc5b7;border-radius:0;background:transparent;padding:6px 4px}.context-note{font-size:13px;line-height:1.6;color:var(--muted);text-align:center;max-width:560px;margin:22px auto 0}.math-note{font-size:12px;text-align:center;margin:18px 0 0;color:var(--muted)}.popover{position:relative}.popover summary{list-style:none;cursor:pointer}.popover summary::-webkit-details-marker{display:none}.popover-panel{position:absolute;z-index:5;right:0;top:calc(100% + 8px);min-width:180px;padding:5px;background:#fbfbfa;border:1px solid #dce1d8;border-radius:6px;box-shadow:0 5px 20px #3441390d}.popover-panel button{display:block;width:100%;text-align:left;border-radius:3px;padding:10px 12px;font-size:13px;white-space:nowrap}.tool-popover .popover-panel{bottom:calc(100% + 8px);top:auto}.dialog{border:1px solid #e2e6df;border-radius:8px;width:min(480px,calc(100vw - 32px));max-height:calc(100dvh - 48px);padding:24px;color:inherit;background:#fbfbfa}.dialog::backdrop{background:#24322738}.dialog-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.dialog-header h2{font-size:18px;font-weight:500;margin:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;z-index:10;top:-60px;left:20px;padding:12px;background:#fff;color:#344139}.skip-link:focus{top:8px}@media(min-width:1600px){.workspace{padding-top:52px;padding-bottom:72px}}@media(max-width:850px){.workspace{padding:24px 20px 26px}.graph-pair{grid-template-columns:minmax(0,1fr) 24px minmax(0,1fr)}}@media(max-width:650px){.app-header{height:48px;padding:0 14px}.workspace{min-height:calc(100svh - 48px);padding:14px 14px 24px}.task-heading{min-height:62px}h1{font-size:18px;margin-bottom:14px}.graph-pair{grid-template-columns:1fr;gap:5px;width:100%;max-width:470px;align-self:center;padding:14px 0 24px}.graph-relation{display:none}.plot-label{margin-bottom:0;font-size:15px}.plot+.plot{margin-top:10px}.control-area{min-height:62px}.action-bar{gap:10px;flex-wrap:wrap}.icon-button{width:36px;height:38px}.main-action{gap:10px}.tool-divider{margin:0 3px}.primary-button{padding:10px 13px}.point-editor{margin-top:14px}.dialog{padding:18px}}@media(prefers-reduced-motion:reduce){.probe-pulse{animation:none}.graph-guide-motion{display:none}}
