body{background-color:#0d0d0d;color:#fff;font-family:Arial,sans-serif;overflow-x:hidden}.toggle-container{display:flex;align-items:center;gap:10px}.toggle-text{font-size:1rem;width:80px;text-align:center}.toggle-switch{position:relative;display:inline-block;width:60px;height:34px}.toggle-switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.4s;border-radius:34px}.slider:before{position:absolute;content:"";height:26px;width:26px;left:4px;bottom:4px;background-color:#fff;transition:.4s;border-radius:50%}.toggle-switch input:checked+.slider{background-color:#007a47}.toggle-switch input:checked+.slider:before{transform:translate(26px)}.project-tile{background-color:#222;color:#fff;border-radius:8px;border:0;overflow:hidden;box-shadow:0 2px 4px #00000080;transition:transform .3s ease,box-shadow .3s ease;cursor:pointer;display:block;width:100%;padding:0;text-decoration:none;text-align:left}.project-tile.hover{transform:scale(1.05);box-shadow:0 4px 8px #000000b3}.project-tile:focus-visible{outline:3px solid #ff4d4d;outline-offset:4px}article.project-tile{cursor:zoom-in}.project-tile img{width:100%;height:auto;display:block}.pattern-preview{position:relative;display:grid;place-items:center;width:100%;aspect-ratio:16 / 9;overflow:hidden;background:linear-gradient(rgba(44,73,62,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(44,73,62,.08) 1px,transparent 1px),#b9c9bf;background-size:20px 20px}.pattern-preview-sheet{position:absolute;right:4%;bottom:-20%;width:22%;height:75%;overflow:hidden;border:3px solid #fff;background:#fff;box-shadow:0 12px 32px #11241d57;transform:rotate(5deg)}.pattern-preview-sheet img{width:100%;height:100%;object-fit:cover;object-position:top center}.pattern-render{position:absolute;overflow:hidden;border:3px solid rgba(255,255,255,.92);background:#333;box-shadow:0 10px 28px #11241d4d}.pattern-render img{width:100%;height:100%;object-fit:cover}.pattern-render-perspective{top:7%;right:20%;bottom:9%;left:4%;transform:rotate(-1deg)}.pattern-render-perspective img{object-position:center}.pattern-render-top{top:auto;right:4%;bottom:8%;width:42%;height:24%;transform:rotate(2deg)}.pattern-render-top img{position:absolute;top:50%;left:50%;width:27.37%;height:auto;max-width:none;object-fit:initial;transform:translate(-50%,-50%) rotate(90deg)}.pattern-badge,.pattern-format{position:absolute;z-index:1;border:1px solid rgba(255,255,255,.45);background:#1e4638;color:#fff;font-family:Courier New,monospace;font-size:.72rem;font-weight:800;letter-spacing:.08em}.pattern-badge{top:16px;left:16px;padding:8px 10px;transform:rotate(-2deg)}.pattern-format{right:16px;bottom:16px;padding:7px 9px;background:#da684b;transform:rotate(2deg)}.pattern-downloads{display:flex;flex-wrap:wrap;gap:9px;margin-top:16px}.pattern-downloads a{display:inline-flex;align-items:center;gap:7px;min-height:38px;box-sizing:border-box;border:1px solid rgba(255,255,255,.22);border-radius:6px;padding:9px 12px;background:#1e4638;color:#fff;font-size:.84rem;font-weight:700;text-decoration:none;transition:background .2s ease,border-color .2s ease,transform .2s ease}.pattern-downloads a:hover{border-color:#ef8469;background:#285d4b;transform:translateY(-2px)}.pattern-downloads a:focus-visible{outline:3px solid #ff4d4d;outline-offset:3px}.code-preview{display:grid;place-items:center;width:100%;aspect-ratio:16 / 9;background:linear-gradient(135deg,rgba(255,77,77,.18),transparent 36%),linear-gradient(145deg,#151515,#303030)}.code-preview span{color:#ffffffe6;font-family:Courier New,monospace;font-size:3rem;font-weight:800}.phone-game-preview{position:relative;display:grid;align-content:end;gap:6px;width:100%;aspect-ratio:16 / 9;padding:18px;box-sizing:border-box;overflow:hidden;background:radial-gradient(circle at 76% 24%,rgba(255,209,102,.34),transparent 20%),radial-gradient(circle at 16% 82%,rgba(255,77,77,.4),transparent 28%),linear-gradient(135deg,#090909,#262626 46%,#591f1f)}.phone-game-preview:before{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,rgba(255,255,255,.08) 1px,transparent 1px),linear-gradient(rgba(255,255,255,.06) 1px,transparent 1px);background-size:22px 22px;content:"";opacity:.24}.phone-game-title{position:relative;z-index:1;color:#fff;font-size:clamp(2.4rem,8vw,4.9rem);font-weight:1000;letter-spacing:0;line-height:.78;text-shadow:0 6px 0 rgba(0,0,0,.28)}.phone-game-subtitle{position:relative;z-index:1;color:#ffd166;font-size:.95rem;font-weight:900}.phone-game-mini{position:absolute;z-index:1;display:grid;gap:6px;width:34%;min-width:104px;border:1px solid rgba(255,255,255,.16);border-radius:8px;padding:8px;background:#0000007a;box-shadow:0 12px 28px #00000052}.phone-game-mini.mini-result{right:14px;top:14px}.phone-game-mini.mini-result strong{color:#7ff0b3;font-size:.88rem}.phone-game-mini.mini-result span{color:#ffffffc7;font-size:.57rem;font-weight:800}.phone-game-mini.mini-targets{right:14px;top:50%;width:29%;min-width:90px;padding:6px;transform:translateY(-50%)}.phone-game-mini.mini-dial{bottom:14px;right:14px;width:38%}.phone-game-mini-number{color:#fff;font-family:Courier New,monospace;font-size:.72rem;font-weight:900;text-align:center}.phone-game-target-row{display:grid;grid-template-columns:repeat(6,1fr);gap:4px}.phone-game-target-row span{aspect-ratio:1;border-radius:5px;background:#ffffff2e}.phone-game-target-row span.active{background:#ff4d4d;box-shadow:0 0 14px #ff4d4db8}.phone-game-sequence-row{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.phone-game-sequence-row span{display:grid;place-items:center;min-height:18px;border-radius:4px;background:#ffd166;color:#161006;font-size:.68rem;font-weight:900}.phone-game-mini-pad{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.phone-game-mini-pad span{display:grid;place-items:center;min-height:13px;border-radius:4px;background:#ffffff24;color:#ffffffe6;font-size:.68rem;font-weight:900}.youtube-preview{position:relative;display:grid;place-items:center;width:100%;aspect-ratio:16 / 9;overflow:hidden;background:radial-gradient(circle at 22% 20%,rgba(255,255,255,.18),transparent 22%),linear-gradient(135deg,#111,#2d2d2d 45%,#c90000)}.youtube-preview:before{position:absolute;top:14px;right:14px;bottom:14px;left:14px;border:1px solid rgba(255,255,255,.16);border-radius:8px;content:""}.youtube-channel-mark{position:absolute;left:18px;top:18px;display:grid;place-items:center;width:46px;height:46px;border-radius:50%;background:#fff;color:#c90000;font-weight:700;letter-spacing:0}.youtube-play{position:relative;width:78px;height:54px;border-radius:14px;background:red;box-shadow:0 8px 24px #00000057}.youtube-play:before{position:absolute;top:50%;left:52%;border-bottom:12px solid transparent;border-left:20px solid #fff;border-top:12px solid transparent;content:"";transform:translate(-50%,-50%)}.youtube-handle{position:absolute;bottom:18px;left:18px;color:#fff;font-size:.95rem;font-weight:700}.project-info{padding:16px;color:#fff}.project-info h2,.project-info p{margin:0;padding:0}.project-info p{margin-top:8px;line-height:1.4}.project-link-label{display:inline-block;margin-top:14px;color:#ff4d4d;font-size:.9rem;font-weight:700}.image-preview-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10;display:grid;place-items:center;padding:24px;background:#000000d6}.image-preview-panel{display:grid;grid-template-rows:auto auto minmax(0,1fr);width:calc(100vw - 48px);height:calc(100vh - 48px);max-height:calc(100vh - 48px);overflow:hidden;border:1px solid rgba(255,255,255,.14);border-radius:8px;background:#151515;box-shadow:0 18px 60px #0000008c}.image-preview-toolbar{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:16px;border-bottom:1px solid rgba(255,255,255,.12)}.image-preview-toolbar h2,.image-preview-toolbar p{margin:0}.image-preview-toolbar p{margin-top:6px;color:#ffffffc2;line-height:1.4}.image-preview-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.image-preview-actions button{min-width:52px;min-height:38px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#242424;color:#fff;cursor:pointer;font-weight:700}.image-preview-actions button:hover{background:#333}.image-preview-stage{overflow:auto;padding:28px;background:#0b0b0b;cursor:grab;touch-action:pan-x pan-y;-webkit-user-select:none;user-select:none}.image-preview-panel>.image-preview-stage:nth-child(2){grid-row:2 / -1}.pattern-preview-tabs{display:flex;gap:8px;overflow-x:auto;padding:10px 16px;border-bottom:1px solid rgba(255,255,255,.12);background:#101010}.pattern-preview-tabs button{flex:0 0 auto;min-height:36px;border:1px solid rgba(255,255,255,.18);border-radius:999px;padding:7px 13px;background:#242424;color:#ffffffc7;cursor:pointer;font-weight:700}.pattern-preview-tabs button.active{border-color:#ef8469;background:#1e4638;color:#fff}.pattern-pdf-stage{position:relative;min-height:0;padding:16px;background:#0b0b0b}.pattern-pdf-stage iframe{width:100%;height:100%;border:0;border-radius:6px;background:#fff}.pattern-pdf-stage>a{position:absolute;right:28px;bottom:28px;border-radius:6px;padding:10px 13px;background:#1e4638;color:#fff;font-size:.84rem;font-weight:700;text-decoration:none}.image-preview-stage.dragging{cursor:grabbing}.image-preview-stage.sewing-pattern-stage{background:#fff;cursor:zoom-in}.image-preview-stage.sewing-pattern-stage.zoomed-in{cursor:zoom-out}.image-preview-stage.sewing-pattern-stage.dragging{cursor:grabbing}.sewing-pattern-stage .image-preview-zoom-frame,.sewing-pattern-stage .image-preview-zoom-frame img{background:#fff}.sewing-pattern-stage .pattern-viewer-frame{position:relative;align-items:center;min-width:100%;min-height:100%}.sewing-pattern-stage .pattern-viewer-frame img{width:100%;height:100%;object-fit:contain}.sewing-pattern-stage .pattern-viewer-frame.rotated-view img{position:absolute;top:50%;left:50%;width:27.37%;height:auto;max-width:none;object-fit:initial;transform:translate(-50%,-50%) rotate(90deg)}.image-preview-zoom-frame{display:flex;justify-content:center;min-width:25%;margin:0 auto;transition:width .18s ease;will-change:width}.image-preview-zoom-frame img{display:block;width:100%;height:auto;object-fit:contain;pointer-events:none}@media (max-width: 720px){.phone-game-mini.mini-targets{top:14px;right:auto;left:14px;transform:none}.image-preview-backdrop{padding:12px}.image-preview-panel{width:calc(100vw - 24px);height:calc(100vh - 24px);max-height:calc(100vh - 24px)}.image-preview-toolbar{align-items:flex-start;flex-direction:column}.image-preview-actions{justify-content:flex-start}}.reactive-background-canvas{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#0d0d0d;z-index:0}.game-page{position:relative;z-index:2;width:100vw;height:100vh;max-height:100vh;overflow:hidden;padding:20px;box-sizing:border-box;transition:background .24s ease}.game-page.result-correct{background:#29b06d1c}.game-page.result-wrong{background:#ff4d4d1a}.game-header{display:flex;align-items:center;justify-content:space-between;gap:18px}.game-home-link{display:inline-flex;align-items:center;min-height:38px;padding:0 14px;border:1px solid rgba(255,255,255,.2);border-radius:6px;color:#fff;text-decoration:none;background:#ffffff14}.game-home-link:hover{background:#ffffff24}.game-scoreboard{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px}.game-scoreboard.pulse{animation:scoreboard-pop .42s ease}.game-scoreboard span,.game-rules-row span{border:1px solid rgba(255,255,255,.15);border-radius:6px;padding:8px 10px;background:#00000047;color:#ffffffe0;font-weight:700}.game-scoreboard .hot-streak{border-color:#ff4d4d7a;color:#ffd2d2;box-shadow:0 0 18px #ff4d4d2e}.game-page.result-correct .game-scoreboard span,.game-page.result-correct .game-rules-row span{border-color:#4fe0936b;color:#d6ffe8}.game-page.result-correct .game-scoreboard .hot-streak{border-color:#4fe09394;color:#b9ffd7;box-shadow:0 0 20px #4fe09333}.game-shell{display:grid;grid-template-rows:auto auto;align-content:start;gap:12px;width:min(860px,100%);height:calc(100vh - 98px);min-height:0;margin:18px auto 0}.game-status-panel{display:grid;gap:10px}.game-status-panel h1{margin:0;font-size:clamp(1.45rem,3.6vw,2.7rem);line-height:1}.game-kicker,.game-phase-label,.game-hit-count{margin:0;color:#ff4d4d;font-size:.9rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.game-page.result-correct .game-kicker,.game-page.result-correct .game-phase-label,.game-page.result-correct .game-hit-count{color:#4fe093}.game-rules-row{display:flex;flex-wrap:wrap;gap:10px}.game-card{display:grid;gap:14px;align-content:start;min-height:0;border:1px solid rgba(255,255,255,.14);border-radius:8px;padding:18px;background:#121212e0;box-shadow:0 16px 44px #00000057}.game-page.result-correct .game-card{border-color:#4fe09357;box-shadow:0 18px 48px #15854b33}.game-card h2,.game-card p{margin:0}.game-start p{color:#ffffffc7;line-height:1.5}.game-area-code-control{display:grid;gap:8px}.game-area-code-button,.game-area-code-reset{width:fit-content;min-height:40px;border:1px solid rgba(255,255,255,.2);border-radius:6px;padding:0 14px;background:#ffffff14;color:#fff;cursor:pointer;font-weight:800}.game-area-code-panel{display:grid;grid-template-columns:minmax(150px,210px) minmax(120px,160px);align-items:center;gap:8px 12px;border-left:3px solid #ff4d4d;padding:10px 12px;background:#ffffff0a}.game-area-code-panel label{font-weight:800}.game-area-code-panel input{min-height:40px;border:1px solid rgba(255,255,255,.24);border-radius:6px;padding:0 12px;background:#242424;color:#fff;font:inherit;font-weight:800}.game-area-code-panel p{grid-column:1 / -1;font-size:.85rem}.game-area-code-reset{grid-column:1 / -1;min-height:34px;color:#ffb1b1;font-size:.82rem}.game-primary-button{min-height:46px;border:0;border-radius:6px;padding:0 18px;background:#ff4d4d;color:#130606;cursor:pointer;font-size:1rem;font-weight:800;transition:transform .14s ease,filter .14s ease}.game-page.result-correct .game-primary-button{background:#4fe093;color:#062114}.game-primary-button:hover:not(:disabled){filter:brightness(1.08);transform:translateY(-1px)}.game-primary-button:active:not(:disabled){transform:translateY(1px) scale(.99)}.game-primary-button:disabled{cursor:not-allowed;opacity:.45}.game-memory{place-items:center;text-align:center}.game-memory,.game-distraction,.game-recall,.game-result{align-content:center}.game-phone-number,.game-typed-number{width:100%;color:#fff;font-family:Courier New,monospace;font-size:clamp(2.1rem,9vw,5.4rem);font-weight:800;letter-spacing:0;line-height:1;overflow-wrap:anywhere}.game-distraction-top{display:flex;align-items:center;justify-content:space-between;gap:16px}.game-distraction-top h2{margin-top:6px}.game-progress-count{display:grid;place-items:center;min-width:76px;height:52px;border:2px solid #ff4d4d;border-radius:8px;padding:0 12px;font-size:1.2rem;font-weight:900}.game-target-grid{display:grid;align-items:center;gap:8px;width:100%}.game-target{aspect-ratio:1;min-width:0;min-height:0;border:1px solid rgba(255,255,255,.16);border-radius:8px;background:#242424;cursor:pointer;transition:background .12s ease,box-shadow .12s ease,transform .12s ease}.game-target.active{background:#ff4d4d;box-shadow:0 0 24px #ff4d4d7a;transform:scale(1.06)}.game-target.active.hit-pulse{animation:target-pop .24s ease}.game-recall{justify-items:center;gap:10px;padding-top:26px}.game-recall .game-phase-label{align-self:auto;justify-self:center;width:auto;padding:0 10px;background:#121212f5;text-align:center}.game-input-hint{color:#ffffff94;font-size:.92rem;text-align:center}.game-keypad{display:grid;grid-template-columns:repeat(3,minmax(74px,1fr));gap:8px;width:min(320px,100%)}.game-key{aspect-ratio:1.55;border:1px solid rgba(255,255,255,.16);border-radius:8px;background:#242424;color:#fff;cursor:pointer;font-size:1.55rem;font-weight:800;transition:transform .12s ease,background .12s ease,box-shadow .12s ease}.game-key.utility{color:#ffb1b1;font-size:1rem;text-transform:uppercase}.game-key:hover,.game-target:hover{background:#333}.game-key:active{background:#ff4d4d;color:#130606;transform:scale(.96);box-shadow:0 0 18px #ff4d4d52}.game-sequence-display{display:flex;justify-content:center;gap:8px}.sequence-dot{display:grid;place-items:center;width:38px;height:38px;border-radius:50%;color:#111;font-weight:900}.game-sequence-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.game-sequence-grid.error{animation:result-shake .28s ease}.game-sequence-tile{min-height:96px;border:0;border-radius:8px;color:#101010;cursor:pointer;font-size:1.8rem;font-weight:900;transition:filter .12s ease,transform .12s ease}.game-sequence-tile:hover{filter:brightness(1.08)}.game-sequence-tile:active{transform:scale(.96)}.color-0{background:#4fe093}.color-1{background:#64b5ff}.color-2{background:#ffd166}.color-3{background:#ff7ab6}.game-target.active:hover{background:#ff6969}.game-result.correct{border-color:#4fe0936b;animation:result-pop .38s ease}.game-result.complete{border-color:#ffd1669e;background:radial-gradient(circle at 50% 0%,rgba(255,209,102,.18),transparent 42%),#121212e6;box-shadow:0 22px 60px #ffd16633;animation:result-pop .52s ease;text-align:center}.game-result.complete h2{color:#ffe6a3}.game-result.complete p:not(.game-phase-label){color:#ffffffc7}.game-result.complete .game-phase-label{color:#ffd166}.game-result.correct h2{color:#c9ffdf}.game-result.correct .game-phase-label{color:#4fe093}.game-result.wrong{border-color:#ff4d4d7a;animation:result-shake .32s ease}.game-test-controls button{position:fixed;z-index:4;border:1px solid rgba(255,255,255,.18);border-radius:6px;background:#ffffff1a;color:#fff;cursor:pointer;font-weight:800;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.game-test-controls button:hover{background:#ffffff2e}.game-test-bottom{left:50%;bottom:12px;min-height:38px;padding:0 12px;transform:translate(-50%)}@keyframes target-pop{0%{transform:scale(.92)}60%{transform:scale(1.18)}to{transform:scale(1.06)}}@keyframes scoreboard-pop{0%{transform:scale(1)}45%{transform:scale(1.04)}to{transform:scale(1)}}@keyframes result-pop{0%{transform:scale(.98)}70%{transform:scale(1.02)}to{transform:scale(1)}}@keyframes result-shake{0%,to{transform:translate(0)}30%{transform:translate(-8px)}60%{transform:translate(8px)}}@media (max-width: 680px){.game-page{padding:12px}.game-header{align-items:center;gap:10px}.game-scoreboard{justify-content:flex-end;gap:6px}.game-scoreboard span,.game-rules-row span{padding:6px 8px;font-size:.82rem}.game-shell{height:calc(100vh - 82px);margin-top:10px}.game-status-panel{gap:8px}.game-status-panel h1{font-size:1.35rem}.game-card{padding:12px}.game-area-code-panel{grid-template-columns:1fr}.game-area-code-panel p,.game-area-code-reset{grid-column:1}.game-target-grid{gap:5px}.game-progress-count{min-width:58px;height:44px;font-size:1rem}.game-keypad{gap:7px}.game-key{font-size:1.3rem}.game-sequence-tile{min-height:70px}.sequence-dot{width:32px;height:32px}}.oneko-cat{position:fixed;left:0;top:0;z-index:2147483647;width:32px;height:32px;background-image:url(/images/oneko.gif);image-rendering:pixelated;pointer-events:none;will-change:transform,background-position}.pattern-inspector-open .oneko-cat{filter:drop-shadow(0 2px 1px rgba(0,0,0,.7))}.phone-cursor-active,.phone-cursor-active *{cursor:none!important}.phone-cursor{position:fixed;left:0;top:0;z-index:2147483647;width:30px;height:30px;opacity:0;color:#f4f7fb;filter:drop-shadow(0 1px 0 #111) drop-shadow(0 0 4px rgba(100,181,255,.7));pointer-events:none;transform-origin:0 0}.phone-cursor.visible{opacity:1}.phone-cursor svg{display:block;width:100%;height:100%;overflow:visible}.phone-cursor path{fill:currentColor;stroke:#182433;stroke-width:1.35;stroke-linejoin:round}.phone-cursor.clicking{color:#9ed4ff}@media (hover: none),(pointer: coarse){.oneko-cat,.phone-cursor{display:none}}@media (prefers-reduced-motion: reduce){.oneko-cat{display:none}}.app-container{position:relative;min-height:100vh;padding:20px}.app-container.game-route{height:100vh;overflow:hidden;padding:0}.header{display:flex;justify-content:space-between;align-items:center;gap:18px;position:relative;z-index:2}.header-actions{display:flex;align-items:center;justify-content:flex-end;gap:14px}.project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:20px;margin-top:20px;position:relative;z-index:2}@media (max-width: 720px){.header,.header-actions{align-items:flex-start;flex-direction:column}}
