@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@600;700;800&family=IBM+Plex+Mono:wght@400;500;600&family=Noto+Sans+TC:wght@400;500;700&display=swap');
:root{color-scheme:dark;--orange:#ff8351;--green:#c8dab1;--ink:#e3e5d6;--muted:#a0a999;--line:#48503e;--mono:'IBM Plex Mono',monospace}*{box-sizing:border-box}body{margin:0;background:#0b0c0a;color:var(--ink);font:16px/1.65 var(--mono),'Noto Sans TC',sans-serif}button,input{font:inherit}button,a{touch-action:manipulation}a{color:inherit;text-decoration:none}button{cursor:pointer;color:inherit}button:focus-visible,a:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--orange);outline-offset:3px}button:hover,a:hover{color:var(--orange)}.television{height:100dvh;min-height:600px;padding:16px 27px 12px;background:linear-gradient(130deg,#33352c,#1a1c17 38%,#24261e 75%,#10110e);border:2px solid #383c30;border-radius:32px;box-shadow:inset 0 2px 3px #636752,inset 0 -8px 10px #000}.bezel-label,.bezel-bottom{display:flex;align-items:center;justify-content:space-between;gap:20px;font-size:11px;letter-spacing:2px;color:#a2a58e;padding:0 12px;height:30px}.bezel-bottom{height:42px;letter-spacing:1px}.bezel-bottom b{font-weight:400;font-size:10px;margin-left:18px}.hardware{display:flex;align-items:center;gap:10px;font-size:10px}.hardware i{width:6px;height:6px;border-radius:50%;background:var(--orange);box-shadow:0 0 8px #ff8351}.hardware>span{font-size:24px;color:#10120d;border:1px solid #50543f;border-radius:50%;line-height:1;margin-left:25px}.glass{height:calc(100% - 72px);position:relative;overflow:hidden;border-radius:8% / 5%;background:#11170f;border:5px solid #080b07;box-shadow:0 0 0 2px #4c5142,0 0 0 6px #161812,inset 0 0 65px 15px #000;isolation:isolate}.screen{height:100%;display:flex;flex-direction:column;padding:12px 22px 5px;position:relative;background:radial-gradient(ellipse at 50% 40%,#25301d,#121a11 70%,#090d08);text-shadow:.65px 0 #ec8a6340,-.65px 0 #8be8d040}.crt-scan,.crt-glow,.glass-reflection{position:absolute;inset:0;pointer-events:none;z-index:10000;border-radius:inherit}.crt-scan{opacity:.2;background:repeating-linear-gradient(0deg,#000 0 1px,transparent 1px 3px)}.crt-glow{box-shadow:inset 0 0 70px 16px #000b,inset 0 0 9px 2px #a6b58444;background:radial-gradient(ellipse at center,transparent 55%,#03060380 100%)}.glass-reflection{background:linear-gradient(142deg,#e8f5c90a,transparent 32% 75%,#ffffff03);border-top:2px solid #dfeac51c;border-left:1px solid #dfeac522}.clean .crt-scan,.clean .crt-glow,.clean .glass-reflection{display:none}.clean .glass{border-radius:10px}.clean .screen{text-shadow:none}header{height:70px;flex-shrink:0;display:flex;align-items:center;border-bottom:1px solid #83926330;gap:25px;padding:0 15px}.brand{font-size:30px;font-weight:600;letter-spacing:-3px;white-space:nowrap}.brand>span{color:var(--orange)}.brand b{font-size:16px;letter-spacing:2px;margin-left:10px}.channel{font-size:12px;letter-spacing:2px;line-height:1.8}.channel>span{display:block;font-size:10px;letter-spacing:1px;color:var(--muted)}.clock-block{margin-left:auto;font-size:12px;color:var(--orange)}time{display:block;color:var(--muted)}#desktop{flex:1;min-height:0;position:relative;overflow:hidden;touch-action:none;background-image:radial-gradient(#a4b88035 .8px,transparent .8px);background-size:24px 24px;cursor:grab}#desktop.panning{cursor:grabbing}.workspace-label{position:absolute;left:30px;top:30px;font:700 31px/.95 'Barlow Condensed',Impact,sans-serif;color:#a4b58533;letter-spacing:1px;pointer-events:none}.workspace-label span{font-size:21px}.board{position:absolute;width:1260px;height:850px;transform-origin:0 0}.window{position:absolute;left:0;top:0;background:#141c12f5;border:1px solid #687253;box-shadow:0 18px 40px #0006;min-width:0;border-radius:5px;overflow:hidden}.window:focus-within{border-color:var(--orange)}.handle{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:11px 15px;border-bottom:1px solid #546044;background:#2a3423;cursor:grab;touch-action:none;user-select:none;font-size:12px;letter-spacing:.5px}.handle:active{cursor:grabbing}.handle i{font-size:18px;color:var(--orange);font-style:normal}.window-meta{font-size:10px;color:var(--muted)}.resume-window{width:650px;z-index:5;border-color:#909975}.resume-window .handle{background:#bec7a9;color:#192013}.resume-window .handle i,.resume-window .window-meta{color:#394730}.terminal-tabs{display:flex;border-bottom:1px solid #48523c;padding:0 12px;gap:4px;background:#1c2518}.terminal-tabs button{background:none;border:0;border-bottom:2px solid transparent;padding:10px 14px;font-size:14px;color:var(--muted)}.terminal-tabs button.selected{color:var(--orange);border-bottom-color:var(--orange)}#terminal-output{height:350px;padding:24px 27px;overflow:auto;touch-action:pan-y;cursor:text;color:var(--green);font-size:15px;line-height:1.85;scrollbar-color:#626f4d #151c12}#terminal-output p{margin:0 0 18px;white-space:pre-wrap;overflow-wrap:anywhere}#terminal-output .resume-title{font-size:22px;color:var(--ink);font-weight:600}.muted{color:var(--muted)}.accent{color:var(--orange)}#terminal-form{display:flex;gap:10px;align-items:center;border-top:1px solid #445038;padding:13px 20px;background:#10180e}#terminal-form label{font-size:13px;white-space:nowrap;color:var(--orange)}#terminal-form label span{color:var(--green)}#command{min-width:0;width:100%;background:transparent;color:var(--green);border:0;font-size:15px}#terminal-form button{background:none;border:0;color:var(--orange);font-size:22px}.terminal-footer{display:flex;justify-content:space-between;gap:10px;padding:8px 20px;font-size:11px;color:var(--muted);background:#1d2718}.identity-window{width:250px;z-index:2}.project-window{width:250px;z-index:3}.research-window{width:275px;z-index:4}.card-body{padding:22px}.eyebrow{font-size:10px;letter-spacing:1px;color:var(--orange)}h1{font-family:'Noto Sans TC',sans-serif;font-size:27px;font-weight:500;line-height:1.5;margin:15px 0}h1 span{display:block;font:600 50px/1 'Barlow Condensed',Impact,sans-serif;letter-spacing:1px}h2{font:600 37px/1.1 'Barlow Condensed',Impact,sans-serif;margin:16px 0}.card-body p{font-size:14px;line-height:1.9}.card-body a,.text-button{font-size:13px;color:var(--orange)}.text-button{background:none;padding:0;border:0;text-align:left}.small-rule{height:1px;background:#56634460;margin:19px 0}.card-body ul{list-style:none;padding:0;font-size:15px;line-height:2;margin:12px 0}.card-body li::before{content:'↳ ';color:var(--orange)}.note{font-size:11px}.pan-hint{position:absolute;bottom:10px;left:15px;font-size:11px;color:#9eac89;pointer-events:none}footer{min-height:58px;display:flex;align-items:center;justify-content:space-between;gap:14px;border-top:1px solid #83926330;padding:8px 18px;font-size:12px;z-index:50}.tape{white-space:nowrap}.tape>span+span{margin-left:10px;color:var(--muted)}footer button{background:none;border:1px solid #536044;padding:6px 10px;font-size:13px}.view-controls,.effects{display:flex;align-items:center;gap:8px}#zoom-level{min-width:45px;text-align:center;color:var(--muted)}.effects button{border:0;padding:6px}.effects button span{color:var(--orange)}#volume{width:55px;accent-color:var(--orange)}.skip{position:absolute;top:-100px;z-index:20000;background:var(--orange);color:#000;padding:10px}.skip:focus{top:10px}.dragging{user-select:none}@media(max-width:800px){.television{height:auto;min-height:100dvh;padding:12px 10px;border-radius:20px}.bezel-label{font-size:9px;letter-spacing:1px}.bezel-label>span:last-child{display:none}.glass{height:auto;border-radius:24px}.screen{padding:8px 12px}header{padding:0 4px;gap:12px;height:65px}.brand b{font-size:13px}.channel{font-size:9px;letter-spacing:0}.channel>span{display:none}.clock-block{font-size:10px}#desktop{overflow:visible;touch-action:pan-y;padding:20px 0}.board{position:relative;width:auto;height:auto;transform:none!important;display:flex;flex-direction:column;gap:18px}.window{position:relative;width:100%;transform:none!important}.resume-window{order:-1}.handle{cursor:default;touch-action:pan-y}.window-meta{font-size:9px}#terminal-output{height:390px;padding:18px;font-size:14px}.terminal-tabs{gap:0;padding:0 5px}.terminal-tabs button{padding:10px 12px;font-size:14px}#terminal-form{padding:12px;gap:8px}#terminal-form label{font-size:11px}#command{font-size:16px}.terminal-footer{font-size:10px;padding:8px 12px}.workspace-label,.pan-hint,.view-controls{display:none}footer{padding:12px 2px;flex-wrap:wrap;gap:10px}.bezel-bottom{font-size:10px;padding:0 6px}.bezel-bottom b{display:none}.crt-glow{box-shadow:inset 0 0 30px 4px #0008}.crt-scan{opacity:.12}.handle i{display:none}.identity-window .card-body p{font-size:15px}.hardware{font-size:9px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important;transition:none!important}.crt-scan{opacity:.1}}
/* Full-bleed, convex archive surface. UI palette informed by in-game loadout screens. */
:root{--orange:#ffc83d;--green:#dbe6df;--ink:#f0eee6;--muted:#a8b0b9;--line:#3e4653}
body{background:#070b12}
.television{height:100dvh;min-height:600px;padding:0;border:0;border-radius:0;background:none;box-shadow:none}
.glass,.clean .glass{height:100%;border:0;border-radius:0;background:#080d15;box-shadow:none}
.screen{padding:12px 3.5% 0;background:radial-gradient(ellipse at 48% 44%,#293241 0%,#141c29 43%,#080d17 80%);text-shadow:.5px 0 #ef865a35,-.5px 0 #8ce1dc30}


header{height:86px;padding:0 28px;position:relative;z-index:50;border-bottom-color:#aab7c62e}
.brand{font-family:'Noto Sans TC',sans-serif;font-weight:800}.brand b{font-size:20px;letter-spacing:1px}.channel{font-family:'Noto Sans TC',sans-serif;font-size:14px;font-weight:700;letter-spacing:.8px}.channel>span{font:11px var(--mono);letter-spacing:.5px}.clock-block{font-size:12px;color:#e4e4dc}
#desktop{perspective:1400px;perspective-origin:50% 50%;background-image:none}
.board{transform-style:preserve-3d}
.sphere-grid{position:absolute;inset:-8% -5%;width:110%;height:116%;pointer-events:none;opacity:.53}
.clean .sphere-grid{opacity:.12}
.workspace-label{top:27px;left:25px;font:700 20px 'Noto Sans TC',sans-serif;letter-spacing:2px;color:#c9d3df55}.workspace-label span{font:12px var(--mono);letter-spacing:1px}
.window{background:#121925f7;border-color:#66718175;border-radius:9px;box-shadow:0 22px 48px #0005;backface-visibility:hidden;transform-origin:center center}
.window:focus-within{border-color:#ece9d8}
.handle{background:#202936;border-bottom-color:#707e9038;font:700 13px 'Noto Sans TC',sans-serif;letter-spacing:.8px;padding:14px 16px}.handle i{color:#d3d7db}.window-meta{font:10px var(--mono);color:#b7bdc4}
.resume-window{border-color:#bec6ce88}
.resume-window .handle{background:#e5e3d9;color:#151c26;border-bottom:3px solid #ffc83d}.resume-window .window-meta,.resume-window .handle i{color:#424956}
.terminal-tabs{background:#19222f;border-color:#77839138;padding:8px 14px;gap:6px}
.terminal-tabs button{font-family:'Noto Sans TC',sans-serif;font-size:14px;font-weight:700;padding:6px 17px;border:1px solid transparent;border-radius:24px;color:#c0c4cb}
.terminal-tabs button.selected{color:#f5f2e8;border-color:#edeadd;background:transparent}
#terminal-output{color:#dce4e4;scrollbar-color:#707b87 #141b26}
#terminal-form{background:#0c121d;border-color:#77839138}#terminal-form label{color:#ffd04c}#terminal-form label span{color:#8acbd0}#command{color:#f1eee7}
.terminal-footer{background:#1b2430;color:#b4bcc6;border-top:1px solid #77839120}
.eyebrow{color:#98c9d4;font-size:11px;letter-spacing:.5px}
.card-body h1{color:#f1eee5}.card-body h1 span{font:800 44px/1.3 'Noto Sans TC',sans-serif;letter-spacing:-1.5px}
.card-body h2{font:800 30px/1.3 'Noto Sans TC',sans-serif;letter-spacing:-.6px}
.card-body p{font-family:'Noto Sans TC',sans-serif}.small-rule{background:#77839138}
.identity-window{border-top:3px solid #78c4cc}.project-window{border-top:3px solid #ffc83d}.research-window{border-top:3px solid #ec7967}
.card-body a,.text-button{font-family:'Noto Sans TC',sans-serif;font-weight:700}.text-button{display:block;background:#ffc83d;color:#101723;padding:9px 13px;border-radius:5px}.text-button:hover{background:#ffe08a;color:#101723}
.card-body ul{font-size:14px}.card-body li::before{color:#8acbd0}
footer{min-height:70px;border-color:#aab7c62e;padding:12px 24px}.view-controls button{border-color:#727d8c70;border-radius:5px;background:#1d2634}.effects button{font-size:14px}.pan-hint{color:#b0b9c7;font-size:12px;bottom:16px}
.crt-scan{opacity:.14}.crt-glow{box-shadow:inset 0 0 110px 25px #01030aa8;background:radial-gradient(ellipse at 50% 46%,transparent 38%,#02050a60 78%,#000a 100%)}
.glass-reflection{background:radial-gradient(ellipse at 47% -30%,#cddcfa14,transparent 65%),linear-gradient(118deg,#dfe8f504,transparent 40%);border:0}
@media(max-width:800px){.television{height:auto;min-height:100dvh;padding:0;border:0}.glass,.clean .glass{height:auto;border-radius:0}.screen{padding:8px 5% 0}header{height:78px;padding:0;gap:15px}.brand b{font-size:15px}.channel{font-size:11px}.clock-block{font-size:10px}.board{transform-style:flat}.sphere-grid{position:absolute;inset:0;width:100%;height:100%;opacity:.25}.window{transform:none!important}.terminal-tabs button{padding:6px 11px}.terminal-tabs{padding:8px}.crt-glow{box-shadow:inset 0 0 40px 3px #01030a80}.card-body h1 span{font-size:36px}footer{padding:12px 0}.pan-hint{display:none}}

/* One shared interaction plane: curve belongs to the display, not floating cards. */
#desktop{perspective:none}
.board{transform-style:flat}
.window{backface-visibility:visible;box-shadow:0 3px 10px #0003;transform-origin:0 0}
/* The entire workspace is now one ray-cast sphere, including text and grid. */
#sphere-canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;outline-offset:-3px}
#sphere-canvas[hidden]{display:none}
.sphere-mode #desktop>.board,.sphere-mode .sphere-grid,.sphere-mode .workspace-label{visibility:hidden;pointer-events:none}
.sphere-mode #desktop{background:#111c2b}
.sphere-mode .pan-hint{z-index:2;background:#0d1524b0;padding:4px 10px;pointer-events:none}
#sphere-command-dock{display:none}
.sphere-mode #sphere-command-dock{display:flex;align-items:center;gap:18px;padding:0 24px;background:#111b29;border-top:1px solid #8998aa50}
#sphere-command-dock .dock-label{font-size:11px;color:#91a7bc;white-space:nowrap}
#sphere-command-dock #terminal-form{flex:1;border:0;padding:10px 0;background:transparent}
#sphere-command-dock input{min-height:30px}
.sphere-mode .screen{padding-left:2%;padding-right:2%}
@media(max-width:800px){#sphere-canvas,#sphere-command-dock{display:none!important}}
.music-credit{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:8px 22px;font:12px/1.6 var(--mono);color:#a8b0b9;padding:4px 16px 12px}
.music-credit a{text-decoration:underline;text-underline-offset:3px}
#music-track{max-width:190px;background:#1b2635;border:1px solid #536174;border-radius:4px;color:#e3e5df;font:12px var(--mono);padding:7px}
#audio-status{color:#bdccd7}.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}
footer{flex-wrap:wrap}
@media(max-width:800px){.music-credit{justify-content:flex-start;font-size:11px;padding:8px 0 14px}.effects{flex-wrap:wrap}#music-track{max-width:165px}}
/* Wide upward-moving tape tracking bands; no full-screen flashing. */
.crt-scan{opacity:.24;background:repeating-linear-gradient(0deg,#0005 0 2px,transparent 2px 6px)}
.vhs-tracking{position:fixed;inset:0;z-index:10001;overflow:hidden;pointer-events:none}
.vhs-tracking::before,.vhs-tracking::after{content:"";position:absolute;left:-3%;right:-3%;height:clamp(95px,18vh,190px);top:0;pointer-events:none;background:linear-gradient(0deg,transparent 0%,#03071128 16%,#04071375 36%,#c8dce32e 46%,#d4e8ee50 49%,#90bdcf24 54%,#0a102638 77%,transparent 100%);border-top:3px solid #96bed927;border-bottom:2px solid #c1dce635;animation:vhs-track-rise 8s linear infinite;will-change:transform}
.vhs-tracking::after{height:clamp(55px,10vh,115px);opacity:.6;animation-duration:11s;animation-delay:-5s;background:linear-gradient(0deg,transparent,#8cbdc529 28%,#c7b9df38 42%,#0509145c 54%,transparent)}
@keyframes vhs-track-rise{from{transform:translateY(110vh)}to{transform:translateY(-220px)}}
.clean .vhs-tracking{display:none}
@media(prefers-reduced-motion:reduce){.vhs-tracking{display:none}.crt-scan{opacity:.12}}

.sphere-jumps{display:none;position:absolute;top:18px;right:18px;z-index:4;gap:8px;flex-wrap:wrap;max-width:calc(100% - 36px)}
.sphere-mode .sphere-jumps{display:flex}
.sphere-jumps button{font-size:14px;padding:9px 13px;color:#e5e3d9;background:#172332;border:1px solid #7a899b;border-radius:5px;cursor:pointer}
.sphere-jumps button:first-child{color:#ffc83d;border-color:#a78a39}
.sphere-jumps button:disabled{opacity:.55;cursor:wait}

/* Source-backed portfolio and teaching route. */
.card-body>a{display:block;margin:12px 0}.lesson-link{padding:9px 0;border-bottom:1px solid #77839138}.research-window{width:310px}.project-window{width:270px}
@media(max-width:800px){.research-window,.project-window{width:100%}}

/* Desktop window geometry stays independent of content size. */
.window{display:flex;flex-direction:column}.window>.handle,.terminal-tabs,#terminal-form,.terminal-footer{flex-shrink:0}.card-body{min-height:0;overflow:auto;touch-action:pan-y}.resume-window{height:550px}#terminal-output{height:auto;min-height:80px;flex:1;font:16px/1.6 var(--mono),'Noto Sans TC',monospace}#terminal-output p{margin:0;white-space:pre-wrap}.shell-prompt{color:#ffc83d}.shell-error{color:#ff9e8b}#terminal-form label{max-width:60%;overflow:hidden;text-overflow:ellipsis}#terminal-status{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resize-grip{position:absolute;z-index:30;border:0;background:none;padding:0;touch-action:none}.resize-n,.resize-s{height:8px;left:10px;right:10px;cursor:ns-resize}.resize-n{top:0}.resize-s{bottom:0}.resize-e,.resize-w{width:8px;top:10px;bottom:10px;cursor:ew-resize}.resize-e{right:0}.resize-w{left:0}.resize-ne,.resize-nw,.resize-se,.resize-sw{width:16px;height:16px}.resize-ne,.resize-nw{top:0}.resize-se,.resize-sw{bottom:0}.resize-ne,.resize-se{right:0}.resize-nw,.resize-sw{left:0}.resize-nw,.resize-se{cursor:nwse-resize}.resize-ne,.resize-sw{cursor:nesw-resize}.resize-se{background:repeating-linear-gradient(135deg,transparent 0 4px,#94a5b9 4px 5px,transparent 5px 8px);clip-path:polygon(100% 0,100% 100%,0 100%)}
@media(max-width:800px){.window{width:100%!important;max-width:100%}.resize-grip{display:none}.resize-se{display:block;width:24px;height:24px}.resume-window{height:600px}}
