:root{--radius: 12px;--font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--step--1: clamp(.875rem, .82rem + .2vw, .95rem);--step-0: clamp(1rem, .92rem + .35vw, 1.125rem);--step-1: clamp(1.25rem, 1.05rem + .85vw, 1.5rem);--step-2: clamp(1.5rem, 1.2rem + 1.2vw, 2rem);--step-3: clamp(2rem, 1.5rem + 2vw, 2.75rem);--space: clamp(1rem, .6rem + 1.5vw, 1.75rem);--content-max: 42rem}@font-face{font-family:FaviconK;src:url(/fonts/favicon-k.ttf) format("truetype");font-weight:400;font-style:normal;font-display:block}@media(prefers-color-scheme:light){:root:not([data-theme]){color-scheme:light;--bg: #f4f6f9;--surface: #ffffff;--text: #1a1d21;--text-muted: #5c6370;--accent: #1565c0;--accent-hover: #0d47a1;--border: #dde1e8;--hero-glow: #c5d9f0}}@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--bg: #0f1419;--surface: #1a222d;--text: #e8eaed;--text-muted: #9aa0a6;--accent: #7cb7ff;--accent-hover: #a8d0ff;--border: #2d3844;--hero-glow: #1c2a3a}}[data-theme=light]{color-scheme:light;--bg: #f4f6f9;--surface: #ffffff;--text: #1a1d21;--text-muted: #5c6370;--accent: #1565c0;--accent-hover: #0d47a1;--border: #dde1e8;--hero-glow: #c5d9f0}[data-theme=dark]{color-scheme:dark;--bg: #0f1419;--surface: #1a222d;--text: #e8eaed;--text-muted: #9aa0a6;--accent: #7cb7ff;--accent-hover: #a8d0ff;--border: #2d3844;--hero-glow: #1c2a3a}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{margin:0;min-height:100vh;font-family:var(--font-sans);font-size:var(--step-0);line-height:1.6;color:var(--text);background:var(--bg);background-image:radial-gradient(ellipse 120% 80% at 50% -20%,var(--hero-glow) 0%,transparent 55%)}.skip-link{position:absolute;left:-9999px;top:.5rem;z-index:100;padding:.5rem 1rem;background:var(--accent);color:var(--bg);font-weight:600;text-decoration:none;border-radius:6px}.skip-link:focus{left:.5rem}.site-header{position:sticky;top:0;z-index:50;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(10px)}.site-header__inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;max-width:calc(var(--content-max) + 4rem);margin:0 auto;padding:var(--space) clamp(1rem,4vw,2rem)}.site-header__end{display:flex;align-items:center;gap:1rem;flex-shrink:0;margin-left:auto}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:2.5rem;height:2.5rem;padding:0;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--text);cursor:pointer;transition:border-color .15s ease,color .15s ease,background .15s ease}.theme-toggle:hover,.theme-toggle:focus-visible{border-color:var(--accent);color:var(--accent);outline:none}.theme-toggle:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 35%,transparent)}.theme-toggle__icon{display:none;line-height:0}[data-theme=light] .theme-toggle__icon--moon,[data-theme=dark] .theme-toggle__icon--sun{display:block}.site-header__brand{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:2.5rem;height:2.5rem;padding:.25rem;box-sizing:border-box;border:1px solid color-mix(in srgb,var(--bg) 28%,var(--text));border-radius:10px;background:var(--text);text-decoration:none;overflow:hidden;transition:border-color .15s ease,background .15s ease,box-shadow .15s ease}.site-header__brand-svg{display:block;width:1.65rem;height:1.65rem;flex-shrink:0}.site-header__brand-k{font:400 88px/1 FaviconK,Segoe Script,Apple Chancery,cursive;fill:var(--accent)}.site-header__brand:hover .site-header__brand-k,.site-header__brand:focus-visible .site-header__brand-k{fill:var(--accent-hover)}.site-header__brand:hover,.site-header__brand:focus-visible{border-color:var(--accent);outline:none}.site-header__brand:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 35%,transparent)}.site-nav{display:flex;flex-wrap:wrap;gap:.75rem 1.25rem}.site-nav a{color:var(--text-muted);text-decoration:none;font-size:var(--step--1);font-weight:500}.site-nav a:hover,.site-nav a:focus-visible{color:var(--accent)}.site-nav a[aria-current=page]{color:var(--accent);font-weight:600}main{max-width:calc(var(--content-max) + 4rem);margin:0 auto;padding:clamp(2rem,6vw,4rem) clamp(1rem,4vw,2rem)}main.page{padding-top:clamp(1.5rem,4vw,2.5rem)}.page-header{margin-bottom:clamp(1.5rem,4vw,2.5rem);max-width:var(--content-max)}.page-header__title{margin:0;font-size:var(--step-3);font-weight:700;line-height:1.15;letter-spacing:-.03em}.page-header__lead{margin:.5rem 0 0;max-width:var(--content-max);color:var(--text-muted);font-size:var(--step--1)}section{margin-bottom:clamp(3rem,8vw,5rem)}section:last-of-type{margin-bottom:clamp(2rem,5vw,3rem)}.hero{padding-top:clamp(.5rem,2vw,1.5rem);margin-bottom:clamp(1.25rem,3vw,2rem)}.hero__inner{max-width:var(--content-max);display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:clamp(.625rem,2vw,1rem);align-items:start}.hero__row{display:contents}.hero__intro{grid-column:1;grid-row:1;min-width:0}.hero__eyebrow{display:inline-block;font-size:var(--step--1);font-weight:600;color:var(--accent);letter-spacing:.04em;text-transform:uppercase;margin-bottom:.5rem}.hero h1{margin:0;font-size:var(--step-3);font-weight:700;line-height:1.15;letter-spacing:-.03em}.hero__portrait{grid-column:2;grid-row:1;align-self:start;width:min(180px,32vw);max-width:100%;aspect-ratio:1;margin:0;border-radius:50%;overflow:hidden;box-shadow:0 8px 32px color-mix(in srgb,var(--text) 12%,transparent);border:3px solid var(--border)}.hero__photo{display:block;width:100%;height:100%;object-fit:cover;object-position:95% 58%;transform:scale(1.1);transform-origin:left center}.hero__lead{margin:.35rem 0 0;max-width:none;font-size:var(--step-1);color:var(--text-muted)}@media(max-width:28rem){.hero__inner{grid-template-columns:1fr}.hero__intro{display:contents}.hero__eyebrow{grid-row:1}.hero__intro h1{grid-row:2}.hero__portrait{grid-column:1;grid-row:3;justify-self:end}.hero__lead{grid-row:4;margin-top:.5rem}}.section-title{margin:0 0 1rem;font-size:var(--step-2);font-weight:650;letter-spacing:-.02em}.section-title--with-icon{display:inline-flex;align-items:center;gap:.5rem}.section-title__icon{display:inline-flex;color:var(--accent);flex-shrink:0}.section-title__icon svg{width:1.05em;height:1.05em}.prose{margin:0;max-width:var(--content-max);color:var(--text-muted)}.prose p+p{margin-top:1rem}.prose a{color:var(--accent);font-weight:600;text-decoration:none}.prose a:hover,.prose a:focus-visible{color:var(--accent-hover);text-decoration:underline;text-underline-offset:.2em}.section-lead{margin:-.35rem 0 1.25rem;max-width:var(--content-max);color:var(--text-muted);font-size:var(--step--1)}.now-list{display:grid;gap:.75rem;margin:0;max-width:var(--content-max)}.now-list__item{display:grid;grid-template-columns:5.5rem 1fr;gap:.75rem 1rem;align-items:baseline;padding:.85rem 1rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.now-list__item dt{margin:0;font-size:var(--step--1);font-weight:650;color:var(--accent);text-transform:uppercase;letter-spacing:.04em}.now-list__item dd{margin:0;color:var(--text-muted)}.project-grid{display:grid;gap:1rem;max-width:var(--content-max)}.project-card{padding:1.15rem 1.25rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);transition:border-color .15s ease,box-shadow .15s ease}.project-card:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:0 4px 20px color-mix(in srgb,var(--text) 6%,transparent)}.project-card__header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;margin-bottom:.5rem}.project-card__title{margin:0;font-size:var(--step-1);font-weight:650;line-height:1.3}.project-card__title a{display:inline-flex;align-items:center;gap:.35rem;color:var(--text);text-decoration:none}.project-card__title a:hover,.project-card__title a:focus-visible{color:var(--accent)}.project-card__external svg{width:.85em;height:.85em;opacity:.65}.project-card__status{flex-shrink:0;padding:.15rem .5rem;font-size:.72rem;font-weight:650;text-transform:uppercase;letter-spacing:.04em;border-radius:999px}.project-card__status--live{color:#1b5e20;background:color-mix(in srgb,#4caf50 18%,transparent)}[data-theme=dark] .project-card__status--live{color:#a5d6a7;background:color-mix(in srgb,#4caf50 22%,transparent)}.project-card__status--wip{color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}.project-card__desc{margin:0 0 .85rem;color:var(--text-muted);font-size:var(--step--1);line-height:1.55}.project-card__tags{display:flex;flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none}.project-card__tags li{padding:.2rem .55rem;font-size:.75rem;font-weight:600;color:var(--text-muted);background:color-mix(in srgb,var(--text) 6%,transparent);border-radius:6px}.secret-toast{position:fixed;bottom:1.5rem;left:50%;z-index:200;max-width:min(22rem,calc(100vw - 2rem));padding:.75rem 1.1rem;font-size:var(--step--1);font-weight:500;color:var(--text);text-align:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 32px color-mix(in srgb,var(--text) 14%,transparent);transform:translate(-50%,1rem);opacity:0;transition:opacity .25s ease,transform .25s ease;pointer-events:none}.secret-toast--visible{transform:translate(-50%);opacity:1}.site-header__brand--wiggle{animation:brand-wiggle .55s ease}@keyframes brand-wiggle{0%,to{transform:rotate(0)}25%{transform:rotate(-8deg)}75%{transform:rotate(8deg)}}@media(prefers-reduced-motion:reduce){.secret-toast{transition:none}.site-header__brand--wiggle{animation:none}}.galaga-game{max-width:32rem;margin:0 auto}.galaga-game--space{--galaga-bg: #0f1419;--galaga-surface: #1a222d;--galaga-text: #e8eaed;--galaga-muted: #9aa0a6;--galaga-accent: #7cb7ff;--galaga-border: #2d3844;color:var(--galaga-text)}.galaga-game--space .galaga-game__stats{color:var(--galaga-muted)}.galaga-game--space .galaga-game__stats strong{color:var(--galaga-text)}.galaga-game--space .galaga-game__start,.galaga-game--space .galaga-game__pad{border-color:var(--galaga-border);background:var(--galaga-surface);color:var(--galaga-text)}.galaga-game--space .galaga-game__start:hover,.galaga-game--space .galaga-game__start:focus-visible,.galaga-game--space .galaga-game__pad:hover,.galaga-game--space .galaga-game__pad:focus-visible{border-color:var(--galaga-accent);color:var(--galaga-accent)}.galaga-game--space .galaga-game__pad--fire{color:var(--galaga-accent)}.galaga-game--space .galaga-game__status{color:var(--galaga-muted)}.galaga-game--space .galaga-game__canvas{border-color:var(--galaga-border);background:var(--galaga-bg)}.galaga-game__top{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:.75rem}.galaga-game__actions{display:flex;align-items:center;gap:.5rem}.galaga-game__mute{display:flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:1px solid var(--border);border-radius:8px;background:var(--surface);cursor:pointer;transition:border-color .15s ease}.galaga-game__mute:hover,.galaga-game__mute:focus-visible{border-color:var(--accent);outline:none}.galaga-game__mute-icon{font-size:1rem;line-height:1}.galaga-game--space .galaga-game__mute{border-color:var(--galaga-border);background:var(--galaga-surface)}.galaga-game--space .galaga-game__mute:hover,.galaga-game--space .galaga-game__mute:focus-visible{border-color:var(--galaga-accent)}.galaga-game__stats{display:flex;gap:1.25rem;font-size:var(--step--1);color:var(--text-muted)}.galaga-game__stats strong{color:var(--text);font-weight:700;font-variant-numeric:tabular-nums}.galaga-game__start{padding:.45rem .9rem;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--accent);font-size:var(--step--1);font-weight:650;cursor:pointer;transition:border-color .15s ease,background .15s ease}.galaga-game__start:hover,.galaga-game__start:focus-visible{border-color:var(--accent);outline:none}.galaga-game__canvas{display:block;width:100%;aspect-ratio:3 / 4;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);touch-action:none}.galaga-game__status{margin:.75rem 0 0;font-size:.82rem;color:var(--text-muted);text-align:center}.galaga-game__controls{display:none;grid-template-columns:1fr 1fr 1fr;gap:.5rem;margin-top:.85rem}.galaga-game__pad{min-height:2.75rem;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--text);font-size:var(--step--1);font-weight:650;cursor:pointer;user-select:none;touch-action:manipulation}.galaga-game__pad--fire{color:var(--accent)}.galaga-game__pad:active{background:color-mix(in srgb,var(--accent) 12%,var(--surface))}.galaga-game--reduced .galaga-game__canvas,.galaga-game--reduced .galaga-game__controls,.galaga-game--reduced .galaga-game__start{display:none}@media(max-width:48rem){.galaga-game__controls{display:grid}}@media(hover:none)and (pointer:coarse){.galaga-game__controls{display:grid}}.music-tools{display:grid;gap:1.25rem;max-width:var(--content-max)}.music-tools :focus:not(:focus-visible){outline:none}.music-tools select:focus:not(:focus-visible),.music-tools input:focus:not(:focus-visible),.music-tools button:focus:not(:focus-visible){outline:none;box-shadow:none}.music-tools__keyboard-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem;padding:.85rem 1rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.music-tools__keyboard-label{font-size:var(--step--1);font-weight:650;color:var(--text)}.music-tools__hint{margin:0;font-size:var(--step--1);color:var(--text-muted)}.music-tools__hint kbd{display:inline-block;padding:.1em .4em;border:1px solid var(--border);border-radius:4px;background:var(--surface);font:600 .85em ui-monospace,monospace}.music-tool{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow:hidden}.music-tool__panel.music-tool--focused{outline:2px solid color-mix(in srgb,var(--accent) 55%,transparent);outline-offset:2px;border-radius:var(--radius)}.music-tool__header{padding:1.1rem 1.25rem .5rem}.music-tool__title{margin:0;font-size:var(--step-1);font-weight:650;letter-spacing:-.02em}.music-tool__desc{margin:.35rem 0 0;font-size:var(--step--1);color:var(--text-muted)}.music-tool__panel{padding:.75rem 1.25rem 1.25rem;display:grid;gap:1rem}.music-tool__row{display:grid;gap:.45rem}.music-tool__row--split{grid-template-columns:1fr;gap:.85rem}@media(min-width:32rem){.music-tool__row--split{grid-template-columns:1fr 1fr;align-items:end}}.music-tool__label{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;font-size:var(--step--1);font-weight:600;color:var(--text)}.music-tool__value{color:var(--text-muted);font-weight:500}.music-tool__field{display:grid;gap:.35rem;font-size:var(--step--1);font-weight:600;color:var(--text)}.music-tool__field select,.music-tool__field input[type=number]{width:100%;padding:.5rem .65rem;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text);font:inherit}.music-tool__field input[type=number]{max-width:8rem}.music-tool__check{display:flex;align-items:center;gap:.5rem;font-size:var(--step--1);color:var(--text-muted);cursor:pointer}.music-tool__check input{accent-color:var(--accent)}.music-tool input[type=range]{width:100%;accent-color:var(--accent)}.music-tool__bpm-controls{display:grid;gap:.45rem;width:100%}.music-tool__bpm-inputs{display:grid;grid-template-columns:5.5rem 1fr;gap:.75rem;align-items:center}.music-tool__bpm-inputs input[type=number]{width:100%;padding:.5rem .65rem;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text);font:inherit;font-variant-numeric:tabular-nums}.music-tool__actions{display:flex;flex-wrap:wrap;gap:.5rem}.music-tool__btn{padding:.5rem .95rem;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text);font:inherit;font-size:var(--step--1);font-weight:600;cursor:pointer;transition:border-color .15s ease,color .15s ease}.music-tool__btn:hover,.music-tool__btn:focus-visible{border-color:var(--accent);color:var(--accent);outline:none}.music-tool__btn--primary{background:color-mix(in srgb,var(--accent) 12%,var(--bg));color:var(--accent);border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}.music-tool__beat-dots{display:flex;align-items:center;justify-content:flex-start;gap:.45rem;min-height:2.5rem}.music-tool__beat-grid{display:flex;flex-wrap:wrap;gap:.65rem}.music-tool__beat-group{display:flex;align-items:center;gap:.4rem;padding:.35rem .5rem;border:1px solid var(--border);border-radius:8px;background:var(--bg)}.music-tool__beat-group-label{min-width:1rem;font-size:.75rem;font-weight:700;color:var(--text-muted);text-align:center}.music-tool__beat-group-cells{display:flex;gap:.35rem}.music-tool__beat-dot{width:1.1rem;height:1.1rem;padding:0;border-radius:50%;border:2px solid var(--border);background:transparent;cursor:pointer;transition:background .08s ease,transform .08s ease,border-color .08s ease}.music-tool__beat-dot--silent{opacity:.45;background:transparent}.music-tool__beat-dot--weak{background:color-mix(in srgb,var(--accent) 35%,transparent);border-color:color-mix(in srgb,var(--accent) 45%,var(--border))}.music-tool__beat-dot--strong{background:var(--accent);border-color:var(--accent);transform:scale(1.08)}.music-tool__beat-dot--active{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 35%,transparent);transform:scale(1.2);transition:none}.music-tool__tuner-display{display:grid;justify-items:center;gap:.35rem;padding:.75rem 0 .25rem}.music-tool__tuner-note{margin:0;font-size:clamp(2.5rem,8vw,3.25rem);font-weight:700;line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums}.music-tool__tuner-frequency{margin:0;font-size:var(--step--1);color:var(--text-muted);font-variant-numeric:tabular-nums}.music-tool__tuner-gauge{position:relative;width:min(100%,14rem);height:4.5rem;margin:.35rem 0;border-bottom:3px solid var(--border)}.music-tool__tuner-mark{position:absolute;bottom:.35rem;font-size:.85rem;color:var(--text-muted)}.music-tool__tuner-mark--flat{left:.5rem}.music-tool__tuner-mark--sharp{right:.5rem}.music-tool__tuner-needle{position:absolute;left:50%;bottom:-1px;width:3px;height:3.5rem;background:var(--accent);border-radius:2px 2px 0 0;transform:translate(-50%) rotate(0);transform-origin:bottom center;transition:transform .12s ease-out}.music-tool__tuner-cents{margin:0;min-height:1.25rem;font-size:var(--step--1);font-weight:600;color:var(--text-muted)}.music-tool__tuner-cents--close{color:color-mix(in srgb,var(--accent) 70%,var(--text))}.music-tool__tuner-cents--in-tune{color:#2e7d32}[data-theme=dark] .music-tool__tuner-cents--in-tune{color:#81c784}.music-tool__hint{margin:0;font-size:.82rem;color:var(--text-muted)}@media(prefers-reduced-motion:reduce){.music-tool__beat-dot,.music-tool__tuner-needle{transition:none}}.todo{display:inline;padding:.1em .35em;font-size:.85em;font-family:ui-monospace,monospace;font-weight:600;color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent);border-radius:4px}.link-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem;max-width:var(--content-max)}.link-list a{display:inline-flex;align-items:center;gap:.5rem;color:var(--accent);font-weight:600;text-decoration:none}.link-list a:hover,.link-list a:focus-visible{color:var(--accent-hover);text-decoration:underline;text-underline-offset:.2em}.site-footer{border-top:1px solid var(--border);padding:var(--space) clamp(1rem,4vw,2rem);text-align:center;font-size:var(--step--1);color:var(--text-muted)}.site-footer p{margin:0}
