:root{color:#20242c;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#d8dee9;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0;overflow:hidden}canvas{touch-action:none;display:block}button{font:inherit}.password-gate{z-index:20;background:linear-gradient(#d8dee9d1,#d8dee9eb),#d8dee9;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.password-gate__panel{color:#141820;background:#f8fafcf0;border:1px solid #6972824d;border-radius:8px;gap:10px;width:min(360px,100%);padding:20px;display:grid;box-shadow:0 18px 38px #2a34442e}.password-gate__panel h1{margin:0 0 6px;font-size:20px;line-height:1.2}.password-gate__panel label{color:#4b5563;font-size:12px;font-weight:800}.password-gate__panel input{color:#141820;height:42px;font:inherit;background:#fff;border:1px solid #69728257;border-radius:6px;padding:0 12px}.password-gate__panel input:focus{outline-offset:0;border-color:#2563eb;outline:2px solid #2563eb38}.password-gate__panel button{color:#fff;cursor:pointer;background:#2563eb;border:1px solid #2563eb4d;border-radius:6px;height:42px;font-weight:850}.password-gate__message{color:#dc2626;min-height:18px;margin:0;font-size:12px;font-weight:750}#app{z-index:1;pointer-events:none;position:fixed;inset:0}.editor-panels{pointer-events:none;position:absolute;inset:0}.selected-shape-actions{z-index:4;opacity:0;pointer-events:none;background:#f8fafcf0;border:1px solid #4b55633d;border-radius:8px;gap:6px;padding:6px;transition:opacity .12s;display:flex;position:fixed;transform:translate(-50%,calc(-100% - 10px));box-shadow:0 12px 28px #2a34442e}.selected-shape-actions[hidden]{display:none}.selected-shape-actions.is-visible{opacity:1;pointer-events:auto}.selected-shape-actions button{color:#111827;cursor:pointer;background:#ffffffd1;border:1px solid #69728247;border-radius:6px;min-width:58px;height:30px;font-size:12px;font-weight:850}.selected-shape-actions button:hover{background:#eff6ff;border-color:#2563eb61}.selected-shape-actions .danger-action-button{color:#b91c1c;border-color:#b91c1c3d}.selected-shape-actions .danger-action-button:hover{background:#fef2f2}.ui-toggle-button{z-index:3;color:#252b36;pointer-events:auto;background:#ffffffd1;border:1px solid #69728252;border-radius:6px;height:34px;padding:0 12px;font-size:12px;font-weight:800;position:absolute;top:24px;left:246px;box-shadow:0 8px 20px #2a344424}.timer-overlay{z-index:2;color:#111827;text-align:center;pointer-events:auto;background:#f8fafcd1;border:1px solid #69728242;border-radius:8px;gap:8px;min-width:190px;padding:10px 14px 12px;display:grid;position:absolute;bottom:18px;right:18px;box-shadow:0 14px 32px #2a344429}.timer-overlay-actions{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.timer-overlay-button{color:#1d4ed8;cursor:pointer;background:#eff6ffe0;border:1px solid #2563eb42;border-radius:6px;height:28px;font-size:12px;font-weight:850}.timer-overlay-button:hover{background:#eff6ff;border-color:#2563eb85}.timer-overlay-text{font:900 46px/1 ui-monospace,SFMono-Regular,Consolas,monospace}.timer-overlay .timer-panel{border-top:1px solid #69728238;margin-top:0;padding-top:10px;display:none}.timer-overlay.is-expanded .timer-panel{display:grid}.timer-overlay .timer-label,.timer-overlay .timer-controls{display:none}.timer-overlay.is-running{background:#eff6ffe6;border-color:#2563eb61}.hint-overlay{z-index:3;pointer-events:auto;gap:8px;width:190px;display:grid;position:absolute;bottom:18px;right:222px}.hint-overlay-button,.hint-menu-button{color:#1d4ed8;cursor:pointer;background:#eff6ffe6;border:1px solid #2563eb42;border-radius:6px;height:34px;font-size:12px;font-weight:850;box-shadow:0 8px 20px #2a344424}.hint-overlay-button:disabled{color:#9ca3af;cursor:not-allowed;background:#e5e7eb9e}.hint-menu{background:#f8fafceb;border:1px solid #69728242;border-radius:8px;gap:6px;padding:8px;display:none;box-shadow:0 14px 32px #2a344429}.hint-overlay.is-open .hint-menu{display:grid}.hint-menu-actions,.hint-menu-detail{gap:6px;display:grid}.hint-menu-detail{border-top:1px solid #69728233;padding-top:8px}.hint-menu-button{color:#252b36;width:100%;box-shadow:none;background:#ffffffd1}.hint-wide-button{width:100%}.viewer-problem-overlay{z-index:2;color:#111827;pointer-events:none;background:#f8fafcd6;border:1px solid #69728242;border-radius:8px;gap:4px;max-width:min(440px,100vw - 36px);padding:10px 12px;display:none;position:absolute;bottom:18px;left:18px;box-shadow:0 14px 32px #2a344429}.viewer-problem-overlay.is-visible{display:grid}.viewer-problem-overlay-index{color:#2563eb;font:850 12px/1.2 ui-monospace,SFMono-Regular,Consolas,monospace}.viewer-problem-overlay-title{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:850;overflow:hidden}.hint-result-panel{z-index:2;color:#111827;pointer-events:auto;background:#f8fafceb;border:1px solid #69728247;border-radius:8px;width:clamp(160px,100vw - 720px,260px);max-height:calc(100vh - 32px);padding:14px;display:none;position:absolute;top:16px;left:352px;overflow-y:auto;box-shadow:0 14px 32px #2a344429}.hint-result-panel.is-visible{gap:10px;display:grid}.hint-result-panel h2{margin:0;font-size:15px;line-height:1.2}.hint-reset-button{width:100%;height:30px}.hint-result-body{gap:9px;display:grid}.hint-text{color:#374151;margin:0;font-size:12px;font-weight:750;line-height:1.35}.hint-entry{color:#374151;text-align:left;cursor:pointer;background:#ffffffa8;border:1px solid #69728238;border-radius:6px;grid-template-columns:18px 1fr;align-items:center;gap:7px;width:100%;min-height:32px;padding:6px 8px;font-size:12px;font-weight:750;line-height:1.3;display:grid}.hint-entry:hover{background:#eff6ff;border-color:#2563eb61}.hint-entry.is-error{color:#b91c1c}.editor-panels.is-ui-hidden .shape-selector,.editor-panels.is-ui-hidden .data-panel{display:none}.editor-panels.is-ui-hidden .hint-result-panel{width:min(280px,100vw - 32px);left:16px}.editor-panels.is-ui-hidden .ui-toggle-button{top:16px;left:24px}.shape-selector,.data-panel{pointer-events:auto;background:#f8fafce6;border:1px solid #69728247;border-radius:8px;width:min(320px,100vw - 32px);max-height:calc(100vh - 32px);padding:14px;position:absolute;top:16px;overflow-y:auto;box-shadow:0 14px 32px #2a344429}.shape-selector{display:none;left:16px}.shape-selector.is-visible{display:block}.data-panel{right:16px}.shape-selector h1{color:#141820;margin:0;font-size:18px;font-weight:700;line-height:1.2}.panel-header{align-items:baseline;gap:8px;margin-bottom:12px;display:flex}.version-badge{color:#6b7280;white-space:nowrap;font:800 11px/1 ui-monospace,SFMono-Regular,Consolas,monospace}.shape-list{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.shape-button,.rotation-button,.position-button,.place-button,.secondary-action-button{color:#252b36;cursor:pointer;background:#ffffffb8;border:1px solid #69728252;border-radius:6px;align-items:center;min-width:0;height:40px;padding:0 10px;transition:border-color .14s,background-color .14s,box-shadow .14s;display:flex}.shape-button{justify-content:flex-start}.rotation-button,.position-button,.place-button,.secondary-action-button{justify-content:center;font-size:13px;font-weight:750}.shape-button:hover,.rotation-button:hover,.position-button:hover,.place-button:hover,.secondary-action-button:hover{background:#fff;border-color:#323d4c80}.shape-button:focus-visible,.rotation-button:focus-visible,.position-button:focus-visible,.place-button:focus-visible,.secondary-action-button:focus-visible{outline-offset:2px;outline:2px solid #2563eb}.shape-button.is-selected{background:#eff6ff;border-color:#2563eb;box-shadow:inset 0 0 0 1px #2563eb}.mode-controls,.difficulty-controls{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.mode-controls{border-bottom:1px solid #6972823d;padding-bottom:12px}.difficulty-controls{margin-top:8px}.problem-controls,.problem-lookup,.problem-list,.problem-management,.viewer-actions,.timer-panel{border-top:1px solid #6972823d;gap:8px;margin-top:12px;padding-top:12px;display:grid}.problem-controls{grid-template-columns:auto 1fr auto;align-items:center}.random-problem-button{grid-column:1/3;width:100%}.refresh-problem-button{grid-column:3/4;width:100%}.clear-viewer-problem-button{width:100%;margin-top:12px}.problem-controls .clear-viewer-problem-button{grid-column:1/-1;width:100%}.problem-lookup{grid-template-columns:minmax(54px,.45fr) auto minmax(0,1fr) auto;align-items:center}.viewer-actions{grid-template-columns:1fr;align-items:center}.hint-panel{border-top:1px solid #6972823d;gap:8px;margin-top:12px;padding-top:12px;display:grid}.hint-title{color:#374151;font-size:12px;font-weight:850}.hint-shape-list{gap:6px;display:grid}.hint-shape-row{color:#374151;grid-template-columns:18px minmax(0,1fr) auto 42px;align-items:center;gap:7px;min-height:30px;font-size:12px;font-weight:750;display:grid}.hint-shape-row.is-unused{opacity:.52}.hint-empty{color:#6b7280;font-size:12px;font-weight:750}.hint-shape-swatch,.hint-cell-swatch{border:1px solid #0003;border-radius:3px;width:14px;height:14px}.hint-shape-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hint-shape-used{color:#6b7280;font:800 11px/1 ui-monospace,SFMono-Regular,Consolas,monospace}.hint-shape-button{height:30px;padding:0 8px}.hint-cell-row{grid-template-columns:repeat(3,minmax(0,1fr)) auto;gap:8px;display:grid}.hint-cell-input{color:#111827;background:#ffffffb8;border:1px solid #69728247;border-radius:6px;min-width:0;height:34px;padding:0 8px;font:700 13px/1 ui-monospace,SFMono-Regular,Consolas,monospace}.hint-cell-result{color:#2563eb;grid-template-columns:18px 1fr;align-items:center;gap:7px;min-height:20px;font-size:12px;font-weight:750;display:grid}.hint-cell-result.is-error{color:#b91c1c}.hint-cell-swatch{visibility:hidden}.hint-cell-swatch.is-visible{visibility:visible}.problem-list{max-height:148px;overflow-y:auto}.problem-management{grid-template-columns:1fr;align-items:stretch}.problem-management-row{align-items:center;gap:8px;display:grid}.problem-management-row-move{grid-template-columns:auto minmax(0,1fr) auto}.problem-management-row-reorder{grid-template-columns:auto auto minmax(64px,1fr) auto}.problem-management .danger-action-button{width:100%}.danger-action-button.is-confirming{color:#fff;background:#dc2626;border-color:#b91c1c94}.problem-label,.problem-title,.problem-status,.board-validation-status,.timer-label{color:#374151;justify-content:center;align-items:center;min-height:34px;font-size:12px;font-weight:800;display:flex}.timer-label{color:#111827;background:#ffffff9e;border:1px solid #69728238;border-radius:6px;min-height:58px;font:800 32px/1 ui-monospace,SFMono-Regular,Consolas,monospace}.timer-panel.is-running .timer-label{background:#eff6ff;border-color:#2563eb5c}.timer-mode-controls,.timer-controls{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.countdown-row{color:#4b5563;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;font-size:12px;font-weight:800;display:grid}.countdown-row.is-disabled{opacity:.52}.countdown-input{color:#111827;background:#ffffffb8;border:1px solid #69728247;border-radius:6px;min-width:0;height:34px;padding:0 8px;font:700 13px/1 ui-monospace,SFMono-Regular,Consolas,monospace}.problem-title{color:#6b7280;justify-content:flex-start;min-height:24px;margin-top:6px;font-size:12px}.problem-status{color:#2563eb;justify-content:flex-start;min-height:16px;font-size:12px;font-weight:750}.problem-status.is-error,.board-validation-status.is-error{color:#b91c1c}.board-validation-status{color:#2563eb;justify-content:flex-start;min-height:18px;margin-top:8px;font-size:12px;font-weight:750}.problem-title-input{color:#111827;background:#ffffffb8;border:1px solid #69728247;border-radius:6px;grid-column:1/-1;min-width:0;height:34px;padding:0 8px;font-size:13px;font-weight:700}.problem-number-input,.problem-search-input{color:#111827;background:#ffffffb8;border:1px solid #69728247;border-radius:6px;min-width:0;height:34px;padding:0 8px;font-size:13px;font-weight:700}.problem-number-input{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.problem-difficulty-select{color:#111827;background:#ffffffb8;border:1px solid #69728247;border-radius:6px;min-width:0;height:34px;padding:0 8px;font-size:13px;font-weight:700}.problem-title-input:focus-visible,.problem-number-input:focus-visible,.problem-search-input:focus-visible,.problem-difficulty-select:focus-visible{outline-offset:2px;outline:2px solid #2563eb}.problem-empty,.problem-item{border-radius:6px;min-height:34px;font-size:12px;font-weight:750}.problem-empty{color:#6b7280;align-items:center;display:flex}.problem-item{color:#374151;cursor:pointer;background:#fff9;border:1px solid #6972823d;grid-template-columns:24px 1fr;align-items:center;gap:8px;width:100%;display:grid}.problem-item:hover{background:#fff;border-color:#323d4c80}.problem-item.is-selected{color:#1d4ed8;background:#eff6ff;border-color:#2563eb;box-shadow:inset 0 0 0 1px #2563eb}.problem-item-number{color:#6b7280;justify-content:center;align-items:center;font:800 11px/1 ui-monospace,SFMono-Regular,Consolas,monospace;display:flex}.problem-item-title{text-align:left;text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.secondary-action-button.is-selected{color:#1d4ed8;background:#eff6ff;border-color:#2563eb;box-shadow:inset 0 0 0 1px #2563eb}.shape-button:disabled{color:#7c8490;cursor:not-allowed;background:#e5e7ebad;border-color:#6972822e}.secondary-action-button:disabled,.problem-title-input:disabled,.problem-number-input:disabled,.problem-search-input:disabled,.problem-difficulty-select:disabled{color:#9ca3af;cursor:not-allowed;background:#e5e7eb75;border-color:#69728229}.shape-button.is-unavailable .shape-swatch{opacity:.42}.shape-button span:last-child{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:13px;font-weight:650;line-height:1;overflow:hidden}.shape-swatch{border:1px solid #0000002e;border-radius:3px;flex:none;width:14px;height:14px;margin-right:7px}.clear-selection-button{width:100%;margin-bottom:10px}.color-mode-button,.color-toggle-button,.cell-edges-button,.core-marker-button,.grid-toggle-button,.floor-toggle-button{width:100%}.rotation-controls{border-top:1px solid #6972823d;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:12px;padding-top:12px;display:grid}.rotation-button-wide{font-weight:650}.board-controls{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:10px;display:grid}.position-controls{border-top:1px solid #6972823d;gap:8px;margin-top:12px;padding-top:12px;display:grid}.position-row{grid-template-columns:28px 1fr 44px 1fr;align-items:center;gap:8px;display:grid}.position-axis{color:#4b5563;text-align:center;font-size:12px;font-weight:800}.position-value{color:#141820;background:#ffffff8a;border:1px solid #6972823d;border-radius:6px;justify-content:center;align-items:center;height:40px;font-size:14px;font-weight:800;display:flex}.action-controls{border-top:1px solid #6972823d;grid-template-columns:1fr auto;align-items:center;gap:10px;margin-top:12px;padding-top:12px;display:grid}.place-button{color:#fff;background:#2563eb;border-color:#2563eb6b;height:42px}.place-button:hover{background:#1d4ed8;border-color:#1d4ed8}.place-button.is-rejected{background:#dc2626;border-color:#dc262680}.placed-count{color:#4b5563;white-space:nowrap;font-size:12px;font-weight:800}.selected-controls{grid-template-columns:1fr auto auto;align-items:center;gap:8px;margin-top:10px;display:none}.selected-controls.is-visible{display:grid}.selected-label{color:#1f2937;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;font-weight:800;overflow:hidden}.secondary-action-button{height:34px;padding:0 10px}.danger-action-button{color:#b91c1c;border-color:#dc262647}.placed-list{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}.placed-empty,.placed-item{border-radius:5px;align-items:center;min-height:24px;font-size:12px;font-weight:750;display:inline-flex}.placed-empty{color:#6b7280}.placed-item{color:#374151;cursor:pointer;background:#fff9;border:1px solid #6972823d;padding:0 8px}.placed-item.is-selected{color:#1d4ed8;background:#eff6ff;border-color:#2563eb}.export-controls{border-top:1px solid #6972823d;gap:8px;margin-top:12px;padding-top:12px;display:grid}.data-panel.export-controls{border-top:1px solid #69728247;margin-top:0;padding-top:14px}.visual-settings{border-bottom:1px solid #69728238;gap:8px;padding:10px 0 12px;display:grid}.visual-settings-label{color:#4b5563;font-size:12px;font-weight:850}.visual-settings-buttons{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.data-tools-toggle-button{width:100%}.data-tools{gap:8px;display:grid}.data-tools.is-hidden{display:none}.data-actions{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.register-choices{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:none}.register-choices.is-visible{display:grid}.register-title-input{color:#111827;min-width:0;font:inherit;background:#ffffffb8;border:1px solid #69728247;border-radius:6px;grid-column:1/-1;padding:7px 9px}.register-title-input:focus-visible{outline-offset:2px;outline:2px solid #2563eb}.export-button{justify-self:start}.export-output{resize:vertical;color:#111827;background:#ffffffb8;border:1px solid #69728247;border-radius:6px;width:100%;min-height:96px;padding:8px;font:11px/1.4 ui-monospace,SFMono-Regular,Consolas,monospace}.export-output:focus-visible{outline-offset:2px;outline:2px solid #2563eb}.import-status{color:#2563eb;min-height:16px;font-size:12px;font-weight:750}.import-status.is-error{color:#b91c1c}@media (width<=560px){.shape-selector,.data-panel{width:calc(100vw - 20px);max-height:calc(100vh - 20px);padding:10px;top:10px}.shape-selector{left:10px}.data-panel{max-height:min(34vh,220px);top:auto;bottom:10px;right:10px}.timer-overlay{min-width:150px;padding:8px 10px 9px;bottom:10px;right:10px}.hint-overlay{width:190px;bottom:120px;right:10px}.hint-result-panel,.editor-panels.is-ui-hidden .hint-result-panel{width:min(280px,100vw - 20px);max-height:calc(100vh - 64px);top:54px;left:10px}.timer-overlay-button{height:26px;font-size:11px}.timer-overlay-text{font-size:32px}.ui-toggle-button{top:12px;left:auto;right:12px}.editor-panels.is-ui-hidden .ui-toggle-button{left:18px;right:auto}.shape-list{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.shape-button,.rotation-button,.position-button,.place-button,.secondary-action-button,.position-value{height:40px}.shape-button{padding:0 8px}.position-row{grid-template-columns:24px 1fr 40px 1fr;gap:6px}}
