*{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;height:100%;overflow:hidden;background:linear-gradient(160deg,#cfe6f7,#eef0f3 46%,#f9dce6);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}canvas{display:block}.canvas-host{position:fixed;top:0;right:0;bottom:0;left:0}.hud{position:fixed;top:20px;left:20px;color:#41435a;background:#ffffff80;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:14px 18px;border-radius:14px;box-shadow:0 6px 20px #505a8226;font-size:14px;line-height:1.6;pointer-events:none;-webkit-user-select:none;user-select:none}.hud b{font-size:16px}.hud .keys{margin-top:6px;font-size:13px;opacity:.85}.hud kbd{display:inline-block;min-width:20px;text-align:center;background:#41435a;color:#f3f1fa;border-radius:4px;padding:1px 5px;font-size:12px;font-family:inherit}.touch-layer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:5;touch-action:none}.joystick-base{position:fixed;left:0;top:0;width:140px;height:140px;margin:-70px 0 0 -70px;border-radius:50%;background:#ffffff29;border:2px solid rgba(255,255,255,.45);pointer-events:none;opacity:0;transition:opacity .12s ease}.joystick-knob{position:absolute;left:50%;top:50%;width:60px;height:60px;margin:-30px 0 0 -30px;border-radius:50%;background:#3a2a1699;border:2px solid rgba(245,230,207,.7)}.pp-prompt{position:fixed;left:50%;bottom:36px;transform:translate(-50%);z-index:20;display:flex;align-items:center;gap:8px;padding:10px 18px 10px 12px;border:none;border-radius:999px;background:#ffffffd1;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 6px 22px #3c466e47;color:#2f3346;font:600 15px -apple-system,system-ui,sans-serif;cursor:pointer;animation:pp-prompt-pop .18s ease}.pp-prompt b{font-weight:700}.pp-key{display:inline-grid;place-items:center;min-width:24px;height:24px;padding:0 5px;border-radius:6px;background:#2f3346;color:#fff;font-size:13px;font-weight:700}.pp-page{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;overflow-y:auto;background:#f4f5fa;color:#2f3346;animation:pp-fade .18s ease}.pp-back{position:fixed;top:18px;left:18px;z-index:2;padding:9px 16px;border:none;border-radius:999px;background:#ffffffd9;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 4px 16px #3c466e38;color:#2f3346;font:600 14px -apple-system,system-ui,sans-serif;cursor:pointer}.pp-hero{padding:86px 24px 30px;text-align:center;color:#2f3346}.pp-hero-icon{font-size:64px;filter:drop-shadow(0 3px 5px rgba(0,0,0,.18))}.pp-hero h1{font-size:34px;margin:10px 0 2px}.pp-hero p{font-size:16px;opacity:.8}.pp-content{max-width:680px;margin:0 auto;padding:26px 24px 60px}.pp-shot{height:220px;border-radius:16px;margin-bottom:24px;display:grid;place-items:center;box-shadow:inset 0 0 0 1px #0000000d}.pp-desc{font-size:16px;line-height:1.6;color:#3c4154}.pp-tech{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0}.pp-chip{font-size:13px;padding:5px 12px;border-radius:999px;background:#e7eaf3;color:#4a5066}.pp-links{display:flex;gap:12px;margin-top:8px}.pp-btn{text-decoration:none;padding:12px 22px;border-radius:12px;font-weight:600;font-size:15px;background:#e7eaf3;color:#2f3346}.pp-btn-primary{background:#2f3346;color:#fff}@keyframes pp-prompt-pop{0%{transform:translate(-50%) translateY(8px) scale(.97);opacity:0}to{transform:translate(-50%) translateY(0) scale(1);opacity:1}}@keyframes pp-fade{0%{opacity:0}}.hud-link{pointer-events:auto;margin-top:10px;padding:6px 12px;border:none;border-radius:8px;background:#41435a;color:#f3f1fa;font:600 13px inherit;cursor:pointer}.loading{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:center;justify-content:center;background:#080c1cbd;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);opacity:1;transition:opacity 1.2s ease,backdrop-filter 1.2s ease,-webkit-backdrop-filter 1.2s ease}.loading-done{opacity:0;backdrop-filter:blur(0px);-webkit-backdrop-filter:blur(0px);pointer-events:none}.loading-inner{text-align:center}.loading-name{font-weight:800;font-size:clamp(28px,6vw,56px);letter-spacing:.02em;color:#eafaff;text-shadow:0 0 30px rgba(52,227,255,.5)}.loading-sub{margin-top:8px;font-size:13px;letter-spacing:.08em;text-transform:lowercase;color:#ffd9a0;opacity:.85}.loading-bar{width:min(240px,60vw);height:4px;margin:22px auto 0;border-radius:999px;background:#ffffff29;overflow:hidden}.loading-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,#34e3ff,#ffb347);transition:width .3s ease}.intro{position:fixed;top:0;right:0;bottom:0;left:0;z-index:25;display:flex;align-items:flex-start;justify-content:center;text-align:center;pointer-events:none;animation:introSeq 6.5s ease forwards}.intro-inner{margin-top:15vh;max-width:700px;padding:36px 52px 44px;border-radius:30px;perspective:900px;background:radial-gradient(ellipse at center,#060a1a8c,#060a1a52 48%,#060a1a00 78%)}.intro h1{margin:0;font-weight:800;font-size:clamp(36px,7.5vw,78px);letter-spacing:.02em;color:#f2fdff;transform-origin:center bottom;text-shadow:0 1px 0 #a9dcef,0 2px 0 #84c4e2,0 3px 0 #5fa9cf,0 4px 0 #4690bb,0 5px 0 #357aa3,0 6px 1px rgba(0,0,0,.3),0 8px 16px rgba(0,0,0,.5),0 0 38px rgba(52,227,255,.55);animation:introTitle 6.5s ease forwards}.intro-role{margin:12px 0 0;font-size:clamp(14px,2.6vw,21px);color:#ffd9a0;text-shadow:0 0 18px rgba(255,179,71,.5),0 1px 8px rgba(0,0,0,.5);animation:introSub 6.5s ease forwards}.intro-cue{margin:22px 0 0;font-size:clamp(13px,2.4vw,18px);color:#cfeaff;text-shadow:0 0 16px rgba(52,227,255,.45),0 1px 8px rgba(0,0,0,.5);animation:introCue 6.5s ease forwards}@keyframes introSeq{0%{opacity:0}8%{opacity:1}84%{opacity:1}to{opacity:0}}@keyframes introTitle{0%{opacity:0;transform:rotateX(-78deg) translateY(26px)}18%{opacity:1;transform:rotateX(0) translateY(0)}84%{opacity:1;transform:rotateX(0) translateY(0)}to{opacity:0;transform:rotateX(22deg) translateY(-12px)}}@keyframes introSub{0%,18%{opacity:0;transform:translateY(10px)}30%{opacity:.95;transform:none}84%{opacity:.95}to{opacity:0}}@keyframes introCue{0%,40%{opacity:0;transform:translateY(8px)}54%{opacity:.9;transform:none}84%{opacity:.9}to{opacity:0}}.namechip{position:fixed;top:18px;left:20px;z-index:18;pointer-events:none;line-height:1.25;text-shadow:0 1px 12px rgba(0,0,0,.6)}.namechip-name{display:block;font-weight:800;font-size:18px;color:#eafaff}.namechip-role{display:block;font-size:12px;color:#ffd9a0;opacity:.9}.resume-pill{position:fixed;right:16px;bottom:16px;z-index:22;padding:8px 14px;border:1px solid rgba(255,179,71,.5);border-radius:999px;background:#0c12288c;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#ffd9a0;font:600 13px inherit;cursor:pointer;opacity:.8;box-shadow:0 4px 16px #0000004d;transition:opacity .15s ease}.resume-pill:hover{opacity:1}.flight-pill{position:fixed;right:16px;bottom:58px;z-index:22;padding:8px 14px;border:1px solid rgba(120,230,255,.5);border-radius:999px;background:#0c12288c;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#bfefff;font:600 13px inherit;cursor:pointer;opacity:.85;box-shadow:0 4px 16px #0000004d}.flight-pill:hover{opacity:1}.flight-hud{position:fixed;left:50%;top:18px;bottom:auto;transform:translate(-50%);z-index:24;display:flex;align-items:center;gap:14px;padding:9px 16px;border:1px solid rgba(120,230,255,.45);border-radius:999px;background:#080d20b8;color:#cfe9ff;font:500 13px inherit;box-shadow:0 6px 20px #0006}.flight-keys b{color:#eafaff;font-weight:800;letter-spacing:.02em}.flight-status{font-weight:800;font-size:12px;letter-spacing:.05em;color:#ffd9a0;white-space:nowrap}.flight-status.ready{color:#ffe08a}.flight-status.air{color:#8fffc0}.flight-bar{position:relative;width:120px;height:8px;border-radius:999px;background:#ffffff24;overflow:hidden}.flight-bar-fill{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(90deg,#34e3ff,#7fd0ff);border-radius:999px;transition:width .12s linear}.flight-bar-fill.ready{background:linear-gradient(90deg,#ffce5a,#8fffc0)}.flight-bar-mark{position:absolute;top:-2px;bottom:-2px;width:2px;background:#fff;box-shadow:0 0 4px #fffc;transform:translate(-1px)}.flight-exit{border:1px solid rgba(255,120,120,.5);border-radius:999px;background:#ff505029;color:#ffd2d2;font:700 12px inherit;padding:5px 12px;cursor:pointer;white-space:nowrap}.flight-exit:hover{background:#ff505047}@media(max-width:560px){.flight-hud{font-size:11.5px;gap:10px;padding:8px 12px;max-width:calc(100vw - 24px)}}.instr-panel{position:fixed;left:50%;bottom:14px;transform:translate(-50%);z-index:23;display:flex;gap:10px;pointer-events:none}.instr-gauge{display:flex;flex-direction:column;align-items:center;gap:2px}.instr-gauge svg{width:66px;height:66px;filter:drop-shadow(0 3px 8px rgba(0,0,0,.45))}.instr-label{font:800 9px inherit;letter-spacing:.08em;color:#cfe9ffd9}@media(max-width:640px){.instr-gauge svg{width:50px;height:50px}.instr-panel{gap:6px;bottom:10px}.instr-thr{display:none}}.universe-pill{position:fixed;top:16px;right:16px;z-index:22;padding:8px 14px;border:1px solid rgba(150,180,255,.5);border-radius:999px;background:#0c12288c;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#dfe6ff;font:600 13px inherit;cursor:pointer;opacity:.85;box-shadow:0 4px 16px #0000004d}.universe-pill:hover{opacity:1}.hub{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:34px;padding:24px;background:radial-gradient(ellipse at 50% 28%,#1b2a52,#0a1226 60%,#060a18);color:#eaf2ff}.hub-head{text-align:center}.hub-head h1{margin:0;font-size:clamp(34px,7vw,66px);font-weight:800;letter-spacing:.02em;text-shadow:0 0 30px rgba(90,150,255,.4)}.hub-head p{margin:10px 0 0;font-size:clamp(14px,2.4vw,19px);color:#9fb3d8;letter-spacing:.18em;text-transform:uppercase}.hub-cards{display:flex;gap:26px;flex-wrap:wrap;justify-content:center}.hub-card{width:300px;max-width:82vw;min-height:196px;display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:24px 24px 20px;border-radius:20px;cursor:pointer;text-align:left;border:1px solid rgba(255,255,255,.14);color:#fff;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.hub-card:hover{transform:translateY(-6px);border-color:#ffffff73;box-shadow:0 16px 42px #00000080}.uni-neon{background:linear-gradient(160deg,#14264f,#0c1733)}.uni-beach{background:linear-gradient(160deg,#35b6d9,#f0deb0);color:#103040}.hub-card-tag{font-size:11px;letter-spacing:.14em;text-transform:uppercase;opacity:.8}.hub-card-name{font-size:24px;font-weight:800}.hub-card-blurb{font-size:14px;line-height:1.5;opacity:.92;flex:1}.hub-card-enter{font-weight:700;font-size:14px;opacity:.92}.hub-foot{margin:0;font-size:13px;color:#7e8fb8;letter-spacing:.08em}@media(max-width:560px){.hub-cards{flex-direction:column}}.island-detail{position:fixed;top:20px;right:max(20px,calc(50vw - 700px));z-index:20;width:340px;max-width:calc(100vw - 40px);max-height:calc(100vh - 40px);overflow-y:auto;padding:20px 22px 24px;border-radius:16px;background:#0a1024ed;border:1px solid rgba(90,226,255,.35);box-shadow:0 10px 40px #0006,0 0 24px #34e3ff1f;color:#dcebff;animation:pp-fade .22s ease}.island-back{margin-bottom:14px;padding:7px 14px;border:1px solid rgba(90,226,255,.4);border-radius:999px;background:#34e3ff1f;color:#aef1ff;font:600 13px inherit;cursor:pointer}.island-back:hover{background:#34e3ff38}.island-detail h2{margin:0 0 2px;font-size:21px;color:#eafaff;text-shadow:0 0 14px rgba(52,227,255,.45)}.island-sub{margin:0 0 10px;font-size:13px;color:#7fd4ff}.island-blurb{margin:0 0 16px;font-size:13.5px;line-height:1.5;color:#b6c8e6}.island-items{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.island-items li{border-left:2px solid rgba(90,226,255,.4);padding-left:12px}.island-item-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px}.island-item-head strong{font-size:14.5px;color:#eafaff}.island-tech{font-size:11.5px;color:#8fb6e0}.island-desc{margin-top:3px;font-size:12.5px;line-height:1.45;color:#aebfdc}.island-link{display:inline-block;margin-top:5px;font-size:12.5px;color:#45d8ff;text-decoration:none}.island-link:hover{text-decoration:underline}.island-cta{margin-top:18px;width:100%;padding:11px 16px;border:none;border-radius:10px;background:linear-gradient(180deg,#34e3ff,#2aa8ff);color:#04203a;font:700 14px inherit;cursor:pointer;box-shadow:0 4px 18px #34e3ff59}.island-cta:hover{filter:brightness(1.08)}@media(max-width:620px){.island-detail{top:auto;left:0;right:0;bottom:0;width:auto;max-width:none;max-height:56vh;border-radius:18px 18px 0 0;border-bottom:none}}.resume{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;overflow-y:auto;background:#eef0f5;color:#2f3346;padding:70px 20px 60px;animation:pp-fade .18s ease}.resume-sheet{max-width:760px;margin:0 auto;background:#fff;border-radius:16px;box-shadow:0 12px 40px #3c466e29;padding:40px 44px}.resume-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px;border-bottom:2px solid #eef0f6;padding-bottom:18px}.resume-head h1{font-size:30px}.resume-title{color:#6a6f82;font-size:16px}.resume-contact{display:flex;flex-direction:column;align-items:flex-end;gap:2px;font-size:13px;color:#4a5066}.resume-contact a{color:#4a5066}.resume-links{display:flex;gap:10px;margin-top:2px}.resume-links a{color:#3552b0;text-decoration:none;font-weight:600}.resume-summary{margin:18px 0 6px;font-size:15px;line-height:1.6;color:#3c4154}.resume section{margin-top:22px}.resume h2{font-size:14px;text-transform:uppercase;letter-spacing:.06em;color:#8a90a4;margin-bottom:10px}.resume-item{margin-bottom:14px}.resume-item-head{font-size:15px}.resume-period{float:right;color:#8a90a4;font-size:13px;font-weight:500}.resume-item ul{margin:6px 0 0 18px}.resume-item li{font-size:14px;line-height:1.5;color:#3c4154;margin-bottom:3px}.resume-roleskills{margin:6px 0 0;font-size:12.5px;font-weight:600;color:#6b7180;letter-spacing:.01em}.resume-skills{display:flex;flex-wrap:wrap;gap:8px}.resume-skillrow{display:flex;gap:14px;align-items:baseline;margin-bottom:12px}.resume-skillgroup{flex:0 0 92px;font-weight:700;font-size:13px;color:#6b7180;padding-top:4px}.resume-proj-desc{margin:4px 0 0;font-size:14.5px;line-height:1.55;color:#3c4154}.resume-proj-desc a{color:#2563c7;text-decoration:none}.resume-proj-desc a:hover{text-decoration:underline}@media(max-width:560px){.resume-skillrow{flex-direction:column;gap:6px}}.island-labels{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:3;overflow:hidden}.island-label{position:absolute;left:0;top:0;display:flex;flex-direction:column;align-items:center;gap:1px;padding:6px 14px;border-radius:13px;background:#080d20d1;border:1px solid rgba(120,230,255,.55);box-shadow:0 0 16px #34e3ff40,0 6px 16px #00000073;white-space:nowrap;opacity:0;transition:opacity .25s ease;will-change:transform,opacity}.island-label-title{font-weight:800;font-size:15px;letter-spacing:.02em;color:#eafaff;text-shadow:0 0 10px rgba(52,227,255,.5)}.island-label-sub{font-weight:600;font-size:12px;color:#8fe9ff}@media(max-width:560px){.island-label{padding:4px 10px;border-radius:10px}.island-label-title{font-size:12.5px}.island-label-sub{font-size:10.5px}}
