@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=DM+Mono:wght@400;500&family=DM+Serif+Display:ital@0;1&display=swap');
:root{--paper:#f5f8ff;--ink:#152b55;--muted:#586a86;--line:#d5deee;--accent:#2c5dea;--mono:'DM Mono',monospace;--serif:'DM Serif Display',Georgia,serif;--sans:'DM Sans',Arial,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:110px}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:17px;line-height:1.6}button,input,a{-webkit-tap-highlight-color:transparent}button,a,input{outline-offset:6px}button{font:inherit;color:inherit;cursor:pointer}a{color:inherit;text-decoration:none}a:hover{color:var(--accent)}button:hover{color:var(--accent)}.shell{max-width:1440px;margin:auto;padding:0 6.3%}header{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding:24px 0;gap:20px}.identity{font-family:var(--serif);font-size:25px;white-space:nowrap}.identity span{display:inline-block;font:12px var(--mono);color:var(--muted);margin-left:20px}nav{display:flex;gap:30px;align-items:center;font-size:14px}nav a,.text-button{white-space:nowrap}.text-button{padding:0;background:none;border:0}.linkedin-icon{font-weight:bold;font-family:Arial,sans-serif;font-size:12px;border:1px solid currentColor;padding:0 2px;margin-left:7px;line-height:1.1;display:inline-block}.hero{padding:80px 0 50px}.eyebrow{font:12px/1.6 var(--mono);letter-spacing:.085em;color:var(--muted)}.hero>.eyebrow{display:flex;align-items:center;gap:10px}.eyebrow-right{margin-left:auto}.availability{width:6px;height:6px;border-radius:50%;background:var(--accent)}h1,h2,h3,p{margin:0}h1{font:clamp(52px,6.8vw,100px)/1.03 var(--serif);letter-spacing:-.045em;margin:28px 0 42px;font-weight:400}h1 em{color:var(--accent);font-weight:400}h2{font:clamp(32px,4vw,55px)/1.1 var(--serif);letter-spacing:-.025em;font-weight:400}h3{font:34px/1.2 var(--serif);letter-spacing:-.02em;font-weight:400}.hero-bottom{display:flex;align-items:flex-end;justify-content:space-between;gap:35px}.hero-bottom p{max-width:610px;font-size:18px;color:#445c7d}.hero-actions{display:flex;gap:10px;flex-shrink:0}.button{border:1px solid #cad6ec;border-radius:40px;padding:12px 22px;background:transparent;font-size:14px;display:inline-flex;align-items:center;justify-content:center;gap:6px;transition:transform .2s,background .2s}.button:hover{transform:translateY(-2px);background:#e8effc;color:var(--ink)}.button.dark{background:var(--ink);border-color:var(--ink);color:white}.button.dark:hover{background:#24488b}.shortcut{display:flex;gap:10px;align-items:center;margin-top:24px;font-size:13px;color:var(--muted)}.shortcut button{border:0;border-bottom:1px solid #9cafce;background:none;padding:0;font-size:13px}.small-note{font-size:12px;color:var(--muted)}.lab{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:25px 0 17px}.lab-top{display:flex;justify-content:space-between;gap:20px;align-items:center}.lab h2{font:22px var(--serif);letter-spacing:0;margin-top:6px}.tiny-button{font:12px var(--mono);border:1px solid var(--line);border-radius:20px;padding:7px 12px;background:none;white-space:nowrap}.chart-wrap{position:relative;height:245px;margin-top:12px}.chart-label{position:absolute;font:10px var(--mono);color:var(--muted);top:7px;left:0;letter-spacing:.08em}canvas{width:100%;height:205px;display:block}.chart-footer{display:flex;justify-content:space-between;font:10px var(--mono);color:var(--muted);margin-top:8px;letter-spacing:.08em}#chart-note{position:absolute;right:5%;top:24px;font:italic 16px var(--serif);color:var(--accent)}.lab-controls{display:flex;align-items:center;gap:30px;font:12px var(--mono)}.lab-controls label{display:flex;align-items:center;gap:15px}.lab-controls input{width:130px;accent-color:var(--accent)}.lab-controls output{min-width:35px}.lab-controls .text-button{font-size:12px}.lab-controls .text-button span{color:var(--accent);font-size:20px;margin-left:5px}.lab-disclaimer{margin-left:auto;color:var(--muted);font-size:10px}.projects{padding:94px 0}.section-heading{display:grid;grid-template-columns:1fr 1fr;gap:17px 60px;align-items:end}.section-heading>.eyebrow{grid-column:1/-1}.section-heading p{color:var(--muted);max-width:400px;margin-bottom:5px}.project{display:grid;grid-template-columns:1.1fr 1fr;gap:60px;margin-top:44px;align-items:center}.project-visual{background:#e7efff;min-height:380px;padding:26px;position:relative;overflow:hidden;border:1px solid #dbe1d2}.visual-header{display:flex;justify-content:space-between;font:11px var(--mono);color:#48638d}.grid-diagram{position:relative;display:flex;gap:13px;margin:50px 0}.grid-line{position:absolute;top:46%;left:0;width:100%;height:1px;background:#728567}.grid-cell{z-index:1;position:relative;flex:1;background:#f7f8f2;border:1px solid #a8b29b;padding:16px 10px;box-shadow:3px 3px 0 #d6dccb;min-width:0}.grid-cell span{display:block;font:10px var(--mono);color:#6b7e59;margin-bottom:20px}.grid-cell strong{display:block;font-size:14px;font-weight:500}.grid-cell small{font-size:10px;color:#78816f}.visual-footer{font:25px/1.2 var(--serif);color:#244a87}.visual-footer i{font-weight:400}.project-description h3{margin:16px 0}.project-description>p{color:#445c7d;margin-bottom:15px;font-size:16px}.tags{display:flex;gap:8px;flex-wrap:wrap;margin:23px 0}.tags span{font:10px var(--mono);border:1px solid var(--line);border-radius:30px;padding:5px 9px}details{border-top:1px solid var(--line)}summary{cursor:pointer;padding:17px 0;list-style:none;font-size:14px;display:flex;justify-content:space-between}summary::-webkit-details-marker{display:none}summary span{color:var(--accent);font-size:20px;line-height:1}details[open] summary span{transform:rotate(45deg)}.project-details p{font-size:15px;color:var(--muted);margin-bottom:16px}.project-details strong{color:var(--ink)}.about{display:grid;grid-template-columns:1fr 1fr;gap:60px;border-top:1px solid var(--line);padding:75px 0}.about .section-heading{display:block}.about h2{margin-top:20px}.about-copy>p{color:var(--muted);margin-bottom:22px}.about-copy .large-copy{font-size:23px;line-height:1.45;color:var(--ink)}.timeline{border-top:1px solid var(--line)}.timeline>div{padding:22px 0;border-bottom:1px solid var(--line)}.timeline h3{font-size:24px;margin:8px 0}.timeline p{font-size:14px;color:var(--muted)}.footnote-button{border:0;background:none;font-size:12px;color:var(--muted);padding:22px 0 0;text-align:left}.joke-result{font:14px var(--mono);margin:10px 0!important;color:var(--accent)!important}.contact{border-top:1px solid var(--line);padding:65px 0 70px}.contact h2{font-size:clamp(40px,5.5vw,76px);margin:20px 0 30px}.contact-bottom{display:flex;justify-content:space-between;gap:25px;align-items:center}.contact p{color:var(--muted)}footer{border-top:1px solid var(--line);padding:22px 0 30px;display:flex;justify-content:space-between;gap:20px;font:11px var(--mono);color:var(--muted)}dialog{border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:5px;padding:46px;max-width:560px;width:calc(100% - 35px);max-height:85vh;overflow:auto;box-shadow:0 30px 90px #152b5530}dialog::backdrop{background:#152b5565;backdrop-filter:blur(7px)}dialog h2{margin:16px 0 23px}dialog p{margin:20px 0 25px;color:var(--muted)}.close-dialog{position:absolute;right:15px;top:8px;background:none;border:0;font-size:30px}dl div{padding:12px 0;border-bottom:1px solid var(--line)}dt{font:12px var(--mono);color:var(--muted)}dd{margin:4px 0 0;font-size:16px}dialog .button{margin-top:12px}.skip{position:fixed;top:-100px;left:20px;z-index:20;background:var(--ink);color:white;padding:10px}.skip:focus{top:10px}::selection{background:#bcd3ff;color:#152b55}@media(min-width:1450px){.shell{padding:0 90px}}@media(max-width:1000px){.identity span{display:none}.hero-bottom{align-items:flex-start;flex-direction:column;gap:22px}.hero{padding-top:55px}.hero-bottom p{max-width:650px}.project{gap:30px}.lab-disclaimer{display:none}.about{gap:35px}}@media(max-width:650px){body{font-size:16px}.shell{padding:0 6%}header{padding:17px 0;align-items:flex-start;gap:8px}.identity{font-size:20px}nav{gap:13px;font-size:12px;flex-wrap:wrap;justify-content:flex-end}nav .linkedin-icon{display:none}nav a:first-child{display:none}.eyebrow-right{display:none}h1{font-size:clamp(43px,10vw,66px);margin:24px 0 26px}.hero{padding:42px 0 35px}.hero-bottom p{font-size:16px}.hero-actions{flex-wrap:wrap}.button{padding:11px 19px}.shortcut{flex-wrap:wrap;font-size:12px}.shortcut .small-note{display:none}.lab-top{align-items:flex-start}.lab h2{font-size:20px;max-width:240px}.lab-top .eyebrow{font-size:10px}.tiny-button{font-size:10px;padding:6px 8px}.chart-wrap{height:215px}canvas{height:178px}#chart-note{font-size:13px;top:33px}.lab-controls{gap:12px;justify-content:space-between}.lab-controls label{gap:7px;font-size:11px}.lab-controls input{width:70px}.lab-controls .text-button{font-size:10px}.lab-controls output{min-width:28px}.projects{padding:55px 0}.section-heading{display:block}.section-heading h2{margin-top:18px}.section-heading p{margin-top:22px}.project{display:block;margin-top:28px}.project-visual{min-height:310px;padding:20px}.grid-diagram{margin:35px 0}.grid-cell{padding:12px 7px}.grid-cell strong{font-size:12px}.grid-cell small{font-size:9px}.project-description{margin-top:25px}.about{display:block;padding:48px 0}.about-copy{margin-top:30px}.contact{padding:45px 0}.contact-bottom{align-items:flex-start;flex-direction:column}.contact p{font-size:16px}footer{flex-wrap:wrap;font-size:10px}footer span:nth-child(2){order:3;width:100%}dialog{padding:35px 24px}.lab-controls input{min-height:30px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}

.experience{border-top:1px solid var(--line);padding:70px 0}.experience-list{margin-top:40px}.experience-list article{display:grid;grid-template-columns:.7fr 1.1fr 1.5fr;gap:25px;border-top:1px solid var(--line);padding:27px 0;align-items:start}.experience-list article h3{font-size:25px}.experience-list h4{font-size:15px;font-weight:500;margin:0 0 8px}.experience-list p{font-size:15px;color:var(--muted)}.personal-note{border-left:2px solid var(--accent);padding-left:20px;margin-top:45px}.personal-note p{margin-top:10px;font-size:16px;color:var(--muted)}.toolbox{padding-top:24px}.toolbox p{font-size:14px}.toolbox .tags{margin:12px 0 20px}.contact-actions{display:flex;gap:10px;flex-wrap:wrap;max-width:340px}.cv-link{font-size:13px;text-decoration:underline;text-underline-offset:5px;display:inline-block;margin-top:15px}.contact-actions .cv-link{width:100%;text-align:center}dialog .cv-link{margin-left:15px}#chart-note{max-width:75%;text-align:right}#coffee span{font-size:15px}.lab-controls{gap:22px}.lab-disclaimer{font-size:9px}@media(max-width:650px){.experience{padding:45px 0}.experience-list article{grid-template-columns:1fr;gap:12px}.experience-list article h3{font-size:26px}.lab-controls{flex-wrap:wrap;gap:8px 14px}.lab-controls label{margin-right:auto}.lab-controls input{width:65px}.contact-actions .cv-link{text-align:left}.personal-note{margin-top:26px}.toolbox .tags span{font-size:11px}dialog .cv-link{margin-left:0;display:block}}

.winner-ribbon{display:inline-flex;align-items:center;flex-wrap:wrap;gap:12px;color:#264fad;background:#e7efff;border:1px solid #cbdafa;font:11px var(--mono);padding:10px 14px;margin-top:23px}.winner-ribbon>span:first-child{font-size:18px}.winner-ribbon>span:last-child{color:var(--muted);font-size:10px}.winner-ribbon:hover{background:#dce7ff;color:#17409c}.project{align-items:start}.project-media{min-width:0}.video-heading{display:flex;align-items:center;justify-content:space-between;gap:15px;padding:14px 16px;background:#e7efff}.winner-badge{font:11px var(--mono);color:#244a87}.video-heading .eyebrow{font-size:9px}.project-media video{width:100%;display:block;aspect-ratio:16/9;background:#0b1b37}.video-caption{display:flex;justify-content:space-between;gap:15px;font:10px/1.5 var(--mono);padding:12px 0;color:var(--muted)}.challenge{margin-top:10px}.challenge figure{margin:0}.challenge img{width:100%;height:auto;max-height:420px;object-fit:cover;object-position:center 70%;display:block}.challenge figcaption{font-size:12px;color:var(--muted);margin:10px 0}.project-description h3{font-size:48px}.project-description>.eyebrow{font-size:10px}@media(max-width:650px){.winner-ribbon{font-size:10px;gap:7px}.winner-ribbon>span:last-child{font-size:9px}.project-description h3{font-size:40px}.project-media{margin-bottom:25px}}

/* Playful, keyboard-friendly side quests. */
[hidden]{display:none!important}.playground{border-top:1px solid var(--line);padding:65px 0}.play-intro{display:flex;justify-content:space-between;align-items:end;gap:35px;margin-bottom:35px}.play-intro h2{margin-top:18px}.play-intro p{color:var(--muted);font-size:16px}.play-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.play-card{border:1px solid var(--line);padding:30px;min-width:0}.play-card-top{display:flex;justify-content:space-between;align-items:center;gap:16px;min-height:44px}.play-card .eyebrow,.play-counter{font:12px/1.5 var(--mono)}.play-counter{color:var(--muted)}.play-card h3{font-size:32px;margin:14px 0}.play-card>p{font-size:16px}.number-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:26px 0}.number-grid button{min-height:64px;min-width:0;border:1px solid #c9d6ef;background:#eaf0fc;border-radius:3px;font:24px var(--mono);transition:transform .15s,background .15s}.number-grid button:hover:not([aria-disabled=true]){transform:translateY(-3px);background:#dce7fc;color:var(--ink)}.number-grid button.correct{background:#d7e8ff;border-color:#2861bb;color:#163c7a}.number-grid button.incorrect{background:#f2ddd5;border-color:#b86a4e;color:#7c3f28}.number-grid button[aria-disabled=true]{cursor:default}.game-feedback{min-height:82px;color:var(--muted);margin-bottom:20px}.game-bottom{display:flex;justify-content:space-between;align-items:center;gap:14px}.game-bottom>span{font-size:12px;color:var(--muted)}.game-bottom .button{min-height:44px;font-size:14px}.market-card{background:#102955;color:#eff5ff;border-color:#102955}.market-card .eyebrow{color:#b7c8e6}.market-reset{background:none;border:0;text-decoration:underline;text-underline-offset:5px;color:#dce9ff;font-size:14px;min-height:44px;padding:0 4px}.market-ticker{display:flex;justify-content:space-between;align-items:end;gap:12px}.market-symbol{display:block;font:12px var(--mono);color:#b7c8e6}.market-ticker strong{font:34px var(--mono);display:block;margin-top:8px}.market-ticker>span{font:12px/1.5 var(--mono);text-align:right;color:#c0d6ff}#market-chart{height:160px;width:100%;margin:18px 0 7px}.market-settings label{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:14px}.market-settings output{color:#a8cdff;font:12px var(--mono)}.market-settings input{width:100%;accent-color:#8ebbff;min-height:32px;margin:0}.market-actions{display:flex;gap:10px;margin:12px 0}.market-actions .button{color:#eef5ff;border-color:#718fbc;min-height:44px;padding:9px 17px}.market-actions .button:hover{background:#244579}.market-card .market-news{font-size:14px;color:#d6e6ff;min-height:47px;line-height:1.5}.market-card .fiction-label{font-size:12px;color:#b7c8e6;margin-top:13px}.jargon-box{display:flex;justify-content:space-between;align-items:center;gap:30px;border-bottom:1px solid var(--line);padding:26px 0 0}.jargon-box>div{padding-bottom:26px}.jargon-box p{font-family:var(--serif);font-size:22px;margin-top:10px;max-width:720px}.jargon-box .button{flex-shrink:0;margin-bottom:26px;min-height:44px}.playground button:focus-visible{outline:3px solid var(--accent);outline-offset:3px}.market-card button:focus-visible,.market-card input:focus-visible{outline-color:#a6caff}
@media(max-width:1000px){.play-card{padding:22px}.play-card-top{align-items:start}.play-card-top .eyebrow,.play-counter{font-size:12px}.play-card h3{font-size:28px}.game-bottom{flex-wrap:wrap}}
@media(max-width:720px){.playground{padding:45px 0}.play-intro{display:block}.play-intro p{margin-top:22px}.play-grid{grid-template-columns:1fr}.play-card{padding:22px}.jargon-box{display:block}.jargon-box>div{padding-bottom:18px}.jargon-box .button{margin-bottom:22px}.game-feedback{min-height:66px}.game-bottom{min-height:44px}.market-card .market-news{min-height:45px}}

/* Blue identity, personal details, and touch-first navigation. */
:root{--paper:#f5f8ff;--ink:#152b55;--muted:#586a86;--line:#d5deee;--accent:#2c5dea}body{background:var(--paper)}header{position:relative;z-index:50}nav{gap:20px}nav a{min-height:44px;display:inline-flex;align-items:center}.nav-toggle{display:none}.lab h2{font-size:26px;max-width:740px}.lab-controls{flex-wrap:wrap}.lab-controls label,.lab-controls .text-button{font-size:14px}.lab-controls .text-button,.lab-controls label{min-height:44px}.lab-controls input{width:140px;min-height:44px}.lab-disclaimer{display:block;font-size:12px}.chart-label,.chart-footer{font-size:12px}.chart-wrap{margin-top:20px;height:245px}#chart-note{top:28px;max-width:70%;font-size:16px}.tiny-button{min-height:44px;font-size:12px}.determination-strip{display:flex;align-items:center;justify-content:space-between;gap:25px;border-top:1px dashed var(--line);padding:24px 0 10px;margin-top:14px}.determination-strip p{font-family:var(--serif);font-size:25px;line-height:1.25;margin:8px 0}.determination-strip small{display:block;font-size:12px;color:var(--muted)}.determination-strip>div:last-child{display:flex;align-items:center;gap:17px;flex-shrink:0}.determination-strip .text-button{font-size:14px;min-height:44px;text-decoration:underline;text-underline-offset:4px}.button{min-height:44px}.focus-section{padding:80px 0 15px}.focus-grid{display:grid;grid-template-columns:repeat(3,1fr);margin-top:35px;border-top:1px solid var(--line)}.focus-grid article{padding:28px 25px 10px 0;min-width:0}.focus-grid article+article{border-left:1px solid var(--line);padding-left:25px}.focus-number{font:14px var(--mono);color:var(--accent)}.focus-grid h3{font-size:29px;margin:15px 0}.focus-grid p{font-size:16px;color:var(--muted);margin-bottom:18px}.focus-grid details p{font-size:16px}.focus-grid summary{min-height:50px}.pitch-joke{border-top:1px solid var(--line);padding-top:17px;margin-top:8px}.pitch-joke button{white-space:normal;text-align:left;min-height:44px;font-size:14px;text-decoration:underline;text-underline-offset:4px}.pitch-joke output{display:block;font:12px var(--mono);color:var(--accent);overflow-wrap:anywhere;margin-top:8px}.toolbox details{margin:15px 0}.toolbox details p{font-size:16px;padding-bottom:18px}.language-card{margin-top:25px}.language-buttons{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}.language-buttons button{min-height:44px;border:1px solid var(--line);border-radius:24px;background:transparent;padding:8px 16px;font-size:14px}.language-buttons button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:#fff}#language-greeting{font-size:21px;font-family:var(--serif);line-height:1.4;min-height:60px}.language-card small{font-size:12px;color:var(--muted)}.language-card .language-levels{font-size:14px;color:var(--muted);margin:18px 0}.hobby-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:35px}.hobby-grid article{padding:28px;border:1px solid var(--line);background:#ecf2ff;min-width:0}.hobby-grid h3{font-size:31px;margin:16px 0}.hobby-grid>article>p{font-size:16px;color:var(--muted);max-width:440px}.hobby-grid .button{margin-top:20px;background:#f7faff}.hobby-grid .hobby-feedback{margin-top:18px;color:var(--accent);font-size:15px;min-height:50px}.stroke-beats{display:flex;gap:9px;margin-top:22px}.stroke-beats span{display:grid;place-items:center;width:42px;height:30px;border:1px solid #bacdef;font:12px var(--mono);transition:background .15s,transform .15s}.stroke-beats .active{background:var(--accent);color:white;transform:translateY(-4px)}.play-card h3{font-size:30px}.market-ticker{flex-wrap:wrap}.market-symbol{line-height:1.5}.market-card .market-news{min-height:70px}.play-intro p{max-width:420px}.winner-ribbon,.winner-ribbon>span:last-child,.video-caption,.video-heading .eyebrow,.winner-badge,.project-description>.eyebrow,.tags span,.toolbox .tags span,footer{font-size:12px}.winner-ribbon{min-height:44px}.footnote-button{font-size:14px;min-height:44px;padding-top:15px}.timeline p{font-size:16px}.experience-list p{font-size:16px}.eyebrow{color:var(--muted)}.jargon-box p{color:var(--ink)}.close-dialog{width:44px;height:44px;display:grid;place-items:center}
@media(max-width:1100px){.identity span{display:none}.determination-strip{align-items:flex-start}.determination-strip>div:last-child{flex-direction:column;gap:3px}.focus-grid h3{font-size:26px}}
@media(max-width:900px){header{position:sticky;top:0;padding:13px 0;background:#f5f8fff5;backdrop-filter:blur(12px)}.identity{font-size:24px}.nav-toggle{display:flex;align-items:center;justify-content:center;gap:15px;min-width:90px;min-height:44px;border:1px solid var(--line);border-radius:30px;background:var(--paper);font-size:14px}.nav-toggle span{font-size:20px}.nav-toggle[aria-expanded=true] span{transform:rotate(45deg)}nav{display:none;position:absolute;top:100%;left:0;right:0;background:#f5f8fff9;padding:13px;border:1px solid var(--line);box-shadow:0 12px 20px #17336312;gap:4px;backdrop-filter:blur(14px)}nav.nav-open{display:grid;grid-template-columns:1fr 1fr}nav a,nav a:first-child{display:flex;justify-content:flex-start;padding:10px 13px;min-height:48px;font-size:16px}nav a:hover{background:#e3edff}nav .linkedin-icon{display:inline-block}.focus-grid{grid-template-columns:1fr}.focus-grid article{padding:26px 0 12px}.focus-grid article+article{border-left:0;border-top:1px solid var(--line);padding-left:0}.focus-grid h3{font-size:30px}.focus-section{padding-top:50px}.lab h2{max-width:100%}.lab-top{gap:18px}.lab-top .tiny-button{flex-shrink:0}}
@media(max-width:650px){.identity{font-size:23px}.shell{padding:0 5.5%}h1{font-size:clamp(39px,10.1vw,62px);line-height:1.06;letter-spacing:-.045em}.hero{padding-top:35px}.hero>.eyebrow{font-size:12px}.hero-actions{width:100%;display:grid;grid-template-columns:1fr}.hero-actions .button{width:100%;min-height:48px;font-size:15px}.shortcut{font-size:14px}.shortcut button{font-size:14px;min-height:44px}.lab-top{flex-wrap:wrap}.lab h2{font-size:25px;line-height:1.2;max-width:none}.lab-top .eyebrow{font-size:12px}.lab-top .tiny-button{min-height:44px;padding:9px 13px}.chart-label{max-width:75%;font-size:10px}.chart-wrap{height:225px;margin-top:10px}canvas{height:186px}.chart-footer{font-size:11px}#chart-note{top:42px;font-size:14px;max-width:85%}.lab-controls{gap:8px 16px;justify-content:flex-start}.lab-controls label{width:100%;font-size:14px;margin:0;gap:12px}.lab-controls input{flex:1;width:auto;min-width:0}.lab-controls .text-button{font-size:14px;min-height:44px}.lab-controls output{min-width:42px}.lab-disclaimer{width:100%;font-size:12px;margin:0}.determination-strip{display:block;padding:24px 0 10px}.determination-strip p{font-size:26px}.determination-strip>div:last-child{flex-direction:row;justify-content:flex-start;margin-top:18px;gap:22px}.determination-strip .button{min-height:48px;padding:10px 16px;font-size:14px}.focus-grid p{font-size:16px}.section-heading h2{font-size:35px}.hobby-grid{grid-template-columns:1fr}.hobby-grid article{padding:23px}.hobby-grid h3{font-size:30px}.hobby-grid .hobby-feedback{min-height:44px}.video-heading{flex-wrap:wrap;gap:8px;padding:14px}.video-caption{flex-wrap:wrap;font-size:12px}.winner-ribbon{font-size:12px;line-height:1.5;gap:7px 10px}.winner-ribbon>span:last-child{font-size:12px;width:100%;padding-left:28px}.timeline p{font-size:16px}.play-card-top{flex-wrap:wrap;gap:8px}.play-card h3{font-size:28px}.market-ticker>span{font-size:12px}.game-bottom .button{width:100%}.market-actions{flex-wrap:wrap}.market-actions .button{flex:1;min-height:48px;padding:9px 12px}.jargon-box .button{width:100%;min-height:48px}.personal-note p{font-size:16px}.language-buttons button{flex:1;min-width:75px}.experience-list h4{font-size:16px}.contact-actions{max-width:none;width:100%}.contact-actions .button{flex:1;min-height:48px}.contact-actions .cv-link{min-height:44px;display:flex;align-items:center}.cv-link{font-size:14px}footer{font-size:12px;line-height:1.6}.tags span,.toolbox .tags span{font-size:12px}dialog{max-height:calc(100dvh - 32px);padding:42px 24px 28px}dialog h2{font-size:38px}.close-dialog{top:5px;right:7px}}

/* Scroll-driven movement, with a reduced-motion alternative. */
.scroll-progress{position:fixed;top:0;left:0;height:3px;width:100%;z-index:100;transform:scaleX(var(--read-progress,0));transform-origin:left;background:var(--accent);pointer-events:none}.scroll-band{overflow:hidden;margin:45px 0 10px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:20px 0}.scroll-band p{font:clamp(40px,7vw,90px)/1.15 var(--serif);letter-spacing:-.04em;white-space:nowrap;color:#2c5dea;transform:translateX(var(--band-shift,0px));will-change:transform}.scroll-band small{display:block;font:12px/1.5 var(--mono);letter-spacing:.06em;color:var(--muted);margin-top:10px}.motion-ready .reveal-item{opacity:0;transform:translateY(22px);transition:opacity .65s ease,transform .65s ease}.motion-ready .reveal-item.is-visible{opacity:1;transform:translateY(0)}.motion-ready .scroll-title{transform:translateY(var(--title-shift,0px));will-change:transform}.timeline{position:relative;padding-left:20px}.timeline::before{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:#ccd9f0}.timeline::after{content:'';position:absolute;left:0;top:0;width:2px;height:calc(var(--timeline-progress,0)*100%);background:var(--accent);transition:height .12s linear}.timeline>div{position:relative}.timeline>div::before{content:'';width:8px;height:8px;border-radius:50%;position:absolute;left:-23px;top:30px;background:var(--paper);border:2px solid var(--accent)}@media(max-width:650px){.scroll-band{margin-top:30px;padding:16px 0}.scroll-band p{font-size:46px}.scroll-band small{font-size:12px}.motion-ready .reveal-item{transform:translateY(12px)}}@media(prefers-reduced-motion:reduce){.motion-ready .reveal-item{opacity:1;transform:none}.motion-ready .scroll-title,.scroll-band p{transform:none!important}.timeline::after{transition:none}.stroke-beats span{transition:none}}
.video-frame{position:relative;background:#0b1b37}.video-frame video{display:block}.video-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:#2456d9ee;color:#fff;border:1px solid #afc8ff;border-radius:8px;box-shadow:0 8px 30px #06163055;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:8px 12px;font-size:16px;font-weight:500;padding:15px 24px;min-height:52px;width:max-content;max-width:90%}.video-play:hover{color:white;background:#1543bd}.video-play small{width:100%;font-size:12px;font-weight:400}.video-play span{font-size:18px}.video-direct{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:8px}.video-direct a{min-height:44px;display:flex;align-items:center;font-size:14px;text-decoration:underline;text-underline-offset:4px}.video-status:empty{display:none}.video-status{font-size:14px;color:var(--muted);padding-top:12px}@media(max-width:650px){.video-play{font-size:14px;padding:11px 18px}.video-direct{gap:0 16px}.video-direct a{font-size:13px}.video-caption{padding-top:2px}}@media print{.motion-ready .reveal-item{opacity:1!important;transform:none!important}.scroll-title,.scroll-band p{transform:none!important}.scroll-progress,.nav-toggle,.video-play{display:none!important}}

/* Small, live mathematical interludes. */
.kinetic-panel{display:grid;grid-template-columns:.85fr 1.3fr;gap:35px;align-items:center;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:32px 0;margin:40px 0 25px;min-width:0}.kinetic-copy{min-width:0}.kinetic-copy h3{font-size:32px;margin:13px 0 16px}.kinetic-copy>p{font-size:16px;color:var(--muted);margin:0 0 13px}.kinetic-copy .kinetic-hint{font-size:13px;line-height:1.6}.kinetic-controls{display:flex;flex-wrap:wrap;gap:8px;margin:17px 0 13px}.kinetic-controls button{border:1px solid #c8d6ee;border-radius:24px;padding:9px 15px;background:transparent;min-height:44px;font-size:14px;line-height:1.35}.kinetic-controls button:hover{background:#e5eeff}.kinetic-controls button[aria-pressed=true]{background:#e0eaff;border-color:#7e9fde}.kinetic-copy .kinetic-status{font:12px/1.6 var(--mono);color:var(--accent);min-height:39px;margin:0}.kinetic-surface{position:relative;min-width:0;background:radial-gradient(ellipse at 50% 45%,#e4edff 0%,#f5f8ff 70%);border:1px solid #d9e3f4;border-radius:3px;padding:8px 12px 26px}.kinetic-surface canvas{display:block;width:100%;height:300px;touch-action:pan-y pinch-zoom;cursor:crosshair;border-radius:2px}.kinetic-surface canvas:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.surface-caption{position:absolute;bottom:10px;left:16px;font:10px/1.4 var(--mono);letter-spacing:.08em;color:#6b80a6;pointer-events:none}.kinetic-mesh .kinetic-surface canvas{height:245px}.kinetic-mesh .kinetic-surface{background:linear-gradient(140deg,#f5f8ff,#eaf1ff)}.kinetic-orbit .kinetic-surface{background:#edf3ff}.kinetic-orbit .kinetic-surface canvas{height:315px}.orbit-setting{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;font-size:14px;margin:17px 0}.orbit-setting output{font:14px var(--mono);color:var(--accent)}.orbit-setting input{width:100%;min-height:34px;accent-color:var(--accent);margin:0}.kinetic-panel+.about{border-top:0}.kinetic-panel+.playground{border-top:0}@media(max-width:1000px){.kinetic-panel{gap:20px;grid-template-columns:1fr 1.1fr}.kinetic-copy h3{font-size:29px}.kinetic-controls{gap:7px}.kinetic-controls button{padding:9px 12px;font-size:13px}}@media(max-width:720px){.kinetic-panel{grid-template-columns:1fr;gap:18px;margin:30px 0 20px;padding:28px 0}.kinetic-copy h3{font-size:31px}.kinetic-surface{grid-row:2;padding:5px 7px 28px}.kinetic-surface canvas{height:240px}.kinetic-mesh .kinetic-surface canvas{height:205px}.kinetic-orbit .kinetic-surface canvas{height:270px}.kinetic-controls button{min-height:46px;font-size:14px;padding:10px 14px}.kinetic-copy .kinetic-hint{font-size:14px}.kinetic-copy .kinetic-status{min-height:0;font-size:12px}.surface-caption{font-size:10px;left:12px;right:10px}.orbit-setting input{min-height:44px}.kinetic-copy .eyebrow{font-size:12px}}@media print{.kinetic-controls,.orbit-setting{display:none}.kinetic-panel{break-inside:avoid}}

/* Movement is woven into the portfolio, with one global pause control. */
.motion-intro{display:flex;align-items:center;gap:18px;margin-top:24px;padding:16px 0 0;border-top:1px solid var(--line)}.mini-gyro{width:145px;flex:none}.mini-gyro canvas{height:110px;pointer-events:none}.motion-intro-copy p{font:20px/1.35 var(--serif);margin:4px 0;color:var(--ink)}.motion-intro-copy .text-button{font-size:14px;min-height:44px;color:var(--accent);text-decoration:underline;text-underline-offset:4px}.motion-switch{margin-left:auto;background:transparent;border:1px solid var(--line);border-radius:30px;padding:10px 16px;min-height:44px;font-size:14px;flex:none}.motion-switch[aria-pressed=true]{background:#e1eaff}.mini-wave{margin:8px 0 19px;overflow:hidden}.mini-wave canvas{height:76px;pointer-events:none}.mini-wave span,.energy-flow span{font:12px/1.5 var(--mono);color:var(--muted)}.energy-flow{margin:18px 0 4px;padding:6px 0 10px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.energy-flow canvas{height:75px;pointer-events:none}.hobby-motion{margin:19px 0 8px;border-top:1px solid #ccdaf3;border-bottom:1px solid #ccdaf3;padding:8px 0 10px;overflow:hidden}.hobby-motion canvas{height:120px;pointer-events:none}.hobby-motion span{display:block;font:12px/1.5 var(--mono);color:#5673a5;letter-spacing:.02em}.hobby-grid .stroke-beats{margin-top:18px}.golf-motion{margin-bottom:66px}.scroll-band{position:relative;padding-left:76px}.scroll-spark{position:absolute;left:3px;top:23px;font:64px/1 var(--serif);color:var(--accent);transform:rotate(var(--spark-turn,0deg));transform-origin:center;pointer-events:none}.experience-list h3::after{content:'';display:block;width:46px;height:2px;background:var(--accent);margin-top:15px;transform:scaleX(0);transform-origin:left;transition:transform .7s .15s ease}.experience-list .is-visible h3::after{transform:scaleX(1)}.winner-ribbon>span:first-child{display:inline-block;transition:transform .6s}.winner-ribbon:hover>span:first-child{transform:rotate(180deg)}.motion-paused .scroll-spark,.motion-paused .scroll-band p,.motion-paused .scroll-title{transform:none!important}.motion-paused .reveal-item{opacity:1;transform:none}.motion-paused .experience-list h3::after{transition:none;transform:scaleX(1)}.motion-paused .winner-ribbon>span:first-child{transition:none;transform:none}
@media(max-width:720px){.motion-intro{gap:12px;flex-wrap:wrap}.mini-gyro{width:98px}.mini-gyro canvas{height:95px}.motion-intro-copy{flex:1;min-width:140px}.motion-intro-copy p{font-size:19px}.motion-intro-copy .eyebrow{font-size:12px;letter-spacing:.025em}.motion-switch{margin-left:0;width:100%;min-height:46px}.mini-wave canvas{height:74px}.golf-motion{margin-bottom:8px}.scroll-band{padding-left:50px}.scroll-spark{font-size:43px;top:18px}.hobby-motion span{font-size:12px}.hobby-motion canvas{height:110px}}
@media(prefers-reduced-motion:reduce){.scroll-spark{transform:none!important}.experience-list h3::after{transform:scaleX(1);transition:none}.winner-ribbon>span:first-child{transition:none;transform:none!important}.motion-intro *,.hobby-motion *{animation:none!important}}@media print{.motion-intro,.mini-wave,.energy-flow,.hobby-motion,.scroll-spark{display:none}.experience-list h3::after{transform:scaleX(1)}}

/* A short playable rowing race, with explicit start and pause. */
.regatta{padding:48px 0 58px;border-top:1px solid var(--line);scroll-margin-top:95px}.regatta-intro{display:flex;align-items:end;gap:40px;justify-content:space-between;margin-bottom:30px}.regatta-intro h2{font-size:42px;margin-top:12px}.regatta-intro>p{max-width:400px;color:var(--muted);font-size:16px}.regatta-layout{display:grid;grid-template-columns:1.1fr 1fr;gap:30px;align-items:center;padding:28px;background:#eaf1ff;border:1px solid #cad9f2;border-radius:4px}.regatta-water{min-width:0}.regatta-water canvas{height:225px}.regatta-legend{display:flex;gap:20px;font:12px var(--mono);color:var(--ink)}.regatta-legend span{display:flex;align-items:center;gap:7px}.regatta-legend i{height:8px;width:8px;border-radius:50%;background:var(--accent)}.regatta-legend span+span i{background:#94abd5}.regatta-caption{font:14px/1.5 var(--serif);color:var(--muted);margin-top:12px}.regatta-dashboard{min-width:0}.regatta-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:25px}.regatta-stats>div>span{display:block;font-size:12px;color:var(--muted)}.regatta-stats strong{font:32px/1.35 var(--mono);color:var(--ink);white-space:nowrap}.regatta-stats strong span{font-size:14px;color:var(--muted);margin-left:4px}.timing-label{display:flex;justify-content:space-between;gap:10px;font-size:14px;margin-bottom:10px}.timing-label span+span{font:12px/1.6 var(--mono);color:var(--accent)}.timing-meter{position:relative;height:24px;background:#d7e2f5;border-radius:4px;margin:0 7px 14px;overflow:visible}.timing-zone{position:absolute;left:68%;width:24%;height:100%;background:#9db7ff;border-left:2px solid #2c5dea;border-right:2px solid #2c5dea}.timing-zone::after{content:'';position:absolute;left:50%;height:100%;width:1px;background:#2c5dea55}.timing-marker{position:absolute;left:0;top:-5px;height:34px;width:4px;border-radius:4px;background:#152b55;transform:translateX(-50%)}.regatta-hint{font-size:13px;color:var(--muted);line-height:1.5}.regatta-controls{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;margin-top:20px}.regatta-controls .button{min-height:48px;font-size:15px}.regatta-controls .regatta-row{background:var(--accent);color:#fff;border-color:var(--accent);min-width:110px;font-size:17px;font-weight:600}.regatta-row span{font-size:22px;margin-left:18px}.regatta-controls .regatta-row:hover{background:#214bc4}.regatta-controls .regatta-row:disabled{background:#d5dff3;border-color:#d5dff3;color:#8396b7;cursor:default;transform:none}.regatta-row.stroke-recovering{opacity:.65}.regatta-controls .text-button{font-size:14px;min-height:44px;text-decoration:underline;text-underline-offset:4px}.regatta-feedback{font-size:14px;line-height:1.55;color:var(--accent);margin-top:18px;min-height:65px}.regatta button:focus-visible{outline:3px solid #507ceb;outline-offset:4px}
@media(max-width:850px){.regatta-layout{grid-template-columns:1fr;gap:24px}.regatta-water canvas{height:180px}.regatta-intro{display:block}.regatta-intro>p{margin-top:20px;max-width:600px}.regatta-caption{margin-top:0}.regatta-feedback{min-height:44px}.regatta-stats{max-width:460px}}@media(max-width:650px){.regatta{padding:35px 0 40px}.regatta-intro h2{font-size:34px}.regatta-layout{padding:20px 17px;gap:23px}.regatta-stats{gap:8px}.regatta-stats strong{font-size:27px}.regatta-stats>div>span{font-size:12px}.regatta-controls .regatta-row{min-width:130px}.regatta-legend{font-size:12px;gap:20px}.regatta-hint{font-size:14px}.regatta-controls .button{padding:11px 16px}.regatta-water canvas{height:165px}.timing-label{font-size:14px}.timing-label span+span{font-size:11px}.regatta-caption{font-size:14px}}@media print{.regatta{display:none}}

/* Visible, accurately scoped technical skills. */
.tool-skill-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin:24px 0}.tool-skill-grid article{padding:22px;border:1px solid var(--line);border-radius:4px;background:rgba(44,93,234,.035)}.tool-skill-grid h3{margin:0 0 8px}.tool-skill-grid .eyebrow{font-size:10px;line-height:1.6}.tool-skill-grid p{font-size:15px;margin:14px 0 0}@media(max-width:650px){.tool-skill-grid{grid-template-columns:1fr}}

/* Clubs and memberships shown with the same roles as the LinkedIn profile. */
.memberships{margin:30px 0 8px}.memberships-heading{padding:2px 0 16px}.memberships-heading h3{font-size:25px;line-height:1.22;margin:8px 0 0;color:var(--ink)}.membership-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.membership-grid article{min-width:0;padding:18px 19px;border:1px solid var(--line);border-radius:4px;background:rgba(44,93,234,.035)}.membership-grid .eyebrow{font-size:10px;line-height:1.4}.membership-grid h4{font-size:17px;line-height:1.3;margin:12px 0 9px;color:var(--ink)}.membership-grid p{font-size:14px;line-height:1.4;margin:0;color:var(--accent)}@media(max-width:650px){.memberships{margin-top:25px}.membership-grid{grid-template-columns:1fr}.membership-grid article{padding:17px}.memberships-heading h3{font-size:23px}}

/* Keep the public phone number easy to tap and read on a narrow screen. */
.phone-link{white-space:nowrap}@media(max-width:650px){.contact-actions a[href^="tel:"]{flex:1 0 100%;width:100%;white-space:nowrap}}

/* A quiet portrait in the About section. */
.about-portrait{position:relative;max-width:342px;margin:34px 0 0;padding:11px;background:linear-gradient(145deg,#e7efff,#f7faff);border:1px solid var(--line);border-radius:5px;box-shadow:12px 14px 0 rgba(44,93,234,.06);transform:rotate(-1.2deg);transition:transform .35s ease,box-shadow .35s ease}.about-portrait:hover{transform:rotate(0deg) translateY(-4px);box-shadow:12px 17px 0 rgba(44,93,234,.1)}.about-portrait img{display:block;width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;border-radius:2px}.about-portrait figcaption{padding:13px 4px 3px;font:10px var(--mono);letter-spacing:.09em;line-height:1.5;color:var(--accent)}@media(max-width:850px){.about-portrait{max-width:280px;margin-top:26px}}@media(max-width:650px){.about-portrait{max-width:235px;margin:26px auto 8px;transform:rotate(-.8deg)}}@media(prefers-reduced-motion:reduce){.about-portrait{transition:none;transform:none}}
