:root{--font-primary: "Outfit", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-comic: "Playpen Sans", cursive, sans-serif;--bg-app: #f0f4f8;--bg-card: #ffffff;--bg-board: #fdfdfb;--border-color: #cbd5e1;--text-primary: #1e293b;--text-secondary: #64748b;--primary: #4f46e5;--primary-light: #e0e7ff;--success: #059669;--success-light: #d1fae5;--danger: #e11d48;--danger-light: #ffe4e6;--accent: #f59e0b;--grid-size: 20px;--grid-color: rgba(99, 102, 241, .08);--margin-color: rgba(225, 29, 72, .4);--draw-line: #312e81;--draw-point: #4f46e5;--draw-hover: #f43f5e;--draw-construction: #94a3b8;--shadow-sm: 0 1px 3px rgba(0,0,0,.1);--shadow-md: 0 4px 6px -1px rgba(0,0,0,.1), 0 2px 4px -1px rgba(0,0,0,.06);--shadow-lg: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -2px rgba(0,0,0,.05);--shadow-xl: 0 20px 25px -5px rgba(0,0,0,.1), 0 10px 10px -5px rgba(0,0,0,.04);--radius-sm: 8px;--radius-md: 16px;--radius-lg: 24px;--transition-fast: .15s ease;--transition-normal: .3s ease}[data-theme=dark]{--bg-app: #0f172a;--bg-card: #1e293b;--bg-board: #111d17;--border-color: #334155;--text-primary: #f8fafc;--text-secondary: #94a3b8;--primary: #818cf8;--primary-light: rgba(129, 140, 248, .15);--success: #34d399;--success-light: rgba(52, 211, 153, .15);--danger: #f87171;--danger-light: rgba(248, 113, 113, .15);--accent: #fbbf24;--grid-size: 20px;--grid-color: rgba(255, 255, 255, .05);--margin-color: rgba(251, 191, 36, .2);--draw-line: #ffffff;--draw-point: #60a5fa;--draw-hover: #f43f5e;--draw-construction: #64748b}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-primary);background-color:var(--bg-app);color:var(--text-primary);line-height:1.5;min-height:100vh;min-height:100svh;display:flex;flex-direction:column;overflow-x:clip;transition:background-color var(--transition-normal),color var(--transition-normal);box-sizing:border-box}strong{font-weight:700}.app-container{max-width:1440px;width:100%;margin:0 auto;padding:20px;display:flex;flex-direction:column;gap:20px;flex:1;min-width:0;overflow-x:clip}.app-header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;min-width:0;background:var(--bg-card);padding:16px 28px;border-radius:var(--radius-md);box-shadow:var(--shadow-md);border:1px solid var(--border-color);transition:background-color var(--transition-normal),border-color var(--transition-normal)}.header-logo{display:flex;align-items:center;gap:16px;min-width:0;flex:1 1 auto}.logo-icon{color:var(--primary);filter:drop-shadow(0 2px 8px rgba(79,70,229,.3));animation:rotateLogo 8s linear infinite}@keyframes rotateLogo{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.header-text h1{font-size:1.5rem;font-weight:800;letter-spacing:-.5px;color:var(--text-primary);line-height:1.15}.header-text p{font-size:.85rem;color:var(--text-secondary);font-family:var(--font-primary)}.header-controls{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:12px;max-width:100%;flex:1 1 auto;min-width:0}.icon-btn{background:var(--bg-app);border:1px solid var(--border-color);color:var(--text-primary);width:44px;height:44px;border-radius:var(--radius-sm);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast);position:relative}.icon-btn:hover{background:var(--primary-light);color:var(--primary);border-color:var(--primary);transform:translateY(-2px)}.icon-btn:active{transform:translateY(0)}.hidden{display:none!important}.tooltip:after{content:attr(data-tooltip);position:absolute;bottom:-35px;left:50%;transform:translate(-50%) scale(.9);background:#1e293b;color:#fff;padding:4px 8px;border-radius:4px;font-size:.75rem;white-space:nowrap;opacity:0;pointer-events:none;transition:all var(--transition-fast);box-shadow:var(--shadow-sm);z-index:10}.tooltip:hover:after{opacity:1;transform:translate(-50%) scale(1);bottom:-40px}.app-main{display:grid;grid-template-columns:var(--app-sidebar-width, 360px) 1fr;gap:20px;flex:1;min-height:550px;align-items:start}@media(max-width:968px){body:not(.learning-playback-expanded-active){height:100svh;min-height:100svh;max-height:100svh;overflow:hidden}.app-container{height:100%;min-height:0;padding:10px 12px;gap:10px;overflow:hidden}.app-header{flex-shrink:0;padding:10px 14px}.app-main{grid-template-columns:1fr;display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.task-card{order:1;width:100%;flex:0 0 auto}.sidebar-actions-bar{order:2;width:100%;gap:10px;flex-shrink:0;align-self:flex-start;position:-webkit-sticky;position:sticky;top:0;z-index:90;padding:10px 0 12px;background:var(--bg-app);border-bottom:1px solid var(--border-color);box-shadow:var(--shadow-md);max-height:min(42vh,320px);overflow:hidden}.canvas-section{order:3;width:100%;flex:1;min-height:0;overflow:hidden;gap:6px}.board-workspace{flex:1;min-height:0;display:flex;flex-direction:column}.board-container{min-height:0;flex:1;width:100%}.sidebar-actions-bar .helper-card{padding:12px 14px;flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.sidebar-actions-bar .helper-content h3{font-size:.95rem}.sidebar-actions-bar .helper-content p{font-size:.8rem}.sidebar-actions-bar .controls-card{flex-shrink:0}.sidebar-actions-bar .print-assignment-btn{width:40px;height:40px}.sidebar-actions-bar .print-assignment-btn svg{width:18px;height:18px}body[data-app-mode=learning] .task-card-title-desktop{display:none}body[data-app-mode=learning] .task-list-toggle{display:flex;pointer-events:none;cursor:default;padding-bottom:6px;margin-bottom:8px}body[data-app-mode=learning] .task-list-toggle-hint,body[data-app-mode=learning] .task-list-chevron{display:none}body[data-app-mode=learning] .solution-step-mobile{display:block}body[data-app-mode=learning].learning-playback-expanded-active .task-card .task-list-panel{display:none!important}body[data-app-mode=learning] .task-card{padding:10px 12px}body[data-app-mode=learning] .solution-step-mobile-body{padding:8px 10px}body[data-app-mode=learning] .task-list-toggle{padding-bottom:4px;margin-bottom:4px}body[data-app-mode=learning] .canvas-section{order:2}body[data-app-mode=learning] .sidebar-actions-bar{order:3;position:static;max-height:none;padding:4px 0 0;border-bottom:none;box-shadow:none;background:transparent}body[data-app-mode=learning] .controls-card .btn{padding:8px 14px;font-size:.82rem}body[data-app-mode=test] .submit-btn{margin-left:0}body[data-app-mode=learning] .board-container{min-height:0}body[data-app-mode=test] .sidebar-actions-bar{max-height:min(33.6vh,256px);overflow-y:auto}body[data-app-mode=test] .board-container{min-height:0}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-bottom-actions--sidebar{display:flex;flex-direction:column;align-items:stretch;gap:8px;width:100%;padding:0 0 8px}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-bottom-actions--sidebar .learning-dsl-btn,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-bottom-actions--sidebar .solve-btn{position:static;top:auto;right:auto;transform:none;width:100%;justify-content:center}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-bottom-actions--sidebar .solve-btn:hover{transform:scale(1.02)}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-bottom-actions--sidebar .solve-btn:active{transform:scale(.98)}body[data-app-mode=learning] .learning-bottom-actions:not(.learning-bottom-actions--sidebar){display:flex;flex-direction:column;align-items:center;gap:8px;width:100%}body[data-app-mode=learning] .learning-bottom-actions:not(.learning-bottom-actions--sidebar) .solve-btn{position:static;top:auto;right:auto;transform:none}body[data-app-mode=learning] .learning-bottom-actions:not(.learning-bottom-actions--sidebar) .solve-btn:hover{transform:scale(1.05)}body[data-app-mode=learning] .learning-bottom-actions:not(.learning-bottom-actions--sidebar) .solve-btn:active{transform:scale(.98)}.learning-enlarge-btn,.learning-shrink-btn,.learning-playback-back-btn{display:none!important}.learning-enlarge-btn{position:absolute;bottom:16px;left:50%;transform:translate(-50%);z-index:40;display:inline-flex;align-items:center;gap:8px;padding:10px 22px;border:none;border-radius:999px;background:#1c1c24e6;color:#fff;font-family:inherit;font-size:.9rem;font-weight:600;box-shadow:0 4px 18px #00000047;cursor:pointer;pointer-events:auto}.learning-enlarge-btn:active{transform:translate(-50%) scale(.97)}.learning-shrink-btn{position:absolute;bottom:16px;left:50%;transform:translate(-50%);z-index:40;display:inline-flex;align-items:center;justify-content:center;padding:10px 22px;border:1px solid rgba(255,255,255,.35);border-radius:999px;background:#1c1c24eb;color:#fff;font-family:inherit;font-size:.9rem;font-weight:600;box-shadow:0 4px 18px #00000047;cursor:pointer;pointer-events:auto}.learning-shrink-btn:active{transform:translate(-50%) scale(.97)}.canvas-section.solution-playing .learning-enlarge-btn,.canvas-section.solution-playing .learning-shrink-btn,.canvas-section.solution-playing .learning-playback-back-btn{pointer-events:auto}body.learning-playback-expanded-active{overflow:hidden}.board-container.learning-playback-expanded,.board-container:fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;width:100vw;height:100dvh;max-height:100dvh;min-height:0;z-index:10050;border:none;flex:none}.learning-fs-canvas-area{position:relative;display:flex;flex-direction:column;flex:1;min-width:0;min-height:0}.learning-fs-steps{display:flex;flex-direction:column;min-height:0;background:var(--bg-card);border-right:1px solid var(--border-color);box-shadow:inset -1px 0 #0000000a}.learning-fs-steps-inner{display:flex;flex-direction:column;height:100%;min-height:0;padding:12px 12px 14px;overflow:hidden}.learning-fs-steps-title{margin:0 0 10px;font-size:.92rem;font-weight:700;line-height:1.3;color:var(--text-primary);flex-shrink:0}.learning-fs-task-list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y;-webkit-overflow-scrolling:touch;gap:8px}.learning-fs-steps .task-item{flex-direction:column;align-items:center;gap:8px;padding:10px 8px;font-size:.82rem;position:relative}.learning-fs-steps .task-number{width:28px;height:28px;font-size:.85rem;flex-shrink:0}.learning-fs-steps .task-text{width:100%;line-height:1.4;text-align:left;flex:none;min-width:0}.learning-fs-steps .task-text strong{font-weight:700}.learning-fs-steps .task-text em{font-style:italic}.learning-fs-steps .task-text sup{font-size:.75em;line-height:0;vertical-align:super}.learning-fs-steps .task-text sub{font-size:.75em;line-height:0;vertical-align:sub}.learning-fs-steps .task-status{position:absolute;top:8px;right:8px;line-height:1}.learning-fs-steps .task-status:before{font-size:.9rem}.canvas-section.solution-playing .learning-enlarge-btn{pointer-events:auto}.board-container.learning-playback-expanded:not(.learning-fs-fit-active) .geometry-canvas-wrap,.board-container:fullscreen:not(.learning-fs-fit-active) .geometry-canvas-wrap{flex:1;min-height:0}}.sidebar-card{background:var(--bg-card);border-radius:var(--radius-md);box-shadow:var(--shadow-md);border:1px solid var(--border-color);padding:20px;transition:background-color var(--transition-normal),border-color var(--transition-normal)}.task-card{flex:1;display:flex;flex-direction:column}@media(min-width:969px){body{height:100vh;height:100dvh;overflow:hidden}.app-container{height:100%;min-height:0;overflow:hidden}.app-main{grid-template-columns:var(--app-sidebar-width, 360px) minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto;flex:1;min-height:0;align-items:stretch;overflow:hidden}.task-card{grid-column:1;grid-row:1;width:var(--app-sidebar-width, 360px);flex:1 1 auto;align-self:stretch;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.sidebar-actions-bar{grid-column:1;grid-row:2;width:var(--app-sidebar-width, 360px);align-self:end;flex-shrink:0;min-height:auto;overflow:visible;position:relative;top:auto;z-index:40;padding-top:12px;padding-bottom:8px;background:var(--bg-app);border-top:1px solid var(--border-color);box-shadow:0 -8px 20px #0f172a0f}.sidebar-actions-bar .helper-card{flex:1 1 auto;min-height:0;overflow-y:auto}.canvas-section{grid-column:2;grid-row:1 / -1;display:flex;flex-direction:column;min-height:0}.board-container{flex:1;min-height:0}@media(max-height:740px){.board-container{min-height:0}}}.card-header h2{font-size:1.15rem;font-weight:700;margin-bottom:16px;border-bottom:2px solid var(--border-color);padding-bottom:8px}.task-card-header{margin-bottom:0}.task-card-title-desktop{margin:0}.task-list-toggle{display:none;width:100%;border:none;background:transparent;padding:0 0 8px;margin:0 0 12px;border-bottom:2px solid var(--border-color);cursor:pointer;text-align:left;font-family:inherit;align-items:center;justify-content:space-between;gap:10px;-webkit-tap-highlight-color:transparent}.task-list-toggle-main{display:flex;flex-direction:column;gap:4px;min-width:0}.task-list-toggle-title{font-size:1.05rem;font-weight:700;color:var(--text-primary);line-height:1.25}.task-list-toggle-hint{font-size:.78rem;font-weight:600;color:var(--primary)}.task-list-chevron{flex-shrink:0;font-size:1.1rem;color:var(--text-secondary);transition:transform var(--transition-fast)}.task-card.is-expanded .task-list-chevron{transform:rotate(180deg)}.solution-step-mobile{display:none}.solution-step-mobile-meta{font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--primary);margin-bottom:6px}.solution-step-mobile-title{font-size:.98rem;font-weight:700;color:var(--text-primary);line-height:1.3;margin-bottom:4px}.solution-step-mobile-text{font-size:.86rem;color:var(--text-secondary);line-height:1.45}.solution-step-mobile-body{padding:12px 14px;border-radius:var(--radius-sm);background:var(--primary-light);border:1px solid rgba(79,70,229,.35);box-shadow:var(--shadow-sm);transition:background-color var(--transition-normal),border-color var(--transition-normal)}.solution-step-mobile.is-done .solution-step-mobile-body{background:var(--success-light);border-color:#05966959}.solution-step-mobile.is-done .solution-step-mobile-meta{color:var(--success)}.task-list-panel{display:block}.task-list{list-style:none;display:flex;flex-direction:column;gap:12px;flex:1}.task-item{display:flex;align-items:flex-start;gap:12px;padding:10px 14px;border-radius:var(--radius-sm);border:1px solid transparent;transition:all var(--transition-normal);font-size:.9rem;color:var(--text-secondary);min-width:0}.task-item.active{background:var(--primary-light);color:var(--primary);border-color:var(--primary);font-weight:600;box-shadow:var(--shadow-sm)}.task-item.completed{background:var(--success-light);color:var(--success);opacity:.85}@keyframes learning-guide-pulse{0%,to{transform:scale(1);box-shadow:0 0 #3b82f68c}50%{transform:scale(1.1);box-shadow:0 0 0 12px #3b82f600}}@keyframes learning-guide-toolbox-pulse{0%,to{transform:scale(1);box-shadow:0 4px 14px #4f46e573,0 0 #3b82f6b3}50%{transform:scale(1.2);box-shadow:0 10px 28px #4f46e5b3,0 0 0 16px #3b82f600}}.learning-guide-pulse{animation:learning-guide-pulse 1.1s ease-in-out infinite;transform-origin:center center;z-index:2;position:relative}.learning-locked{opacity:.28!important;pointer-events:none!important;filter:grayscale(55%);transition:opacity .2s}#toolbox-toggle.learning-guide-pulse{animation:learning-guide-toolbox-pulse 1.1s ease-in-out infinite!important;outline:3px solid rgba(59,130,246,.95);outline-offset:4px;z-index:6}#toolbox-toggle.learning-guide-pulse:hover{animation:learning-guide-toolbox-pulse 1.1s ease-in-out infinite!important}.toolbox-popup .tool-btn.learning-guide-pulse,.ruler-picker-btn.learning-guide-pulse,.pencil-picker-btn.learning-guide-pulse,.highlighter-color-btn.learning-guide-pulse,.ruler-control-btn.learning-guide-pulse{animation:learning-guide-pulse 1.1s ease-in-out infinite;outline:2px solid rgba(59,130,246,.85);outline-offset:2px}.task-number{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:var(--bg-app);color:var(--text-secondary);border-radius:50%;font-weight:700;font-size:.8rem;transition:all var(--transition-normal)}.task-item.active .task-number{background:var(--primary);color:#fff}.task-item.completed .task-number{background:var(--success);color:#fff}.task-text{flex:1}.task-status:before{content:"⏱";font-size:1rem;opacity:.5}.task-item.active .task-status:before{content:"✏️";opacity:1;animation:drawWiggle 1s infinite alternate}.task-item.completed .task-status:before{content:"✓";font-weight:700;color:var(--success);opacity:1}@keyframes drawWiggle{0%{transform:rotate(0)}to{transform:rotate(15deg) translateY(-2px)}}.helper-card{display:flex;gap:16px;background:linear-gradient(135deg,var(--bg-card) 0%,var(--primary-light) 100%);border-left:5px solid var(--primary)}.helper-avatar{flex-shrink:0}.avatar-circle{width:48px;height:48px;background:var(--primary);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.6rem;box-shadow:var(--shadow-sm);animation:pulseAvatar 2s infinite ease-in-out}.avatar-decor{display:none}.print-assignment-btn{width:48px;height:48px;background:var(--primary);border:none;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;box-shadow:var(--shadow-sm);cursor:pointer;transition:transform var(--transition-fast),background-color var(--transition-fast);padding:0;flex-shrink:0;-webkit-tap-highlight-color:transparent}.print-assignment-btn:hover:not(:disabled){background:#4338ca;transform:scale(1.06)}.print-assignment-btn:active:not(:disabled){transform:scale(.96)}.print-assignment-btn:disabled{opacity:.45;cursor:not-allowed}.print-assignment-btn svg{width:22px;height:22px}@keyframes pulseAvatar{0%,to{transform:scale(1)}50%{transform:scale(1.08)}}.helper-content h3{font-size:1rem;font-weight:700;margin-bottom:4px;color:var(--primary);font-family:var(--font-comic)}.helper-content p{font-size:.85rem;color:var(--text-primary);line-height:1.4;min-height:5.95em}.controls-card{display:flex;flex-wrap:wrap;gap:12px;position:relative}.controls-card .btn{flex:1}.controls-card .paper-type-picker,.controls-card .paper-type-menu{flex:1 1 100%}.paper-type-menu{display:flex;flex-direction:column;gap:8px;min-width:0;width:100%}.paper-type-menu .paper-type-menu-btn{flex:none;width:100%}.paper-type-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;width:100%;container-type:inline-size;container-name:paper-type-picker}.paper-type-picker-tile{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-width:0;overflow:hidden;padding:10px 8px;border-radius:12px;border:1.5px solid var(--border, #e2e8f0);background:var(--bg-card, #fff);color:var(--text-primary);cursor:pointer;text-align:center;transition:border-color .15s ease,background .15s ease,box-shadow .15s ease,transform .15s ease}.paper-type-picker-tile:hover:not(:disabled){border-color:var(--primary);background:var(--primary-light, rgba(99, 102, 241, .08));transform:translateY(-1px)}.paper-type-picker-tile.is-selected{border-color:var(--primary);background:var(--primary-light, rgba(99, 102, 241, .12));box-shadow:0 0 0 1px var(--primary)}.paper-type-picker-tile:disabled{opacity:.75;cursor:default;transform:none}.paper-type-picker-tile strong{font-size:.78rem;font-weight:700;line-height:1.2;max-width:100%;overflow:hidden;text-overflow:clip;white-space:nowrap}@container paper-type-picker (max-width: 340px){.paper-type-picker-tile{gap:0;padding:8px 4px}.paper-type-picker-tile strong{display:none}}.app-main.mobile-sidebar-compact .paper-type-picker-tile{gap:0;padding:8px 4px}.app-main.mobile-sidebar-compact .paper-type-picker-tile strong{display:none}.paper-type-preview{width:100%;max-width:56px;height:auto;aspect-ratio:48 / 36;flex-shrink:0;border-radius:4px;box-shadow:inset 0 0 0 1px #0f172a0f}.author-field-paper .paper-type-picker{width:100%}.sidebar-actions-bar{display:flex;flex-direction:column;gap:20px}.btn{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px 16px;border-radius:var(--radius-sm);font-size:.9rem;font-weight:600;cursor:pointer;transition:all var(--transition-fast);border:1px solid transparent}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:#4338ca;box-shadow:0 4px 12px #4f46e540;transform:translateY(-2px)}.btn-secondary{background:var(--bg-card);border-color:var(--border-color);color:var(--text-primary)}.btn-secondary:hover:not(:disabled){background:var(--bg-app);transform:translateY(-2px)}.btn-danger{background:var(--danger-light);color:var(--danger);border-color:#e11d4833}.btn-danger:hover{background:var(--danger);color:#fff;transform:translateY(-2px);box-shadow:0 4px 12px #e11d4833}.btn:active{transform:translateY(0)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn-large{padding:16px 32px;font-size:1.1rem;border-radius:var(--radius-md)}.canvas-section{display:flex;flex-direction:column;gap:12px;min-width:0;width:100%}.board-container{position:relative;width:100%;flex:1;min-height:min(460px,100%);background-color:var(--bg-board);border-radius:var(--radius-md);box-shadow:var(--shadow-lg),inset 0 2px 8px #00000008;border:1px solid var(--border-color);overflow:hidden;display:flex;flex-direction:column;transition:background-color var(--transition-normal),border-color var(--transition-normal)}.learning-playback-back-btn{display:none}.board-container.learning-playback-expanded,.board-container:fullscreen{flex-direction:row;align-items:stretch;border-radius:0}.board-container.learning-playback-expanded .learning-fs-steps,.board-container:fullscreen .learning-fs-steps{flex:0 0 var(--fs-steps-width, 20vw);width:var(--fs-steps-width, 20vw);max-width:var(--fs-steps-width, 20vw);min-width:0;align-self:stretch}.board-container.learning-playback-expanded .learning-fs-canvas-area,.board-container:fullscreen .learning-fs-canvas-area{flex:1 1 0;min-width:0;width:auto}@media(max-width:968px)and (orientation:portrait){.board-container.learning-playback-expanded,.board-container:fullscreen{flex-direction:column}.board-container.learning-playback-expanded .learning-fs-steps,.board-container:fullscreen .learning-fs-steps{flex:0 0 var(--fs-steps-height, min(38dvh, 280px));width:100%;max-width:100%;height:var(--fs-steps-height, min(38dvh, 280px));max-height:var(--fs-steps-height, min(38dvh, 280px));min-height:0;overflow:hidden;border-right:none;border-bottom:1px solid var(--border-color)}.board-container.learning-playback-expanded .learning-fs-canvas-area,.board-container:fullscreen .learning-fs-canvas-area{flex:1 1 0;width:100%;min-height:0}.board-container.learning-playback-expanded .learning-playback-back-btn,.board-container:fullscreen .learning-playback-back-btn{display:inline-flex!important;position:absolute;bottom:max(12px,env(safe-area-inset-bottom,0px));left:50%;transform:translate(-50%);z-index:40;align-items:center;justify-content:center;gap:4px;padding:10px 20px 10px 14px;border:1px solid rgba(255,255,255,.35);border-radius:999px;background:#1c1c24eb;color:#fff;font-family:inherit;font-size:.9rem;font-weight:600;box-shadow:0 4px 18px #00000047;cursor:pointer;pointer-events:auto;touch-action:manipulation}.board-container.learning-playback-expanded .learning-playback-back-btn:active,.board-container:fullscreen .learning-playback-back-btn:active{transform:translate(-50%) scale(.97)}}@media(max-width:968px){.board-container.learning-playback-expanded.learning-fs-fit-active .learning-fs-canvas-area,.board-container:fullscreen.learning-fs-fit-active .learning-fs-canvas-area{display:flex;flex-direction:column;align-items:center;justify-content:center}.board-container.learning-playback-expanded.learning-fs-fit-active .geometry-canvas-stack,.board-container:fullscreen.learning-fs-fit-active .geometry-canvas-stack{flex:0 0 auto;width:auto;height:auto;min-width:0;min-height:0;align-self:center;justify-content:center;align-items:center}.board-container.learning-playback-expanded.learning-fs-fit-active .geometry-canvas-wrap,.board-container:fullscreen.learning-fs-fit-active .geometry-canvas-wrap,.board-container.learning-playback-expanded.learning-fs-fit-active .geometry-canvas-stack .geometry-canvas-wrap,.board-container:fullscreen.learning-fs-fit-active .geometry-canvas-stack .geometry-canvas-wrap{flex:0 0 auto;width:auto;height:auto;min-width:0;min-height:0;align-self:center}}.learning-fs-canvas-area{position:relative;display:flex;flex-direction:column;flex:1;min-width:0;min-height:0}#geometry-canvas{display:block;width:100%;height:100%;cursor:crosshair;touch-action:none;z-index:1}.canvas-bottom-bar{position:absolute;bottom:12px;left:12px;right:12px;display:flex;align-items:center;gap:10px;z-index:5}.canvas-bottom-bar:has(.toolbox-popup.is-floating.open){z-index:50}body[data-app-mode=test] .canvas-bottom-bar{justify-content:center}body[data-app-mode=test] .toolbox-wrapper,body[data-app-mode=test] .canvas-left-controls,body[data-app-mode=learning] .toolbox-wrapper,body[data-app-mode=learning] .canvas-left-controls{position:absolute;left:0;bottom:0;flex-shrink:0}body[data-app-mode=test] .submit-btn{position:absolute;right:0;bottom:0;margin-left:0}body[data-app-mode=learning] .canvas-bottom-bar{justify-content:center}body[data-app-mode=learning] .solve-btn{position:absolute;right:0;bottom:8px;top:auto;transform:none;margin-left:0;flex-shrink:0}body[data-app-mode=learning] .solve-btn:hover{transform:scale(1.05)}body[data-app-mode=learning] .solve-btn:active{transform:scale(.98)}body[data-app-mode=learning] .learning-bottom-actions{display:contents}.toolbox-wrapper{position:relative}.toolbox-toggle{width:44px;height:44px;border-radius:50%;background:linear-gradient(135deg,var(--primary),#6366f1);border:2px solid rgba(255,255,255,.3);color:#fff;font-size:1.3rem;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 14px #4f46e566;transition:all var(--transition-fast)}.toolbox-toggle:hover{transform:scale(1.1);box-shadow:0 6px 20px #4f46e580}@keyframes learning-guide-toolbox-open-pulse{0%,to{transform:rotate(45deg) scale(1);box-shadow:0 4px 14px #4f46e573,0 0 #3b82f6b3}50%{transform:rotate(45deg) scale(1.16);box-shadow:0 10px 28px #4f46e5b3,0 0 0 16px #3b82f600}}#toolbox-toggle.open.learning-guide-pulse{animation:learning-guide-toolbox-open-pulse 1.1s ease-in-out infinite!important}.toolbox-toggle.open{background:linear-gradient(135deg,#6366f1,#818cf8);transform:rotate(45deg) scale(1.1)}.toolbox-popup{position:absolute;bottom:54px;left:0;transform:scale(.8);transform-origin:bottom left;background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:8px;display:flex;flex-direction:column;gap:6px;box-shadow:var(--shadow-xl);opacity:0;pointer-events:none;transition:all .2s cubic-bezier(.34,1.56,.64,1);min-width:150px}.toolbox-popup.open{opacity:1;pointer-events:auto;transform:scale(1)}.toolbox-popup.is-floating{position:fixed;bottom:auto;right:auto;z-index:50;transform:none;transform-origin:center center;transition:opacity .15s ease,min-width .28s ease,width .28s ease,height .28s ease,padding .28s ease,gap .28s ease}.toolbox-popup.is-floating.open{transform:none}.toolbox-popup.is-floating.is-dragging{transition:none;z-index:60;box-shadow:0 16px 40px #0f172a38}.toolbox-popup-header{display:flex;align-items:center;gap:8px;margin:-2px 0 2px;padding:4px 6px 6px;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;color:var(--text-secondary);transition:gap .28s ease,padding .28s ease,margin .28s ease}.toolbox-popup-header:active{cursor:grabbing}.toolbox-popup-grip{display:inline-flex;flex-direction:column;justify-content:center;gap:3px;width:10px;flex-shrink:0;opacity:.45}.toolbox-popup-grip span{display:block;height:2px;border-radius:999px;background:currentColor}.toolbox-popup-title{font-size:.78rem;font-weight:700;letter-spacing:.01em;line-height:1.2;flex:1;min-width:0}.toolbox-popup-orient,.toolbox-popup-collapse{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--radius-sm);background:transparent;color:inherit;cursor:pointer;flex-shrink:0;transition:background var(--transition-fast),color var(--transition-fast)}.toolbox-popup-orient{margin-left:auto}.toolbox-popup-orient:hover,.toolbox-popup-collapse:hover{background:var(--primary-light);color:var(--primary)}.toolbox-popup-orient-icon,.toolbox-popup-collapse-icon{display:block}.toolbox-popup .tool-btn{display:flex;align-items:center;gap:10px;padding:10px 14px;border:none;background:transparent;border-radius:var(--radius-sm);cursor:pointer;font-size:.9rem;font-family:var(--font-primary);font-weight:600;color:var(--text-primary);transition:background var(--transition-fast),color var(--transition-fast),padding .28s ease,gap .28s ease,min-width .28s ease;white-space:nowrap}.toolbox-popup .tool-btn:hover{background:var(--primary-light);color:var(--primary)}.toolbox-popup .tool-btn.active{background:var(--primary);color:#fff}.toolbox-popup .tool-btn .tool-icon-svg{flex-shrink:0;width:20px;height:20px}.toolbox-popup .tool-btn.active .tool-icon-svg{stroke:#fff}.toolbox-popup.is-horizontal{flex-direction:row;align-items:stretch;min-width:0;width:max-content}.toolbox-popup.is-horizontal .toolbox-popup-header{flex-direction:column;align-items:center;justify-content:flex-start;gap:4px;margin:0 2px 0 -2px;padding:4px 4px 4px 2px;flex-shrink:0}.toolbox-popup.is-horizontal .toolbox-popup-title{display:none}.toolbox-popup.is-horizontal .toolbox-popup-grip{margin-bottom:2px}.toolbox-popup.is-horizontal .toolbox-popup-orient,.toolbox-popup.is-horizontal .toolbox-popup-collapse{margin-left:0}.toolbox-popup.is-horizontal .tool-btn{flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:8px 10px;min-width:64px}.toolbox-popup.is-horizontal .tool-btn-label{font-size:.72rem;line-height:1.15;text-align:center;white-space:normal;max-width:4.6em}.toolbox-popup.is-collapsed{min-width:0;width:fit-content;padding:6px;gap:4px}.toolbox-popup.is-collapsed .toolbox-popup-header{justify-content:center;gap:4px;padding:2px 2px 4px;margin:0}.toolbox-popup.is-collapsed .toolbox-popup-title{display:none}.toolbox-popup.is-collapsed .toolbox-popup-orient,.toolbox-popup.is-collapsed .toolbox-popup-collapse{margin-left:0}.toolbox-popup.is-collapsed .tool-btn{justify-content:center;gap:0;padding:10px;min-width:0}.toolbox-popup.is-collapsed .tool-btn-label{display:none}.toolbox-popup.is-horizontal.is-collapsed .toolbox-popup-header{flex-direction:column;padding:2px;margin:0}.toolbox-popup.is-horizontal.is-collapsed .tool-btn{flex-direction:column;padding:10px;min-width:0}@media(max-width:968px){.toolbox-toggle{width:40px;height:40px;font-size:1.1rem}.toolbox-popup{bottom:48px;padding:6px;gap:4px;min-width:0;width:min(268px,calc(100vw - 28px));max-height:min(42dvh,260px);overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.toolbox-popup .tool-btn{padding:7px 8px;gap:6px;font-size:.74rem;white-space:nowrap;min-width:0}.toolbox-popup .tool-btn .tool-icon-svg{width:16px;height:16px}}@media(max-width:968px)and (orientation:landscape){.toolbox-popup{bottom:0;left:44px;width:min(300px,calc(100vw - 64px));max-height:min(78dvh,calc(100dvh - 56px))}}@media(max-width:968px)and (orientation:portrait){.toolbox-popup{bottom:46px;left:0;width:min(252px,calc(100vw - 24px));max-height:min(36dvh,220px)}}.ruler-picker-card{max-width:420px;padding:28px 32px}.ruler-picker-card h2{font-size:1.35rem;font-weight:800;color:var(--primary);margin-bottom:6px;font-family:var(--font-comic)}.ruler-picker-card>p{font-size:.9rem;color:var(--text-secondary);margin-bottom:20px}.ruler-picker-options{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:18px}.ruler-picker-btn{display:flex;flex-direction:column;align-items:center;gap:10px;padding:18px 12px;border:2px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-app);cursor:pointer;transition:all var(--transition-fast);font-family:var(--font-primary);font-weight:700;font-size:.9rem;color:var(--text-primary)}.ruler-picker-btn:hover{border-color:var(--primary);background:var(--primary-light);color:var(--primary);transform:translateY(-2px);box-shadow:var(--shadow-md)}.ruler-picker-preview{width:100%;height:56px;display:flex;align-items:center;justify-content:center}.ruler-preview-svg{display:block;max-width:92%}.ruler-preview-svg--classic{width:100%;height:22px}.ruler-preview-svg--triangle{width:46px;height:46px}.pencil-picker-card{max-width:420px;padding:28px 32px;text-align:center}.pencil-picker-card h2{font-size:1.35rem;font-weight:800;color:var(--primary);margin-bottom:6px;font-family:var(--font-comic)}.pencil-picker-card>p{font-size:.9rem;color:var(--text-secondary);margin-bottom:20px}.pencil-picker-options{display:flex;flex-direction:column;gap:12px;margin-bottom:18px;overflow:visible}.pencil-picker-option{width:100%;box-sizing:border-box}.highlighter-picker-card{max-width:420px;padding:28px 32px;text-align:center}.highlighter-picker-card h2{font-size:1.35rem;font-weight:800;color:var(--primary);margin-bottom:6px;font-family:var(--font-comic)}.highlighter-picker-card>p{font-size:.9rem;color:var(--text-secondary);margin-bottom:20px}.highlighter-picker-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:18px}.highlighter-color-btn{display:flex;align-items:center;gap:10px;width:100%;box-sizing:border-box;padding:12px 14px;border:2px solid var(--border-color);border-radius:12px;background:var(--bg-card);cursor:pointer;text-align:left}.highlighter-color-btn:hover,.highlighter-color-btn-active{border-color:var(--primary);background:var(--primary-light)}.highlighter-picker-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}.highlighter-picker-actions .btn{width:100%}.highlighter-color-swatch{width:28px;height:14px;border-radius:4px;flex-shrink:0;border:1px solid rgba(0,0,0,.12)}.highlighter-color-btn strong{font-size:.95rem;color:var(--text-primary)}.highlighter-picker-section{margin-bottom:18px;text-align:left}.highlighter-picker-section h3{font-size:.85rem;font-weight:700;color:var(--text-secondary);margin:0 0 10px;text-transform:uppercase;letter-spacing:.04em}.highlighter-size-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.highlighter-size-btn{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;box-sizing:border-box;padding:12px 10px;border:2px solid var(--border-color);border-radius:12px;background:var(--bg-card);cursor:pointer}.highlighter-size-btn:hover,.highlighter-size-btn-active{border-color:var(--primary);background:var(--primary-light)}.highlighter-size-preview{display:block;width:100%;max-width:72px;border-radius:999px;background:#fff176;opacity:.85}.highlighter-size-btn strong{font-size:.85rem;color:var(--text-primary)}.highlighter-straight-toggle{display:flex;flex-direction:column;gap:4px;width:100%;box-sizing:border-box;padding:12px 14px;border:2px solid var(--border-color);border-radius:12px;background:var(--bg-card);cursor:pointer;text-align:left}.highlighter-straight-toggle:hover,.highlighter-straight-toggle-active{border-color:var(--primary);background:var(--primary-light)}.highlighter-straight-toggle strong{font-size:.95rem;color:var(--text-primary)}.highlighter-straight-toggle span{font-size:.82rem;color:var(--text-secondary);line-height:1.35}.pencil-size-preview{display:block;width:100%;max-width:72px;border-radius:999px}.pencil-line-style-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.pencil-line-style-btn{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;box-sizing:border-box;padding:12px 10px;border:2px solid var(--border-color);border-radius:12px;background:var(--bg-card);cursor:pointer}.pencil-line-style-btn:hover,.pencil-line-style-btn-active{border-color:var(--primary);background:var(--primary-light)}.pencil-line-style-preview{width:100%;max-width:72px;height:16px;display:block}.pencil-line-style-btn strong{font-size:.85rem;color:var(--text-primary)}.pencil-style-live-preview svg{width:100%;height:28px;display:block;background:var(--bg-main, rgba(0, 0, 0, .03));border-radius:8px}#geometry-canvas.cursor-grab{cursor:grab}#geometry-canvas.cursor-grabbing{cursor:grabbing}#geometry-canvas.cursor-pointer{cursor:pointer}.ruler-controls{position:absolute;top:12px;right:12px;z-index:25;display:flex;align-items:center;gap:8px;padding:6px;background:#ffffffeb;border:1px solid var(--border-color);border-radius:12px;box-shadow:var(--shadow-md);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.ruler-controls.hidden{display:none}.ruler-control-btn{width:40px;height:40px;border:none;border-radius:10px;background:var(--bg-card);color:var(--text-primary);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast);box-shadow:var(--shadow-sm)}.ruler-control-btn:hover{background:var(--primary-light);color:var(--primary);transform:translateY(-1px)}.ruler-control-btn:active{transform:translateY(0)}.ruler-control-btn.is-active{background:var(--primary-light);color:var(--primary);box-shadow:inset 0 0 0 2px var(--primary)}.ruler-control-btn.is-center-line{background:var(--primary-light);color:var(--primary);box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--primary) 55%,transparent);opacity:.95}.ruler-control-btn svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}.compass-controls{flex-wrap:wrap;max-width:min(100vw - 24px,520px);justify-content:flex-end}.compass-controls .line-style-controls{display:contents}.pencil-controls{flex-wrap:wrap;max-width:min(100vw - 24px,520px);justify-content:flex-end}.pencil-controls .line-style-controls{display:contents}.pencil-mode-controls{position:relative}.pencil-mode-control-btn{min-width:108px;padding:0 10px}.pencil-mode-control-label{font-size:.78rem;font-weight:600;line-height:1.1;white-space:nowrap}.pencil-mode-dropdown{min-width:148px}.pencil-mode-dropdown__item{justify-content:flex-start}.highlighter-toolbar{flex-wrap:wrap;max-width:min(100vw - 24px,420px);justify-content:flex-end}.highlighter-controls{display:flex;align-items:center;gap:8px}.highlighter-width-swatch{width:22px;border-radius:999px}.highlighter-color-swatch{border-radius:999px}.point-style-controls{display:flex;align-items:center;gap:8px}.point-marker-preview-circle{display:block;border-radius:999px;flex-shrink:0}.point-marker-preview-circle--open{background:transparent;border-style:solid;box-sizing:border-box}.selection-edit-controls .point-style-controls,.selection-edit-controls .line-style-controls{display:flex;align-items:center;gap:8px}.pencil-controls .point-style-controls{display:contents}.line-style-controls{display:flex;align-items:center;gap:8px}.line-style-controls__group{position:relative}.line-style-control-btn{padding:0}.line-style-control-swatch{display:block;width:22px;border-radius:999px}.line-style-control-color{display:block;width:18px;height:18px;border-radius:50%;box-shadow:inset 0 0 0 1px #0000001f}.line-style-control-icon{width:24px;height:16px}.line-style-dropdown{position:absolute;top:calc(100% + 6px);right:0;z-index:40;min-width:168px;padding:6px;display:flex;flex-direction:column;gap:4px;background:#fffffffa;border:1px solid var(--border-color);border-radius:12px;box-shadow:var(--shadow-md)}.line-style-dropdown__item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:none;border-radius:8px;background:transparent;color:var(--text-primary);cursor:pointer;text-align:left;font:inherit}.line-style-dropdown__item:hover,.line-style-dropdown__item.is-active{background:var(--primary-light);color:var(--primary)}.line-style-dropdown__preview{display:block;width:28px;border-radius:999px}.line-style-dropdown__color{display:block;width:16px;height:16px;border-radius:50%;box-shadow:inset 0 0 0 1px #0000001f}.line-style-dropdown--colors{min-width:140px}.line-style-delete-btn{color:#dc2626}.line-style-delete-btn:hover{background:#dc26261f;color:#dc2626}[data-theme=dark] .line-style-dropdown{background:#1e1e1ef5}.ruler-control-scale-label{font-size:1.35rem;font-weight:600;line-height:1;-webkit-user-select:none;user-select:none}.ruler-control-close{color:#dc2626;background:#fee2e2d9}.ruler-control-close:hover{background:#fecaca;color:#b91c1c}.ruler-control-confirm{color:#047857;background:#d1fae5e6}.ruler-control-confirm:hover{background:#a7f3d0;color:#065f46}.solve-btn{padding:8px 18px;border-radius:20px;border:none;background:linear-gradient(135deg,var(--success),#10b981);color:#fff;font-size:.85rem;font-weight:700;font-family:var(--font-primary);cursor:pointer;box-shadow:0 4px 14px #05966959;transition:all var(--transition-fast);white-space:nowrap;display:flex;align-items:center;gap:6px}.solve-btn:hover{transform:scale(1.05);box-shadow:0 6px 20px #05966980}.solve-btn:active{transform:scale(.98)}.submit-btn{padding:8px 18px;border-radius:20px;border:none;background:linear-gradient(135deg,var(--primary),#6366f1);color:#fff;font-size:.85rem;font-weight:700;font-family:var(--font-primary);cursor:pointer;box-shadow:0 4px 14px #4f46e559;transition:all var(--transition-fast);white-space:nowrap;display:flex;align-items:center;gap:6px}.submit-btn:hover:not(:disabled){transform:scale(1.05)}.submit-btn:disabled{opacity:.55;cursor:not-allowed}body[data-app-mode=learning] .helper-card,body[data-app-mode=test] .helper-card{display:none!important}@media(max-width:968px){body[data-app-mode=tutorial] .helper-card{display:none!important}body[data-app-mode=tutorial] .sidebar-actions-bar{max-height:none;padding:4px 0 6px;border-bottom:none;box-shadow:none}}.mode-picker-print-btn{display:flex;align-items:center;gap:12px}.mode-picker-print-icon{flex-shrink:0;width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--primary-light);color:var(--primary);overflow:visible}.mode-picker-print-icon svg{width:20px;height:20px;display:block}.mode-picker-print-btn .mode-picker-print-copy{flex:1;min-width:0;text-align:left;display:block;overflow:visible}.mode-picker-card{max-width:420px;text-align:center}.mode-picker-options{display:flex;flex-direction:column;gap:12px;margin:20px 0}.mode-picker-btn,.pencil-picker-option{padding:16px 20px;border:2px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-card);cursor:pointer;text-align:left;transition:all var(--transition-fast);font-family:var(--font-primary)}.mode-picker-btn:hover,.pencil-picker-option:hover{border-color:var(--primary);background:var(--primary-light)}.mode-picker-btn strong,.pencil-picker-option strong{display:block;font-size:1rem;margin-bottom:4px;color:var(--text-primary)}.mode-picker-btn span,.pencil-picker-option span{font-size:.85rem;color:var(--text-secondary)}body.solution-tools-playback .toolbox-wrapper{opacity:1;pointer-events:none}body.solution-tools-playback #ruler-picker-modal,body.solution-tools-playback #pencil-picker-modal,body.solution-tools-playback #pencil-style-modal,body.solution-tools-playback #highlighter-picker-modal{display:none!important}body.solution-tools-playback .toolbox-toggle{pointer-events:none}.tool-btn.solution-tool-highlight{box-shadow:0 0 0 3px var(--primary);transform:scale(1.06);border-color:var(--primary)}.naming-card{max-width:360px}.naming-card input,.naming-card .naming-rich-input{width:100%;padding:10px 14px;border:2px solid var(--border-color);border-radius:var(--radius-sm);font-size:1rem;font-family:var(--font-primary);margin:12px 0 16px}.naming-actions{display:flex;gap:10px;justify-content:flex-end}.canvas-section.submitted-lock{opacity:.92;pointer-events:none}.canvas-section.solution-playing{pointer-events:none}.canvas-section.solution-playing .learning-fs-steps{pointer-events:auto}.canvas-section.solution-playing .board-container{cursor:default}.canvas-section.solution-playing #solve-btn{pointer-events:auto;z-index:25;cursor:pointer}body[data-app-mode=learning] .geometry-canvas-wrap,body[data-app-mode=learning] #geometry-canvas,body[data-app-mode=learning] .geometry-canvas{cursor:grab}body[data-app-mode=learning] .geometry-canvas-wrap.viewport-panning,body[data-app-mode=learning] .geometry-canvas-wrap.viewport-panning #geometry-canvas,body[data-app-mode=learning] .geometry-canvas-wrap.viewport-panning .geometry-canvas{cursor:grabbing}.canvas-section.solution-playing #ruler-controls,.canvas-section.solution-playing #compass-controls,.canvas-section.solution-playing #selection-edit-controls,.canvas-section.solution-playing #protractor-controls,.canvas-section.solution-playing #pencil-controls,.canvas-section.solution-playing #highlighter-controls,.canvas-section.solution-playing #bucket-controls,.canvas-section.solution-playing .canvas-bottom-bar,.canvas-section.solution-playing .toolbox-wrapper,body.solution-tools-playback #ruler-controls,body.solution-tools-playback #compass-controls,body.solution-tools-playback #selection-edit-controls,body.solution-tools-playback #protractor-controls,body.solution-tools-playback #pencil-controls,body.solution-tools-playback #highlighter-controls,body.solution-tools-playback #bucket-controls{pointer-events:none}.solve-btn.solution-skip-mode{background:linear-gradient(135deg,var(--accent),#f59e0b);box-shadow:0 4px 14px #f59e0b59}.app-hidden{display:none!important}.help-marker{position:absolute;width:60px;height:60px;border:3px dashed var(--accent);border-radius:50%;background-color:#f59e0b26;pointer-events:none;transform:translate(-50%,-50%);animation:hintPulse 1.2s infinite;z-index:2}@keyframes hintPulse{0%{transform:translate(-50%,-50%) scale(.8);opacity:.5}50%{transform:translate(-50%,-50%) scale(1.1);opacity:1}to{transform:translate(-50%,-50%) scale(.8);opacity:.5}}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#0f172ab3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;justify-content:center;align-items:center;z-index:200;animation:fadeIn var(--transition-normal)}#mode-picker-modal{z-index:210}#mode-picker-modal .mode-picker-version{position:absolute;right:max(14px,env(safe-area-inset-right,0px));bottom:max(10px,env(safe-area-inset-bottom,0px));margin:0;font-size:.78rem;font-weight:600;letter-spacing:.02em;color:#ffffffd9;opacity:1;pointer-events:none;-webkit-user-select:none;user-select:none;text-shadow:0 1px 2px rgba(0,0,0,.45)}body[data-mode-picker-open=true] .sidebar-actions-bar{display:none!important}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-card{background:var(--bg-card);width:90%;max-width:520px;padding:40px;border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);text-align:center;border:1px solid var(--border-color);position:relative;z-index:102;animation:modalSlideUp var(--transition-normal) cubic-bezier(.34,1.56,.64,1)}@keyframes modalSlideUp{0%{transform:translateY(50px) scale(.95);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}#help-modal.modal-overlay{align-items:flex-start;padding:max(16px,4vh) 16px;overflow-y:auto}.manual-card{max-width:640px;width:100%;max-height:min(88vh,calc(100vh - 32px));padding:28px 32px 24px;text-align:left;display:flex;flex-direction:column;gap:16px;overflow:hidden;min-height:0;margin:auto}.help-mode-panel:not(.hidden){display:flex;flex-direction:column;flex:1 1 auto;min-height:0;overflow:hidden;gap:12px}.manual-card h2{font-size:1.35rem;font-weight:800;color:var(--text-primary);text-align:center;margin-bottom:4px;flex-shrink:0}.manual-intro{font-size:.9rem;color:var(--text-secondary);text-align:center;line-height:1.5;flex-shrink:0}.manual-content{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding-right:8px;display:flex;flex-direction:column;gap:18px}.manual-content::-webkit-scrollbar{width:6px}.manual-content::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}.manual-section{background:var(--bg-app);border:1px solid var(--border-color);border-radius:var(--radius-sm);padding:14px 16px}.manual-section h3{font-size:.95rem;font-weight:700;color:var(--primary);margin-bottom:8px;display:flex;align-items:center;gap:8px}.manual-section p,.manual-section li{font-size:.85rem;color:var(--text-primary);line-height:1.55}.manual-section ul,.manual-section ol{margin:6px 0 0 18px;display:flex;flex-direction:column;gap:5px}.manual-section p+ul,.manual-section p+ol{margin-top:8px}.manual-close-btn{width:100%;margin-top:4px;flex-shrink:0}.assignment-intro-overlay{z-index:10100}.assignment-intro-card{max-width:640px;width:100%;max-height:min(88vh,calc(100vh - 32px));padding:28px 32px 24px;text-align:left;display:flex;flex-direction:column;gap:16px;overflow:hidden;min-height:0;margin:auto}.assignment-intro-card h2{font-size:1.35rem;font-weight:800;color:var(--text-primary);text-align:center;margin-bottom:0;flex-shrink:0}.assignment-intro-card .assignment-intro-body{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;border:1px solid var(--border-color);border-bottom:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-app);padding:16px 18px}.assignment-intro-close-btn{width:100%;margin-top:4px;flex-shrink:0}.manual-nav-header{display:flex;align-items:center;gap:10px;flex-shrink:0}.manual-nav-header h2{flex:1;margin:0;text-align:left;font-size:1.2rem}.manual-back-btn{border:1px solid var(--border-color);background:var(--bg-app);color:var(--primary);font-weight:700;font-size:.82rem;padding:6px 12px;border-radius:var(--radius-sm);cursor:pointer;flex-shrink:0}.manual-back-btn:hover{background:var(--primary-light)}.manual-back-btn.hidden{display:none}.manual-view{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;overflow:hidden;gap:8px}.manual-view.hidden{display:none}.manual-folder-list{display:flex;flex-direction:column;gap:8px;overflow-y:auto;flex:1 1 auto;min-height:0;padding-right:4px}.manual-folder-btn{display:flex;align-items:center;gap:12px;width:100%;padding:14px 16px;border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-app);cursor:pointer;text-align:left;transition:background var(--transition-fast),border-color var(--transition-fast)}.manual-folder-btn:hover{background:var(--primary-light);border-color:#4f46e559}.manual-folder-icon{font-size:1.2rem;flex-shrink:0;width:1.6rem;text-align:center;display:inline-flex;align-items:center;justify-content:center}.manual-folder-icon svg{width:1.25rem;height:1.25rem;stroke:currentColor;fill:none}.manual-folder-label{flex:1;font-size:.95rem;font-weight:700;color:var(--text-primary)}.manual-folder-arrow{color:var(--text-secondary);font-size:1.15rem;line-height:1}.manual-tool-detail.hidden{display:none}.manual-ui-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:10px 0 6px}.manual-ui-row-label{font-size:.78rem;font-weight:600;color:var(--text-secondary);flex:1 1 100%}.manual-ui-bar{display:inline-flex;align-items:center;gap:6px;padding:5px;background:#ffffffeb;border:1px solid var(--border-color);border-radius:10px;box-shadow:var(--shadow-sm)}[data-theme=dark] .manual-ui-bar{background:#1e293beb}.manual-ui-btn{width:36px;height:36px;border:none;border-radius:9px;background:var(--bg-card);color:var(--text-primary);display:inline-flex;align-items:center;justify-content:center;box-shadow:var(--shadow-sm);flex-shrink:0}.manual-ui-btn.is-active{background:var(--primary-light);color:var(--primary);box-shadow:inset 0 0 0 2px var(--primary)}.manual-ui-btn.is-close{color:#dc2626;background:#fee2e2d9}.manual-ui-btn.is-confirm{color:#047857;background:#d1fae5e6}.manual-ui-btn svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}.manual-ui-inline{display:inline-flex;align-items:center;gap:6px;vertical-align:middle;margin:0 2px}.manual-ui-toolbox{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--primary),#6366f1);border:2px solid rgba(255,255,255,.3);color:#fff;font-size:1rem;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 3px 10px #4f46e559;flex-shrink:0}.manual-ui-tool-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:var(--radius-sm);background:var(--bg-card);border:1px solid var(--border-color);font-size:.82rem;font-weight:600;color:var(--text-primary);white-space:nowrap}.manual-ui-tool-chip svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.manual-ui-tool-chip svg .filled{fill:currentColor;stroke:none}.manual-ui-header-icons{display:flex;flex-wrap:wrap;gap:8px}.manual-ui-icon-chip{width:38px;height:38px;border-radius:var(--radius-sm);border:1px solid var(--border-color);background:var(--bg-app);color:var(--text-primary);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.manual-ui-icon-chip svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.manual-ui-action-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--radius-sm);border:1px solid var(--border-color);font-size:.78rem;font-weight:600;white-space:nowrap}.manual-ui-action-chip.is-secondary{background:var(--bg-card);color:var(--text-primary)}.manual-ui-action-chip.is-danger{background:var(--danger-light);color:var(--danger);border-color:#e11d4833}.manual-ui-action-chip.is-primary{background:var(--primary);color:#fff;border-color:transparent}.manual-ui-action-chip.is-submit{background:linear-gradient(135deg,var(--primary),#6366f1);color:#fff;border:none;border-radius:20px}.manual-ui-action-chip.is-solve{background:linear-gradient(135deg,var(--success),#10b981);color:#fff;border:none;border-radius:20px}.manual-ui-action-chip svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.manual-ui-ruler-hint{display:flex;align-items:center;gap:10px;padding:10px 12px;margin:8px 0 4px;background:var(--bg-card);border:1px dashed rgba(79,70,229,.35);border-radius:var(--radius-sm)}.manual-ui-ruler-line{flex:1;min-width:72px;height:6px;background:#cbd5e1;border-radius:3px;position:relative}.manual-ui-ruler-line:before,.manual-ui-ruler-line:after{content:"";position:absolute;width:12px;height:12px;border-radius:50%;background:#4f46e5d9;border:2px solid #fff;top:50%;transform:translateY(-50%);box-shadow:0 0 0 1px #4f46e566}.manual-ui-ruler-line:before{left:-4px}.manual-ui-ruler-line:after{right:-4px}.manual-ui-ruler-hint-text{font-size:.78rem;color:var(--text-secondary);line-height:1.4}.manual-section li .manual-ui-row,.manual-section li .manual-ui-bar,.manual-section li .manual-ui-ruler-hint{margin-top:6px}@media(max-width:968px){.ruler-controls{top:8px;right:8px;gap:4px;padding:4px;border-radius:8px}.ruler-control-btn{width:32px;height:32px;border-radius:8px}.ruler-control-btn svg{width:16px;height:16px;stroke-width:2}.compass-controls,.selection-edit-controls{max-width:calc(100% - 16px)}.line-style-dropdown{z-index:60;max-height:min(52dvh,320px);overflow-y:auto;-webkit-overflow-scrolling:touch}.line-style-dropdown__item{min-height:40px;padding:10px 12px}.line-style-control-swatch{width:18px}.line-style-control-color{width:16px;height:16px}body[data-app-mode=learning] .canvas-bottom-bar,body[data-app-mode=test] .canvas-bottom-bar,body[data-app-mode=tutorial] .canvas-bottom-bar,body[data-app-mode=author] .canvas-bottom-bar{padding-right:112px;padding-left:58px}}@media(max-width:720px)and (orientation:portrait){.app-header{padding:12px 14px;flex-direction:column;align-items:stretch}.header-logo{width:100%;gap:12px}.header-text h1{font-size:1.2rem}.header-text p{display:none}.header-controls{width:100%;justify-content:center;gap:8px}.icon-btn{width:40px;height:40px;flex-shrink:0}.icon-btn svg{width:22px;height:22px}}@media(max-width:968px)and (orientation:landscape){.ruler-controls{top:6px;right:6px;gap:3px;padding:3px;border-radius:7px}.ruler-control-btn{width:28px;height:28px;border-radius:6px}.ruler-control-btn svg{width:14px;height:14px}.app-header{flex-direction:row;flex-wrap:nowrap;align-items:center;padding:8px 12px;gap:8px}.header-logo{width:auto;flex:1 1 auto;min-width:0;gap:10px}.header-logo-animation{width:40px;height:40px}.header-text{min-width:0}.header-text h1{font-size:1rem;line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-text p{display:none}.header-controls{width:auto;flex:0 0 auto;flex-wrap:nowrap;justify-content:flex-end;gap:6px}.header-user-name{display:none}.header-user{max-width:none;padding:.15rem;border:none;background:transparent}.icon-btn{width:38px;height:38px;flex-shrink:0}.icon-btn svg{width:20px;height:20px}}@media(max-width:480px)and (orientation:portrait){.ruler-picker-options{grid-template-columns:1fr}.app-container{padding:10px}.app-header{padding:12px;gap:10px;text-align:center}.header-logo{justify-content:center}.header-text h1{font-size:1.05rem}.header-controls{gap:6px}.icon-btn{width:38px;height:38px}.modal-card{padding:24px}.highlighter-picker-card,.pencil-style-card{max-height:min(92dvh,calc(100dvh - 24px));overflow-y:auto;-webkit-overflow-scrolling:touch}.manual-card{max-height:min(92vh,calc(100vh - 24px));padding:20px 18px 16px}}@media(max-width:968px)and (orientation:landscape){body[data-app-mode=test] .app-container,body[data-app-mode=tutorial] .app-container,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .app-container{padding:6px 8px;gap:6px}body[data-app-mode=test] .app-main,body[data-app-mode=tutorial] .app-main,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .app-main{display:grid;grid-template-columns:var(--app-sidebar-width, 360px) minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto;gap:8px;align-items:stretch;overflow:hidden}body[data-app-mode=test] .task-card,body[data-app-mode=tutorial] .task-card,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-card{grid-column:1;grid-row:1;order:unset;width:auto;min-width:0;min-height:0;height:auto;align-self:stretch;max-height:none;overflow:hidden;padding:10px 12px}body[data-app-mode=test] .task-card-header,body[data-app-mode=tutorial] .task-card-header,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-card-header{flex-shrink:0}body[data-app-mode=test] .task-card-title-desktop,body[data-app-mode=tutorial] .task-card-title-desktop,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-card-title-desktop{display:block;font-size:.88rem;line-height:1.25;margin:0 0 8px;padding-bottom:6px;border-bottom:1px solid var(--border-color)}body[data-app-mode=test] .task-list-toggle,body[data-app-mode=tutorial] .task-list-toggle,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-list-toggle{display:none}body[data-app-mode=test] .task-assignment-body,body[data-app-mode=tutorial] .task-assignment-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;font-size:.8rem;line-height:1.45;padding:0;border-bottom:none}body[data-app-mode=test] .task-list-panel,body[data-app-mode=tutorial] .task-list-panel,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-list-panel{display:block!important;flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-list-panel .task-text{font-size:.78rem;line-height:1.4}body[data-app-mode=test] .task-list,body[data-app-mode=tutorial] .task-list,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-list{gap:8px}body[data-app-mode=test] .task-item,body[data-app-mode=tutorial] .task-item,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-item{flex-direction:column;align-items:center;gap:6px;padding:8px 8px 10px;font-size:.78rem;position:relative;text-align:center}body[data-app-mode=test] .task-number,body[data-app-mode=tutorial] .task-number,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-number{width:26px;height:26px;font-size:.8rem;flex-shrink:0}body[data-app-mode=test] .task-text,body[data-app-mode=tutorial] .task-text,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-text{width:100%;flex:none;min-width:0;text-align:center;line-height:1.35;font-size:.76rem}body[data-app-mode=test] .task-status,body[data-app-mode=tutorial] .task-status,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-status{position:absolute;top:6px;right:6px;line-height:1}body[data-app-mode=test] .task-status:before,body[data-app-mode=tutorial] .task-status:before,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-status:before{font-size:.85rem}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .solution-step-mobile{display:none}body[data-app-mode=test] .sidebar-actions-bar,body[data-app-mode=tutorial] .sidebar-actions-bar,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .sidebar-actions-bar{grid-column:1;grid-row:2;order:unset;width:auto;position:static;max-height:none;padding:0 0 2px;border:none;box-shadow:none;background:transparent;overflow:visible;gap:6px}body[data-app-mode=test] .sidebar-actions-bar .helper-card,body[data-app-mode=tutorial] .sidebar-actions-bar .helper-card,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .sidebar-actions-bar .helper-card{display:none}body[data-app-mode=test] .sidebar-actions-bar .controls-card,body[data-app-mode=tutorial] .sidebar-actions-bar .controls-card,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .sidebar-actions-bar .controls-card{width:100%;gap:6px}body[data-app-mode=test] .sidebar-actions-bar .controls-card .btn,body[data-app-mode=tutorial] .sidebar-actions-bar .controls-card .btn,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .sidebar-actions-bar .controls-card .btn{flex:1;padding:7px 8px;font-size:.74rem;gap:4px}body[data-app-mode=test] .sidebar-actions-bar .controls-card .btn svg,body[data-app-mode=tutorial] .sidebar-actions-bar .controls-card .btn svg,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .sidebar-actions-bar .controls-card .btn svg{width:15px;height:15px}body[data-app-mode=test] .canvas-section,body[data-app-mode=tutorial] .canvas-section,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .canvas-section{grid-column:2;grid-row:1 / -1;order:unset;min-height:0;min-width:0}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .canvas-bottom-bar{padding-left:12px;padding-right:12px}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-bottom-actions{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;width:auto;flex:1}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-bottom-actions .learning-dsl-btn{font-size:.82rem;padding:8px 14px}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-bottom-actions .solve-btn{position:absolute;right:0;bottom:0;top:auto;transform:none;padding:8px 14px;font-size:.82rem}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-bottom-actions .solve-btn:hover{transform:scale(1.05)}body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-bottom-actions .solve-btn:active{transform:scale(.98)}body[data-app-mode=test] .learning-actions .learning-dsl-btn{display:none}body[data-app-mode=test] .submit-btn{padding:8px 14px;font-size:.82rem}body[data-app-mode=tutorial] .solution-step-mobile{display:none}}@media(max-width:968px)and (orientation:portrait){body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .canvas-bottom-bar{display:none}body[data-app-mode=test] .task-card,body[data-app-mode=tutorial] .task-card{flex:0 0 auto;max-height:min(24vh,200px);min-height:0;padding:8px 12px;overflow:hidden}body[data-app-mode=test] .task-card-header,body[data-app-mode=tutorial] .task-card-header{flex-shrink:0}body[data-app-mode=test] .task-card-title-desktop,body[data-app-mode=tutorial] .task-card-title-desktop{font-size:.88rem;font-weight:700;line-height:1.2;margin:0 0 6px;padding-bottom:4px;border-bottom:1px solid var(--border-color)}body[data-app-mode=test] .task-assignment-body,body[data-app-mode=tutorial] .task-assignment-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0;font-size:.78rem;line-height:1.4;border-bottom:none}body[data-app-mode=test] .task-assignment-body p,body[data-app-mode=tutorial] .task-assignment-body p{margin-bottom:.4em}body[data-app-mode=test] .task-list-panel,body[data-app-mode=tutorial] .task-list-panel{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}body[data-app-mode=test] .sidebar-actions-bar{max-height:none;padding:4px 0 6px}}@media(max-width:968px){body[data-mode-picker-open=true]{overflow:hidden}#mode-picker-modal.modal-overlay{align-items:flex-start;padding:max(10px,2dvh) 12px;overflow-y:auto;-webkit-overflow-scrolling:touch}.mode-picker-card{width:min(100%,520px);max-width:none;max-height:calc(100dvh - 20px);margin:auto;padding:18px 16px;display:flex;flex-direction:column;min-height:0;overflow:hidden;text-align:left}.mode-picker-card h2{font-size:1.15rem;text-align:center;margin:0 0 8px}.mode-picker-card>p{font-size:.82rem;line-height:1.45;text-align:center;margin:0}.mode-picker-options{margin:12px 0 0;flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.mode-picker-btn,.pencil-picker-option{padding:12px 14px}.mode-picker-btn strong,.pencil-picker-option strong{font-size:.92rem}.mode-picker-btn span,.pencil-picker-option span{font-size:.78rem;line-height:1.35}.pencil-picker-card{width:min(100%,520px);padding:18px 16px;text-align:left}.pencil-picker-card h2{font-size:1.15rem;text-align:center;margin:0 0 8px}.pencil-picker-card>p{font-size:.82rem;line-height:1.45;text-align:center;margin:0 0 12px}.pencil-picker-options{margin:0 0 12px;gap:10px;padding:2px}.pencil-picker-option{padding:12px 14px}.pencil-picker-option strong{font-size:.92rem}.pencil-picker-option span{font-size:.78rem;line-height:1.35}}@media(max-width:968px)and (orientation:landscape){#mode-picker-modal.modal-overlay{align-items:center;padding:8px}.mode-picker-card{width:min(96vw,860px);max-height:calc(100dvh - 16px);padding:12px 14px}.mode-picker-card h2{font-size:1rem;margin-bottom:4px}.mode-picker-card>p{font-size:.72rem;line-height:1.35;margin-bottom:2px}.mode-picker-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px}.mode-picker-btn,.pencil-picker-option{padding:10px 12px;min-height:0}.mode-picker-btn strong,.pencil-picker-option strong{font-size:.86rem;margin-bottom:2px}.mode-picker-btn strong+span,.pencil-picker-option strong+span{font-size:.7rem;line-height:1.3;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.mode-picker-print-btn{grid-column:1 / -1;align-items:center;gap:10px;padding:10px 12px}.mode-picker-print-icon{display:flex;flex-shrink:0;width:36px;height:36px;overflow:visible}.mode-picker-print-icon svg{width:18px;height:18px}.mode-picker-print-btn .mode-picker-print-copy{display:block;overflow:visible}.mode-picker-print-btn .mode-picker-print-copy>span{font-size:.7rem;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}#pencil-picker-modal.modal-overlay{align-items:center;padding:8px;overflow-y:auto}.pencil-picker-card{width:min(96vw,760px);padding:12px 14px}.pencil-picker-card h2{font-size:1rem;margin-bottom:4px;text-align:center}.pencil-picker-card>p{font-size:.72rem;line-height:1.35;margin-bottom:8px;text-align:center}.pencil-picker-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:10px;overflow:visible}.pencil-picker-option{padding:10px;min-height:0}.pencil-picker-option strong{font-size:.86rem;margin-bottom:2px}.pencil-picker-option span{font-size:.7rem;line-height:1.3;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}}@media(max-width:968px)and (orientation:landscape)and (max-height:460px){.pencil-picker-options{grid-template-columns:1fr}}:root{--vv-bottom-inset: 0px;--touch-nav-fallback: 0px;--app-safe-bottom: 0px;--canvas-bottom-gap: 12px;--bottom-bar-reserve: 56px}@media(max-width:968px){:root{--bottom-bar-reserve: 56px;--app-safe-bottom: max( 12px, env(safe-area-inset-bottom, 0px), var(--vv-bottom-inset, 0px), var(--touch-nav-fallback, 0px) );--canvas-bottom-gap: 12px}}html,body,#root{height:100%;max-width:100%;overflow-x:clip}#root{display:flex;flex-direction:column;min-height:100vh}#root .app-container{flex:1;min-height:0}@media(max-width:968px){html{height:100%}body:not(.learning-playback-expanded-active){box-sizing:border-box;height:100svh;min-height:100svh;max-height:100svh}#root{min-height:0;flex:1 1 auto;height:100%;overflow:hidden}.learning-fs-canvas-area{box-sizing:border-box}.geometry-canvas-stack:not(.mobile-canvas-fit-active){justify-content:flex-start;align-items:stretch}.board-container.learning-playback-expanded.learning-fs-fit-active .geometry-canvas-stack,.board-container:fullscreen.learning-fs-fit-active .geometry-canvas-stack{flex:0 0 auto;width:auto;height:auto;min-width:0;min-height:0;align-self:center;justify-content:center;align-items:center}.board-container.learning-playback-expanded.learning-fs-fit-active .geometry-canvas-wrap,.board-container:fullscreen.learning-fs-fit-active .geometry-canvas-wrap,.board-container.learning-playback-expanded.learning-fs-fit-active .geometry-canvas-stack .geometry-canvas-wrap,.board-container:fullscreen.learning-fs-fit-active .geometry-canvas-stack .geometry-canvas-wrap{flex:0 0 auto;width:auto;height:auto;min-width:0;min-height:0;align-self:center}.mobile-canvas-fit-active.geometry-canvas-stack{flex:0 0 auto;height:calc(var(--mobile-board-fit-height, var(--mobile-canvas-fit-height, auto)) - var(--app-safe-bottom, 0px));min-height:0}.mobile-canvas-fit-active.learning-fs-canvas-area{flex:0 0 auto;height:calc(var(--mobile-board-fit-height, auto) - var(--app-safe-bottom, 0px));min-height:0}.board-container.mobile-canvas-fit-active:not(.learning-playback-expanded):not(:fullscreen){flex:0 0 auto;height:var(--mobile-board-fit-height, auto)!important;min-height:0;max-height:100%;align-self:flex-start}.board-workspace.mobile-canvas-fit-active{flex:0 0 auto;min-height:0;height:auto}.canvas-section.mobile-canvas-fit-active{flex:0 0 auto;min-height:0;height:var(--mobile-board-fit-height, auto);max-height:100%;overflow:visible}.board-container.mobile-canvas-fit-active:not(.learning-playback-expanded):not(:fullscreen) .geometry-canvas-stack .geometry-canvas-wrap{flex:0 0 auto;min-height:0;align-self:stretch;max-width:100%}.board-container:not(.learning-playback-expanded):not(:fullscreen):not(.mobile-canvas-fit-active) .geometry-canvas-stack .geometry-canvas-wrap{flex:1;min-height:0;align-self:stretch;max-width:100%}.board-container:not(.learning-playback-expanded):not(:fullscreen){padding-bottom:var(--app-safe-bottom);box-sizing:border-box}.canvas-bottom-bar{bottom:var(--canvas-bottom-gap);left:max(12px,env(safe-area-inset-left,0px));right:max(12px,env(safe-area-inset-right,0px))}}@media(max-width:968px)and (orientation:landscape){body[data-app-mode=test] .app-main,body[data-app-mode=tutorial] .app-main,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .app-main{align-items:stretch}body[data-app-mode=test] .canvas-section,body[data-app-mode=tutorial] .canvas-section,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .canvas-section{grid-row:1 / -1;align-self:stretch;min-height:0;height:auto;max-height:none;display:flex;flex-direction:column}body[data-app-mode=test] .task-card,body[data-app-mode=tutorial] .task-card,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .task-card{align-self:stretch;height:auto;max-height:none}body[data-app-mode=test] .board-workspace,body[data-app-mode=tutorial] .board-workspace,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .board-workspace,body[data-app-mode=test] .board-container:not(.learning-playback-expanded):not(:fullscreen),body[data-app-mode=tutorial] .board-container:not(.learning-playback-expanded):not(:fullscreen),body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .board-container:not(.learning-playback-expanded):not(:fullscreen),body[data-app-mode=test] .learning-fs-canvas-area,body[data-app-mode=tutorial] .learning-fs-canvas-area,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .learning-fs-canvas-area{flex:1 1 auto;min-height:0;height:auto;width:100%}body[data-app-mode=test] .app-main.mobile-sidebar-compact .task-card,body[data-app-mode=tutorial] .app-main.mobile-sidebar-compact .task-card,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .app-main.mobile-sidebar-compact .task-card{padding:6px 8px}body[data-app-mode=test] .app-main.mobile-sidebar-compact .task-card-title-desktop,body[data-app-mode=tutorial] .app-main.mobile-sidebar-compact .task-card-title-desktop,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .app-main.mobile-sidebar-compact .task-card-title-desktop{font-size:.8rem}body[data-app-mode=test] .app-main.mobile-sidebar-compact .task-item,body[data-app-mode=tutorial] .app-main.mobile-sidebar-compact .task-item,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .app-main.mobile-sidebar-compact .task-item{padding:6px;font-size:.72rem}body[data-app-mode=test] .app-main.mobile-sidebar-compact .task-text,body[data-app-mode=tutorial] .app-main.mobile-sidebar-compact .task-text,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .app-main.mobile-sidebar-compact .task-text{line-height:1.35}body[data-app-mode=test] .app-main.mobile-sidebar-compact .sidebar-actions-bar .controls-card .btn,body[data-app-mode=tutorial] .app-main.mobile-sidebar-compact .sidebar-actions-bar .controls-card .btn,body[data-app-mode=learning]:not(.learning-playback-expanded-active):not(.learning-portrait-required) .app-main.mobile-sidebar-compact .sidebar-actions-bar .controls-card .btn{padding:6px;font-size:.7rem}}body[data-app-mode=author] .toolbox-wrapper,body[data-app-mode=author] .canvas-left-controls{position:absolute;left:0;bottom:0;flex-shrink:0;pointer-events:auto;z-index:12}body[data-app-mode=author] .canvas-bottom-bar{justify-content:center;pointer-events:none;z-index:10}body[data-app-mode=author] .author-bottom-actions{position:absolute;right:0;bottom:0;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;pointer-events:auto;z-index:12}body[data-app-mode=author] .author-done-btn,body[data-app-mode=author] .author-save-link-btn,body[data-app-mode=author] .author-next-step-btn{position:static;margin-left:0;pointer-events:auto}.author-panel-card,.author-panel-inner{display:flex;flex-direction:column;gap:12px;align-items:center;width:100%}.author-field{display:flex;flex-direction:column;gap:6px;width:100%;max-width:380px;font-size:.82rem;font-weight:600;color:var(--text-primary);text-align:left;align-items:stretch}.author-field input,.author-field textarea,.author-field select,.author-step-field textarea,.author-step-field .rich-text-input{width:100%;min-width:0;box-sizing:border-box;pointer-events:auto!important;touch-action:manipulation;position:relative;z-index:2}.author-step-field textarea{min-height:3.2rem;resize:vertical}.author-field-label{display:block;margin-bottom:2px}.author-field-stars{align-items:center}.author-catalog-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 12px;width:100%;max-width:380px}.author-catalog-grid .author-field{max-width:none}.author-catalog-grid .author-field-span{grid-column:1 / -1}.author-assignment-block{width:100%;max-width:380px}.author-assignment-prefix-wrap{margin-bottom:10px}.author-assignment-row{display:flex;gap:6px;align-items:flex-end}.author-assignment-row>.author-assignment-field{flex:1;min-width:0}.author-assignment-audio-actions{padding-bottom:2px}.author-assignment-prefix{padding:10px 12px;border-radius:10px;background:#4f46e50f;border:1px dashed rgba(79,70,229,.25);text-align:left;font-size:.9rem}.author-symbol-hint{margin:6px 0 0;font-size:.72rem;color:var(--text-secondary);text-align:left}.geometry-symbol-picker{width:100%;display:flex;flex-direction:column;gap:6px;flex:1 1 auto;min-height:0;overflow-y:auto}.geometry-symbol-picker--compact .symbol-carousel-char{font-size:1.45rem}.geometry-symbol-picker--compact .symbol-carousel-nav{height:38px}.text-format-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px}.text-format-btn-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.text-format-btn{min-width:2.35rem;height:2.35rem;padding:4px 10px;border:1px solid rgba(79,70,229,.24);border-radius:10px;background:#4f46e50f;color:inherit;font-size:.95rem;line-height:1;cursor:pointer}.text-format-btn--bold{font-weight:800}.text-format-btn--italic{font-style:italic;font-weight:600}.text-format-btn--superscript sup,.text-format-btn--subscript sub{font-size:.65em;line-height:0}.text-format-btn--superscript,.text-format-btn--subscript{font-weight:600}.text-format-btn:hover:not(:disabled){background:#4f46e524;border-color:#4f46e573}.text-format-btn:disabled{opacity:.45;cursor:not-allowed}.author-assignment-block>.text-format-toolbar{margin-top:4px}.naming-format-toolbar{margin-bottom:8px}.text-format-btn--symbols{font-family:TimesNnsSymbol,"Cambria Math",Times New Roman,serif;font-size:1.05rem}.text-format-btn--symbols.active{background:#4f46e52e;border-color:#4f46e58c}.text-format-colors{display:flex;align-items:center;gap:4px;margin-left:4px;padding-left:8px;border-left:1px solid rgba(79,70,229,.2)}.text-format-color-swatch{width:1.35rem;height:1.35rem;padding:0;border:1px solid rgba(30,41,59,.28);border-radius:6px;cursor:pointer;flex-shrink:0}.text-format-color-swatch--default{background:linear-gradient(135deg,transparent 46%,#64748b 46%,#64748b 54%,transparent 54%),#f8fafc}.text-format-color-swatch:hover:not(:disabled){transform:scale(1.08);border-color:#1e293b8c}.text-format-color-swatch:disabled{opacity:.45;cursor:not-allowed}.rich-text-symbol-picker{margin-top:4px}.naming-symbol-picker{margin-bottom:8px}.naming-symbol-picker .geometry-symbol-picker{max-height:9.5rem}.naming-symbol-picker .symbol-page-tab{font-size:.72rem;padding:4px 8px}.naming-symbol-picker .symbol-grid-btn{min-width:2rem;height:2rem;font-size:1rem}.symbol-grid{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-start;width:100%;margin-top:4px}.symbol-grid-btn{min-width:2.35rem;height:2.35rem;padding:4px 8px;border:1px solid rgba(79,70,229,.24);border-radius:10px;background:#4f46e50f;color:inherit;font-family:TimesNnsSymbol,"Cambria Math",Times New Roman,serif;font-size:1.15rem;line-height:1;cursor:pointer}.symbol-grid-btn:hover{background:#4f46e524;border-color:#4f46e573}.author-step-drafts{text-align:left}.author-step-drafts-toolbar{margin-bottom:8px}.author-step-drafts-label{font-size:.82rem;font-weight:700;color:var(--text-primary)}.author-add-step-wrap{display:flex;flex-direction:column;align-items:center;gap:8px;margin-top:10px;margin-bottom:24px;width:100%}.author-assignment-block>.geometry-symbol-picker{margin-top:4px}.author-add-step-btn{padding:9px 20px;font-size:.935rem}.author-step-empty{margin:0;font-size:.8rem;color:var(--text-secondary)}.author-step-draft-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.author-step-draft-item{display:flex;gap:6px;align-items:flex-end}.author-step-field{flex:1;align-items:stretch!important;text-align:left}.author-step-field-label{text-align:left}.author-step-actions{display:flex;flex:0 0 auto;gap:4px;align-items:center}.author-step-audio-input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.author-step-audio-btn{flex:0 0 32px;width:32px;height:32px;padding:0;border:1px solid rgba(37,99,235,.28);border-radius:8px;background:#2563eb0f;color:#2563eb;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.author-step-audio-btn-active{border-color:#16a34a66;background:#16a34a1f;color:#15803d}.author-step-audio-clear-btn{flex:0 0 32px;width:32px;height:32px;padding:0;border:1px solid rgba(100,116,139,.35);border-radius:8px;background:#64748b14;color:#475569;font-size:.75rem;line-height:1;cursor:pointer}.author-remove-step-btn{flex:0 0 32px;width:32px;height:32px;padding:0;border:1px solid rgba(225,29,72,.25);border-radius:8px;background:#e11d480f;color:var(--danger, #e11d48);font-size:1.2rem;line-height:1;cursor:pointer}.author-panel-card label,.author-panel-inner label{display:flex;flex-direction:column;gap:4px;font-size:.82rem;font-weight:600;color:var(--text-primary)}.author-panel-card input,.author-panel-card textarea,.author-panel-card select,.author-panel-inner input,.author-panel-inner textarea,.author-panel-inner select{font:inherit;padding:8px 10px;border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-card);color:var(--text-primary);pointer-events:auto;-webkit-user-select:text;user-select:text}.author-panel-card select,.author-panel-inner select{cursor:pointer;-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.author-mode-card input,.author-mode-card textarea,.author-mode-card select{font-size:16px}.author-panel-card textarea,.author-panel-inner textarea{min-height:100px;resize:vertical}.author-rich-text-input,.naming-rich-input,.rich-text-input{font:inherit;font-family:Carlito,TimesNnsSymbol,system-ui,sans-serif;padding:8px 10px;border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-card);color:var(--text-primary);pointer-events:auto;user-select:text;-webkit-user-select:text;white-space:pre-wrap;overflow-wrap:anywhere}.author-rich-text-input{min-height:100px}.author-step-rich-input{min-height:3.2rem}.author-rich-text-input:empty:before,.naming-rich-input:empty:before,.rich-text-input:empty:before{content:attr(data-placeholder);color:var(--text-muted);pointer-events:none}.author-assignment-toolbar{margin-top:6px}.author-badge-ok{display:inline-block;font-size:.78rem;font-weight:700;color:var(--success);background:var(--success-light);padding:4px 10px;border-radius:999px}.author-hint-text{font-size:.82rem;color:var(--text-secondary);margin:0}.author-hint-text.warn{color:#b45309}.author-error{color:var(--danger);font-size:.82rem;margin:0}.star-picker{display:flex;align-items:center;gap:2px;flex-wrap:wrap}.star-btn{border:none;background:none;padding:0;cursor:pointer;line-height:0}.star-btn.readonly{cursor:default}.star-value{margin-left:6px;font-size:.82rem;color:var(--text-secondary);font-weight:600}.header-difficulty{display:flex;align-items:center;gap:6px;margin-left:auto;margin-right:12px}.header-difficulty-label{font-size:.75rem;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}.assignment-body{font-size:.9rem;color:var(--text-primary);line-height:1.55}.assignment-body ol{padding-left:1.25rem;margin:.5rem 0 0}.tool-subpanel{border-top:1px solid var(--border-color);margin-top:4px;padding-top:6px;display:flex;flex-direction:column;gap:4px}.tool-subpanel .tool-btn{font-size:.82rem;padding:8px 12px}.load-assignment-bar{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.load-assignment-bar .btn{flex:1;min-width:120px;font-size:.82rem;padding:10px 12px}.board-container .geometry-canvas-wrap{flex:1;min-height:0;position:relative;display:flex}.geometry-canvas-stack{position:relative;flex:1;min-height:0;min-width:0;display:flex;flex-direction:column}.geometry-canvas-stack .geometry-canvas-wrap{flex:1;min-height:0}.geometry-canvas-wrap.canvas-pointer-locked,.geometry-canvas-wrap.canvas-pointer-locked .geometry-canvas{pointer-events:none}.svg-crop-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:35;cursor:crosshair;touch-action:none;-webkit-user-select:none;user-select:none;overflow:hidden;background:#0f172a61}.svg-crop-overlay:has(.svg-crop-rect){background:transparent}.svg-crop-hint{position:absolute;top:10px;left:50%;transform:translate(-50%);z-index:2;margin:0;padding:8px 14px;max-width:min(92%,420px);text-align:center;pointer-events:none;border-radius:999px;background:#0f172ad1;color:#fff;font-size:.85rem;font-weight:600;line-height:1.3}.svg-crop-toolbar{position:absolute;left:50%;top:48px;transform:translate(-50%);z-index:3;display:flex;gap:8px;padding:8px;border-radius:12px;background:#fffffff0;box-shadow:0 8px 24px #0f172a2e}.svg-crop-rect{position:absolute;z-index:1;box-sizing:border-box;border:2px solid #818cf8;box-shadow:0 0 0 9999px #0f172a8c;cursor:move;touch-action:none}.svg-crop-handle{position:absolute;width:12px;height:12px;padding:0;border:2px solid #4f46e5;border-radius:2px;background:#fff;box-sizing:border-box}.svg-crop-handle-n,.svg-crop-handle-s{left:50%;margin-left:-6px;cursor:ns-resize}.svg-crop-handle-e,.svg-crop-handle-w{top:50%;margin-top:-6px;cursor:ew-resize}.svg-crop-handle-n{top:-6px}.svg-crop-handle-s{bottom:-6px}.svg-crop-handle-e{right:-6px}.svg-crop-handle-w{left:-6px}.svg-crop-handle-ne,.svg-crop-handle-nw,.svg-crop-handle-se,.svg-crop-handle-sw{cursor:nesw-resize}.svg-crop-handle-ne{top:-6px;right:-6px}.svg-crop-handle-nw{top:-6px;left:-6px;cursor:nwse-resize}.svg-crop-handle-se{bottom:-6px;right:-6px;cursor:nwse-resize}.svg-crop-handle-sw{bottom:-6px;left:-6px}.svg-crop-toolbar .btn{min-width:120px}body.svg-crop-selecting .canvas-bottom-bar,body.svg-crop-selecting .canvas-left-controls,body.svg-crop-selecting .toolbox-wrapper,body.svg-crop-selecting .author-bottom-actions,body.svg-crop-selecting .learning-actions{pointer-events:none}.author-rewind-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:center;justify-content:center;background:#0f172a47;color:#fff;font-weight:600;font-size:1rem;letter-spacing:.02em;pointer-events:all;cursor:wait}.drawing-measurement-hud{position:absolute;top:max(12px,env(safe-area-inset-top,0px));left:50%;transform:translate(-50%);z-index:8;pointer-events:none;padding:14px 28px;border-radius:16px;font-family:Outfit,sans-serif;font-size:clamp(1.65rem,7vw,2.25rem);font-weight:700;line-height:1.1;letter-spacing:.02em;white-space:nowrap;text-align:center;color:#312e81;background:#fffffff5;border:2px solid rgba(79,70,229,.35);box-shadow:0 6px 24px #0f172a2e;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}[data-theme=dark] .drawing-measurement-hud{color:#f8fafc;background:#1e293bf5;border-color:#818cf880;box-shadow:0 6px 24px #00000059}@media(min-width:969px){.drawing-measurement-hud{display:none}}#geometry-canvas,.geometry-canvas{flex:1;min-height:0;width:100%;height:100%;touch-action:none}.solution-dsl-overlay{padding:max(12px,env(safe-area-inset-top,0px)) max(12px,env(safe-area-inset-right,0px)) max(12px,env(safe-area-inset-bottom,0px)) max(12px,env(safe-area-inset-left,0px));overflow-y:auto;-webkit-overflow-scrolling:touch;align-items:center}.solution-dsl-card{display:flex;flex-direction:column;width:min(92vw,640px);max-width:640px;max-height:min(92dvh,calc(100dvh - 24px));padding:1.25rem 1.25rem 1rem;text-align:left;overflow:hidden;margin:auto 0;box-sizing:border-box}.solution-dsl-card h2{flex-shrink:0;margin:0 0 .5rem;font-size:1.15rem;text-align:center}.solution-dsl-intro{flex-shrink:0;margin:0 0 .65rem;font-size:.88rem;line-height:1.45;text-align:left}.solution-dsl-intro code{font-size:.82em;word-break:break-word}.solution-dsl-toolbar{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.5rem;flex-shrink:0}.solution-dsl-body{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:.35rem;overflow:hidden}.solution-dsl-file-input{display:none}.solution-dsl-textarea{flex:1 1 auto;width:100%;min-height:10rem;margin:0;padding:.75rem;font-family:ui-monospace,Cascadia Code,Consolas,monospace;font-size:.82rem;line-height:1.4;border-radius:10px;border:1px solid rgba(79,70,229,.25);resize:none;box-sizing:border-box;overflow:auto;-webkit-overflow-scrolling:touch}.solution-dsl-actions{flex-shrink:0;margin-top:.75rem;padding-top:.65rem;border-top:1px solid var(--border-color, #cbd5e1)}.solution-dsl-error{flex-shrink:0;color:#dc2626;font-size:.85rem;margin:0}@media(max-width:968px)and (orientation:portrait){.solution-dsl-card{width:min(94vw,640px);max-height:min(90dvh,calc(100dvh - 16px));padding:1rem 1rem .85rem}.solution-dsl-intro{font-size:.82rem}.solution-dsl-textarea{min-height:12rem;font-size:16px}.solution-dsl-actions{flex-wrap:wrap;justify-content:stretch;gap:8px}.solution-dsl-actions .btn{flex:1 1 calc(50% - 4px);min-width:0}}@media(max-width:968px)and (orientation:landscape){.solution-dsl-overlay{align-items:center;padding:8px 10px}.solution-dsl-card{width:min(96vw,720px);max-height:min(94dvh,calc(100dvh - 12px));padding:.65rem .85rem .55rem}.solution-dsl-card h2{font-size:.95rem;margin-bottom:.3rem}.solution-dsl-intro{font-size:.72rem;line-height:1.35;margin-bottom:.4rem}.solution-dsl-toolbar{margin-bottom:.35rem}.solution-dsl-toolbar .btn{padding:.35rem .65rem;font-size:.76rem}.solution-dsl-textarea{min-height:5.5rem;padding:.5rem .6rem;font-size:.75rem}.solution-dsl-actions{margin-top:.45rem;padding-top:.45rem;gap:6px}.solution-dsl-actions .btn{padding:.38rem .7rem;font-size:.76rem}}.learning-actions{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.learning-dsl-btn{font-size:.85rem;padding:.45rem .75rem}.solve-btn-meta{font-size:.85em;opacity:.85;font-weight:500}.author-mode-overlay{z-index:10000;pointer-events:auto}body.author-modal-open .app-container{pointer-events:none;-webkit-user-select:none;user-select:none}body.author-modal-open .author-mode-overlay,body.author-modal-open .author-mode-overlay *,body.author-modal-open .author-uploaded-overlay,body.author-modal-open .author-uploaded-overlay *,body.author-modal-open .author-bulk-overlay,body.author-modal-open .author-bulk-overlay *,body.author-modal-open .author-info-overlay,body.author-modal-open .author-info-overlay *,body.author-modal-open .author-labels-overlay,body.author-modal-open .author-labels-overlay *,body.author-modal-open .author-save-help-overlay,body.author-modal-open .author-save-help-overlay *,body.author-modal-open .app-alert-overlay,body.author-modal-open .app-alert-overlay *{pointer-events:auto;-webkit-user-select:text;user-select:text}.author-mode-card{max-width:520px;width:min(92vw,520px);max-height:min(90vh,720px);overflow-y:auto;border-left:none!important;text-align:center;pointer-events:auto;position:relative;z-index:10001;-webkit-overflow-scrolling:touch}.author-assignment-prefix-static{margin-bottom:8px;text-align:left;font-size:.95rem;font-weight:700}.author-assignment-field textarea{min-height:7rem}.author-step-section-hint,.task-list-section-label{margin:0 0 8px;font-size:.75rem;color:var(--text-secondary);line-height:1.4;text-align:left}.task-assignment-body{padding:12px 16px;line-height:1.55;font-size:.92rem;text-align:left;border-bottom:1px solid var(--border-color, rgba(203, 213, 225, .8))}.task-assignment-body p{margin:0 0 .65em}.task-assignment-body p:last-child{margin-bottom:0}.task-assignment-body strong,.task-text strong,.solution-step-mobile-text strong{font-weight:700}.task-assignment-body em,.task-text em,.solution-step-mobile-text em{font-style:italic}.task-assignment-body sup,.task-text sup,.solution-step-mobile-text sup,.author-rich-text-input sup,.naming-rich-input sup,.rich-text-input sup{font-size:.75em;line-height:0;vertical-align:super}.task-assignment-body sub,.task-text sub,.solution-step-mobile-text sub,.author-rich-text-input sub,.naming-rich-input sub,.rich-text-input sub{font-size:.75em;line-height:0;vertical-align:sub}.task-item .task-text{flex:1;min-width:0;text-align:left;overflow:hidden}.task-step-actions{display:inline-flex;align-items:center;gap:4px;flex-shrink:0}.task-item .task-number{flex-shrink:0;margin-top:2px}.task-item .task-status{flex-shrink:0}.task-step-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid var(--border-color, #cbd5e1);border-radius:8px;background:var(--bg-card, #fff);color:var(--text-secondary, #64748b);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.task-step-btn:hover:not(:disabled){color:var(--primary, #4f46e5);border-color:var(--primary, #4f46e5);background:var(--primary-light, #e0e7ff)}.task-step-btn:disabled{opacity:.35;cursor:not-allowed}.task-step-btn-delete:hover:not(:disabled){color:#b91c1c;border-color:#fca5a5;background:#fef2f2}.task-step-btn-rewind:not(:disabled){color:var(--primary, #4f46e5)}.author-step-edit-card{width:min(92vw,440px);text-align:left}.author-step-edit-card h3{margin:0 0 8px;font-size:1.1rem}.author-step-edit-hint{margin:0 0 12px;font-size:.85rem;color:var(--text-secondary);line-height:1.45}.author-step-edit-textarea{width:100%;min-height:5.5rem;margin-bottom:8px;padding:10px 12px;border:1px solid var(--border-color, #cbd5e1);border-radius:var(--radius-sm, 8px);font:inherit}.author-step-edit-card .text-format-toolbar{margin-bottom:14px}.author-step-edit-actions{display:flex;justify-content:flex-end;gap:8px}.author-mode-header{display:grid;grid-template-columns:auto 1fr 40px;align-items:center;gap:8px;margin-bottom:4px}.author-mode-header-actions{display:flex;gap:4px;justify-self:start}.author-mode-header-spacer{width:40px;height:1px}.author-mode-load-existing{justify-self:start}.author-mode-file-input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.author-mode-load-hint{margin:0 0 8px;font-size:.8rem;color:var(--text-secondary);line-height:1.4;text-align:center}.author-mode-header h2{margin:0;font-size:1.25rem;text-align:center}.author-mode-close{flex-shrink:0;justify-self:end}.author-mode-intro{margin:0 0 12px;font-size:.88rem;color:var(--text-secondary);line-height:1.45}.author-uploaded-overlay{z-index:10020}.modal-overlay.author-save-help-overlay{z-index:10025}body.author-modal-open .app-alert-overlay,body:has(.author-uploaded-overlay) .app-alert-overlay{z-index:10030}.author-uploaded-card{width:min(920px,calc(100vw - 32px));max-width:none;max-height:min(88vh,900px);overflow:auto;text-align:left;background:var(--igeo-db-bg);border:1px solid var(--igeo-db-border)}:root{--igeo-db-bg: #eef6ff;--igeo-db-border: #c7dcf7}[data-theme=dark]{--igeo-db-bg: #16233b;--igeo-db-border: #2b4470}.author-uploaded-card .author-uploaded-item,.author-uploaded-card .author-bulk-row,.author-uploaded-card .author-bulk-drop,.author-uploaded-card .author-bulk-mode:not(.is-active){background:var(--bg-card)}.author-uploaded-card .author-bulk-drop.is-over{background:var(--primary-light)}.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}.author-uploaded-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin:0 0 6px}.author-uploaded-head h2{margin:0}.author-uploaded-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-secondary);cursor:pointer}.author-uploaded-close:hover{background:var(--bg-app);color:var(--text-primary)}.author-uploaded-intro{margin:0 0 14px;font-size:.88rem;color:var(--text-secondary);line-height:1.45}.author-uploaded-search{position:relative;margin:0 0 12px}.author-uploaded-search svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-secondary);pointer-events:none}.author-uploaded-search input,.author-uploaded-filters input,.author-uploaded-filters select{width:100%;box-sizing:border-box;min-height:42px;padding:8px 12px;border:1px solid var(--border-color);border-radius:10px;background:var(--bg-card);color:var(--text-primary);font:inherit;font-size:.92rem;font-weight:400}.author-uploaded-search input{padding-left:36px}.author-uploaded-search input:focus,.author-uploaded-filters input:focus,.author-uploaded-filters select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 18%,transparent)}.author-uploaded-filters{display:grid;grid-template-columns:minmax(12rem,2fr) minmax(5.5rem,7rem) minmax(5.5rem,7rem);gap:10px 12px;margin:0 0 12px}.author-uploaded-filters .author-field{max-width:none}.author-uploaded-chips{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}.author-uploaded-chip{padding:5px 14px;border:1px solid var(--border-color);border-radius:999px;background:var(--bg-card);color:var(--text-primary);font:inherit;font-size:.84rem;font-weight:600;cursor:pointer}.author-uploaded-chip:hover{border-color:var(--primary)}.author-uploaded-chip.is-active{background:var(--primary-light);border-color:color-mix(in srgb,var(--primary) 55%,var(--bg-card));color:var(--primary)}.author-uploaded-status-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 12px}.author-uploaded-status,.author-uploaded-empty{margin:0;font-size:.88rem;color:var(--text-secondary);line-height:1.45}.author-uploaded-empty{margin:8px 0 16px}.author-uploaded-link-btn{border:none;background:none;padding:4px 0;color:var(--primary);font:inherit;font-size:.86rem;font-weight:600;cursor:pointer}.author-uploaded-link-btn:hover{text-decoration:underline}.author-uploaded-list{list-style:none;margin:0 0 8px;padding:0;display:flex;flex-direction:column;gap:10px}.author-uploaded-item{display:grid;grid-template-columns:160px minmax(0,1fr) 190px;align-items:center;gap:16px;padding:14px;border:1px solid var(--border-color);border-radius:12px;background:var(--bg-app)}.author-uploaded-thumb{position:relative;width:160px;height:110px;border:1px solid var(--border-color);border-radius:var(--radius-sm);background:#fff;overflow:hidden;display:flex;align-items:center;justify-content:center}.author-uploaded-thumb img{width:100%;height:100%;object-fit:contain;display:block}.author-uploaded-thumb-badge{position:absolute;right:4px;bottom:4px;padding:1px 6px;border-radius:999px;background:#0f172a99;color:#fff;font-size:.68rem;font-weight:600;line-height:1.5}.author-uploaded-thumb-placeholder{font-size:.78rem;color:#94a3b8}.author-uploaded-item-main{display:flex;flex-direction:column;gap:4px;min-width:0}.author-uploaded-item-main strong{font-size:1rem;line-height:1.35}.author-uploaded-meta{font-size:.84rem;color:var(--text-secondary);line-height:1.45}.author-uploaded-id{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.78rem;color:var(--text-secondary);overflow-wrap:anywhere}.author-uploaded-item-actions{display:flex;flex-direction:column;gap:6px}.author-uploaded-item-actions .assignment-link-copy-buttons{display:contents}.author-uploaded-item-actions .btn{width:100%;justify-content:center;font-family:inherit;padding:8px 12px;font-size:.84rem}.author-uploaded-bulk-row{display:flex;flex-wrap:wrap;gap:8px;margin:-4px 0 12px}.author-uploaded-bulk-row .btn{font-family:inherit;padding:7px 14px;font-size:.84rem}.modal-overlay.author-bulk-overlay,.modal-overlay.author-info-overlay{z-index:10026}.modal-overlay.author-labels-overlay{z-index:10028}.author-labels-card{width:min(980px,calc(100vw - 32px))}.author-labels-layout{display:grid;grid-template-columns:minmax(14rem,.8fr) minmax(0,1.4fr);gap:16px;margin:0 0 12px}.author-labels-list{list-style:none;margin:0;padding:0;max-height:min(60vh,560px);overflow:auto;display:flex;flex-direction:column;gap:6px}.author-labels-item{display:flex;align-items:flex-start;gap:8px;width:100%;padding:8px 10px;border:1px solid var(--border-color);border-radius:10px;background:var(--bg-card);color:var(--text-primary);font:inherit;text-align:left;cursor:pointer}.author-labels-item.is-active{border-color:var(--primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--primary) 25%,transparent)}.author-labels-item-text{display:flex;flex-direction:column;gap:2px;min-width:0;font-size:.84rem}.author-labels-item-text span{color:var(--text-secondary);font-size:.78rem;overflow-wrap:anywhere}.author-labels-dot{flex:none;width:10px;height:10px;margin-top:4px;border-radius:50%;background:var(--success)}.author-labels-dot.is-missing{background:var(--danger)}.author-labels-form{display:flex;flex-direction:column;gap:10px;padding:12px;border:1px solid var(--border-color);border-radius:12px;background:var(--bg-card)}.author-labels-form .author-field{max-width:none}.author-labels-form input,.author-labels-form select{min-height:38px;padding:6px 10px;border:1px solid var(--border-color);border-radius:10px;background:var(--bg-card);color:var(--text-primary);font:inherit;font-weight:400}.author-labels-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.author-labels-row-3{grid-template-columns:repeat(3,minmax(0,1fr))}.author-labels-label{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.author-labels-label .author-uploaded-link-btn{font-size:.76rem;padding:0}.author-labels-problem{margin:0;font-size:.86rem;color:var(--success);font-weight:600}.author-labels-problem.is-missing{color:var(--danger)}.author-bulk-warning{font-size:.8rem;color:#92400e;line-height:1.45}[data-theme=dark] .author-bulk-warning{color:#fbbf24}.author-bulk-row.is-needs-meta .author-bulk-badge,.author-bulk-row.is-archived-id .author-bulk-badge{background:var(--danger-light);border-color:var(--danger);color:var(--danger)}@media(max-width:760px){.author-labels-layout,.author-labels-row,.author-labels-row-3{grid-template-columns:1fr}.author-labels-list{max-height:30vh}}.author-bulk-note-field{display:flex;flex-direction:column;gap:4px;margin:0 0 12px;font-size:.86rem;font-weight:600}.author-bulk-note-field input{min-height:38px;padding:6px 12px;border:1px solid var(--border-color);border-radius:10px;background:var(--bg-card);color:var(--text-primary);font:inherit;font-weight:400}.author-bulk-note-field .author-field-hint{font-weight:400}body[data-app-mode=author] .author-save-note{width:min(18rem,100%);min-height:40px;padding:6px 12px;border:1px solid var(--border-color);border-radius:10px;background:var(--bg-card);color:var(--text-primary);font:inherit;font-size:.86rem;pointer-events:auto}.author-info-card{width:min(760px,calc(100vw - 32px))}.author-info-line{display:flex;flex-wrap:wrap;gap:4px 12px;margin:0 0 6px;font-size:.9rem;line-height:1.45}.author-info-label{min-width:11.5rem;color:var(--text-secondary)}.author-info-line.is-strong{margin:8px 0;padding:8px 12px;border:1px solid color-mix(in srgb,var(--primary) 45%,var(--bg-card));border-radius:10px;background:var(--primary-light);font-weight:600}.author-info-heading{margin:16px 0 8px;font-size:1rem}.author-info-history{list-style:none;margin:0 0 10px;padding:0}.author-info-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 12px;padding:8px 0;border-top:1px solid var(--border-color);font-size:.88rem}.author-info-when{min-width:9.5rem;color:var(--text-secondary)}.author-info-who{font-weight:600}.author-info-what{color:var(--primary);font-weight:600}.author-info-derived{padding:1px 8px;border-radius:999px;background:var(--bg-app);color:var(--text-secondary);font-size:.74rem}.author-info-note{flex-basis:100%;color:var(--text-primary);font-style:italic}.author-info-gap{padding:8px 0;border-top:1px dashed var(--border-color);color:var(--text-secondary);font-size:.82rem;text-align:center}.author-info-hint{margin:0 0 12px}.author-bulk-card{width:min(760px,calc(100vw - 32px))}.author-bulk-modes{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:10px;margin:0 0 14px}.author-bulk-mode{position:relative;display:flex;flex-direction:column;gap:4px;padding:12px 14px 12px 40px;border:1px solid var(--border-color);border-radius:12px;background:var(--bg-card);cursor:pointer}.author-bulk-mode input{position:absolute;left:14px;top:14px;margin:0}.author-bulk-mode.is-active{border-color:var(--primary);background:var(--primary-light)}.author-bulk-mode-title{font-weight:600;font-size:.92rem}.author-bulk-mode-desc{font-size:.82rem;color:var(--text-secondary);line-height:1.45}.author-bulk-drop{display:flex;flex-direction:column;align-items:center;gap:10px;padding:26px 16px;border:2px dashed var(--border-color);border-radius:12px;background:var(--bg-app);text-align:center;color:var(--text-secondary)}.author-bulk-drop p{margin:0}.author-bulk-drop.is-over{border-color:var(--primary);background:var(--primary-light)}.author-bulk-drop .btn,.author-bulk-actions .btn{font-family:inherit}.author-bulk-summary{margin:0 0 12px;font-size:.92rem;line-height:1.5}.author-bulk-list{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:6px}.author-bulk-row{display:flex;align-items:flex-start;gap:12px;padding:10px 12px;border:1px solid var(--border-color);border-radius:10px;background:var(--bg-app)}.author-bulk-badge{flex:none;min-width:7.5rem;padding:2px 8px;border-radius:999px;background:var(--bg-card);border:1px solid var(--border-color);font-size:.74rem;font-weight:600;text-align:center;color:var(--text-secondary)}.author-bulk-row.is-replace .author-bulk-badge,.author-bulk-row.is-create .author-bulk-badge{background:var(--primary-light);border-color:var(--primary);color:var(--primary)}.author-bulk-row.is-done .author-bulk-badge{background:var(--success-light);border-color:var(--success);color:var(--success)}.author-bulk-row.is-failed .author-bulk-badge,.author-bulk-row.is-bad-file .author-bulk-badge,.author-bulk-row.is-bad-id .author-bulk-badge,.author-bulk-row.is-missing-id .author-bulk-badge,.author-bulk-row.is-already-there .author-bulk-badge,.author-bulk-row.is-duplicate .author-bulk-badge,.author-bulk-row.is-fetch-error .author-bulk-badge{background:var(--danger-light);border-color:var(--danger);color:var(--danger)}.author-bulk-row-main{display:flex;flex-direction:column;gap:2px;min-width:0}.author-bulk-row-main strong{font-size:.92rem}.author-bulk-foreign{margin-left:8px;padding:1px 8px;border-radius:999px;background:#fef3c7;color:#92400e;font-size:.72rem;font-weight:700;vertical-align:1px}.author-bulk-note{font-size:.8rem;color:var(--text-primary);line-height:1.45}.author-bulk-check{display:flex;align-items:flex-start;gap:8px;margin:0 0 12px;font-size:.86rem;line-height:1.45;cursor:pointer}.author-bulk-check input{margin-top:3px}.author-bulk-status{margin:0 0 12px}.author-bulk-actions{flex-wrap:wrap}@media(max-width:520px){.author-bulk-row{flex-direction:column;gap:6px}}@media(max-width:760px){.author-uploaded-item{grid-template-columns:120px minmax(0,1fr)}.author-uploaded-thumb{width:120px;height:84px}.author-uploaded-item-actions{grid-column:1 / -1;flex-direction:row;flex-wrap:wrap}.author-uploaded-item-actions .btn{width:auto;flex:1 1 10rem}}@media(max-width:520px){.author-uploaded-filters{grid-template-columns:1fr 1fr}.author-uploaded-filters .author-field:first-child{grid-column:1 / -1}.author-uploaded-item{grid-template-columns:minmax(0,1fr)}.author-uploaded-thumb{width:100%;height:140px}}.author-panel-inner{display:flex;flex-direction:column;gap:10px}.author-mode-done-btn{display:block;width:100%;max-width:340px;margin:12px auto 0}.author-scene-badge{display:block;text-align:center;margin-top:4px}.author-ref-canvas-size{opacity:.85;font-weight:500}.author-recording-hint{text-align:center;margin:4px 0 0}body[data-app-mode=author] .controls-card{flex-direction:column;align-items:stretch;gap:8px;flex-shrink:0}body[data-app-mode=author] .sidebar-actions-bar{flex-shrink:0}@media(max-width:968px){body[data-app-mode=author] .task-card{max-height:min(48vh,400px);overflow-y:auto;-webkit-overflow-scrolling:touch}body[data-app-mode=author] .sidebar-actions-bar{order:2;flex-shrink:0;max-height:none;overflow:visible}}body[data-app-mode=author] .controls-card .author-set-scene-btn,body[data-app-mode=author] .controls-card .svg-crop-btn,body[data-app-mode=test] .controls-card .svg-crop-btn,body[data-app-mode=test] .controls-card .paper-type-menu-btn{width:100%}body[data-app-mode=author] .controls-card .svg-crop-btn.active,body[data-app-mode=test] .controls-card .svg-crop-btn.active,body[data-app-mode=test] .controls-card .paper-type-menu-btn.active{background:var(--primary-light, #e0e7ff);border-color:var(--primary, #4f46e5);color:var(--primary, #4f46e5)}body[data-app-mode=author] .controls-card .author-set-scene-btn:disabled{opacity:.55;cursor:not-allowed}.star-picker input[type=number]{-moz-appearance:textfield}.star-picker input[type=number]::-webkit-inner-spin-button,.star-picker input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.board-workspace{position:relative;flex:1;min-height:min(460px,100%);min-width:0;width:100%}.board-workspace .board-container{min-height:min(460px,100%);height:100%}.learning-fs-canvas-area{box-sizing:border-box}@media(max-width:968px){.canvas-section.solution-playing .board-container.learning-playback-expanded.learning-fs-fit-active .canvas-bottom-bar,.canvas-section.solution-playing .board-container:fullscreen.learning-fs-fit-active .canvas-bottom-bar{display:none}}@media(max-height:740px){.board-workspace,.board-workspace .board-container,.board-container{min-height:0}.canvas-section .board-workspace{flex:1;min-height:0}}@media(max-width:968px){.board-workspace,.board-workspace .board-container{min-height:0}.board-workspace .board-container.mobile-canvas-fit-active{height:auto!important}}.notes-panel{--notes-panel-scale: 1;position:absolute;left:12px;top:12px;width:288px;height:auto;min-height:0;max-height:none;z-index:30;display:flex;flex-direction:column;gap:8px;padding:10px 12px;background:var(--card, #fff);border:1px solid var(--border, rgba(79, 70, 229, .2));border-radius:12px;box-shadow:0 10px 28px #0f172a24;box-sizing:border-box;min-width:0;overflow:hidden;pointer-events:auto;transform:scale(var(--notes-panel-scale));transform-origin:top left;will-change:transform}.notes-symbol-picker-wrap{flex:0 0 auto;min-height:0;overflow:visible;display:flex;flex-direction:column}.notes-panel-font-size{display:flex;flex-direction:column;gap:4px;flex:0 0 auto}.notes-panel-font-size-label{font-size:.72rem;font-weight:600;color:var(--text-secondary, #64748b)}.notes-panel-font-size-row{display:flex;align-items:center;gap:6px}.notes-panel-font-size-step{flex:0 0 auto;min-width:2rem;height:1.85rem;padding:0 6px;border:1px solid rgba(79,70,229,.24);border-radius:8px;background:#4f46e50f;color:inherit;font-size:.78rem;font-weight:700;line-height:1;cursor:pointer}.notes-panel-font-size-step--plus{font-size:.92rem}.notes-panel-font-size-step:hover:not(:disabled){background:#4f46e524;border-color:#4f46e573}.notes-panel-font-size-step:disabled{opacity:.45;cursor:not-allowed}.notes-panel-font-size-select{flex:1 1 auto;min-width:0;height:1.85rem;padding:0 6px;border:1px solid rgba(79,70,229,.24);border-radius:8px;background:var(--bg, #f8fafc);color:inherit;font-size:.82rem;font-weight:600;cursor:pointer}.notes-panel-font-size-select:disabled{opacity:.45;cursor:not-allowed}.notes-panel-font-size-preview{flex:0 0 2.1rem;width:2.1rem;height:1.85rem;display:flex;align-items:center;justify-content:center;overflow:hidden;font-family:Carlito,sans-serif;font-weight:700;line-height:1;color:#1e293b}[data-theme=dark] .notes-panel-font-size-preview{color:#e2e8f0}[data-theme=dark] .notes-panel{box-shadow:0 10px 28px #00000073}.notes-panel-header{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-shrink:0;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.notes-panel-header:active{cursor:grabbing}.notes-panel.notes-panel-dragging{z-index:50}.notes-panel-header-main{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.notes-panel-grip{display:inline-flex;flex-direction:column;justify-content:center;gap:3px;width:10px;flex-shrink:0;opacity:.45}.notes-panel-grip span{display:block;height:2px;border-radius:999px;background:currentColor}.notes-panel-title{margin:0;font-size:.95rem;font-weight:600}.notes-panel-close{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:2px solid #64748b;border-radius:10px;background:#fff;color:#0f172a;cursor:pointer;flex-shrink:0;touch-action:auto;isolation:isolate}.notes-panel-close:not(.learning-locked){pointer-events:auto!important;opacity:1!important;filter:none!important;position:relative;z-index:5}.notes-panel-close.learning-guide-pulse{width:46px;height:46px;border-color:#1d4ed8!important;background:#2563eb!important;color:#fff!important;outline:3px solid rgba(37,99,235,.45);outline-offset:3px;box-shadow:0 4px 14px #2563eb73;opacity:1!important;filter:none!important}[data-theme=dark] .notes-panel-close{background:#1e293b;border-color:#94a3b8;color:#f8fafc}[data-theme=dark] .notes-panel-close.learning-guide-pulse{background:#3b82f6!important;border-color:#93c5fd!important;color:#fff!important}.notes-panel-close:hover{background:#eff6ff;color:#1e3a8a;border-color:#2563eb}.notes-panel-close.learning-guide-pulse:hover{background:#1d4ed8!important;color:#fff!important}.symbol-pages-nav{display:flex;align-items:center;gap:4px;min-width:0;flex-shrink:0}.symbol-pages-nav-btn{flex:0 0 24px;width:24px;height:28px;padding:0;border:none;border-radius:8px;background:#4f46e514;color:var(--primary, #4f46e5);font-size:1.15rem;line-height:1;cursor:pointer}.symbol-pages-nav-btn:disabled{opacity:.35;cursor:default}.symbol-pages{display:flex;gap:4px;overflow-x:auto;flex:1;min-width:0;padding-bottom:2px;scrollbar-width:none;-webkit-overflow-scrolling:touch}.symbol-pages::-webkit-scrollbar{display:none}.symbol-page-tab{flex:0 0 auto;padding:4px 10px;border:1px solid rgba(79,70,229,.2);border-radius:999px;background:transparent;color:var(--text-secondary, #64748b);font-size:.72rem;font-weight:600;cursor:pointer;white-space:nowrap}.symbol-page-tab.active{background:#4f46e51f;border-color:#4f46e573;color:var(--primary, #4f46e5)}.symbol-carousel{display:flex;align-items:center;gap:4px;flex-shrink:0;touch-action:pan-y;-webkit-user-select:none;user-select:none}.symbol-carousel-nav{flex:0 0 28px;width:28px;height:44px;padding:0;border:none;border-radius:8px;background:#4f46e514;color:var(--primary, #4f46e5);font-size:1.35rem;line-height:1;cursor:pointer}.symbol-carousel-nav:disabled{opacity:.35;cursor:default}.symbol-carousel-stage{flex:1;min-width:0;display:flex;align-items:center;justify-content:center;gap:6px;perspective:480px}.symbol-carousel-peek{flex:0 0 auto;width:1.6rem;text-align:center;font-size:1rem;opacity:.28;color:var(--text-secondary, #64748b);overflow:hidden;white-space:nowrap}.symbol-carousel-focus{flex:1 1 auto;min-width:0;max-width:9rem;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:6px 8px;border:1px solid rgba(79,70,229,.28);border-radius:12px;background:#4f46e50f;cursor:pointer;transition:transform .2s ease,opacity .2s ease}.symbol-carousel-focus.slide-left{animation:symbolSlideLeft .22s ease}.symbol-carousel-focus.slide-right{animation:symbolSlideRight .22s ease}@keyframes symbolSlideLeft{0%{transform:rotateY(28deg) scale(.92);opacity:.5}to{transform:rotateY(0) scale(1);opacity:1}}@keyframes symbolSlideRight{0%{transform:rotateY(-28deg) scale(.92);opacity:.5}to{transform:rotateY(0) scale(1);opacity:1}}.symbol-carousel-char{font-size:1.75rem;line-height:1.1;font-family:TimesNnsSymbol,"Cambria Math",Times New Roman,serif}.symbol-carousel-label{font-size:.65rem;color:var(--text-secondary, #64748b);line-height:1.2;text-align:center}.symbol-carousel-dots{display:flex;justify-content:center;gap:5px;flex-shrink:0}.symbol-carousel-dot{width:6px;height:6px;padding:0;border:none;border-radius:50%;background:#4f46e538;cursor:pointer}.symbol-carousel-dot.active{background:var(--primary, #4f46e5);transform:scale(1.2)}.notes-panel-editor{flex:0 0 auto;display:flex;flex-direction:column;min-height:0;width:100%;overflow:visible}.notes-panel-rich-text.rich-text-input{flex:0 0 auto;min-height:72px;height:88px;max-height:88px;width:100%;padding:6px 8px;font-family:Carlito,TimesNnsSymbol,system-ui,sans-serif;font-size:.85rem;line-height:1.4;border-radius:8px;border:1px solid rgba(79,70,229,.22);background:var(--bg, #f8fafc);color:#000;box-sizing:border-box;overflow-y:auto;white-space:pre-wrap;word-break:break-word}.notes-panel-rich-text.rich-text-input:focus{outline:2px solid rgba(79,70,229,.35);outline-offset:1px}.notes-panel-format-toolbar{flex:0 0 auto;margin-top:4px;gap:4px;flex-wrap:wrap;align-items:center}.notes-panel-format-toolbar .text-format-btn-row{gap:4px}.notes-panel-format-toolbar .text-format-btn{min-width:1.65rem;height:1.65rem;padding:2px 5px;border-radius:7px;font-size:.78rem}.notes-panel-format-toolbar .text-format-colors{flex:1 0 100%;width:100%;box-sizing:border-box;margin:2px 0 0;padding:0;border-left:none;gap:5px;justify-content:flex-start}.notes-panel-format-toolbar .text-format-color-swatch{width:1.05rem;height:1.05rem;border-radius:4px}.notes-panel-placement-hint{flex:0 0 auto;margin:0;padding:0 2px;font-size:.78rem;color:var(--text-secondary, #64748b)}.notes-panel-actions{flex:0 0 auto;display:flex;justify-content:stretch;align-items:stretch;gap:8px;width:100%;padding-top:2px;box-sizing:border-box}.notes-panel-delete{flex:0 0 auto;border:none;border-radius:8px;padding:7px 12px;font-family:inherit;font-size:.82rem;font-weight:600;color:var(--danger, #e11d48);background:var(--danger-light, #ffe4e6);cursor:pointer}.notes-panel-delete:hover:not(:disabled){background:var(--danger, #e11d48);color:#fff}.notes-panel-delete:disabled{opacity:.45;cursor:not-allowed}.notes-panel-primary{flex:1 1 auto;width:auto;min-width:0;border:none;border-radius:8px;padding:7px 10px;font-family:inherit;font-size:.82rem;font-weight:600;color:#fff;background:var(--primary, #4f46e5);cursor:pointer}.notes-panel-primary:disabled,.notes-panel-primary.learning-locked{opacity:.45;cursor:not-allowed}body[data-canvas-tool=select] #geometry-canvas,body[data-canvas-tool=select] .geometry-canvas,body[data-canvas-tool=none] #geometry-canvas,body[data-canvas-tool=none] .geometry-canvas{cursor:grab}body[data-canvas-tool=bucket] #geometry-canvas,body[data-canvas-tool=bucket] .geometry-canvas{cursor:cell}body[data-text-note-placing=true] #geometry-canvas,body[data-text-note-placing=true] .geometry-canvas{cursor:crosshair}body[data-hypotenuse-point-pick=true] #geometry-canvas,body[data-hypotenuse-point-pick=true] .geometry-canvas{cursor:default!important}.geometry-canvas-wrap.viewport-panning #geometry-canvas,.geometry-canvas-wrap.viewport-panning .geometry-canvas{cursor:grabbing!important}.canvas-section.solution-playing .geometry-canvas-wrap,.canvas-section.solution-playing #geometry-canvas,.canvas-section.solution-playing .geometry-canvas{pointer-events:auto;cursor:grab!important}.canvas-section.solution-playing .geometry-canvas-wrap.viewport-panning,.canvas-section.solution-playing .geometry-canvas-wrap.viewport-panning #geometry-canvas,.canvas-section.solution-playing .geometry-canvas-wrap.viewport-panning .geometry-canvas{cursor:grabbing!important}.canvas-section.solution-playing .notes-panel{z-index:40;pointer-events:auto}.board-container.learning-playback-expanded .notes-panel,.board-container:fullscreen .notes-panel{z-index:45}.symbol-carousel-focus.learning-guide-pulse{z-index:1;position:relative}@media(max-width:968px){.notes-panel{width:280px;padding:8px 10px;gap:6px;box-shadow:0 8px 22px #0f172a29}.notes-panel-rich-text.rich-text-input{font-size:16px}.notes-panel-primary{padding:7px 10px}}@media(max-width:480px){.notes-panel{width:260px}.symbol-page-tab{padding:3px 8px;font-size:.68rem}}.google-login-overlay{z-index:12000}.google-login-card{max-width:420px;width:min(92vw,420px);text-align:center}.google-login-brand{display:flex;justify-content:center;margin-bottom:.75rem}.google-login-card h2{margin-bottom:.5rem}.google-login-card p{margin:0 0 1.25rem;color:var(--text-muted, #64748b);line-height:1.5}.google-login-button-wrap{display:flex;justify-content:center;min-height:44px}.google-login-error,.google-login-config-error{margin:1rem 0 0;color:#dc2626;font-size:.9rem;line-height:1.45}.google-login-origin-hint{margin:0 0 1rem;color:#b45309;font-size:.9rem;line-height:1.45}.google-login-dev-skip{margin-top:1rem;width:100%}.login-miuc-form{display:flex;flex-direction:column;gap:.75rem;margin-top:1rem;text-align:left}.login-miuc-field{display:flex;flex-direction:column;gap:.35rem;font-size:.9rem;color:var(--text-secondary, #64748b)}.login-miuc-field input{padding:.55rem .75rem;border:1px solid var(--border-color, #cbd5e1);border-radius:var(--radius-sm, 8px);font:inherit;color:var(--text-primary, #1e293b);background:var(--bg-card, #fff)}.login-miuc-submit{margin-top:.25rem;width:100%}.login-or-divider{margin:1rem 0 .75rem;text-align:center;font-size:.85rem;color:var(--text-secondary, #64748b)}.header-logo-animation{position:relative;width:48px;height:48px;flex-shrink:0;filter:drop-shadow(0 2px 8px rgba(79,70,229,.22))}.header-logo-animation__inner{position:relative;width:100%;height:100%;transform-style:preserve-3d}.header-logo-animation__svg{width:100%;height:100%;transition:transform 2s cubic-bezier(.68,-.55,.27,1.55)}.header-logo-animation.is-loading .header-logo-animation__svg{animation:headerLogoRotate 14s linear infinite}@keyframes headerLogoRotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.header-logo-animation__stripe{stroke-width:0;transition:all 1.8s cubic-bezier(.77,0,.175,1)}.header-logo-animation__stripe-1{fill:#662d91}.header-logo-animation__stripe-2{fill:#00aeef}.header-logo-animation__stripe-3{fill:#39b54a}.header-logo-animation__stripe-4{fill:#fdb913}.header-logo-animation__stripe-5{fill:#f7941d}.header-logo-animation__stripe-6{fill:#e31e24}.header-logo-animation__extra{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:100%;height:100%;pointer-events:none;opacity:0;transition:opacity 1.2s ease-out}.header-logo-animation.is-done .header-logo-animation__extra{transition-delay:.45s;opacity:1}.header-logo-animation__spine{position:absolute;left:22%;top:50%;width:16%;height:60%;background:#111;border-radius:3px 1px 1px 3px;display:flex;justify-content:center;align-items:center;transform:translateY(-50%) skewY(-15deg);box-shadow:1px 3px 8px #00000047;z-index:2}.header-logo-animation__spine-text{color:#fff;font-weight:900;font-size:5px;transform:rotate(-90deg);white-space:nowrap;letter-spacing:.4px;text-transform:lowercase;line-height:1}.header-user{display:flex;align-items:center;gap:.5rem;max-width:180px;padding:.2rem .55rem .2rem .2rem;border-radius:999px;background:#4f46e514;border:1px solid rgba(79,70,229,.15)}.header-user-avatar{width:28px;height:28px;border-radius:50%;object-fit:cover;flex-shrink:0}.header-user-avatar-fallback{display:inline-flex;align-items:center;justify-content:center;background:var(--primary, #4f46e5);color:#fff;font-size:.85rem;font-weight:700}.header-user-name{font-size:.82rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(max-width:720px)and (orientation:portrait){.header-user-name{display:none}.header-user{max-width:none;padding:.15rem;border:none;background:transparent}}.tutorial-bubble{position:fixed;z-index:10050;display:flex;gap:10px;align-items:flex-start;max-width:min(320px,calc(100vw - 32px));max-height:calc(100vh - 24px);overflow-y:auto;padding:16px 14px 12px;border-radius:12px;background:var(--bg-card);border:1px solid color-mix(in srgb,var(--primary) 28%,var(--border-color));box-shadow:0 6px 20px #0f172a1a;transform:translate(-50%);pointer-events:auto;transition:top .55s cubic-bezier(.22,1,.36,1),left .55s cubic-bezier(.22,1,.36,1);animation:tutorialBubbleIn .28s ease-out}.tutorial-bubble-drag-handle{position:absolute;top:6px;left:50%;transform:translate(-50%);width:28px;height:3px;border-radius:999px;background:#cbd5e1;cursor:grab;touch-action:none;z-index:2}.tutorial-bubble-drag-handle:hover{background:#94a3b8}.tutorial-bubble-drag-handle.is-dragging{cursor:grabbing;background:#64748b}.tutorial-bubble.is-user-dragged,.tutorial-extra-bubble.is-user-dragged{transition:none!important}@keyframes tutorialBubbleIn{0%{opacity:0;transform:translate(-50%,8px) scale(.96)}to{opacity:1;transform:translate(-50%) scale(1)}}.tutorial-bubble-icon{flex:0 0 auto;width:28px;height:28px;display:grid;place-items:center;font-size:1rem;border-radius:8px;background:color-mix(in srgb,var(--primary-light) 55%,transparent);border:none}.tutorial-bubble-body{flex:1;min-width:0}.tutorial-bubble-continue{margin-top:10px;width:auto;min-height:0;padding:6px 12px;font-size:.8rem;font-weight:600;border-radius:8px;background:transparent;color:var(--primary);border:1px solid color-mix(in srgb,var(--primary) 35%,transparent);box-shadow:none}.tutorial-bubble-continue:hover{background:color-mix(in srgb,var(--primary) 8%,var(--bg-card));color:var(--primary)}.tutorial-bubble--below{transform:translate(-50%,14px);transition:top .55s cubic-bezier(.22,1,.36,1),left .55s cubic-bezier(.22,1,.36,1),transform .55s cubic-bezier(.22,1,.36,1)}.tutorial-bubble--beside-left{transform:translate(-100%,-50%);transition:top .55s cubic-bezier(.22,1,.36,1),left .55s cubic-bezier(.22,1,.36,1),transform .55s cubic-bezier(.22,1,.36,1)}.tutorial-bubble--beside-right{transform:translateY(-50%);transition:top .55s cubic-bezier(.22,1,.36,1),left .55s cubic-bezier(.22,1,.36,1),transform .55s cubic-bezier(.22,1,.36,1);animation-name:tutorialBubbleInBesideRight}@keyframes tutorialBubbleInBesideRight{0%{opacity:0;transform:translateY(-50%) scale(.96)}to{opacity:1;transform:translateY(-50%) scale(1)}}.tutorial-bubble--above{transform:translate(-50%,calc(-100% - 14px));transition:top .55s cubic-bezier(.22,1,.36,1),left .55s cubic-bezier(.22,1,.36,1),transform .55s cubic-bezier(.22,1,.36,1);animation-name:tutorialBubbleInAbove}@keyframes tutorialBubbleInAbove{0%{opacity:0;transform:translate(-50%,calc(-100% - 6px)) scale(.96)}to{opacity:1;transform:translate(-50%,calc(-100% - 14px)) scale(1)}}.tutorial-bubble-step{display:block;font-size:.68rem;font-weight:600;color:var(--text-secondary);margin-bottom:4px;padding:0;border-radius:0;background:transparent;border:none;text-transform:none;letter-spacing:.02em}.tutorial-bubble-text{margin:0;font-size:.88rem;font-weight:500;line-height:1.45;color:var(--text-primary);text-align:left}.tutorial-bubble-text strong{color:var(--primary);font-weight:700}.tutorial-extra-bubble{position:fixed;z-index:10051;display:flex;align-items:flex-start;gap:8px;max-width:min(300px,calc(100vw - 32px));max-height:calc(100vh - 24px);overflow-y:auto;padding:14px 12px 10px;border-radius:10px;background:var(--bg-card);border:1px solid color-mix(in srgb,var(--accent) 40%,var(--border-color));box-shadow:0 4px 14px #0f172a14;pointer-events:auto;transition:top .55s cubic-bezier(.22,1,.36,1),left .55s cubic-bezier(.22,1,.36,1)}.tutorial-extra-bubble-icon{flex:0 0 auto;font-size:.95rem;line-height:1.3}.tutorial-extra-bubble-text{margin:0;font-size:.82rem;font-weight:500;line-height:1.4;color:var(--text-primary);text-align:left}.learning-guide-pulse{z-index:6;position:relative}.tutorial-corridor-active .toolbox-wrapper{position:relative;z-index:10055}.tutorial-corridor-active .notes-panel{position:absolute;z-index:10055}.tutorial-corridor-active .modal-overlay{z-index:10055}body.tutorial-corridor-active .tutorial-bubble,body.tutorial-corridor-active .tutorial-extra-bubble{z-index:10070}@media(max-width:968px)and (orientation:portrait){.tutorial-bubble{max-width:min(280px,calc(100vw - 24px));padding:14px 12px 10px;gap:8px}.tutorial-bubble-icon{width:24px;height:24px;font-size:.9rem;border-radius:6px}.tutorial-bubble-step{font-size:.64rem;margin-bottom:3px}.tutorial-bubble-text{font-size:.82rem;line-height:1.4}.tutorial-bubble-continue{margin-top:8px;font-size:.76rem;padding:5px 10px}.tutorial-extra-bubble{max-width:min(260px,calc(100vw - 24px));padding:12px 10px 8px}.tutorial-extra-bubble-text{font-size:.78rem}body[data-app-mode=learning] .task-card.mobile-task-height-limited,body[data-app-mode=tutorial] .task-card.mobile-task-height-limited{max-height:var(--mobile-task-card-max-height);overflow:hidden;flex:0 0 auto}body[data-app-mode=learning] .app-main.mobile-steps-level-1 .task-card,body[data-app-mode=learning] .app-main.mobile-steps-level-2 .task-card:not(.mobile-task-height-limited),body[data-app-mode=tutorial] .app-main.mobile-steps-level-1 .task-card,body[data-app-mode=tutorial] .app-main.mobile-steps-level-2 .task-card:not(.mobile-task-height-limited){max-height:none}body[data-app-mode=tutorial] .app-main.mobile-steps-level-0 .solution-step-mobile,body[data-app-mode=tutorial] .app-main.mobile-steps-level-1 .solution-step-mobile,body[data-app-mode=tutorial] .app-main.mobile-steps-level-2 .solution-step-mobile{display:block}body[data-app-mode=learning] .app-main.mobile-steps-level-2 .solution-step-mobile{display:none}body[data-app-mode=learning] .app-main.mobile-steps-level-2 .task-list-panel{display:block!important}body[data-app-mode=learning] .app-main.mobile-steps-windowed .task-list-panel{display:block!important;flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}body[data-app-mode=learning] .app-main.mobile-steps-windowed .task-card{flex:0 0 auto;display:flex;flex-direction:column;height:var(--mobile-task-card-max-height);max-height:var(--mobile-task-card-max-height);overflow:hidden}body[data-app-mode=learning] .app-main.mobile-steps-windowed .task-card-header,body[data-app-mode=learning] .app-main.mobile-steps-windowed .task-list-toggle{flex-shrink:0}body[data-app-mode=learning] .app-main.mobile-steps-windowed .solution-step-mobile,body[data-app-mode=learning] .app-main.mobile-steps-windowed .task-item-outside-window{display:none!important}body[data-app-mode=learning] .app-main.mobile-steps-windowed .task-card.mobile-task-height-limited{overflow:hidden}body[data-app-mode=learning] .app-main.mobile-steps-level-0 .solution-step-mobile-text,body[data-app-mode=tutorial] .app-main.mobile-steps-level-0 .solution-step-mobile-text{display:none}body[data-app-mode=tutorial] .app-main.mobile-steps-level-0 .task-list-panel,body[data-app-mode=tutorial] .app-main.mobile-steps-level-1 .task-list-panel{display:none!important}body[data-app-mode=learning] .app-main.mobile-steps-level-2 .task-card.mobile-task-height-limited,body[data-app-mode=tutorial] .app-main.mobile-steps-level-2 .task-card.mobile-task-height-limited{overflow-y:auto;-webkit-overflow-scrolling:touch}body[data-app-mode=learning] .app-main.mobile-task-compact .task-card,body[data-app-mode=tutorial] .app-main.mobile-task-compact .task-card,body[data-app-mode=learning] .app-main.mobile-task-compact .solution-step-mobile-body,body[data-app-mode=tutorial] .app-main.mobile-task-compact .solution-step-mobile-body{padding:6px 8px}body[data-app-mode=learning] .app-main.mobile-task-compact .task-card-title-desktop,body[data-app-mode=tutorial] .app-main.mobile-task-compact .task-card-title-desktop{font-size:.8rem}}@media(max-width:968px)and (orientation:landscape){.tutorial-bubble{max-width:min(240px,calc(100vw - 20px));max-height:calc(100dvh - 16px);padding:12px 10px 8px;gap:6px}.tutorial-bubble-drag-handle{width:24px;top:4px;height:2px}.tutorial-bubble-icon{width:22px;height:22px;font-size:.85rem;border-radius:6px}.tutorial-bubble-step{font-size:.58rem;margin-bottom:2px}.tutorial-bubble-text{font-size:.76rem;line-height:1.35;font-weight:500}.tutorial-bubble-continue{margin-top:6px;font-size:.72rem;padding:4px 8px}.tutorial-bubble--below{transform:translate(-50%,8px)}.tutorial-bubble--above{transform:translate(-50%,calc(-100% - 8px))}.tutorial-extra-bubble{max-width:min(220px,calc(100vw - 20px));max-height:calc(100dvh - 16px);padding:10px 10px 8px;gap:6px}.tutorial-extra-bubble-icon{font-size:.85rem}.tutorial-extra-bubble-text{font-size:.74rem;line-height:1.3}}.tutorial-corridor-active .ruler-controls{z-index:26}.learning-portrait-prompt{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10060;display:flex;align-items:center;justify-content:center;padding:24px;background:#fff;color:#1e293b;pointer-events:auto}.learning-portrait-prompt__content{display:flex;flex-direction:column;align-items:center;gap:28px;max-width:360px;text-align:center}.learning-portrait-prompt__logo .header-logo-animation{width:96px;height:96px}.learning-portrait-prompt__text{margin:0;font-size:1.05rem;line-height:1.55;font-weight:500}.learning-portrait-prompt__actions{display:flex;flex-direction:column;align-items:stretch;gap:10px;width:100%;max-width:280px}.learning-portrait-prompt__actions .btn{width:100%;justify-content:center}body.phone-drawing-blocked .app-main,body.phone-drawing-blocked .app-header{visibility:hidden;pointer-events:none}.naming-empty-error{margin:8px 0 0;color:#b91c1c;font-size:.92rem;font-weight:500}.app-alert-overlay{z-index:220}.app-alert-card{max-width:420px;padding:28px 32px 24px;text-align:left}.app-alert-card h2{font-size:1.2rem;font-weight:800;color:var(--text-primary);text-align:center;margin:0 0 12px}.app-alert-message{margin:0 0 20px;font-size:.95rem;line-height:1.55;color:var(--text-primary);text-align:center}.app-alert-ok-btn{width:100%}.test-done-card{max-width:420px}.test-done-card>p{margin:0;font-size:.95rem;line-height:1.55;color:var(--text-primary);text-align:center}.test-done-actions{margin-top:1rem}.test-done-back-btn{width:100%}.app-toast{position:fixed;left:50%;bottom:max(20px,env(safe-area-inset-bottom,0px));transform:translate(-50%);z-index:300;max-width:min(92vw,420px);padding:12px 18px;border-radius:var(--radius-sm);background:var(--bg-card);color:var(--text-primary);border:1px solid var(--border-color);box-shadow:var(--shadow-lg);font-size:.9rem;line-height:1.45;text-align:center;cursor:pointer;animation:toastSlideUp .25s ease-out}body.author-modal-open .app-toast{z-index:10040;pointer-events:auto}@keyframes toastSlideUp{0%{opacity:0;transform:translate(-50%) translateY(12px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.author-field-has-error input,.author-field-has-error .author-rich-text-input,.author-field-has-error .rich-text-input{border-color:var(--danger)!important;box-shadow:0 0 0 2px var(--danger-light)}.author-field-error-text{margin:4px 0 0;font-size:.78rem;font-weight:600;color:var(--danger);line-height:1.35}.author-field-hint{margin:4px 0 0;font-size:.75rem;font-weight:500;color:var(--text-secondary);line-height:1.35}.author-save-help-card{max-width:28rem;text-align:left}.author-save-help-body{display:flex;flex-direction:column;gap:10px;margin:0 0 16px;font-size:.9rem;font-weight:500;color:var(--text-primary);line-height:1.45}.author-save-help-body p,.author-save-help-body ul{margin:0}.author-save-help-body ul{padding-left:1.2rem}.author-save-help-body code{font-size:.84em}.author-step-section-error{margin-top:6px}.author-step-draft-item-has-error{border-radius:var(--radius-sm);padding:4px;background:var(--danger-light)}.shapes-picker-dropdown{min-width:196px}.shapes-picker-item{gap:8px}.shapes-picker-icon{display:inline-flex;width:22px;height:22px;flex-shrink:0}.shapes-picker-icon svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.app-crash{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99999;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--bg-main, #f8fafc)}.app-crash-card{max-width:520px;width:100%;padding:28px;border-radius:var(--radius-md, 12px);background:var(--bg-card, #fff);border:1px solid var(--border-color, #e2e8f0);box-shadow:var(--shadow-lg, 0 10px 30px rgba(0, 0, 0, .12));text-align:center}.app-crash-card h1{font-size:1.3rem;margin-bottom:12px;color:var(--text-primary, #0f172a)}.app-crash-card p{font-size:.95rem;line-height:1.5;margin-bottom:10px;color:var(--text-primary, #0f172a)}.app-crash-hint{color:var(--text-secondary, #64748b)!important;font-size:.85rem!important}.app-crash-card .btn{margin-top:8px}.app-crash-detail{margin-top:16px;padding:10px 12px;border-radius:var(--radius-sm, 8px);background:var(--bg-main, #f1f5f9);color:var(--text-secondary, #64748b);font-family:ui-monospace,monospace;font-size:.75rem;text-align:left;white-space:pre-wrap;word-break:break-word;max-height:140px;overflow:auto}.solution-playback-controls{position:absolute;left:50%;bottom:12px;transform:translate(-50%);z-index:45;display:inline-flex;align-items:center;gap:4px;padding:5px;border:1px solid rgba(255,255,255,.35);border-radius:999px;background:#1c1c24eb;box-shadow:0 4px 18px #00000047;pointer-events:auto;white-space:nowrap}.solution-playback-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border:none;border-radius:999px;background:transparent;color:#fff;font-family:inherit;font-size:.88rem;font-weight:600;cursor:pointer;touch-action:manipulation}.solution-playback-btn:hover:not(:disabled){background:#ffffff24}.solution-playback-btn.is-primary{min-width:128px;justify-content:center;background:var(--primary)}.solution-playback-btn.is-primary:hover{background:var(--primary);filter:brightness(1.1)}.solution-playback-btn:disabled{opacity:.4;cursor:default}.solution-playback-speed-btn{min-width:3.6em;justify-content:center;font-variant-numeric:tabular-nums;box-shadow:inset 1px 0 #ffffff2e;border-radius:0 999px 999px 0}.solution-playback-speed-btn.is-changed{color:#fcd34d}@media(max-width:968px)and (orientation:portrait){.board-container.learning-playback-expanded .solution-playback-controls,.board-container:fullscreen .solution-playback-controls{bottom:calc(max(12px,env(safe-area-inset-bottom,0px)) + 56px)}}@media(max-width:968px)and (orientation:landscape){.board-container.learning-playback-expanded .solution-playback-controls,.board-container:fullscreen .solution-playback-controls{left:calc(var(--fs-steps-width, 20vw) / -2);bottom:max(8px,env(safe-area-inset-bottom,0px));gap:2px;padding:3px;box-shadow:0 2px 10px #00000038}.board-container.learning-playback-expanded .solution-playback-btn,.board-container:fullscreen .solution-playback-btn{padding:8px 6px}.board-container.learning-playback-expanded .solution-playback-btn.is-primary,.board-container:fullscreen .solution-playback-btn.is-primary{min-width:0;padding:8px 11px}.board-container.learning-playback-expanded .solution-playback-speed-btn,.board-container:fullscreen .solution-playback-speed-btn{min-width:0;width:2.9em;padding:8px 0;font-size:.75rem}.board-container.learning-playback-expanded .solution-playback-btn-label,.board-container:fullscreen .solution-playback-btn-label{display:none}.board-container.learning-playback-expanded .learning-fs-steps-inner,.board-container:fullscreen .learning-fs-steps-inner{padding-bottom:calc(max(8px,env(safe-area-inset-bottom,0px)) + 48px)}}@media(max-width:520px){.solution-playback-btn:not(.is-primary) .solution-playback-btn-label{display:none}.solution-playback-btn{padding:8px 12px}}.ruler-control-btn svg .intersection-icon-dot{fill:currentColor;stroke:none}.modal-overlay.tutorial-menu-overlay{z-index:10060}.modal-card.tutorial-menu-card{max-width:640px;max-height:calc(100vh - 2rem);display:flex;flex-direction:column;gap:.85rem;overflow:hidden;background:var(--bg-card);color:var(--text-primary);border:1px solid var(--border-color)}.tutorial-menu-head h2{margin:0 0 .35rem;font-size:1.3rem}.tutorial-menu-head p{margin:0;color:var(--text-secondary);font-size:.92rem;line-height:1.45}.tutorial-menu-progress{margin-top:.75rem;height:8px;border-radius:999px;background:var(--primary-light);overflow:hidden}.tutorial-menu-progress-bar{display:block;height:100%;border-radius:inherit;background:var(--success);transition:width .4s ease}.tutorial-menu-head .tutorial-menu-progress-label{margin-top:.3rem;font-size:.8rem}.tutorial-menu-primary{align-self:flex-start;padding:.65rem 1.1rem;font-size:1rem}.tutorial-menu-list{list-style:none;margin:0;padding:2px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;overflow-y:auto;min-height:0}.tutorial-menu-item{width:100%;height:100%;display:flex;align-items:flex-start;gap:.6rem;padding:.6rem .7rem;text-align:left;border:1px solid var(--border-color);border-radius:12px;background:var(--bg-card);color:inherit;cursor:pointer;transition:border-color .15s ease,background .15s ease}.tutorial-menu-item:hover,.tutorial-menu-item:focus-visible{border-color:var(--primary)}.tutorial-menu-item.is-recommended{border-color:var(--primary);background:var(--primary-light)}.tutorial-menu-badge{flex:0 0 auto;width:1.75rem;height:1.75rem;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;font-size:.85rem;font-weight:700;background:var(--primary-light);color:var(--primary)}.tutorial-menu-item.is-done .tutorial-menu-badge{background:var(--success-light);color:var(--success)}.tutorial-menu-item-copy{display:flex;flex-direction:column;gap:.15rem;min-width:0}.tutorial-menu-item-copy strong{font-size:.95rem}.tutorial-menu-item-copy span{font-size:.8rem;line-height:1.35;color:var(--text-secondary)}.tutorial-menu-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem}.tutorial-menu-close{margin-left:auto}.tutorial-menu-link{border:none;background:none;padding:.25rem 0;color:var(--text-secondary);font-size:.85rem;text-decoration:underline;cursor:pointer}.tutorial-menu-reset-confirm{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.4rem;font-size:.85rem}@media(max-width:640px){.tutorial-menu-list{grid-template-columns:minmax(0,1fr)}}@media(max-height:560px){.modal-card.tutorial-menu-card{padding:1rem;gap:.6rem}.tutorial-menu-head h2{font-size:1.1rem}.tutorial-menu-item-copy span{display:none}}.tutorial-chapters-btn{width:100%}.tutorial-corridor-active .ruler-controls.tutorial-panel-focus{z-index:10056;animation:tutorial-panel-focus 1.1s ease-in-out infinite}@keyframes tutorial-panel-focus{0%,to{box-shadow:0 0 0 2px color-mix(in srgb,var(--primary) 55%,transparent)}50%{box-shadow:0 0 0 6px color-mix(in srgb,var(--primary) 20%,transparent)}}.tutorial-bubble.tutorial-bubble--pass-through,.tutorial-extra-bubble.tutorial-bubble--pass-through{pointer-events:none}.tutorial-bubble--pass-through .tutorial-bubble-continue,.tutorial-bubble--pass-through .tutorial-bubble-drag-handle{pointer-events:auto}
