:root{--paper:#141916;--ink:#eeeee5;--orange:#d8e95b;--line:#3e473e}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:Manrope,Arial,sans-serif}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}a,button,summary{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible{outline:3px solid var(--orange);outline-offset:5px}header{height:106px;margin:0 4%;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);position:relative;z-index:5}.brand{display:flex;gap:13px;align-items:center;font-size:12px;font-weight:800;line-height:1.35;letter-spacing:1.5px}.mark{font-size:47px;letter-spacing:-5px;margin-right:5px;line-height:1}.header-note,.eyebrow,.tags,.scene-caption,.scene-tools,.small-note,.dock span,.certificate>span,.contact-row small{font-family:'DM Mono',monospace;font-size:12px;letter-spacing:.04em}.header-note{color:var(--muted)}.contact-link{font-size:14px;font-weight:700;display:flex;gap:35px;align-items:center}.contact-link span{background:var(--ink);color:white;display:grid;place-items:center;width:37px;height:37px;border-radius:50%;font-size:20px}#experience{height:calc(100svh - 198px);min-height:570px;position:relative;overflow:hidden}.intro{position:absolute;left:4%;top:10%;width:42%;z-index:2;pointer-events:none}.intro a{pointer-events:auto}.eyebrow{color:var(--muted);margin:0 0 25px;font-size:11px}h1{font-size:clamp(48px,5.5vw,86px);font-weight:500;letter-spacing:-.07em;line-height:1.02;margin:0 0 30px}h1 em{font-style:normal;color:var(--orange)}.lead{font-size:18px;font-weight:600;line-height:1.6;margin:0 0 12px}.intro-copy{font-size:14px;line-height:1.65;color:var(--muted)}.explore{margin-top:22px;display:inline-flex;align-items:center;gap:42px;background:var(--ink);padding:17px 22px;color:white;font-size:14px}.explore span{color:var(--on);font-size:23px}.small-note{display:block;max-width:275px;font-size:11px;line-height:1.7;color:var(--muted);margin-top:15px}#scene{position:absolute;inset:0 0 0 32%;touch-action:pan-y}canvas{display:block;width:100%;height:100%;outline:none}#labels{position:absolute;inset:0;pointer-events:none}.hotspot{position:absolute;pointer-events:auto;display:flex;align-items:center;gap:9px;padding:6px 11px 6px 6px;border:1px solid var(--line);background:var(--panel);border-radius:24px;white-space:nowrap;font-size:12px;font-weight:600;transform:translate(-50%,-50%);transition:background .2s}.hotspot b{width:25px;height:25px;display:grid;place-items:center;border-radius:50%;background:var(--ink);color:#fff;font-family:'DM Mono',monospace;font-size:10px}.hotspot:hover,.hotspot.selected{background:#fff;border-color:var(--orange)}.hotspot:hover b,.hotspot.selected b{background:var(--orange)}.scene-caption{position:absolute;bottom:26px;left:45%;right:4%;display:flex;justify-content:space-between;gap:16px;font-size:10px;color:var(--muted)}.scene-caption span+span{font-family:Manrope,sans-serif;letter-spacing:0}.scene-tools{position:absolute;bottom:25px;left:4%;display:flex;gap:15px}.scene-tools button{border:0;border-bottom:1px solid var(--line);background:none;padding:3px 0;font-size:11px}.scene-tools button[aria-pressed=true]{color:var(--orange)}.dock{margin:0 4%;border-top:1px solid var(--line);height:92px;display:flex;align-items:center;justify-content:space-between;gap:16px;position:relative;z-index:4}.dock a{font-size:14px;color:var(--muted);display:flex;gap:12px;align-items:center;padding:16px 0;white-space:nowrap}.dock span{font-size:10px}.dock .active{color:var(--ink);font-weight:800}.dock .active span{color:var(--orange)}#loading{position:absolute;inset:0;display:grid;place-items:center;font-size:14px}#contenus{display:none}.focused #contenus{display:block;position:fixed;right:0;top:106px;bottom:92px;width:43%;z-index:6;background:var(--panel);overflow:auto;border-left:1px solid var(--line);padding:0 42px 42px}.panel-bar{position:sticky;top:0;z-index:2;display:flex;justify-content:space-between;align-items:center;padding:20px 0;background:var(--panel);border-bottom:1px solid var(--line);font-size:12px;margin-bottom:32px}.panel-bar a{font-size:12px;display:flex;align-items:center;gap:13px}.panel-bar a span{font-size:26px}.content-section{display:none;scroll-margin-top:90px}.content-section.current{display:block}.content-section h2{font-size:clamp(36px,3.8vw,60px);font-weight:500;line-height:1.03;letter-spacing:-.06em;margin:0 0 25px}.content-section p,.content-section li{font-size:16px;line-height:1.75;color:var(--muted)}.content-section h3{font-size:21px;letter-spacing:-.03em;font-weight:600;line-height:1.4}.content-section article{padding:25px 0;border-top:1px solid var(--line)}details{border-top:1px solid var(--line)}summary{padding:24px 28px 24px 0;font-size:19px;letter-spacing:-.025em;cursor:pointer;list-style:none;position:relative}summary:after{content:'+';position:absolute;right:0;top:40px;font-size:24px}details[open] summary:after{content:'−'}summary span{display:block;font-family:'DM Mono',monospace;font-size:10px;letter-spacing:.05em;color:var(--muted);margin-bottom:9px}.detail{padding-bottom:25px}.detail img{width:100%;max-height:280px;object-fit:cover}.tags{font-size:11px!important;color:var(--orange)!important;line-height:1.7}.text-link{border-bottom:1px solid var(--orange);font-size:14px}.portrait{width:100%;max-height:300px;object-fit:cover;object-position:50% 30%;filter:grayscale(1)}.certificate{display:block;border-top:1px solid var(--line);padding:26px 0}.certificate>span{font-size:10px;color:var(--muted)}.certificate b{font-size:13px;color:var(--orange)}.contact-row{display:block;font-size:clamp(16px,1.8vw,25px);letter-spacing:-.03em;padding:28px 0;border-bottom:1px solid var(--line);overflow-wrap:anywhere}.contact-row small{display:block;font-size:10px;letter-spacing:.05em;color:var(--muted);margin-bottom:10px}.contact-foot{margin-top:40px}.focused .intro{display:none}.focused #scene{left:0;right:43%}.focused .scene-caption{left:4%;right:47%;bottom:70px}.focused .scene-caption span+span{display:none}.focused .scene-tools{bottom:25px}.focused .dock{position:fixed;bottom:0;left:0;right:0;background:var(--paper)}.reading #experience{display:none}.reading #contenus{position:static;display:block;width:auto;max-width:900px;margin:0 auto;padding:30px 30px 100px;border:0;background:transparent;overflow:visible}.reading .content-section{display:block;padding:35px 0 60px;border-bottom:1px solid var(--line)}.reading .panel-bar{position:static;background:transparent}.reading .dock{position:sticky;top:0;background:var(--paper);flex-wrap:wrap;height:auto}.reading .scene-tools{display:flex}.skip{position:fixed;top:-100px;left:20px;z-index:20;background:white;padding:15px}.skip:focus{top:10px}@media(min-width:1500px){.intro{top:13%}}@media(max-width:1000px){.header-note{display:none}.scene-caption span+span{display:none}.intro{width:45%}h1{font-size:58px}.focused #contenus{width:49%;padding:0 25px 30px}.focused #scene{right:49%}.dock{gap:10px}.dock a{font-size:12px;gap:6px}}@media(max-width:650px){header{height:78px;margin:0 5%}.brand{font-size:10px}.mark{font-size:38px}.contact-link{font-size:12px;gap:10px}.contact-link span{width:30px;height:30px}#experience{height:auto;min-height:900px}.intro{position:relative;left:auto;top:auto;margin:30px 5% 0;width:90%}h1{font-size:56px;line-height:1;letter-spacing:-.07em;margin-bottom:18px}.eyebrow{font-size:9px;margin-bottom:18px}.lead{font-size:16px}.intro-copy{font-size:13px}.explore{margin-top:8px;padding:12px 17px}.small-note{display:none}#scene{inset:420px 0 70px}.scene-caption{left:5%;bottom:57px;font-size:9px}.scene-tools{left:5%;bottom:22px}.dock{margin:0 5%;height:auto;min-height:85px;flex-wrap:wrap;justify-content:flex-start;gap:0 18px;padding:12px 0}.dock a{padding:7px 0;font-size:12px}.dock a:first-child{width:100%}.focused #experience{min-height:290px;height:290px}.focused #scene{inset:0}.focused .scene-caption{display:none}.focused .scene-tools{bottom:10px;background:var(--paper);padding:3px 5px}.focused #contenus{position:relative;top:auto;bottom:auto;width:100%;padding:0 6% 30px;border-left:0}.focused .dock{position:relative;bottom:auto}.focused #labels{display:none}.content-section h2{font-size:46px}.panel-bar{top:0}.reading .dock{position:relative}.reading #contenus{padding:20px}.contact-row{font-size:21px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}

@media(max-width:650px){.intro{margin-top:24px}h1{font-size:48px}.intro-copy{margin:8px 0}.lead{margin-bottom:5px}.explore{margin-top:4px}#scene{top:370px}#experience{min-height:840px}.hotspot{font-size:11px;padding-right:8px;gap:5px}.hotspot b{width:23px;height:23px}}

.contact-link span,.explore{background:var(--orange);color:var(--on)}.hotspot b{background:var(--orange);color:var(--on)}.hotspot:hover,.hotspot.selected{background:var(--panel)}.hotspot:hover b,.hotspot.selected b{background:var(--orange)}.skip{background:var(--panel);color:var(--ink)}.portrait{filter:grayscale(1) contrast(1.08)}.explore:hover{background:#e5f583}.contact-link:hover{color:var(--orange)}

:root{--muted:#a3ada2;--panel:#1c231e;--on:#141916}.explore:hover{background:var(--orange);filter:brightness(1.1)}header{z-index:12}.header-actions{display:flex;align-items:center;gap:28px}#theme-picker{position:relative}#theme-trigger{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:7px;background:var(--panel);padding:9px 12px;font-size:13px}.theme-icon{color:var(--orange);font-weight:700}#theme-menu{position:absolute;right:0;top:calc(100% + 10px);width:248px;max-height:min(490px,70svh);overflow:auto;background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:12px;padding:7px;box-shadow:0 15px 45px #0005}#theme-menu[hidden]{display:none}#theme-menu fieldset{border:0;margin:0;padding:0}#theme-menu legend{padding:10px;font-size:12px;color:var(--muted)}.theme-option{display:flex;position:relative;align-items:center;gap:12px;padding:8px 10px;border-radius:7px;cursor:pointer;font-size:14px}.theme-option:hover,.theme-option:focus-within{background:color-mix(in srgb,var(--ink) 9%,transparent)}.theme-option:focus-within{outline:2px solid var(--orange);outline-offset:-2px}.theme-option input{position:absolute;opacity:0;width:1px;height:1px}.theme-swatch{height:30px;width:30px;display:grid;place-items:center;border-radius:7px;border:1px solid #ffffff20;font-weight:700}.theme-check{margin-left:auto;visibility:hidden}.theme-option:has(input:checked) .theme-check{visibility:visible}.theme-option:has(input:checked){background:color-mix(in srgb,var(--ink) 6%,transparent)}@media(max-width:650px){.header-actions{gap:12px}#theme-name{display:none}#theme-trigger{padding:8px;gap:5px}.contact-link{font-size:11px;gap:7px}#theme-menu{position:fixed;right:5%;top:70px;width:min(270px,90vw)}.brand{gap:8px;letter-spacing:1px}.header-note{display:none}}

:root{--detail-width:clamp(360px,36vw,520px)}
.focused:not(.reading) #contenus{right:24px;top:122px;bottom:auto;width:var(--detail-width);max-height:calc(100svh - 230px);padding:0 24px 20px;border:1px solid var(--line);border-radius:8px;scrollbar-gutter:stable;overscroll-behavior:contain;outline:none}
.focused:not(.reading) #scene{right:calc(var(--detail-width) + 36px)}
.focused:not(.reading) .scene-caption{right:calc(var(--detail-width) + 60px)}
.focused:not(.reading) .panel-bar{padding:10px 0;margin-bottom:18px;font-size:12px;gap:12px}
.focused:not(.reading) .panel-bar a{min-height:30px;gap:9px}
.focused:not(.reading) .content-section>.eyebrow{display:none}
.focused:not(.reading) .content-section h2{font-size:28px;line-height:1.2;letter-spacing:-.035em;margin:0 0 10px}
.focused:not(.reading) .content-section p,.focused:not(.reading) .content-section li{font-size:16px;line-height:1.5;margin:8px 0 14px}
.focused:not(.reading) .content-section h3{font-size:17px;line-height:1.35;margin:5px 0 8px}
.focused:not(.reading) .content-section article{padding:13px 0}
.focused:not(.reading) summary{font-size:16px;line-height:1.35;padding:12px 25px 12px 0}
.focused:not(.reading) summary span{font-size:11px;margin-bottom:4px}
.focused:not(.reading) summary:after{top:50%;transform:translateY(-50%);font-size:21px}
.focused:not(.reading) .detail{padding-bottom:14px}
.focused:not(.reading) .detail img{max-height:170px}
.focused:not(.reading) .portrait{float:right;width:76px;height:90px;margin:0 0 12px 16px;border-radius:4px}
.focused:not(.reading) #parcours article{clear:both}
.focused:not(.reading) .certificate{padding:12px 0}
.focused:not(.reading) .certificate>span{display:none}
.focused:not(.reading) .certificate h3{font-size:16px;margin:0 0 5px}
.focused:not(.reading) .certificate b{font-size:12px;font-weight:500}
.focused:not(.reading) .contact-row{font-size:18px;line-height:1.4;padding:13px 0;letter-spacing:0}
.focused:not(.reading) .contact-row small{font-size:11px;margin-bottom:4px}
.focused:not(.reading) .contact-foot{margin:16px 0 0;font-size:13px}
@media(max-width:650px){
 .focused:not(.reading) #contenus{position:relative;right:auto;top:auto;bottom:auto;width:auto;max-height:none;margin:0 4% 24px;padding:0 18px 20px}
 .focused:not(.reading) #scene{inset:0}
 .focused:not(.reading) #experience{height:230px;min-height:230px}
 .focused:not(.reading) .panel-bar{margin-bottom:14px}
 .focused:not(.reading) .content-section h2{font-size:25px}
}

body:not(.focused):not(.reading) #experience{height:auto;min-height:calc(100svh - 198px);overflow:visible;display:grid;grid-template-columns:43% 57%;align-items:start}
body:not(.focused):not(.reading) .intro{position:relative;top:auto;left:auto;width:auto;margin:0;padding:clamp(24px,4vh,48px) 0 88px 9.3%;}
body:not(.focused):not(.reading) h1{font-size:clamp(40px,min(5.3vw,8vh),80px);line-height:1.04;margin-bottom:20px}
body:not(.focused):not(.reading) .intro .eyebrow{margin-bottom:20px}
body:not(.focused):not(.reading) .intro-copy{margin:8px 0}
body:not(.focused):not(.reading) .explore{margin-top:12px;padding:12px 20px}
body:not(.focused):not(.reading) .small-note{margin-top:10px}
body:not(.focused):not(.reading) #scene{inset:0 0 55px 39%;overflow:hidden;min-width:0}
body:not(.focused):not(.reading) .scene-tools{bottom:24px;flex-wrap:wrap}
body:not(.focused):not(.reading) .scene-caption{bottom:27px}
@media(min-width:651px) and (max-height:740px){
 header{height:82px}
 body:not(.focused):not(.reading) #experience{min-height:calc(100svh - 158px)}
 .dock{height:76px}
 .focused:not(.reading) #contenus{top:98px;max-height:calc(100svh - 192px)}
 .focused .dock{height:76px}
}
@media(max-width:900px) and (min-width:651px){
 body:not(.focused):not(.reading) #experience{grid-template-columns:48% 52%}
 body:not(.focused):not(.reading) .intro{padding-left:8.3%}
 body:not(.focused):not(.reading) #scene{left:44%}
 body:not(.focused):not(.reading) h1{font-size:clamp(36px,5vw,48px)}
 .scene-caption{font-size:9px}
}
@media(max-width:650px){
 body:not(.focused):not(.reading) #experience{display:flex;flex-direction:column;min-height:0;height:auto}
 body:not(.focused):not(.reading) .intro{margin:0;padding:24px 5% 8px;width:100%}
 body:not(.focused):not(.reading) h1{font-size:clamp(32px,10.8vw,48px);margin-bottom:15px;overflow-wrap:normal}
 body:not(.focused):not(.reading) .intro .eyebrow{margin-bottom:15px}
 body:not(.focused):not(.reading) .intro-copy{margin:6px 0}
 body:not(.focused):not(.reading) .explore{margin-top:8px}
 body:not(.focused):not(.reading) #scene{position:relative;inset:auto;width:100%;height:clamp(290px,44svh,390px);flex:none;order:1}
 body:not(.focused):not(.reading) .scene-caption{position:relative;inset:auto;margin:0 5% 12px;order:2}
 body:not(.focused):not(.reading) .scene-tools{position:relative;inset:auto;margin:0 5% 20px;order:3}
 body:not(.focused):not(.reading) .dock{margin-top:0}
}

.dock,.focused .dock,.reading .dock{display:none}
body:not(.focused):not(.reading) #experience{min-height:calc(100svh - 106px)}
.focused:not(.reading) #experience{height:calc(100svh - 106px);min-height:480px}
.focused:not(.reading) #contenus{max-height:calc(100svh - 146px)}
.focused #labels{display:block}
.hotspot.selected{border-color:var(--orange);box-shadow:0 0 0 1px var(--orange)}
@media(min-width:651px) and (max-height:740px){
 body:not(.focused):not(.reading) #experience,.focused:not(.reading) #experience{min-height:calc(100svh - 82px);height:auto}
 .focused:not(.reading) #contenus{max-height:calc(100svh - 122px)}
}
@media(max-width:650px){
 body:not(.focused):not(.reading) #experience{min-height:0}
 .focused:not(.reading) #experience{height:330px;min-height:330px}
 .focused:not(.reading) #contenus{max-height:none}
}

.object-controls{position:absolute;z-index:3;bottom:8px;left:0;right:0;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}
.object-controls p{font-size:12px;color:var(--muted);margin:0;padding:3px 8px;background:var(--paper);border-radius:3px}
.manipulation{display:flex;gap:3px;padding:5px;background:var(--panel);border:1px solid var(--line);border-radius:9px;pointer-events:auto;box-shadow:0 4px 14px #0002}
.manipulation button{border:0;background:transparent;min-width:35px;min-height:36px;padding:6px 9px;border-radius:5px;font-size:13px}
.manipulation button:hover{background:color-mix(in srgb,var(--ink) 10%,transparent)}
.manipulation button[aria-pressed=true]{background:var(--orange);color:var(--on)}
#scene canvas{touch-action:none;cursor:grab}
#scene canvas:focus-visible{outline:2px solid var(--orange);outline-offset:-4px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.focused:not(.reading) #scene{bottom:58px}
@media(max-width:650px){
 body:not(.focused):not(.reading) #scene{height:420px}
 .focused:not(.reading) #experience{height:440px;min-height:440px}
 .focused:not(.reading) #scene{bottom:40px}
 .manipulation button{min-width:32px;min-height:40px;padding:6px 7px;font-size:12px}
 .object-controls p{font-size:11px}
}
.manipulation{max-width:calc(100% - 16px);flex-wrap:wrap;justify-content:center}

#scene canvas{touch-action:pan-y;cursor:default}
.focused:not(.reading) #scene{bottom:40px}
@media(max-width:650px){
 body:not(.focused):not(.reading) #scene{height:360px}
 .focused:not(.reading) #experience{height:380px;min-height:380px}
}
