:root{--paper:#e9e8e3;--ink:#252d32;--orange:#ed6338;--screen:#102424;--light:#eef3df;--muted:#abc1b5;--green:#d5ed95;--line:#3d5350;font-family:Arial,Helvetica,sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none}*{box-sizing:border-box}body{margin:0}a{color:inherit}button,input,textarea{font:inherit}button,a,input,textarea,summary{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}button{cursor:pointer}a{text-decoration:none}button:focus-visible,a:focus-visible,summary:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--orange);outline-offset:4px}.skip{position:fixed;top:-80px;left:20px;z-index:100;background:var(--green);padding:15px}.skip:focus{top:10px}.topbar{max-width:1500px;margin:auto;padding:28px 4.5%;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #c9cbc5}.wordmark{font-size:18px;font-weight:700;letter-spacing:-.5px}.wordmark span{display:block;font-size:12px;font-weight:400;letter-spacing:1.6px;margin-top:8px}.top-contact{font-size:15px;display:flex;gap:24px;align-items:center}.top-contact span{font-size:24px}main{max-width:1450px;margin:auto;display:grid;grid-template-columns:270px minmax(0,1fr);align-items:center;padding:0 2% 0 5%;gap:5px}.intro{padding:50px 0}.eyebrow{font-family:monospace;font-size:12px;letter-spacing:1.7px;margin-bottom:27px}h1{font-size:clamp(48px,5.4vw,82px);font-weight:500;letter-spacing:-5px;line-height:.92;margin:0 0 32px;position:relative}h1 span{font-weight:750}h1 i{font-style:normal;color:var(--orange);font-size:80px;line-height:.5;position:absolute;bottom:0}.pitch{font-size:21px;line-height:1.45;letter-spacing:-.5px}.location{font-size:14px;line-height:1.7;color:#66716f;margin:25px 0}.discover{font-size:14px;display:inline-flex;align-items:center;gap:10px;border-bottom:1px solid #a4aaa4;padding-bottom:9px}.discover:hover{color:#a4381a}.small-note{font-size:12px;line-height:1.6;color:#738079;margin-top:58px}.terminal-column{min-width:0}.terminal{position:relative;width:100%;aspect-ratio:1}.machine{display:block;width:100%;height:100%;object-fit:contain}.screen{position:absolute;left:16%;top:12%;width:68%;height:48%;background:radial-gradient(ellipse at 50% 0,#1b3633,var(--screen) 80%);color:var(--light);border-radius:18px;overflow:hidden;display:flex;flex-direction:column;box-shadow:inset 0 0 20px #0007;isolation:isolate}.statusbar{display:flex;align-items:center;justify-content:space-between;gap:8px;font-family:monospace;font-size:12px;letter-spacing:.7px;padding:12px 19px 8px;border-bottom:1px solid var(--line);flex-shrink:0}.connection{margin-left:auto;font-size:11px;color:var(--muted)}.connection b{color:var(--green);margin-right:5px;font-weight:400}#expand{background:none;border:0;color:var(--light);font-size:23px;line-height:1;padding:0 0 0 8px}.screen-nav{display:flex;gap:4px;flex-wrap:wrap;padding:7px 15px;border-bottom:1px solid var(--line);flex-shrink:0}.screen-nav a{font-size:12px;font-family:monospace;padding:5px 6px;color:var(--muted);border-radius:3px}.screen-nav a[aria-current=page]{background:var(--green);color:#102424}.screen-nav a:hover{background:#35504a;color:#fff}.viewport{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#648477 transparent;padding:21px 25px 20px}.viewport article{animation:appear .2s ease}.screen-kicker{font:12px/1.5 monospace;letter-spacing:1px;color:var(--green);margin:0 0 15px}.screen h2{font-size:clamp(24px,2.45vw,38px);font-weight:500;line-height:1.05;letter-spacing:-1.3px;margin:0 0 16px}.screen h2 em{font-style:normal;color:var(--green)}.screen p{font-size:16px;line-height:1.55;margin:0 0 15px}.screen .screen-kicker{font-size:12px;line-height:1.5}.screen .lead{max-width:460px}.screen-rule{height:1px;background:var(--line);margin:18px 0}.screen .identity{font-weight:600;font-size:17px}.identity span{display:block;color:var(--muted);font-size:13px;font-weight:400;margin-top:5px}.screen-cta{display:flex;align-items:center;justify-content:space-between;gap:12px;width:fit-content;max-width:100%;border:1px solid var(--green);border-radius:2px;color:var(--green);background:transparent;font-size:14px;line-height:1.4;padding:10px 14px;margin-top:17px}.screen-cta:hover{background:var(--green);color:var(--screen)}.text-link{display:inline-block;font-size:14px;color:var(--muted);text-decoration:underline;text-underline-offset:4px;margin:14px 0 2px}.text-link:hover{color:#fff}.screen-footer{display:flex;justify-content:space-between;padding:7px 20px;font:11px/1.4 monospace;letter-spacing:1px;color:var(--muted);border-top:1px solid var(--line)}.cursor{color:var(--green)}.control-deck{position:absolute;left:19%;width:62%;top:67%;display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:9px;background:#20292cee;border-radius:5px;box-shadow:0 4px 12px #0004}.key{min-height:40px;background:linear-gradient(#586362,#394340);border:1px solid #707975;border-bottom:4px solid #252c2a;border-radius:5px;color:#f6f5e9;font:12px/1.2 monospace;box-shadow:0 2px 2px #0008;transition:transform .1s,filter .1s}.key:hover{filter:brightness(1.2);transform:translateY(-2px)}.key:active,.key.pressed{transform:translateY(2px);border-bottom-width:2px}.key-yellow{background:linear-gradient(#e4d38c,#c5ae63);border-color:#e6d69b;border-bottom-color:#756537;color:#282c27}.key-orange{background:linear-gradient(#ee8455,#d05e32);border-color:#ffa675;border-bottom-color:#934522;color:#271a12}.instructions{display:flex;justify-content:space-between;gap:12px;margin:-35px 11% 35px;font-size:12px;line-height:1.6;color:#616d67}.instructions b{color:#333f38;font-weight:500}.instructions button{background:none;border:0;border-bottom:1px solid #9aa298;padding:0;color:#39463b;font-size:12px;white-space:nowrap}.page-footer{border-top:1px solid #c9cbc5;padding:23px 4.5%;display:flex;justify-content:space-between;gap:20px;font-size:12px;color:#657067}.page-footer a{color:#303d35}.profile-heading{display:flex;justify-content:space-between;gap:18px}.profile-heading img{object-fit:cover;max-width:23%;height:100px;border-radius:3px;filter:saturate(.6)}.timeline{list-style:none;padding:0;margin:0}.timeline li{display:grid;grid-template-columns:85px 1fr;gap:14px;padding:18px 0;border-top:1px solid var(--line)}.timeline li>span{font:12px/1.7 monospace;color:var(--green)}.screen h3{font-size:17px;font-weight:500;line-height:1.35;margin:0 0 7px}.timeline p,.skill p,.project p{color:var(--muted);margin:0}.skill{display:flex;gap:19px;padding:19px 0;border-top:1px solid var(--line)}.skill>span{font:14px monospace;color:var(--green);padding-top:4px}.screen .callout{padding:16px;border-left:2px solid var(--green);background:#c0e4b809;margin-top:18px}.project{display:grid;grid-template-columns:110px 1fr;gap:20px;padding:22px 0;border-top:1px solid var(--line)}.project img{width:110px;max-width:100%;height:110px;object-fit:cover;border-radius:3px}.tag{font:11px/1.6 monospace;color:var(--green);display:block;margin-bottom:6px}.project-number{font:42px monospace;color:#799483}.text-project{grid-template-columns:50px 1fr}.gallery{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.gallery button{padding:0;background:transparent;border:1px solid var(--line);overflow:hidden;border-radius:3px;color:var(--light);text-align:left}.gallery img{display:block;width:100%;height:145px;object-fit:cover;transition:transform .2s}.gallery button:hover img{transform:scale(1.03)}.gallery span{display:block;padding:8px;font-size:12px}.screen .subheading{margin-top:25px}.media-links{display:grid;gap:0}.media-links a{font-size:14px;padding:13px 0;border-bottom:1px solid var(--line);color:var(--green)}.email-link{color:var(--green);font-size:clamp(13px,1.3vw,18px);overflow-wrap:anywhere;display:block;margin:20px 0;text-decoration:underline;text-underline-offset:5px}.screen .contact-meta{font-size:14px;color:var(--muted)}details{border-top:1px solid var(--line);margin-top:24px;padding-top:17px}summary{font-size:14px;cursor:pointer;list-style:none;display:flex;justify-content:space-between;gap:15px}summary::-webkit-details-marker{display:none}form{display:grid;gap:8px;padding-top:18px}form label{font-size:13px;color:var(--muted);margin-top:8px}form input,form textarea{background:#071b1b;color:var(--light);border:1px solid #55736a;padding:11px;border-radius:3px;width:100%;min-width:0;font-size:16px}form textarea{resize:vertical}.honeypot{display:none!important}#form-msg{color:var(--green);margin-top:15px}#form-msg:empty{display:none}.reading .screen{position:fixed;inset:4vh auto auto 50%;transform:translateX(-50%);width:min(880px,94vw);height:92dvh;z-index:50;border:5px solid #3f4944;box-shadow:0 0 0 100vmax #101919d9,0 20px 100px #0008}.reading .viewport{padding:30px 40px}.reading .screen h2{font-size:42px}.reading .screen-nav a{font-size:14px;padding:9px}.reading .screen .screen-kicker{font-size:13px}.reading .statusbar{font-size:14px;padding:15px 20px}.reading .connection{font-size:12px}.reading .screen-footer{font-size:12px}body:has(.reading){overflow:hidden}dialog{max-width:min(940px,95vw);max-height:94dvh;border:1px solid #718078;border-radius:6px;padding:20px;background:#142622;color:var(--light)}dialog::backdrop{background:#061410dd}dialog>button{display:block;margin:0 0 14px auto;padding:8px 12px;border:1px solid #718078;background:transparent;color:var(--light);font-size:14px}dialog img{display:block;max-width:100%;max-height:73dvh;object-fit:contain;margin:auto}dialog p{font-size:14px}body:has(dialog[open]){overflow:hidden}@keyframes appear{from{opacity:.3;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}@media(min-width:1500px){main{grid-template-columns:300px 1fr}}@media(max-width:1100px){main{grid-template-columns:210px minmax(0,1fr);padding-left:3%}.screen{left:14%;width:72%}.intro h1{font-size:60px}.pitch{font-size:18px}.viewport{padding:16px 18px}.screen-nav{padding:4px 9px;gap:0}.screen-nav a{font-size:11px;padding:4px}.screen h2{font-size:27px}.statusbar{padding:9px 13px;font-size:11px}.connection{font-size:10px}.screen-footer{padding:5px 12px}.control-deck{left:16%;width:68%;gap:5px;padding:6px}.key{font-size:10px;min-height:34px}.instructions{margin:0 8% 25px;flex-wrap:wrap}.small-note{margin-top:35px}}@media(max-width:800px){main{display:block;padding:0}.intro{padding:30px 6% 0;display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:10px}.eyebrow{grid-column:1/-1;margin:0;font-size:11px}.intro h1{font-size:52px;letter-spacing:-3px;margin:0}.intro h1 br{display:none}.intro h1 i{font-size:50px;position:static}.pitch{font-size:16px;line-height:1.4;justify-self:end;margin:0}.location,.small-note,.discover{display:none}.terminal{max-width:820px;margin:auto}.screen h2{font-size:32px}.instructions{margin:-20px 7% 25px}.topbar{padding:20px 6%}.wordmark{font-size:16px}.wordmark span{font-size:10px;letter-spacing:.8px}.top-contact{font-size:14px;gap:10px}.page-footer{padding:20px 6%;font-size:11px}.page-footer>span:nth-child(2){display:none}.screen-nav a{font-size:12px;padding:6px}.statusbar{font-size:12px;padding:9px 13px}.viewport{padding:18px 22px}.key{font-size:11px;min-height:37px}}@media(max-width:520px){.intro{grid-template-columns:1fr 145px}.intro h1{font-size:42px}.pitch{font-size:14px}.screen{border-radius:10px}.screen h2{font-size:23px;letter-spacing:-.7px}.viewport{padding:12px 13px}.screen p{font-size:16px;line-height:1.5}.screen .screen-kicker{font-size:10px;margin-bottom:10px}.screen-nav{padding:3px 7px;gap:1px}.screen-nav a{font-size:10px;padding:3px 4px}.statusbar{font-size:10px;padding:7px 10px;letter-spacing:0}.connection{font-size:9px}#expand{font-size:19px}.screen-footer{font-size:9px;padding:4px 10px}.control-deck{gap:4px;padding:5px}.key{font-size:8px;min-height:29px;border-bottom-width:3px}.instructions{margin:0 6% 22px;font-size:12px}.instructions span{max-width:205px}.instructions button{font-size:12px}.identity span{font-size:12px}.screen .identity{font-size:16px}.screen-cta{font-size:13px;padding:9px 10px}.timeline li{grid-template-columns:65px 1fr;gap:9px}.timeline li>span{font-size:10px}.project{grid-template-columns:1fr;gap:12px}.project img{width:100%;height:150px}.text-project{grid-template-columns:30px 1fr;gap:12px}.project-number{font-size:26px}.gallery{gap:8px}.gallery img{height:105px}.profile-heading img{height:80px;max-width:25%}.email-link{font-size:14px}.reading .viewport{padding:20px}.reading .screen h2{font-size:32px}.reading .screen-nav a{font-size:12px;padding:7px}.reading .statusbar{font-size:12px}.reading .connection{font-size:10px}.reading .screen-footer{font-size:11px}.reading .screen{width:96vw;height:96dvh;top:2dvh}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}@media print{.topbar,main>.intro,.machine,.control-deck,.instructions,.page-footer,.screen-nav,.statusbar,.screen-footer,.screen-cta,details,dialog,.skip{display:none!important}main{display:block;padding:0}.terminal{aspect-ratio:auto}.screen,.reading .screen{position:static;transform:none;display:block;height:auto;width:100%;background:#fff;color:#000;box-shadow:none;border:0}.viewport{overflow:visible;padding:0}.viewport article[hidden]{display:block!important}.viewport article{break-inside:avoid;margin:25px 0}.screen p,.screen h2 em,.screen-kicker,.tag,.timeline li>span,.skill>span,.project p,.timeline p{color:#000!important}.screen h2{font-size:24px}.screen a{color:#000}.gallery{grid-template-columns:repeat(4,1fr)}.gallery img{height:80px}}
/* Alignement sur le véritable écran du terminal photographié. */
.terminal:not(.reading) .screen{left:17.5%;top:15%;width:65%;height:41%;border-radius:18px}
.control-deck{top:70%;left:13%;width:52%;padding:6px}
@media(max-width:1100px){.control-deck{left:12%;width:54%}.key{font-size:10px}}
@media(max-width:520px){.terminal:not(.reading) .screen{border-radius:10px}.control-deck{left:11%;width:56%;gap:3px;padding:3px}.key{font-size:7px;min-height:24px}.screen-nav a{font-size:10px;padding:3px}.screen-nav a::first-letter{color:inherit}}
@media(max-width:520px){.terminal-column{overflow:hidden}.terminal{width:140%;margin-left:-20%;aspect-ratio:.85}.machine{object-fit:fill}.terminal:not(.reading) .screen{height:41%;border-radius:14px}.control-deck{left:18%;width:64%;gap:5px;padding:6px}.key{font-size:10px;min-height:38px}.screen-nav a{font-size:12px;padding:5px}.statusbar{font-size:12px;padding:9px 12px}.connection{font-size:10px}.viewport{padding:15px 16px}.screen-footer{font-size:10px;padding:5px 12px}.screen h2{font-size:27px}.instructions{position:relative;margin:0 6% 22px}}

/* Zones actives exactement superposées aux touches photographiées. */
.terminal{container-type:normal}
.terminal .control-deck{inset:0;width:auto;display:block;padding:0;margin:0;background:none;border:0;border-radius:0;box-shadow:none;pointer-events:none;z-index:2}
.terminal .screen{z-index:3}
.terminal.reading .screen{z-index:50}
.terminal .photo-key{position:absolute;left:calc(var(--x)*1%);top:calc(var(--y)*1%);width:calc(var(--w)*1%);height:calc(var(--h)*1%);min-height:0;min-width:0;display:grid;place-items:center;padding:0;border:0;border-radius:15%;background:transparent;box-shadow:none;pointer-events:auto;color:#edeedf;font:600 clamp(10px,1.05vw,17px)/1 monospace;transition:background .15s,box-shadow .15s,transform .12s;text-shadow:0 1px 1px #0007}
.terminal .photo-key>span:first-child{transform:translateY(-10%);pointer-events:none}
.terminal .key-contact,.terminal .key-home,.terminal .key-expand{color:#202c2b;text-shadow:0 1px 1px #ffffff30}
.terminal .key-previous,.terminal .key-next{color:#08242b;text-shadow:0 1px 1px #ffffff30}
.terminal .photo-key:hover{background:#ffffff17;filter:none;transform:none;box-shadow:inset 0 0 0 1px #ffffff45}
.terminal .photo-key:active,.terminal .photo-key.pressed{background:#0003;transform:translateY(1px) scale(.96);box-shadow:inset 0 2px 5px #0005}
.terminal .photo-key:focus-visible{outline:2px solid #e3fda0;outline-offset:3px;background:#ffffff22;z-index:4}
.terminal .photo-key.is-current{box-shadow:inset 0 -2px 0 #d5ed95}
.terminal .key-space{font-size:clamp(9px,0.735vw,13px);border-radius:4px;color:#d3d8c8}
.terminal .key-tip{position:absolute;left:50%;bottom:calc(100% + 10px);transform:translateX(-50%);background:#112a25;color:#eaf7cb;border:1px solid #6b8470;border-radius:3px;padding:7px 9px;white-space:nowrap;font:12px/1.3 monospace;text-shadow:none;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s;z-index:5}
.terminal .photo-key:is(:hover,:focus-visible) .key-tip{opacity:1;visibility:visible}
.terminal .key-shortcut{font-size:clamp(10px,0.91vw,15px)}
/* Tube cathodique : lumière douce et balayage unique, sans flash. */
.boot-screen{position:absolute;inset:0;z-index:8;display:flex;flex-direction:column;gap:8px;padding:5% 6%;background:#071513;color:#d5ed95;overflow:hidden;font-family:monospace;border-radius:inherit}
.boot-screen[hidden]{display:none}
.minitel-starting .boot-screen{display:flex;animation:boot-failsafe 0s 5s forwards}
.minitel-starting .screen>.statusbar,.minitel-starting .screen>.screen-nav,.minitel-starting .screen>.viewport,.minitel-starting .screen>.screen-footer{visibility:hidden;animation:content-failsafe 0s 5s forwards}
.boot-header{display:flex;justify-content:space-between;border-bottom:1px solid #35523f;padding-bottom:9px;letter-spacing:1.5px;font-size:11px;color:#91ad8d}
.boot-output{margin:auto 0;min-height:0}
.screen .boot-brand{font-size:clamp(22px,2.59vw,42px);line-height:1.15;letter-spacing:-1px;margin:6px 0 20px;white-space:nowrap;text-shadow:0 0 14px #d5ed9533}
.boot-brand strong{font-weight:400}.boot-cursor{margin-left:7px;animation:terminal-cursor 1s steps(1) infinite}
.screen .boot-line{font:clamp(11px,0.98vw,15px)/1.6 monospace;letter-spacing:.4px;margin:5px 0;white-space:nowrap;overflow:hidden}
.minitel-starting .boot-line{clip-path:inset(0 100% 0 0)}
.minitel-starting .boot-line-one{animation:teletype .48s .3s steps(30,end) forwards}
.minitel-starting .boot-line-two{animation:teletype .4s .95s steps(25,end) forwards}
.minitel-starting .boot-line-three{animation:teletype .35s 1.45s steps(23,end) forwards}
.boot-progress{height:8px;border:1px solid #4d7055;margin:17px 0 12px;max-width:380px;padding:1px}
.boot-progress span{display:block;height:100%;width:0;background:#d5ed95}
.minitel-starting .boot-progress span{animation:transmission 1.25s 1.4s steps(22,end) forwards}
.screen .boot-caption{font:10px/1.4 monospace;color:#91ad8d;letter-spacing:.8px;margin:0}
#skip-boot{align-self:flex-end;background:none;border:0;color:#bad0ae;font:12px/1.4 monospace;padding:5px 0;margin-top:auto;text-decoration:underline;text-underline-offset:3px}
#skip-boot:hover{color:#f1ffdd}
.minitel-starting .screen::after{content:"";position:absolute;inset:0;z-index:10;pointer-events:none;background:#071513;transform-origin:center;animation:crt-power .45s ease-out forwards}
.screen.page-transmitting .viewport article:not([hidden]){animation:cv-transmission .5s steps(22,end) both}
.screen.page-transmitting::before{content:"";position:absolute;inset:0;z-index:6;pointer-events:none;background:linear-gradient(transparent 40%,#d5ed9515 49%,transparent 53%);background-size:100% 220%;animation:screen-sweep .55s linear both}
@keyframes crt-power{0%{clip-path:polygon(0 0,100% 0,100% 50%,0 50%,0 50%,100% 50%,100% 100%,0 100%);opacity:1}35%{clip-path:polygon(0 0,100% 0,100% 49.5%,0 49.5%,0 50.5%,100% 50.5%,100% 100%,0 100%);opacity:1}100%{clip-path:polygon(0 0,100% 0,100% 0,0 0,0 100%,100% 100%,100% 100%,0 100%);opacity:0}}
@keyframes teletype{to{clip-path:inset(0)}}
@keyframes transmission{to{width:100%}}
@keyframes terminal-cursor{0%,65%{opacity:1}66%,100%{opacity:0}}
@keyframes cv-transmission{from{clip-path:inset(0 0 100% 0);opacity:.7}to{clip-path:inset(0);opacity:1}}
@keyframes screen-sweep{from{background-position:0 120%}to{background-position:0 -100%}}
@keyframes boot-failsafe{to{visibility:hidden;pointer-events:none}}
@keyframes content-failsafe{to{visibility:visible}}
@media(max-width:520px){.boot-screen{padding:4% 5%;gap:3px}.boot-header{font-size:10px;padding-bottom:6px}.screen .boot-brand{font-size:27px;margin:4px 0 11px}.screen .boot-line{font-size:11px;margin:3px 0}.boot-progress{margin:10px 0 8px}.screen .boot-caption{font-size:9px}#skip-boot{font-size:11px}.terminal .key-tip{font-size:11px;max-width:170px;white-space:normal}.instructions span{max-width:245px}.terminal .photo-key{font-size:12px}.terminal .key-space{font-size:10px}}
@media(prefers-reduced-motion:reduce){.minitel-starting .boot-screen{display:none}.minitel-starting .screen>.statusbar,.minitel-starting .screen>.screen-nav,.minitel-starting .screen>.viewport,.minitel-starting .screen>.screen-footer{visibility:visible}.screen::before,.screen::after{display:none!important}.screen.page-transmitting .viewport article:not([hidden]){clip-path:none;opacity:1}}
@media print{.boot-screen{display:none!important}.screen>.statusbar,.screen>.screen-nav,.screen>.viewport,.screen>.screen-footer{visibility:visible!important}}

/* Photographie originale : proportions, verre et touches du Minitel 1. */
.terminal{aspect-ratio:1536/1728;margin-bottom:-15%}
.machine{object-fit:contain;clip-path:polygon(20.811% 8.747%,32.048% 7.920%,46.410% 7.447%,60.239% 7.565%,76.330% 8.274%,80.918% 8.806%,83.378% 9.811%,84.973% 11.407%,85.771% 13.416%,85.904% 26.478%,85.439% 43.794%,87.766% 55.437%,90.293% 66.844%,93.085% 77.719%,93.418% 80.260%,92.620% 81.797%,91.157% 83.038%,82.979% 83.747%,54.322% 84.102%,13.830% 84.102%,11.636% 83.452%,10.372% 82.447%,9.840% 80.615%,10.040% 78.546%,13.497% 60.284%,15.957% 46.631%,16.489% 38.712%,16.489% 14.894%,17.021% 12.293%,18.418% 10.284%)}
.terminal:not(.reading) .screen{left:22.806%;top:14.421%;width:57.247%;height:37.766%;border-radius:9% / 8%;padding:clamp(8px,1.6vw,22px) clamp(9px,1.7vw,24px);background:#102424;box-shadow:inset 0 0 22px 8px #0007}
.terminal:not(.reading) .statusbar{padding:7px 8px}
.terminal:not(.reading) .screen-nav{padding:6px 2px;gap:0}
.terminal:not(.reading) .screen-nav a{padding:5px;font-size:12px}
.terminal:not(.reading) .viewport{padding:18px 8px}
.terminal:not(.reading) .screen-footer{padding:6px 8px}
.terminal:not(.reading) .screen h2{font-size:clamp(23px,2.3vw,34px)}
.terminal .photo-key>span:first-child{visibility:hidden}
.terminal .photo-key{border-radius:3px;text-shadow:none}
.terminal .photo-key.is-current{box-shadow:inset 0 -2px 0 #274633}
.instructions{margin:0 11% 30px}
.photo-credit{font-size:12px;line-height:1.6;color:#69756d;margin:0;padding:12px 4.5% 20px;text-align:right}
.photo-credit a{text-decoration:underline;text-underline-offset:3px}
@media(max-width:800px){.terminal:not(.reading) .screen h2{font-size:30px}.photo-credit{text-align:left;padding-left:6%;padding-right:6%}}
@media(max-width:520px){.terminal{aspect-ratio:1536/1728;margin-bottom:-19%}.machine{object-fit:contain}.terminal:not(.reading) .screen{padding:12px 11px}.terminal:not(.reading) .viewport{padding:12px 4px}.terminal:not(.reading) .screen h2{font-size:25px}.terminal:not(.reading) .screen-nav a{font-size:11px;padding:4px}.terminal:not(.reading) .statusbar{font-size:11px;padding:5px 4px}.terminal:not(.reading) .connection{font-size:9px}.terminal:not(.reading) .screen-footer{font-size:9px;padding:5px 4px}.instructions{margin:0 6% 20px}.photo-credit{font-size:11px}.terminal .key-shortcut .key-tip{left:auto;right:0;transform:none;white-space:normal;min-width:90px;max-width:130px}.boot-screen{padding:7% 7%}}
@media print{.terminal{margin:0;aspect-ratio:auto}.terminal:not(.reading) .screen{position:static;width:100%;height:auto;padding:0;border-radius:0;background:#fff;box-shadow:none}.photo-credit{display:none}}
@media(max-width:520px){.terminal:not(.reading) .screen-nav{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding:5px 0}.terminal:not(.reading) .screen-nav a{flex-shrink:0;font-size:12px;padding:4px 6px}.terminal:not(.reading) .boot-screen{padding:12px 14px;gap:3px}.terminal:not(.reading) .boot-brand{font-size:23px;margin:4px 0 8px}.terminal:not(.reading) .boot-line{font-size:10px;margin:2px 0}.terminal:not(.reading) .boot-caption{display:none}.terminal:not(.reading) .boot-progress{margin:9px 0 7px}}

/* Repères intégrés aux touches, en laissant visibles leurs inscriptions. */
.terminal .photo-key{
  background:rgba(250,203,135,.08);
  box-shadow:inset 0 0 0 1px rgba(73,53,25,.24),0 0 0 1px rgba(247,161,84,.38);
  transition:background .16s,box-shadow .16s,transform .12s;
}
.terminal .photo-key::after{
  content:"";position:absolute;bottom:1px;left:50%;transform:translateX(-50%);
  width:38%;min-width:7px;max-width:28px;height:3px;border-radius:2px;
  background:var(--orange);box-shadow:0 0 0 1px rgba(47,33,18,.55),0 1px 2px #0004;
  pointer-events:none;
}
.terminal .photo-key[data-action="contact"]::after,
.terminal .photo-key[data-action="previous"]::after,
.terminal .photo-key[data-action="next"]::after{width:46%;height:4px}
.terminal .photo-key:hover{
  background:rgba(255,199,115,.19);filter:none;transform:translateY(-1px);
  box-shadow:inset 0 0 0 1px rgba(255,232,190,.8),0 0 0 2px rgba(237,99,56,.85),0 2px 7px #30221545;
}
.terminal .photo-key:focus-visible{
  background:rgba(255,214,142,.18);outline:2px solid #fff8d9;outline-offset:3px;
  box-shadow:0 0 0 5px #173a2f;z-index:4;
}
.terminal .photo-key:active,.terminal .photo-key.pressed{
  background:rgba(47,36,15,.14);transform:translateY(1px) scale(.97);
  box-shadow:inset 0 2px 5px #30221566,0 0 0 1px rgba(237,99,56,.7);
}
.terminal .photo-key.is-current{
  background:rgba(213,237,149,.1);
  box-shadow:inset 0 0 0 1px rgba(25,65,45,.6),0 0 0 1px rgba(245,166,94,.5);
}
.keyboard-legend{display:block;margin-bottom:4px}
.keyboard-legend i{display:inline-block;width:15px;height:4px;vertical-align:middle;margin-right:5px;border-radius:2px;background:var(--orange);box-shadow:0 0 0 1px #624c38}
@media(max-width:520px){.instructions span{max-width:none}.instructions{align-items:center}.terminal .photo-key::after{height:3px;bottom:0;min-width:6px}.terminal .photo-key[data-action="contact"]::after,.terminal .photo-key[data-action="previous"]::after,.terminal .photo-key[data-action="next"]::after{height:3px}.keyboard-legend{font-size:12px}}
@media(hover:none){.terminal .photo-key:hover{transform:none;background:rgba(250,203,135,.08);box-shadow:inset 0 0 0 1px rgba(73,53,25,.24),0 0 0 1px rgba(247,161,84,.38)}}

/* Une largeur mobile réelle, sans masquer un débordement de texte. */
.pitch>span{display:block}
@media(max-width:800px){
  main,.intro,.intro>*{min-width:0;max-width:100%}
  .intro{grid-template-columns:minmax(0,1fr);gap:12px;align-items:start;padding-top:24px}
  .intro h1{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:.14em;row-gap:.08em;max-width:100%;font-size:clamp(2.15rem,8.8vw,3.25rem);letter-spacing:-.05em;margin:0;overflow-wrap:anywhere}
  .intro h1 br{display:none}
  .intro h1 i{position:static;font-size:inherit;line-height:inherit}
  .pitch{display:flex;flex-wrap:wrap;justify-self:start;gap:2px 12px;max-width:100%;font-size:clamp(.875rem,2.2vw,1.0625rem);line-height:1.5;margin:0}
  .pitch>span{display:block;min-width:0;overflow-wrap:anywhere}
  .topbar{flex-wrap:wrap;gap:12px 16px}
  .wordmark{min-width:0;max-width:100%;overflow-wrap:anywhere}
  .wordmark span{overflow-wrap:anywhere}
  .top-contact{min-width:0;max-width:100%}
  .instructions{flex-wrap:wrap;min-width:0}
  .instructions>span{min-width:0;max-width:100%;overflow-wrap:anywhere}
  .instructions button{max-width:100%;white-space:normal;text-align:left}
  .page-footer{flex-wrap:wrap}
  .photo-credit{overflow-wrap:anywhere}
}
@media(max-width:520px){
  .terminal{width:116%;margin-left:-10%;margin-right:0}
  .terminal:not(.reading) .screen h2{font-size:clamp(19px,5.8vw,25px);overflow-wrap:anywhere}
  .terminal:not(.reading) .profile-heading{flex-wrap:wrap}
  .terminal:not(.reading) .screen-kicker{overflow-wrap:anywhere}
}

/* Sur téléphone, le CV avance page par page dans le véritable tube du Minitel. */
#section-select,#compact-prev,#compact-next,#compact-count{display:none}
#compact-cv[hidden],#compact-cv [hidden]{display:none!important}
@media screen and (max-width:700px){
  .terminal{width:116%;max-width:none;margin-left:-10%;margin-right:0;aspect-ratio:1536/1728;margin-bottom:-19%}
  .terminal-column{overflow:hidden}
  .terminal.compact-cv:not(.reading) .screen{padding:8px 10px;border-radius:9% / 8%}
  .terminal.compact-cv .statusbar{padding:0 1px 3px;gap:4px;min-height:28px}
  .terminal.compact-cv .statusbar>span,.terminal.compact-cv .screen-nav{display:none}
  .terminal.compact-cv #section-select{display:block;min-width:0;width:100%;max-width:100%;font:16px/1.2 monospace;color:var(--green);background:var(--screen);border:0;border-radius:0;padding:2px 0;letter-spacing:0;cursor:pointer}
  .terminal.compact-cv #expand{flex:0 0 24px;min-height:25px;font-size:21px;padding:0}
  .terminal.compact-cv .viewport{padding:9px 4px 5px;scrollbar-width:thin}
  .terminal.compact-cv .screen-footer{padding:2px 0 0;min-height:26px;flex-shrink:0;align-items:center;gap:4px;letter-spacing:0}
  .terminal.compact-cv .screen-footer>#page-count,.terminal.compact-cv .screen-footer>#scroll-hint,.terminal.compact-cv .screen-footer>.cursor{display:none}
  .terminal.compact-cv #compact-count{display:block;color:var(--muted);font:11px/1.3 monospace;white-space:nowrap;text-align:center}
  .terminal.compact-cv #compact-prev,.terminal.compact-cv #compact-next{display:block;min-height:25px;flex-shrink:0;padding:3px 1px;background:none;border:0;color:var(--green);font:12px/1.4 monospace}
  .terminal.compact-cv #compact-prev:hover,.terminal.compact-cv #compact-next:hover{background:#d5ed9515}
  .terminal.compact-cv #compact-cv h2{font-size:20px;line-height:1.15;letter-spacing:-.35px;font-weight:500;color:var(--green);margin:0 0 7px;overflow-wrap:anywhere}
  .terminal.compact-cv #compact-cv p{font-size:17px;line-height:1.32;letter-spacing:0;margin:0 0 7px;overflow-wrap:anywhere}
  .terminal.compact-cv #compact-cv a,.terminal.compact-cv #compact-cv .compact-link{display:block;width:fit-content;max-width:100%;margin:6px 0 0;font:16px/1.35 Arial,Helvetica,sans-serif;letter-spacing:0;color:var(--green);background:none;border:0;padding:0;text-align:left;text-decoration:underline;text-underline-offset:3px;overflow-wrap:anywhere}
  .terminal.compact-cv #compact-cv [data-card]>:last-child{margin-bottom:0}
  .terminal.compact-cv #compact-cv .compact-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .terminal.compact-cv #compact-cv .compact-gallery button{display:block;min-width:0;padding:0;background:#091b18;border:1px solid #557365;border-radius:2px;overflow:hidden}
  .terminal.compact-cv #compact-cv .compact-gallery img{display:block;width:100%;height:72px;object-fit:cover}
  .terminal.compact-cv.compact-detail .screen-kicker,.terminal.compact-cv.compact-detail [data-view="contact"]>h2,.terminal.compact-cv.compact-detail [data-view="contact"]>p,.terminal.compact-cv.compact-detail [data-view="contact"]>.email-link{display:none}
  .terminal.compact-cv.compact-detail details{margin:0;padding:0;border:0}
  .terminal.compact-cv.compact-detail summary{font-size:16px;color:var(--green)}
  .terminal.compact-cv.compact-detail form{padding-top:8px}
  .terminal.compact-cv .boot-screen{padding:10px 14px;gap:2px}
  .terminal.compact-cv .boot-header{font-size:9px;padding-bottom:4px}
  .terminal.compact-cv .boot-brand{font-size:23px;margin:3px 0 6px}
  .terminal.compact-cv .boot-line{font-size:10px;margin:1px 0;line-height:1.5;letter-spacing:0}
  .terminal.compact-cv .boot-caption{display:none}
  .terminal.compact-cv .boot-progress{margin:7px 0 4px;height:6px}
  .terminal.compact-cv #skip-boot{font-size:10px;padding:2px 0}
  .terminal.compact-cv .screen.page-transmitting .viewport article{animation:none}
  .terminal.compact-cv .page-transmitting #compact-cv [data-card]:not([hidden]){animation:cv-transmission .4s steps(16,end) both}
}
@media screen and (max-width:350px){
  .terminal.compact-cv:not(.reading) .screen{padding:6px 8px}
  .terminal.compact-cv .viewport{padding:6px 3px 3px}
  .terminal.compact-cv #compact-cv h2{font-size:19px;margin-bottom:5px}
  .terminal.compact-cv #compact-cv .compact-gallery img{height:58px}
  .terminal.compact-cv #section-select{font-size:16px}
  .terminal.compact-cv #compact-prev,.terminal.compact-cv #compact-next{font-size:11px}
}
@media(prefers-reduced-motion:reduce){.terminal.compact-cv .page-transmitting #compact-cv [data-card]{animation:none!important}}
@media print{#compact-cv,#section-select,#compact-prev,#compact-next,#compact-count{display:none!important}}

/* Portrait reçu ligne par ligne, dans l’écran d’origine. */
.reading-invite{display:none}
.portrait-frame{position:relative;isolation:isolate;overflow:hidden;background:#0b211b;border:1px solid #76946c;border-radius:3px}
.portrait-frame img{position:relative;z-index:1;display:block;width:100%;height:100%;object-fit:cover;object-position:50% 40%;transform:scale(1.45);transform-origin:50% 58%;filter:saturate(.65);opacity:1}
.portrait-fallback{position:absolute;inset:0;display:grid;place-items:center;color:var(--green);font:24px monospace}
.portrait-frame.portrait-waiting img,.portrait-frame.portrait-failed img{visibility:hidden}
.portrait-frame::before{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;background:repeating-linear-gradient(0deg,#081a171e 0px,#081a171e 1px,transparent 1px,transparent 3px)}
.portrait-frame::after{content:"";position:absolute;inset:0;z-index:3;pointer-events:none;background:linear-gradient(to bottom,#d5ed9577 0px,#d5ed9522 2px,transparent 4px),#0b211b;transform:translateY(-100%);opacity:0}
.portrait-frame.portrait-transmitting::after{animation:portrait-reception 1.4s steps(24,end) both}
@keyframes portrait-reception{0%{transform:translateY(0);opacity:1}96%{transform:translateY(100%);opacity:1}100%{transform:translateY(100%);opacity:0}}
@keyframes reading-invitation{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}
@media screen and (max-width:700px){
  .terminal.compact-cv .portrait-intro{display:grid;grid-template-columns:62px minmax(0,1fr);gap:11px;align-items:center}
  .terminal.compact-cv .portrait-frame{width:62px;height:72px}
  .terminal.compact-cv #compact-cv .portrait-intro p{margin:0}
  .terminal.compact-cv .reading-invite:not([hidden]){display:flex;position:absolute;left:18%;right:8%;top:0;z-index:4;align-items:center;justify-content:center;gap:12px;min-height:34px;padding:6px 9px;border:1px solid #baafa0;border-radius:5px;background:#f1f0e9;color:#354338;font:14px/1.3 Arial,Helvetica,sans-serif;box-shadow:0 2px 6px #282a2410;animation:reading-invitation .3s ease-out both}
  .terminal.compact-cv .reading-invite span{color:#b14b2c;font-size:20px;line-height:1}
  .terminal.compact-cv .reading-invite:hover{background:#faf9ee;border-color:#9d7f61}
  .terminal.compact-cv .reading-invite:focus-visible{outline:2px solid var(--orange);outline-offset:3px}
}
@media screen and (max-width:350px){
  .terminal.compact-cv .portrait-intro{grid-template-columns:46px minmax(0,1fr);gap:9px}
  .terminal.compact-cv .portrait-frame{width:46px;height:54px}
  .terminal.compact-cv .reading-invite:not([hidden]){min-height:29px;padding:4px 7px;font-size:13px}
}
@media(prefers-reduced-motion:reduce){.portrait-frame.portrait-transmitting::after{animation:none!important;opacity:0}.reading-invite{animation:none!important}}
@media print{.reading-invite{display:none!important}}

/* Contour relevé sur le bord intérieur réel de la photographie (1536 × 1728). */
.screen-geometry{position:absolute;pointer-events:none;overflow:hidden}
@media screen{
  .terminal:not(.reading) .screen{
    left:21.940104%;top:12.962963%;width:58.593750%;height:39.467593%;
    border-radius:0;clip-path:url(#minitel-opening);
    box-shadow:inset 0 0 20px 5px #0005;
  }
  .terminal.compact-cv:not(.reading) .screen{border-radius:0}
}
/* Le clavier reste transparent aux clics sur le CV, ses bulles passent au-dessus. */
.terminal .control-deck{z-index:12;pointer-events:none}
.terminal .photo-key:is(:hover,:focus-visible){z-index:6}
.terminal .key-tip{z-index:7}
.terminal.reading .control-deck{visibility:hidden}
@media print{.screen-geometry{display:none}.terminal:not(.reading) .screen{clip-path:none}}
