@font-face{font-family:Portfolio;src:url(/assets/open-sans-regular.ttf)format("truetype");font-weight:400;font-display:swap}@font-face{font-family:Portfolio;src:url(/assets/open-sans-display.ttf)format("truetype");font-weight:800;font-display:swap}:root{--bg:#fafbfe;--fg:#15213b;--muted:#52617b;--accent:#2555e8;--surface:#edf1f9;--line:#cdd5e3;--contact:#152d72;--contact-fg:#f7f9ff;--contact-muted:#cbd9ff;--font:Portfolio, "Open Sans", sans-serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#111827;--fg:#f0f4fc;--muted:#abb9d0;--accent:#8faeff;--surface:#1a2538;--line:#354259;--contact:#182f6c;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#111827;--fg:#f0f4fc;--muted:#abb9d0;--accent:#8faeff;--surface:#1a2538;--line:#354259;--contact:#182f6c;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box;scrollbar-color:var(--line) var(--bg)}html{scroll-behavior:smooth;scroll-padding-top:7rem}body{background:var(--bg);color:var(--fg);font:400 1rem/1.75 var(--font);-webkit-font-smoothing:antialiased;margin:0}::selection{background:var(--accent);color:var(--bg)}:focus-visible{outline:3px solid var(--accent);outline-offset:5px}a{color:inherit;text-underline-offset:.3em;text-decoration-thickness:1px}a:hover{color:var(--accent)}button{font:inherit;cursor:pointer}a,button{touch-action:manipulation}img{max-width:100%;height:auto}h1,h2,h3,h4,p,figure{margin:0}h1,h2,h3,h4{text-wrap:balance;font-weight:800;line-height:1.16}p{text-wrap:pretty}h2{letter-spacing:-.03em;font-size:clamp(2rem,3.3vw,3rem)}.wrap{width:calc(100% - 112px);max-width:1280px;margin-inline:auto}.skip{z-index:10;background:var(--bg);padding:1rem;position:fixed;top:-100px;left:1rem}.skip:focus{top:1rem}.header-shell{z-index:5;background:var(--bg);border-bottom:1px solid var(--line);position:sticky;top:0}.site-header{justify-content:space-between;align-items:center;gap:2rem;min-height:84px;display:flex}.wordmark{letter-spacing:-.03em;font-size:1.2rem;font-weight:800;text-decoration:none}.wordmark span{color:var(--muted);font-weight:400}nav{gap:2rem;display:flex}nav a{text-align:center;min-width:44px;min-height:44px;padding-block:.75rem;font-size:.9rem;text-decoration:none;position:relative}nav a:after{content:"";background:var(--accent);transform-origin:0;width:100%;height:1px;transition:transform .18s ease-out;position:absolute;bottom:.45rem;left:0;transform:scaleX(0)}nav a:hover:after,nav a:focus-visible:after{transform:scaleX(1)}.theme-button{border:1px solid var(--line);min-width:118px;min-height:44px;color:var(--fg);background:0 0;border-radius:6px;justify-content:center;align-items:center;gap:.5rem;padding:.55rem .8rem;font-size:.875rem;display:flex}.theme-button:hover{background:var(--surface)}.theme-button svg{fill:none;stroke:currentColor;stroke-width:1.5px;width:19px;height:19px}.hero{padding-top:2.7rem}.hero-intro{justify-content:space-between;gap:1rem;display:flex}.name{font-weight:800}.location{color:var(--muted);font-size:.9rem}.hero-composition{grid-template-columns:minmax(0,1.45fr) minmax(0,.8fr);align-items:center;gap:5rem;margin-top:2rem;display:grid}h1{letter-spacing:-.04em;font-size:clamp(3.3rem,6.9vw,6rem);line-height:1.04}h1 span{color:var(--accent)}.hero-statement>p{max-width:52ch;color:var(--muted);margin-top:1.65rem;font-size:1.05rem}.hero-actions{align-items:center;gap:1.5rem;margin-top:1.6rem;display:flex}.button{border-radius:5px;justify-content:center;align-items:center;min-height:46px;padding:.8rem 1.25rem;font-size:.9rem;font-weight:800;text-decoration:none;display:inline-flex}.primary{background:var(--accent);color:var(--bg)}.primary:hover{color:var(--bg);filter:brightness(.9)}.text-link{font-size:.9rem;font-weight:800}.hero-directory{border-top:1px solid var(--fg);padding-top:1.25rem}.hero-directory h2{letter-spacing:-.02em;margin-bottom:.75rem;font-size:1.2rem}.directory-entry{border-bottom:1px solid var(--line);grid-template-columns:2rem 1fr;align-items:center;gap:.8rem;padding:1.25rem 0;text-decoration:none;display:grid}.directory-number{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.875rem}.directory-entry strong{letter-spacing:-.03em;font-size:1.65rem;font-weight:800;line-height:1.25;transition:transform .18s ease-out;display:block}.directory-entry:hover strong{transform:translate(4px)}.directory-domain{color:var(--muted);margin-top:.35rem;font-size:.875rem;display:block}.directory-entry svg{fill:none;stroke:currentColor;stroke-width:1.2px;width:22px;height:22px}.directory-ctf{background:var(--contact);color:var(--contact-fg);border-radius:12px;margin-top:1.5rem;padding:1.3rem 1.5rem;text-decoration:none;display:block}.directory-ctf:hover{color:var(--contact-fg)}.directory-ctf span{color:var(--contact-muted);font-size:.875rem;display:block}.directory-ctf strong{margin-block:.25rem;font-size:1.45rem;font-weight:800;display:block}.hero-rule{background:var(--accent);height:3px;margin-top:3.3rem;animation:.9s cubic-bezier(.16,1,.3,1) draw-rule}@keyframes draw-rule{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}.section-heading{justify-content:space-between;align-items:end;gap:2rem;margin-bottom:3rem;display:flex}.section-heading p{color:var(--muted);font-size:.95rem;line-height:1.6}.work{padding-block:5.5rem 2rem}.project{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:2rem 4rem;padding-block:2.8rem 3.5rem;scroll-margin-top:7rem;display:grid}.project-info{align-self:center}.project-topline{color:var(--muted);align-items:center;gap:1rem;margin-bottom:.5rem;font-size:.875rem;display:flex}.project-order{color:var(--accent);font-variant-numeric:tabular-nums;font-weight:800}.status{color:var(--accent);font-size:.875rem}.project h3{letter-spacing:-.035em;margin:0 0 .8rem;font-size:clamp(2.4rem,4vw,3.7rem)}.project-summary{max-width:52ch;margin-top:1.1rem;font-size:1.05rem}.project-role{color:var(--muted);margin-top:1.1rem;font-size:.875rem}.tech-list{color:var(--muted);flex-wrap:wrap;gap:.45rem 1rem;margin:1.1rem 0;padding:0;font-size:.875rem;list-style:none;display:flex}.project-links{flex-wrap:wrap;gap:.6rem 1.5rem;margin-top:1.4rem;display:flex}.project-date{color:var(--muted);margin-top:1rem;font-size:.875rem}.project-safetap{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}.project-safetap .project-info{grid-area:1/2}.project-safetap>figure{grid-area:1/1}.screenshot-placeholder{background:var(--surface);min-height:355px;color:var(--muted);border:1px solid var(--line);border-radius:12px;flex-direction:column;justify-content:space-between;align-self:stretch;padding:1.6rem;display:flex;overflow:hidden}.media-top{justify-content:space-between;align-items:center;gap:1rem;font-size:.875rem;display:flex}.screenshot-placeholder svg{fill:none;stroke:currentColor;stroke-width:1.3px;flex-shrink:0;width:27px;height:27px}.media-title{color:var(--accent);letter-spacing:-.04em;overflow-wrap:anywhere;padding-block:2rem;font-size:clamp(2.6rem,4.5vw,4.7rem);font-weight:800;line-height:1.05}.screenshot-placeholder figcaption{border-top:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;gap:.4rem 1rem;padding-top:1rem;font-size:.875rem;display:flex}.project-image{align-self:center}.project-image img{border-radius:12px;width:100%;height:auto;display:block}.project-image>a,.gallery-image>a{display:block}.project-image figcaption{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:.5rem 1rem;margin-top:.8rem;font-size:.875rem;display:flex}.project-story{grid-column:1/-1}details summary{cursor:pointer;border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:1rem;padding:.8rem 0;font-size:.95rem;font-weight:800;list-style:none;display:flex}details summary::-webkit-details-marker{display:none}details summary:hover{color:var(--accent)}.plus{flex-shrink:0;width:16px;height:16px;position:relative}.plus:before,.plus:after{content:"";background:currentColor;width:14px;height:1px;position:absolute;top:7px;left:1px}.plus:after{transform:rotate(90deg)}details[open] .plus:after{transform:rotate(0)}.story-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:2rem 3.5rem;padding-top:2rem;display:grid}.story-grid h4{margin-bottom:.7rem;font-size:1.05rem}.story-grid p{color:var(--muted);max-width:70ch}.cyber-section{background:var(--contact);color:var(--contact-fg);--fg:var(--contact-fg);--muted:var(--contact-muted);--accent:var(--contact-fg);--line:#6980b6;--surface:#182f6c;padding-block:4.5rem}.cyber-layout{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:5rem;display:grid}.cyber-layout h2{margin-bottom:1.5rem}.cyber-subtitle{font-size:.95rem;font-weight:800}.cyber-layout p+p{margin-top:1rem}.cyber-layout p{max-width:65ch}.cyber-layout .text-link{margin-top:1.4rem;display:inline-block}.cyber-right{flex-direction:column;gap:2rem;display:flex}.category-list{grid-template-columns:1fr 1fr;gap:0 1.7rem;display:grid}.category-list span{border-bottom:1px solid var(--line);padding:.8rem 0;font-size:.9rem}.compact{min-height:180px}.compact .media-title{padding-block:1rem;font-size:2.5rem}.small-note{color:var(--muted);font-size:.875rem}.early-work{padding-block:4rem 0}.experiments{padding-block:6rem 4rem}.experiment{border-top:1px solid var(--line);grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr);gap:4rem;padding-block:2rem;display:grid}.experiment h3{letter-spacing:-.02em;margin:.5rem 0 1rem;font-size:1.7rem}.experiment-domain{color:var(--muted);font-size:.875rem}.experiment .status{margin:1rem 0}.experiment details p{color:var(--muted);margin-top:1rem}.experiment .screenshot-placeholder{min-height:230px}.experiment .media-title{font-size:2.1rem}.experiment .text-link{margin-top:.6rem;display:inline-block}.about-section{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:5rem;padding-block:4rem 6rem;display:grid}.about-title h2{max-width:12ch;font-size:clamp(2rem,4vw,3.7rem)}.about-copy p+p{margin-top:1rem}.about-copy h3{margin:2rem 0 .75rem;font-size:1.2rem}.signature{letter-spacing:-.04em;color:var(--accent);margin-top:2rem;font-size:1.75rem;font-weight:800}.skills-section{padding-block:0 6rem}.skill-rows>div{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:2rem;padding-block:1.3rem;display:grid}.skill-rows h3{font-size:1rem;line-height:1.7}.skill-rows p{color:var(--muted)}.experience-section{padding-block:0 6rem}.experience-list{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1rem 3.5rem;display:grid}.experience-list article{border-top:1px solid var(--line);padding:1.2rem 0}.experience-list h3{margin-bottom:.55rem;font-size:1.1rem}.experience-list p{color:var(--muted);font-size:.95rem}.experience-list span{color:var(--muted);font-size:.875rem}.education-section{padding-block:0 6rem}.education-section h2{margin-bottom:2rem}.education-layout{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:4rem;display:grid}.education-layout h3{margin-bottom:.7rem;font-size:1.1rem}.education-layout p{color:var(--muted)}.education-layout .small-note{margin:.6rem 0 2rem}.credential-placeholder{background:var(--surface);border-radius:12px;align-self:start;padding:1.5rem}.planned-learning{border-top:1px solid var(--line);margin-top:1.5rem;padding-top:1.5rem}.planned-learning-intro{margin-bottom:1.25rem;font-size:.875rem}.learning-goals{margin:0 0 1.5rem}.learning-goals>div+div{margin-top:1.25rem}.learning-goals dt{overflow-wrap:anywhere;font-size:.95rem;font-weight:600;line-height:1.5}.learning-goals dd{color:var(--muted);margin:.4rem 0 0;font-size:.9rem;line-height:1.65}.contact-section{background:var(--contact);color:var(--contact-fg);padding-block:4.5rem}.contact-section a:hover{color:var(--contact-muted)}.contact-heading{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);align-items:end;gap:4rem;margin-bottom:2.5rem;display:grid}.contact-heading h2{font-size:clamp(2.2rem,4.3vw,4rem)}.contact-heading p{color:var(--contact-muted);max-width:45ch}.contact-email{letter-spacing:-.025em;overflow-wrap:anywhere;font-size:clamp(1.1rem,3.1vw,2.5rem);font-weight:800}.contact-grid{border-top:1px solid #6980b6;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:4rem;margin-top:3rem;padding-top:2rem;display:grid}.contact-grid h3{margin-bottom:.8rem;font-size:.95rem}.contact-grid a{width:fit-content;color:var(--contact-muted);overflow-wrap:anywhere;margin:.3rem 0;font-size:.95rem;display:block}.contact-section :focus-visible,.cyber-section :focus-visible,.directory-ctf:focus-visible{outline-color:var(--contact-fg)}footer{color:var(--muted);justify-content:space-between;gap:2rem;padding-block:1.5rem;font-size:.875rem;display:flex}.case-study{padding-block:3rem 5rem}.case-study .back-link{margin-bottom:2rem;display:inline-block}.case-study h1{overflow-wrap:anywhere;font-size:clamp(2.7rem,6vw,5.5rem)}.case-study .case-intro{max-width:70ch;margin-block:1.5rem;font-size:1.125rem}.case-study .project-image,.case-study>.screenshot-placeholder{max-width:950px;margin-top:2.5rem}.case-study>.screenshot-placeholder{min-height:340px}.case-study .story-grid{border-top:1px solid var(--line);margin-top:3rem}.case-study .story-grid h2{margin-bottom:.8rem;font-size:1.4rem}.project-gallery{border-top:1px solid var(--line);margin-top:4rem;padding-top:2rem}.project-gallery h2{font-size:clamp(1.6rem,3vw,2.2rem)}.gallery-intro{color:var(--muted);max-width:65ch;margin-block:.75rem 2rem}.gallery-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:2rem;display:grid}.gallery-grid>:only-child{grid-column:1/-1;max-width:950px}.gallery-image{min-width:0}.gallery-image img{border-radius:12px;width:100%;height:auto;display:block}.gallery-image.portrait img{object-fit:contain;background:var(--surface);max-height:600px}.gallery-image figcaption{color:var(--muted);margin-top:.8rem;font-size:.875rem;line-height:1.6}@media (max-width:720px){.gallery-grid{grid-template-columns:1fr}}.case-study .case-contact{border-top:1px solid var(--line);margin-top:3rem;padding-top:1.5rem}.not-found{padding-block:6rem}.not-found p{margin-block:1rem 2rem}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--line);border:2px solid var(--bg);border-radius:8px}@media (max-width:1100px){.wrap{width:calc(100% - 64px)}.hero-composition{grid-template-columns:minmax(0,1.3fr) minmax(0,.9fr);gap:2.5rem}h1{font-size:clamp(3.3rem,6.8vw,5.8rem)}.project{gap:2rem}.cyber-layout,.about-section{gap:3rem}.media-title{font-size:3.2rem}}@media (max-width:800px){.wrap{width:calc(100% - 40px)}.site-header{gap:1rem;min-height:76px}nav{gap:1rem}.hero-composition{grid-template-columns:minmax(0,1fr);gap:2.5rem}h1{font-size:clamp(3.3rem,9vw,5.6rem)}.hero-directory{grid-template-columns:1.4fr 1fr;gap:0 2rem;display:grid}.hero-directory h2{grid-column:1/-1}.directory-entry{padding-block:1rem}.directory-ctf{align-self:center;margin-top:0}.project,.project-safetap{grid-template-columns:minmax(0,1fr);gap:1.5rem}.project-safetap .project-info,.project-safetap>figure{grid-area:auto}.project-story{grid-column:auto}.screenshot-placeholder{min-height:280px}.media-title{font-size:3.5rem}.cyber-layout{grid-template-columns:minmax(0,1fr);gap:2rem}.cyber-right{grid-template-columns:1fr 1fr;align-items:start;display:grid}.category-list{grid-template-columns:1fr}.experiment{gap:2rem}.about-section{gap:2.5rem}.contact-heading{gap:2rem}}@media (max-width:900px){html{scroll-padding-top:10rem}.site-header{flex-wrap:wrap;gap:.7rem;padding-block:.9rem .7rem}.site-header nav{border-top:1px solid var(--line);flex-wrap:wrap;order:3;justify-content:space-between;gap:.25rem;width:100%;padding-top:.2rem}}@media (max-width:580px){html{scroll-padding-top:9rem}.site-header{flex-wrap:wrap;gap:.7rem;padding-block:.9rem .7rem}.site-header nav{border-top:1px solid var(--line);order:3;justify-content:space-between;width:100%;padding-top:.2rem}.theme-button{min-width:110px;padding:.45rem .6rem}.hero{padding-top:1.8rem}.hero-intro{display:block}.location{margin-top:.3rem}.hero-composition{margin-top:1.6rem}h1{font-size:clamp(2.9rem,11.7vw,4.8rem)}.hero-statement>p{font-size:1rem}.hero-actions{flex-wrap:wrap;gap:1.2rem}.hero-directory{display:block}.directory-ctf{margin-top:1.5rem}.hero-rule{margin-top:2rem}.section-heading{margin-bottom:2rem;display:block}.section-heading p{margin-top:1rem}.work{padding-block:4rem 2rem}.project{padding-block:1.6rem 2.5rem}.project h3{font-size:2.8rem}.screenshot-placeholder{min-height:260px;padding:1.25rem}.media-title{font-size:3rem}.story-grid{grid-template-columns:minmax(0,1fr);gap:1.5rem}.cyber-section{padding-block:3rem}.cyber-right{display:flex}.category-list{grid-template-columns:1fr 1fr}.experiments{padding-block:4rem 2rem}.experiment{grid-template-columns:minmax(0,1fr);gap:1.5rem}.experiment .screenshot-placeholder{min-height:200px}.about-section{grid-template-columns:minmax(0,1fr);gap:2rem;padding-block:3rem 4rem}.signature{margin-top:1rem}.skills-section,.experience-section{padding-bottom:4rem}.skill-rows>div{grid-template-columns:minmax(0,1fr);gap:.4rem}.experience-list{grid-template-columns:minmax(0,1fr);gap:0}.education-layout{grid-template-columns:minmax(0,1fr);gap:1rem}.education-section{padding-bottom:4rem}.contact-heading{grid-template-columns:minmax(0,1fr);gap:1.5rem}.contact-section{padding-block:3rem}.contact-grid{grid-template-columns:minmax(0,1fr);gap:2rem}.contact-email{font-size:clamp(1.1rem,5.7vw,1.6rem)}footer{display:block}footer a{margin-top:.8rem;display:inline-block}.case-study{padding-top:2rem}.case-study>.screenshot-placeholder{min-height:240px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.hero-rule{animation:none}.directory-entry strong,nav a:after{transition:none}}@media print{.header-shell,.hero-actions,.hero-directory{display:none}:root{--bg:white;--fg:#111;--muted:#444;--accent:#1741b7}.wrap{width:100%}.hero-composition{display:block}.contact-section,.cyber-section{color:#111;--fg:#111;--muted:#444;--accent:#1741b7;background:#fff}.contact-section p,.contact-section a{color:#111}details .story-grid{display:grid}.screenshot-placeholder{min-height:120px}.project{break-inside:avoid}body{font-size:10pt}}.hero-composition{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr)}.hero-showcase{align-self:center;min-width:0}.hero-showcase h2{letter-spacing:-.02em;margin-bottom:1rem;font-size:1.25rem}.showcase-select{flex-wrap:wrap;gap:.5rem;margin-bottom:1.25rem;display:flex}.showcase-select button{color:var(--muted);border:1px solid var(--line);background:0 0;border-radius:8px;min-height:44px;padding:.6rem 1rem}.showcase-select button[aria-pressed=true]{color:var(--bg);background:var(--fg);border-color:var(--fg)}.showcase-select button:hover{border-color:var(--accent)}.showcase-preview{animation:.45s cubic-bezier(.16,1,.3,1) both showcase-reveal}.showcase-preview img{border-radius:12px;width:100%;height:auto;display:block}.showcase-preview>a{aspect-ratio:16/9;background:var(--surface);border-radius:12px;place-items:center;display:grid;overflow:hidden}.showcase-preview>a img{object-fit:contain;height:100%}.showcase-copy{justify-content:space-between;align-items:flex-start;gap:1.5rem;margin-top:1.25rem;display:flex}.showcase-copy p{max-width:30ch;font-size:1.1rem;line-height:1.5}.showcase-copy a{flex-shrink:0;font-size:.875rem}.showcase-ctf{color:var(--muted);margin-top:1.5rem;font-size:.875rem;display:inline-block}@keyframes showcase-reveal{0%{clip-path:inset(0 0 8%);transform:translateY(6px)}to{clip-path:inset(0);transform:translateY(0)}}.demo-section{padding-block:3rem 6rem}.demo-layout{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);align-items:start;gap:5rem;display:grid}.demo-guide h3{max-width:20ch;margin-bottom:1rem;font-size:clamp(1.5rem,2.5vw,2rem)}.demo-guide p{color:var(--muted);max-width:45ch}.demo-guide ol{color:var(--muted);margin-block:1.5rem 2rem;padding-left:1.2rem}.demo-guide li+li{margin-top:.6rem}.demo-console{background:var(--surface);border:1px solid var(--line);border-radius:12px;min-width:0;padding:1.75rem}.demo-toolbar{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;padding-bottom:1rem;display:flex}.connection-state{align-items:center;gap:.6rem;font-size:.85rem;display:inline-flex}.connection-dot{background:var(--accent);border-radius:50%;width:8px;height:8px}.connection-dot.offline{background:var(--muted)}.control-link{min-height:44px;color:var(--accent);text-underline-offset:.3em;background:0 0;border:0;padding:.4rem 0;font-size:.875rem;text-decoration:underline}.arrival-count{align-items:center;gap:1.5rem;margin-block:1.5rem;display:flex}.arrival-count>span{white-space:nowrap;font-variant-numeric:tabular-nums;font-size:1.1rem}.arrival-count strong{letter-spacing:-.03em;font-size:3.5rem;font-weight:800;line-height:1}.arrival-count p{font-size:.95rem;line-height:1.5}.arrival-count p span{color:var(--muted);margin-top:.3rem;font-size:.8rem;display:block}.scan-controls label,.flag-form label{margin-bottom:.5rem;font-size:.875rem;display:block}.scan-controls select{border:1px solid var(--line);background:var(--bg);width:100%;color:var(--fg);font:inherit;border-radius:8px;padding:.8rem}.scan-button{justify-content:center;align-items:center;gap:.75rem;width:100%;margin-top:.75rem;display:flex}.demo-feedback{min-height:3.5rem;color:var(--fg);margin-block:1.25rem .5rem;font-size:.875rem}.demo-roster{margin:0;padding:0;list-style:none}.demo-roster li{border-top:1px solid var(--line);align-items:center;gap:.75rem;padding-block:.85rem;font-size:.875rem;display:flex}.student-initials{border:1px solid var(--line);border-radius:50%;flex-shrink:0;place-items:center;width:32px;height:32px;font-size:.7rem;display:grid}.roster-status{color:var(--muted);text-align:right;margin-left:auto;font-size:.8rem}.demo-log{border-top:1px solid var(--line);color:var(--muted);margin-top:.5rem;padding-top:.75rem;font-size:.8rem}.demo-log summary,.ctf-hint summary,.ctf-solution summary{cursor:pointer;min-height:44px;padding-block:.6rem}.demo-log ul{padding-left:1.2rem}.demo-log li+li,.demo-reset{margin-top:.5rem}.cyber-section{padding-bottom:3rem}.cyber-playground-shell{background:var(--contact);color:var(--contact-fg);padding-bottom:5rem}.ctf-playground{border-top:1px solid var(--contact-muted);max-width:850px;padding-top:2rem}.ctf-heading h3{margin-bottom:.75rem;font-size:clamp(1.7rem,3vw,2.5rem)}.ctf-heading p{color:var(--contact-muted);max-width:65ch;margin-bottom:1.5rem;font-size:.95rem}.cipher-text{letter-spacing:.05em;overflow-wrap:anywhere;border-block:1px solid var(--contact-muted);margin-block:1.5rem;padding-block:1rem;font:400 clamp(1.05rem,3vw,1.7rem)/1.5 monospace;display:block}.ctf-hint,.ctf-solution{color:var(--contact-muted);font-size:.875rem}.ctf-hint p,.ctf-solution p{max-width:70ch;padding-block:.5rem 1rem}.ctf-playground code{overflow-wrap:anywhere}.flag-form{margin-top:1.25rem}.flag-form label span{color:var(--contact-muted);font-size:.8rem;display:block}.flag-entry{gap:.75rem;display:flex}.flag-entry input{background:var(--contact);min-width:0;color:var(--contact-fg);border:1px solid var(--contact-muted);font:inherit;caret-color:var(--contact-fg);border-radius:8px;flex:1;padding:.85rem 1rem}.flag-entry input::placeholder{color:var(--contact-muted);opacity:1}.ctf-submit{background:var(--contact-fg);color:var(--contact);border:0;border-radius:8px;min-height:44px;padding:.85rem 1.2rem}.ctf-submit:hover{background:var(--contact-muted)}.flag-feedback{min-height:4rem;color:var(--contact-muted);margin-block:1.25rem .25rem;font-size:.875rem}.flag-feedback.solved{color:var(--contact-fg);align-items:flex-start;gap:1rem;display:flex}.flag-feedback.solved svg{flex-shrink:0}.flag-feedback strong{font-size:1.2rem;display:block}.ctf-playground :focus-visible{outline-color:var(--contact-fg)}.case-ctf{background:var(--contact);color:var(--contact-fg);border-radius:12px;margin-top:3rem;padding:2rem}.case-ctf .ctf-playground{border:0;padding-top:0}.progression-section{padding-block:6rem 2rem}.progression-intro{max-width:70ch;color:var(--muted);margin-bottom:2rem;font-size:.875rem}.progression-list{margin:0;padding:0;list-style:none}.progression-list li{border-left:1px solid var(--line);border-top:1px solid var(--line);grid-template-columns:minmax(0,.7fr) minmax(0,1.3fr);gap:3rem;padding:1.75rem 0 1.75rem 2rem;display:grid;position:relative}.progression-list li:before{content:"";background:var(--accent);border-radius:50%;width:9px;height:9px;position:absolute;top:2.25rem;left:-5px}.milestone-label span{color:var(--muted);margin-bottom:.4rem;font-size:.8rem;display:block}.milestone-label a{font-size:1.2rem;font-weight:800}.progression-list h3{margin-bottom:.6rem;font-size:clamp(1.3rem,2vw,1.6rem)}.progression-list p{color:var(--muted);max-width:65ch;font-size:.95rem}.walkthrough{margin-top:3rem}.walkthrough>h2{max-width:24ch;font-size:clamp(1.8rem,3vw,2.7rem)}.walkthrough-intro{color:var(--muted);margin-block:1rem 2rem}.walkthrough-layout{grid-template-columns:minmax(0,1.8fr) minmax(0,1fr);align-items:start;gap:2rem;display:grid}.walkthrough-media{min-width:0}.annotated-image{position:relative}.annotated-image img{border-radius:12px;width:100%;height:auto;display:block}.image-marker{color:#fff;background:#152d72;border:2px solid #fff;border-radius:50%;width:44px;height:44px;font-weight:800;line-height:1;position:absolute;transform:translate(-50%,-50%)}.image-marker[aria-pressed=true]{outline-offset:3px;background:#2555e8;outline:2px solid #152d72}.image-marker:focus-visible{outline-offset:4px;outline:3px solid #152d72}.walkthrough-steps{margin:0 0 1.5rem;padding:0;list-style:none}.walkthrough-steps button{border:0;border-bottom:1px solid var(--line);color:var(--muted);text-align:left;background:0 0;gap:.8rem;width:100%;min-height:44px;padding:1rem 0;font-size:.9rem;display:flex}.walkthrough-steps button span{font-variant-numeric:tabular-nums}.walkthrough-steps button[aria-pressed=true]{color:var(--accent);font-weight:800}.walkthrough-description h3{margin-bottom:.75rem;font-size:1.2rem}.walkthrough-description p{color:var(--muted);font-size:.9rem}.architecture-note{border-top:1px solid var(--line);grid-template-columns:1fr 1fr;gap:3rem;margin-top:2rem;padding-top:2rem;display:grid}.architecture-note h3{margin-bottom:.75rem;font-size:1.2rem}.architecture-note p{color:var(--muted);max-width:65ch;font-size:.95rem}.case-study .demo-section{width:100%;padding-block:5rem 1rem}.case-study .demo-layout{gap:3rem}@media (max-width:1100px){.demo-layout{gap:3rem}.hero-composition{gap:2rem}}@media (max-width:900px){html{scroll-padding-top:9rem}.site-header{flex-wrap:wrap;gap:.7rem;padding-block:.9rem .7rem}.site-header nav{border-top:1px solid var(--line);order:3;justify-content:space-between;gap:clamp(.4rem,2vw,1rem);width:100%;padding-top:.2rem}.hero-composition{grid-template-columns:1fr}.hero-showcase{max-width:650px;margin-top:1rem}.demo-layout,.walkthrough-layout{grid-template-columns:1fr;gap:2rem}.demo-guide h3{max-width:35ch}.demo-console{width:100%;max-width:700px}.walkthrough-notes{grid-template-columns:1fr 1fr;gap:2rem;display:grid}}@media (max-width:600px){.showcase-copy{flex-direction:column;gap:.75rem}.demo-console{padding:1.1rem}.arrival-count{gap:1rem}.arrival-count strong{font-size:2.8rem}.scan-button{padding-inline:.6rem;font-size:.875rem}.demo-roster li{gap:.5rem;font-size:.8rem}.roster-status{font-size:.7rem}.flag-entry{flex-direction:column}.progression-list li{grid-template-columns:1fr;gap:1rem;padding-left:1.25rem}.walkthrough-notes,.architecture-note{grid-template-columns:1fr;gap:1.5rem}.walkthrough-steps{margin-bottom:0}.case-ctf{padding:1.25rem}}@media (prefers-reduced-motion:reduce){.showcase-preview{animation:none}}@media print{.demo-section,.ctf-playground,.cyber-playground-shell,.image-marker,.showcase-select{display:none}}.native-showcase,.native-walkthrough{border:0;min-width:0;margin:0;padding:0}.native-showcase legend{margin-bottom:1rem;padding:0;font-size:1.25rem;font-weight:800;line-height:1.4}.native-choice,.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.showcase-option{margin:0 .5rem 1.25rem 0;display:inline-block}.showcase-option label{border:1px solid var(--line);min-height:44px;color:var(--muted);cursor:pointer;border-radius:8px;align-items:center;padding:.6rem 1rem;display:inline-flex}.native-choice:checked+label{background:var(--fg);color:var(--bg);border-color:var(--fg)}.native-choice:focus-visible+label{outline:3px solid var(--accent);outline-offset:4px}.showcase-option label:hover{border-color:var(--accent)}.showcase-image{aspect-ratio:16/9;background:var(--surface);border-radius:12px;place-items:center;display:grid;overflow:hidden}.showcase-image img{object-fit:contain;width:100%;height:100%;display:block}.showcase-panel{animation:.35s cubic-bezier(.16,1,.3,1) showcase-reveal}.walkthrough-option{margin:0 .6rem 1rem 0;display:inline-block}.walkthrough-option label{border:1px solid var(--line);cursor:pointer;min-height:44px;color:var(--muted);border-radius:8px;align-items:center;gap:.7rem;padding:.75rem 1rem;display:inline-flex}.walkthrough-option label span{font-variant-numeric:tabular-nums;font-size:.85rem}.walkthrough-panels{margin-top:1rem}.walkthrough-panel{grid-template-columns:minmax(0,1.8fr) minmax(0,1fr);align-items:start;gap:2rem;display:grid}.walkthrough-position{color:var(--muted);margin-bottom:.75rem;font-size:.875rem;display:block}.image-marker{place-items:center;font-size:1rem;display:grid}.active-marker{outline-offset:3px;background:#2555e8;outline:2px solid #152d72}.marker-link{cursor:pointer}@supports selector(:has(*)){.showcase-panel,.walkthrough-panel{display:none}:is(.native-showcase:has(.showcase-option:first-of-type input:checked) .showcase-panel:first-child,.native-showcase:has(.showcase-option:nth-of-type(2) input:checked) .showcase-panel:nth-child(2),.native-showcase:has(.showcase-option:nth-of-type(3) input:checked) .showcase-panel:nth-child(3)){display:block}:is(.native-walkthrough:has(.walkthrough-option:first-of-type input:checked) .walkthrough-panel:first-child,.native-walkthrough:has(.walkthrough-option:nth-of-type(2) input:checked) .walkthrough-panel:nth-child(2),.native-walkthrough:has(.walkthrough-option:nth-of-type(3) input:checked) .walkthrough-panel:nth-child(3)){display:grid}}.demo-flow{counter-reset:flow;flex-direction:column;margin-block:1.75rem;display:flex}.demo-flow span{counter-increment:flow;border-top:1px solid var(--line);align-items:center;gap:1rem;padding-block:.8rem;font-size:.95rem;display:flex}.demo-flow span:before{content:counter(flow, decimal-leading-zero);color:var(--accent);font-variant-numeric:tabular-nums}.demo-explainer{margin-bottom:1.5rem;font-size:.95rem}.connection-button{border:1px solid var(--line);background:var(--bg);min-height:44px;color:var(--fg);border-radius:8px;padding:.55rem .9rem;font-size:.875rem}.connection-button:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.roster-instruction{color:var(--muted);margin-block:1.5rem .6rem;font-size:.875rem}.roster-name{flex:1;min-width:0;font-size:.95rem}.roster-name>span{color:var(--muted);margin-top:.15rem;font-size:.8rem;display:block}.demo-roster li{gap:1rem;padding-block:1rem}.student-check-in{background:var(--fg);color:var(--bg);border:0;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;gap:.4rem;min-height:44px;padding:.55rem .8rem;font-size:.875rem;display:inline-flex}.student-check-in:hover:not(:disabled){background:var(--accent)}.student-check-in:disabled{cursor:default;color:var(--muted);background:0 0}.demo-roster [data-status=queued] .roster-name>span{color:var(--fg)}.demo-feedback{border-top:1px solid var(--line);min-height:4.5rem;margin:0;padding-block:1rem}.demo-bottom{border-top:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:start;gap:1rem;display:flex}.demo-log{border:0;flex:1;margin:0;padding:0}.demo-log ul{max-width:45ch}.demo-reset{margin-top:0}button:disabled{cursor:default}.connection-button:disabled,.control-link:disabled{opacity:.55}.ctf-submit:disabled{opacity:.6;cursor:default}.flag-entry input:disabled{opacity:.75}.ctf-reset{border:1px solid var(--contact-muted);color:var(--contact-fg);background:0 0;border-radius:8px;min-height:44px;margin-bottom:1rem;padding:.6rem 1rem}.cyber-right{display:block}.cyber-right .category-list{flex-wrap:wrap;gap:.5rem 1.25rem;margin-bottom:2rem;display:flex}.cyber-right .category-list span{padding-block:.4rem;font-size:.85rem}.cyber-right .ctf-playground{width:100%}.cyber-right .ctf-heading h3{font-size:clamp(1.5rem,2.8vw,2rem)}@media (max-width:900px){.walkthrough-panel{grid-template-columns:1fr}.cyber-right{display:block}}@media (max-width:580px){.demo-roster li{gap:.6rem}.roster-name{font-size:.875rem}.student-check-in{padding-inline:.6rem;font-size:.8rem}.student-initials{display:none}.walkthrough-option{margin:0 0 .5rem;display:block}.walkthrough-option label{width:100%}}@media (prefers-reduced-motion:reduce){.showcase-panel{animation:none}}@media print{.native-choice,.showcase-option,.walkthrough-option,.demo-section,.ctf-playground{display:none}.showcase-panel:first-child{display:block}.walkthrough-panel:first-child{display:grid}}.cyber-evidence{margin-top:1.75rem}.cyber-evidence .project-image{width:100%}.experiment .project-image img{object-fit:contain;background:var(--surface);max-height:440px}.case-study>.project-image img{object-fit:contain;background:var(--surface);max-height:min(75vh,800px)}a[data-image-viewer]{cursor:zoom-in}.annotated-image>a{display:block}.image-viewer{color:#f7f9ff;background:0 0;border:0;width:100%;max-width:none;height:100dvh;max-height:none;margin:0;padding:clamp(1rem,3vw,2.5rem);position:fixed;inset:0;overflow:auto}.image-viewer::backdrop{background:#080e1cf0}.image-viewer[open]{align-items:center;display:grid}.image-viewer-sheet{width:min(100%,1600px);min-width:0;margin-inline:auto}.image-viewer-toolbar{justify-content:space-between;align-items:center;gap:1.5rem;margin-bottom:1rem;display:flex}.image-viewer-toolbar h2{letter-spacing:0;overflow-wrap:anywhere;min-width:0;max-width:65ch;font-size:clamp(1rem,2vw,1.35rem);font-weight:400;line-height:1.5}.image-viewer-actions{flex-shrink:0;gap:.75rem;display:flex}.image-viewer button{color:#f7f9ff;background:#15213b;border:1px solid #7384a2;border-radius:8px;min-height:44px;padding:.55rem 1rem;font-size:.875rem}.image-viewer button:hover:not(:disabled){background:#263859}.image-viewer button:disabled{opacity:.5}.image-viewer-close{justify-content:center;align-items:center;gap:.5rem;display:inline-flex}.image-viewer-canvas{place-items:center;min-height:160px;max-height:calc(100dvh - 180px);display:grid;position:relative}.image-viewer-canvas img{object-fit:contain;width:auto;max-width:100%;height:auto;max-height:calc(100dvh - 180px);display:block}.image-viewer-canvas img.image-loading{opacity:0}.image-viewer-status{place-items:center;display:grid;position:absolute;inset:0}.image-viewer-error{text-align:center;padding:3rem}.image-viewer-error button{margin-top:1rem}.image-viewer :focus-visible{outline-offset:4px;outline:3px solid #cbd9ff}.image-viewer.is-zoomed .image-viewer-canvas{display:block;overflow:auto}.image-viewer.is-zoomed .image-viewer-canvas img{max-width:none;max-height:none}@media (max-width:600px){.image-viewer-toolbar{flex-direction:column-reverse;align-items:stretch;gap:.75rem}.image-viewer-actions{justify-content:flex-end}.image-viewer-toolbar h2{font-size:.95rem}.image-viewer-canvas,.image-viewer-canvas img{max-height:calc(100dvh - 220px)}}@media print{.image-viewer{display:none!important}}.project-learning{border-top:1px solid var(--line);margin-block:1.5rem;padding-top:1rem}.project-learning h3,.project-learning h4{letter-spacing:0;margin-bottom:.6rem;font-size:1rem}.project-learning p{color:var(--muted);max-width:65ch;font-size:.95rem}.project-lessons{border-top:1px solid var(--line);margin-top:3.5rem;padding-top:2rem}.project-lessons h2{max-width:28ch;font-size:clamp(1.8rem,3vw,2.7rem)}.lessons-intro{color:var(--muted);max-width:65ch;margin-block:1rem 2rem}.project-lessons ul{grid-template-columns:repeat(2,minmax(0,1fr));gap:2rem 3rem;margin:0;padding:0;list-style:none;display:grid}.project-lessons li{min-width:0}.project-lessons h3{margin-bottom:.75rem;font-size:1.2rem}.project-lessons li p{color:var(--muted);max-width:65ch}@media (max-width:720px){.project-lessons ul{grid-template-columns:1fr}}.security-history{border-top:1px solid var(--line);margin-top:3.5rem;padding-top:2rem}.security-history h2{font-size:clamp(1.8rem,3vw,2.7rem)}.security-history ol{margin:0;padding:0;list-style:none}.security-history li{border-top:1px solid var(--line);max-width:75ch;padding-block:1.5rem}.security-history h3{margin-block:.6rem .75rem;font-size:1.2rem}.security-history p{color:var(--muted)}.security-entry-meta,.security-validation{font-size:.875rem}.security-entry-meta{margin-bottom:.75rem}.security-validation{margin-top:.75rem}.security-history li>a{margin-top:.75rem;display:inline-block}.security-updates{padding-block:0 5rem}.security-projects{grid-template-columns:repeat(2,minmax(0,1fr));gap:3rem;display:grid}.security-projects article{min-width:0}.security-projects h3{margin-bottom:1rem;font-size:1.6rem}.security-projects ul{margin:0;padding:0;list-style:none}.security-projects li{border-top:1px solid var(--line);padding-block:1.25rem}.security-projects h4{margin-bottom:.6rem;font-size:1.1rem}.security-projects p{color:var(--muted)}.security-projects .text-link{margin-top:1rem;display:inline-block}@media (max-width:720px){.security-projects{grid-template-columns:1fr;gap:2rem}}
