:root{--navy:#07102f;--ink:#11172e;--purple:#5b2fe1;--purple-dark:#3725a3;--lilac:#cdbcf2;--cream:#fff7e9;--paper:#fffaf0;--line:#d7c8ae;--shadow:#050926;--ui-font:Arial,Helvetica,sans-serif;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
*{box-sizing:border-box}html,body{width:100%;height:100%;margin:0}body{font-family:var(--ui-font);color:var(--ink);background:var(--navy)}button,a{ -webkit-tap-highlight-color:transparent }button{font:inherit;cursor:pointer}a{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #ffd46b;outline-offset:3px}.desktop{min-height:100dvh;width:100%;overflow:hidden;position:relative;background:#0a1031 url('assets/nyc-night-wallpaper.png') center center/cover no-repeat}.desktop:after{content:"";position:absolute;inset:42px 0 0;pointer-events:none;background:linear-gradient(180deg,rgba(5,8,35,.13),transparent 30%)}.topbar{position:absolute;z-index:200;top:0;left:0;right:0;height:44px;display:flex;align-items:center;justify-content:space-between;padding:0 27px;background:rgba(5,9,35,.92);border-bottom:2px solid #6d4ee0;color:#fff;box-shadow:0 2px 0 #151154;font-family:var(--mono);font-weight:800;letter-spacing:.08em}.brand{border:0;background:none;color:#fff;font-family:var(--mono);font-size:24px;font-weight:900;letter-spacing:.02em;padding:0}.brand-cursor{color:#a886ff;animation:blink 1s steps(2,end) infinite}@keyframes blink{50%{opacity:0}}.topbar-right{display:flex;align-items:center;gap:12px;font-size:13px}.status-star{color:#a3e67a;font-size:18px}.desktop-surface{position:absolute;inset:44px 0 0}.desktop-file{position:absolute;top:31px;left:34px;display:flex;flex-direction:column;align-items:center;gap:7px;width:120px;text-align:center;text-decoration:none;color:#fff;font:700 12px var(--mono);text-shadow:2px 2px #090829;z-index:4}.desktop-file:hover{filter:brightness(1.2)}.file-icon{display:grid;place-items:center;width:48px;height:58px;background:#fdf7e9;border:3px solid #101533;box-shadow:4px 4px #4b2ac9;clip-path:polygon(0 0,73% 0,100% 25%,100% 100%,0 100%)}.file-icon span{color:#4d29c5;background:#e5d7ff;font:900 12px var(--mono);padding:3px 1px;border:1px solid #6544bf}.todo-widget{position:absolute;z-index:5;top:145px;left:31px;width:260px;padding:0 12px 12px;background:#fff8e9;border:3px solid #16183c;box-shadow:5px 5px 0 #080d2d;font-family:var(--mono)}.todo-header{margin:0 -12px 10px;background:#5c3acc;color:white;border-bottom:3px solid #191348;padding:8px 11px;font-size:12px;font-weight:800;letter-spacing:.04em}.todo-spark{color:#f9d56b;margin-right:5px}.todo-dots{float:right;letter-spacing:3px}.todo-widget button{display:flex;align-items:center;gap:8px;width:100%;border:0;border-bottom:1px dashed #d5c4a6;padding:9px 2px;background:transparent;color:#1d2440;text-align:left;font:700 12px var(--mono)}.todo-widget button:last-child{border-bottom:0}.todo-widget button:hover{color:#572bdf}.todo-box{flex:none;width:13px;height:13px;border:2px solid #5135a0;background:#fff}.todo-arrow{margin-left:auto;color:#694ad5}.cat-hotspot{position:absolute;z-index:3;left:12.5%;top:61%;width:6%;height:12%;min-width:46px;border:0;background:transparent;color:#fff}.cat-hotspot span{position:absolute;left:50%;bottom:100%;transform:translateX(-50%);white-space:nowrap;background:#1b1853;border:2px solid #a787ff;padding:4px 7px;font:700 11px var(--mono);opacity:0;transition:opacity .15s}.cat-hotspot:hover span,.cat-hotspot:focus-visible span{opacity:1}.window-layer{position:absolute;inset:0;z-index:10;pointer-events:none}.window{position:absolute;display:flex;flex-direction:column;min-width:310px;min-height:230px;max-width:calc(100vw - 18px);max-height:calc(100dvh - 52px);overflow:hidden;resize:both;pointer-events:auto;background:var(--cream);border:3px solid #141538;box-shadow:7px 7px 0 rgba(4,8,32,.85),inset 0 0 0 1px #fff}.window.is-maximized{left:10px!important;top:8px!important;width:calc(100vw - 20px)!important;height:calc(100dvh - 118px)!important;max-width:none;max-height:none;resize:none}.window.is-minimized{display:none}.titlebar{height:34px;flex:none;display:flex;align-items:center;gap:8px;padding:0 8px 0 12px;background:linear-gradient(90deg,#4931be,#6841db);border-bottom:3px solid #25205f;color:#fff;font:800 14px var(--mono);letter-spacing:.025em;user-select:none;touch-action:none;cursor:grab}.titlebar:active{cursor:grabbing}.titlebar-icon{font-size:17px}.titlebar-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.window-controls{margin-left:auto;display:flex;gap:5px}.window-controls button{width:20px;height:20px;padding:0;border:2px solid #17164b;border-radius:2px;background:#fff6dd;color:#161546;box-shadow:1px 1px #150d50;font:900 15px/14px var(--mono)}.window-controls button:hover{background:#f9ce7d}.window-body{flex:1;overflow:auto;overscroll-behavior:contain;background:var(--paper);scrollbar-color:#8d75d3 #f0e7d8}.window-body::-webkit-scrollbar{width:10px}.window-body::-webkit-scrollbar-thumb{background:#a18acf;border:2px solid #f0e7d8}.window-body::-webkit-scrollbar-track{background:#f0e7d8}.dock{position:absolute;z-index:180;bottom:16px;left:50%;transform:translateX(-50%);display:flex;align-items:center;justify-content:center;gap:9px;max-width:calc(100vw - 24px);padding:9px 13px;background:rgba(15,21,55,.92);border:2px solid #8b86ba;border-radius:13px;box-shadow:0 5px 0 #050a22,0 0 24px rgba(10,8,35,.35)}.dock button{position:relative;display:grid;place-items:center;flex:none;width:49px;height:47px;border:1px solid transparent;border-radius:8px;background:transparent;color:#fff}.dock button:hover,.dock button.is-active{background:rgba(151,119,241,.25);border-color:rgba(195,177,255,.45)}.dock button:hover{transform:translateY(-3px)}.dock button svg{width:31px;height:31px;filter:drop-shadow(2px 3px 0 #080b2a)}.dock button.is-active:after{content:"";position:absolute;bottom:1px;width:5px;height:5px;border-radius:50%;background:#a9e888}.dock button .dock-tip{position:absolute;bottom:calc(100% + 9px);left:50%;transform:translateX(-50%);padding:5px 8px;background:#fff8e9;color:#1a1e3b;border:2px solid #262052;white-space:nowrap;font:700 11px var(--mono);opacity:0;pointer-events:none}.dock button:hover .dock-tip,.dock button:focus-visible .dock-tip{opacity:1}.toast{position:absolute;z-index:500;bottom:90px;left:50%;transform:translateX(-50%);background:#fff8e8;border:2px solid #252059;box-shadow:3px 3px #060b2f;padding:8px 12px;font:700 12px var(--mono);opacity:0;pointer-events:none;transition:opacity .2s}.toast.visible{opacity:1}
/* Window contents */
.app-pad{padding:26px 30px 30px}.eyebrow{font:800 11px var(--mono);letter-spacing:.13em;text-transform:uppercase;color:#6048a4}.app-heading{font-size:34px;letter-spacing:-.04em;margin:7px 0 6px;line-height:1.1}.subtle{color:#656579}.about-content{min-height:100%;padding:42px 44px 36px;background:radial-gradient(circle at 5% 8%,#e6d9ff 0 6px,transparent 7px),#fff7e8}.about-content h1{font-size:clamp(40px,5vw,64px);line-height:1.06;letter-spacing:-.07em;margin:0 0 10px;font-weight:900}.about-content h1 span{color:#5824e3}.about-tagline{font-size:17px;font-weight:800;margin:0 0 26px}.about-divider{height:2px;background:#d7c6a9;margin:0 0 24px}.about-copy{max-width:530px;font-size:17px;line-height:1.6;margin:0 0 28px}.about-links{display:flex;flex-wrap:wrap;gap:10px}.pixel-btn,.link-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:11px 17px;border:2px solid #1a1850;background:#612ddd;color:#fff;box-shadow:3px 3px #161242;text-decoration:none;font-weight:800;font-size:14px;line-height:1.1;cursor:pointer}.pixel-btn:hover,.link-btn:hover{transform:translateY(-2px);box-shadow:3px 5px #161242}.pixel-btn.secondary,.link-btn.secondary{background:#fff9ed;color:#1d1d39}.pixel-btn:disabled,.link-btn:disabled{opacity:.55;cursor:not-allowed;transform:none;box-shadow:2px 2px #6a6481}.about-meta{display:flex;gap:10px;flex-wrap:wrap;margin-top:24px;color:#5d5d70;font:700 12px var(--mono)}.about-meta span{padding:5px 8px;background:#eee4d9;border:1px solid #d2c0aa}.section-title{font:900 14px var(--mono);letter-spacing:.07em;color:#4e37ad;margin:27px 0 14px;padding-bottom:8px;border-bottom:2px solid #d8caaf;text-transform:uppercase}.experience,.project-card,.note-card{border:2px solid #d9cdb7;background:#fffdf7;padding:17px 18px;margin:0 0 12px;box-shadow:2px 2px 0 #e7dccb}.experience-top{display:flex;justify-content:space-between;gap:12px}.experience h3,.project-card h3{margin:0 0 5px;font-size:18px}.experience .org{font-weight:800;color:#4d3b80}.experience .date{color:#736e79;font:700 11px var(--mono);white-space:nowrap}.experience p,.project-card p{font-size:14px;line-height:1.55;color:#343a4b;margin:11px 0 0}.experience details{margin-top:10px;font-size:13px;line-height:1.55;color:#414255}.experience summary{color:#5534bb;font-weight:800;cursor:pointer}.experience li{margin:4px 0}.chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:13px}.chip{display:inline-block;padding:5px 7px;border:1px solid #c7badb;background:#eee8fa;color:#58418d;font:700 11px var(--mono)}.project-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:15px}.text-link{border:0;background:none;color:#5830c4;text-decoration:underline;text-underline-offset:3px;font-weight:800;padding:0}.empty-state{border:2px dashed #c9b9dd;background:#f8f2ff;padding:27px;margin-top:20px;text-align:center}.empty-state .empty-icon{font-size:37px}.empty-state h3{margin:9px 0 4px}.empty-state p{line-height:1.5;margin:0;color:#58516c}.note-card{display:flex;gap:16px;align-items:flex-start;justify-content:space-between}.note-card h3{margin:0 0 5px}.note-card p{margin:7px 0;line-height:1.5}.note-meta{font:700 11px var(--mono);color:#777086}.band-lede{font-size:16px;line-height:1.6;max-width:600px}.band-player{position:relative;margin:20px 0 17px;aspect-ratio:16/9;max-height:330px;background:linear-gradient(145deg,#211c5a,#0b143b);border:3px solid #1a1742;display:grid;place-items:center;overflow:hidden}.band-player iframe{width:100%;height:100%;border:0}.player-placeholder{text-align:center;color:#f8eafa;padding:20px}.player-placeholder .bass{font-size:64px;filter:drop-shadow(4px 4px #6d3ee1)}.player-placeholder strong{display:block;margin:12px 0 6px;font-size:17px}.player-placeholder span{font-size:12px;color:#cbbfee}.band-callout{border-left:4px solid #6b3dd5;padding:8px 0 8px 13px;margin:17px 0 20px;line-height:1.5}.contact-line{font:700 12px var(--mono);margin:12px 0;color:#5a4e77}.terminal-body{background:#0d1232;color:#d7f5d0;font:14px/1.55 var(--mono);padding:18px 20px;height:100%}.terminal-output{white-space:pre-wrap;word-break:break-word}.terminal-line{margin-bottom:7px}.terminal-accent{color:#e7c277}.terminal-error{color:#f0aaa7}.terminal-input-row{display:flex;align-items:center;gap:8px}.terminal-prompt{color:#a891ff;white-space:nowrap}.terminal-input{flex:1;min-width:0;border:0;outline:0!important;background:transparent;color:#f5f0e8;font:inherit;caret-color:#aaff91}.terminal-suggestions{display:flex;flex-wrap:wrap;gap:6px;margin:13px 0 0}.terminal-suggestions button{border:1px solid #715bbb;background:#211b55;color:#eadfff;padding:4px 7px;font:700 11px var(--mono)}.terminal-suggestions button:hover{background:#5633b9}.settings-row{display:flex;justify-content:space-between;gap:15px;padding:14px 0;border-bottom:1px solid #ddd1bd}.settings-row p{margin:3px 0;color:#686579;font-size:13px}.toggle{width:52px;height:28px;border:2px solid #2b215a;border-radius:20px;background:#aaa0b9;position:relative}.toggle:after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:transform .15s}.toggle.on{background:#6537d2}.toggle.on:after{transform:translateX(22px)}.game-body{height:100%;background:#0a102b;color:#fdf2dc;overflow:auto}.game-top{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 15px;font:700 12px var(--mono)}.game-canvas-wrap{position:relative;margin:0 12px 12px;border:3px solid #7461cb;background:#11123e}.game-canvas{display:block;width:100%;height:auto;image-rendering:pixelated}.game-story{position:absolute;z-index:4;inset:14%;display:none;align-items:center;justify-content:center;padding:20px;background:rgba(8,11,38,.88);border:3px solid #d3b4fd;text-align:center}.game-story.visible{display:flex}.game-story-inner{max-width:460px}.game-story h3{color:#ffe283;font-size:23px;margin:0 0 10px}.game-story p{line-height:1.5}.game-controls{display:flex;gap:8px;justify-content:center;padding:0 12px 14px}.game-controls button{min-width:65px;min-height:42px;border:2px solid #a48cfa;background:#372797;color:#fff;font:800 15px var(--mono);touch-action:none}.game-controls button:active{background:#7554df}.game-hint{opacity:.75;font:11px var(--mono);padding:0 14px 14px;text-align:center}
@media(max-width:700px){.desktop{background-position:58% center}.topbar{padding:0 15px}.topbar-right{font-size:11px;gap:7px}.desktop-file{top:18px;left:15px;width:94px;font-size:10px}.file-icon{width:38px;height:47px}.todo-widget{left:auto;right:11px;top:20px;width:210px;padding:0 8px 8px}.todo-header{margin:0 -8px 6px;font-size:10px;padding:6px}.todo-widget button{font-size:10px;padding:7px 0}.cat-hotspot{left:12%;top:65%;width:45px;height:75px}.dock{bottom:0;left:0;right:0;transform:none;max-width:none;width:100%;border-radius:12px 12px 0 0;justify-content:space-around;gap:1px;padding:6px 5px calc(7px + env(safe-area-inset-bottom));overflow-x:auto}.dock button{width:42px;height:43px}.dock button svg{width:27px;height:27px}.window{position:absolute!important;left:0!important;top:0!important;width:100%!important;height:calc(100dvh - 102px)!important;max-width:none;max-height:none;min-width:0;min-height:0;resize:none;border-left:0;border-right:0;box-shadow:none}.window.is-maximized{left:0!important;top:0!important;width:100%!important;height:calc(100dvh - 102px)!important}.window:not(.is-focused){display:none}.titlebar{cursor:default;touch-action:auto}.window-controls button:nth-child(1),.window-controls button:nth-child(2){display:none}.app-pad{padding:22px 19px 30px}.about-content{padding:40px 25px 28px}.about-content h1{font-size:42px}.about-tagline{font-size:15px}.about-copy{font-size:15px}.experience-top{flex-direction:column;gap:0}.experience .date{margin-top:4px}.app-heading{font-size:29px}.game-top{font-size:10px}.game-canvas-wrap{margin:0 5px 10px}.game-controls button{min-width:61px}.window-layer{inset:0}.toast{bottom:75px}}
@media(max-width:380px){.desktop-file{width:81px}.todo-widget{width:188px}.topbar-right{font-size:10px}.dock button{width:39px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}
.window[data-app="terminal"] .window-body{background:#0d1232}
.window[data-app="terminal"] .terminal-body{height:auto;min-height:100%}
.band-video{margin-top:20px}.band-video h3{margin:0 0 8px;font:800 13px var(--mono);color:#4e37ad}.band-video .band-player{margin:0 0 17px}

/* Keep each app's content centered as its window is resized. */
.window-body{display:flex;flex-direction:column;min-height:0;container-type:inline-size}
.window-body>.app-pad{flex:none;width:100%;max-width:820px;margin:auto;padding:clamp(18px,4cqw,34px)}
.window[data-app="band"] .app-pad{max-width:660px}
.window[data-app="notes"] .app-pad{max-width:680px}
.window[data-app="settings"] .app-pad{max-width:600px}
.about-content{flex:none;display:flex;flex-direction:column;justify-content:center;width:100%;min-height:100%;padding:clamp(24px,6cqw,56px)}
.about-content>*{width:100%;max-width:700px;margin-inline:auto}
.about-content>h1{margin-inline:auto}
.about-copy{max-width:700px}
.band-video{max-width:586px;margin-inline:auto}
.band-player{width:100%;max-width:586px;max-height:none;margin-inline:auto}
.terminal-body,.game-body{flex:none;width:100%;min-height:100%}
.terminal-body{padding:clamp(14px,3cqw,26px)}
.terminal-output,.terminal-input-row{width:100%;max-width:860px;margin-inline:auto}
.game-top,.game-controls,.game-hint{width:calc(100% - 24px);max-width:990px;margin-inline:auto}
.game-canvas-wrap{width:calc(100% - 24px);max-width:990px;margin:0 auto 12px}
@container (max-width:460px){
  .window-body>.app-pad{padding:18px}
  .about-content{padding:28px 22px}
  .about-content h1{font-size:clamp(36px,10cqw,48px)}
  .about-tagline,.about-copy{font-size:15px}
  .app-heading{font-size:28px}
  .experience-top,.note-card{flex-direction:column;gap:8px}
  .settings-row{flex-wrap:wrap}
  .settings-row>button{margin-left:auto}
  .game-top{flex-wrap:wrap}
  .game-story{position:static;min-height:200px;padding:18px}
  .terminal-input-row{flex-wrap:wrap}
}
