:root{--bg:#050807;--panel:#0a100d;--green:#8dff9d;--green2:#2fdd74;--red:#ff5757;--amber:#ffd56a;--text:#e8f3eb;--muted:#8ea095;--line:rgba(141,255,157,.25)}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:"JetBrains Mono",monospace}button,input{font:inherit}.screen{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;padding:24px;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .4s ease;background:radial-gradient(circle at center,#101a14 0,#050807 65%)}.screen.is-visible{opacity:1;visibility:visible;pointer-events:auto}.panel,.center-card{width:min(760px,100%);max-height:92vh;overflow:auto;border:1px solid var(--line);background:linear-gradient(180deg,rgba(12,21,16,.98),rgba(5,9,7,.98));box-shadow:0 0 40px rgba(0,0,0,.7),inset 0 0 35px rgba(84,255,119,.03);padding:28px}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:20px}.brand{margin:0;color:var(--green);font:700 20px Rajdhani,sans-serif;letter-spacing:.18em}.micro{margin:4px 0;color:var(--muted);font-size:12px;letter-spacing:.16em}.status,.classified-badge,.danger-status{border:1px solid currentColor;padding:6px 10px;font-size:11px;letter-spacing:.12em}.status{color:var(--green)}.classified-badge,.danger-status{color:var(--red)}.divider{height:1px;background:linear-gradient(90deg,var(--green),transparent);margin:20px 0}h1,h2{font-family:Rajdhani,sans-serif;letter-spacing:.08em}.primary-button,.action-button{border:1px solid var(--green2);background:rgba(47,221,116,.08);color:var(--green);padding:14px 18px;font-weight:700;cursor:pointer;transition:.2s}.primary-button:hover,.action-button:hover{background:rgba(47,221,116,.2);box-shadow:0 0 24px rgba(47,221,116,.2)}.muted{color:var(--muted)}
.intro{flex-direction:column}.intro-logo,.intro-subtitle,.intro-title{opacity:0;transform:translateY(8px);transition:.65s}.intro-logo.show,.intro-subtitle.show,.intro-title.show{opacity:1;transform:none}.intro-logo{color:var(--green);font:700 clamp(22px,4vw,38px) Rajdhani,sans-serif;letter-spacing:.22em}.intro-subtitle{color:var(--muted)}.intro-title{font-size:clamp(38px,7vw,72px);color:#fff;text-shadow:0 0 30px rgba(141,255,157,.25)}
.boot-line,.authentication,.verification,.confirmation{opacity:0;transform:translateY(8px);transition:.35s}.show{opacity:1!important;transform:none!important}.authentication{margin-top:28px}.identity-form{display:flex;gap:10px;align-items:center;border-bottom:1px solid var(--line);padding:10px 0}.identity-form input{flex:1;background:none;border:0;outline:0;color:var(--green);font-size:18px}.cursor{width:8px;height:18px;background:var(--green);animation:blink .8s steps(1) infinite}.error-message{display:none;color:var(--red)}.error-message.show{display:block}.confirmed{color:var(--green)}#openFileButton{display:none}#openFileButton.show{display:inline-flex;gap:16px}.file-data{display:grid;gap:1px;background:var(--line);margin:22px 0}.file-data div{display:flex;justify-content:space-between;gap:14px;padding:12px;background:#07100b}.file-data span{color:var(--muted)}.mission-message{line-height:1.7}.warning-message{color:var(--amber);font-size:12px}.center-card{text-align:center;max-width:620px}.accepted-icon,.trophy{font-size:64px;color:var(--green)}.briefing-time{display:flex;justify-content:space-between;border-block:1px solid var(--line);padding:14px 0}.briefing-time strong{color:var(--green);font-size:24px}.briefing-objectives{line-height:1.8}
.game-screen{padding:0;background:#020403}.game-shell{position:relative;width:100%;height:100%;display:grid;grid-template-rows:auto 1fr}.game-hud{z-index:20;display:grid;grid-template-columns:140px 1fr 140px;align-items:center;gap:12px;padding:10px 16px;background:rgba(3,7,5,.96);border-bottom:1px solid var(--line)}.game-hud>div:first-child,.game-hud>div:last-child{display:flex;flex-direction:column}.game-hud span{color:var(--muted);font-size:10px}.game-hud strong{color:var(--green)}.objective{text-align:center;color:#fff;font-size:13px}.viewport{position:relative;overflow:hidden;min-height:0}.world{position:absolute;width:1800px;height:1250px;transform-origin:0 0;background:#101512}.floor-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);background-size:40px 40px}.room,.corridor{position:absolute;border:18px solid #333b36;background:linear-gradient(135deg,#18201b,#101612);box-shadow:inset 0 0 0 2px #070a08,inset 0 0 60px rgba(0,0,0,.35)}.room>span,.corridor>span{position:absolute;left:18px;top:14px;color:rgba(141,255,157,.38);font-size:12px;letter-spacing:.12em}.security{left:80px;top:70px;width:470px;height:330px}.entrance{left:650px;top:70px;width:350px;height:330px}.servers{left:1100px;top:70px;width:600px;height:330px}.main-corridor{left:80px;top:400px;width:1620px;height:230px;border-top:18px solid #333b36;border-bottom:18px solid #333b36}.laboratory{left:80px;top:630px;width:600px;height:420px}.airlock{left:680px;top:630px;width:330px;height:420px}.control{left:1010px;top:630px;width:690px;height:420px}.vault{left:1180px;top:1050px;width:520px;height:170px}.prop{position:absolute;z-index:2;box-shadow:0 4px 12px rgba(0,0,0,.45)}.desk{width:120px;height:52px;background:#29312c;border:4px solid #111713}.desk-1{left:160px;top:180px}.desk-2{left:350px;top:270px}.server-rack{width:75px;height:180px;background:repeating-linear-gradient(#111 0 16px,#1c2720 16px 22px);border:5px solid #354039}.rack-1{left:1210px;top:135px}.rack-2{left:1340px;top:135px}.rack-3{left:1470px;top:135px}.lab-table{width:180px;height:70px;background:#25312a;border:5px solid #121812}.lab-1{left:190px;top:760px}.lab-2{left:420px;top:900px}.crate{width:72px;height:72px;background:linear-gradient(45deg,#463e2b,#6a5c3c);border:5px solid #241f16}.crate-1{left:850px;top:720px}.crate-2{left:870px;top:880px}.game-item{position:absolute;z-index:5;cursor:pointer}.keycard{left:430px;top:215px;width:58px;height:38px;background:linear-gradient(135deg,#b9e9ca,#5aa97a);border:3px solid #dfffea;color:#082111;font-size:10px;box-shadow:0 0 25px rgba(141,255,157,.5)}.secure-door{position:absolute;z-index:8;left:1360px;top:1028px;width:120px;height:55px;background:repeating-linear-gradient(90deg,#59605d 0 9px,#343a37 9px 18px);border:5px solid #111;display:flex;align-items:center;justify-content:center;transition:.6s}.secure-door span{font-size:9px;color:#fff}.secure-door i{position:absolute;right:6px;width:8px;height:8px;border-radius:50%;background:var(--red);box-shadow:0 0 10px var(--red)}.secure-door.open{transform:translateX(125px);opacity:.3}.secure-door.open i{background:var(--green);box-shadow:0 0 10px var(--green)}.alarm-panel{left:1320px;top:780px;width:92px;height:70px;background:#131917;border:4px solid #555;color:var(--red);box-shadow:0 0 22px rgba(255,87,87,.25)}.briefcase{left:1390px;top:1120px;width:100px;height:58px;background:#342f24;border:5px solid #756b51;color:#f3d999}.game-item.collected{opacity:0;pointer-events:none;transform:scale(.4)}.alarm-panel.disabled{color:var(--green);box-shadow:0 0 22px rgba(141,255,157,.3)}.player{position:absolute;z-index:10;width:34px;height:42px;will-change:left,top}.agent-head{position:absolute;left:10px;top:1px;width:14px;height:14px;border-radius:50%;background:#c7a985;border:3px solid #171b18}.agent-body{position:absolute;left:5px;top:14px;width:24px;height:27px;border-radius:7px 7px 3px 3px;background:#263c2e;border:3px solid #0b100d}.flashlight{position:absolute;left:14px;top:-90px;width:8px;height:110px;background:linear-gradient(to top,rgba(255,255,210,.3),transparent);clip-path:polygon(40% 100%,60% 100%,100% 0,0 0);opacity:.35;pointer-events:none}.game-controls{position:absolute;z-index:30;left:0;right:0;bottom:max(18px,env(safe-area-inset-bottom));display:flex;justify-content:space-between;align-items:end;padding:0 22px;pointer-events:none}.joystick,.action-button{pointer-events:auto}.joystick{width:112px;height:112px;border-radius:50%;border:2px solid rgba(141,255,157,.35);background:rgba(5,12,8,.72);position:relative;touch-action:none}.joystick-knob{position:absolute;left:50%;top:50%;width:48px;height:48px;margin:-24px;border-radius:50%;background:rgba(141,255,157,.23);border:2px solid var(--green);box-shadow:0 0 20px rgba(141,255,157,.2)}.action-button{width:108px;height:108px;border-radius:50%;background:rgba(8,18,12,.8)}.game-message{position:absolute;z-index:40;left:50%;bottom:145px;transform:translate(-50%,10px);opacity:0;background:rgba(3,8,5,.92);border:1px solid var(--line);padding:12px 18px;color:var(--green);transition:.25s;white-space:nowrap}.game-message.show{opacity:1;transform:translate(-50%,0)}
.puzzle-panel{text-align:center}.lights-grid{display:grid;grid-template-columns:repeat(3,90px);gap:14px;justify-content:center;margin:28px 0}.light-button{width:90px;height:90px;border:2px solid #4a524d;background:#171d19;color:#ff6d6d;cursor:pointer;box-shadow:inset 0 0 20px rgba(0,0,0,.5)}.light-button.on{border-color:var(--green);background:rgba(47,221,116,.18);color:var(--green);box-shadow:0 0 20px rgba(47,221,116,.22),inset 0 0 18px rgba(47,221,116,.12)}.light-button::before{content:"●";font-size:38px}.puzzle-status{color:var(--red);letter-spacing:.14em}.love-line{font-size:20px}.error-code{color:var(--red);font-weight:700;font-size:22px}.wink{font-size:34px}.mission-card{display:flex;justify-content:space-between;align-items:center;border:1px solid var(--line);padding:18px;margin:24px 0}.mission-card>div{display:flex;flex-direction:column;gap:5px}.mission-card span{color:var(--muted);font-size:12px}.mission-card b,.reward-unlocked strong{color:var(--green)}.reward-unlocked{display:flex;flex-direction:column;gap:8px;padding:18px;background:rgba(47,221,116,.07);border-left:3px solid var(--green)}
@keyframes blink{50%{opacity:0}}@media(max-width:700px){.screen{padding:14px}.panel{padding:20px}.game-hud{grid-template-columns:78px 1fr 78px;padding:9px 8px}.objective{font-size:11px}.game-hud strong{font-size:12px}.joystick{width:94px;height:94px}.action-button{width:92px;height:92px}.game-message{bottom:122px;font-size:11px}.lights-grid{grid-template-columns:repeat(3,72px)}.light-button{width:72px;height:72px}}

/* --- Correctifs carte et personnage --- */
.doorway{
  position:absolute;
  z-index:4;
  background:#131a16;
  box-shadow:inset 0 4px 8px rgba(0,0,0,.35);
}
/* Ouvertures entre les pièces du haut et le couloir principal */
.doorway-security{left:245px;top:382px;width:90px;height:54px}
.doorway-entrance{left:780px;top:382px;width:90px;height:54px}
.doorway-servers{left:1360px;top:382px;width:90px;height:54px}
/* Ouvertures vers les pièces du bas */
.doorway-laboratory{left:300px;top:612px;width:90px;height:54px}
.doorway-control{left:1320px;top:612px;width:90px;height:54px}
/* Passage vers la chambre forte */
.doorway-vault{left:1370px;top:1032px;width:100px;height:54px}

/* Petit seuil lumineux pour rendre les passages évidents */
.doorway::after{
  content:"";
  position:absolute;
  left:8px;
  right:8px;
  bottom:4px;
  height:2px;
  background:rgba(141,255,157,.28);
  box-shadow:0 0 8px rgba(141,255,157,.18);
}

/* Personnage vu du dessus, compact et lisible */
.player{
  width:38px;
  height:46px;
  transform:none !important;
  filter:drop-shadow(0 5px 5px rgba(0,0,0,.55));
}
.agent-head{
  left:11px;
  top:0;
  width:16px;
  height:15px;
  border-radius:50% 50% 42% 42%;
  background:#b99570;
  border:3px solid #0a0e0c;
  box-shadow:inset 0 5px 0 #24382b;
}
.agent-body{
  left:4px;
  top:13px;
  width:30px;
  height:30px;
  border-radius:9px 9px 7px 7px;
  background:linear-gradient(90deg,#1d2c23 0 28%,#395640 28% 72%,#1d2c23 72%);
  border:3px solid #080c09;
  box-shadow:inset 0 -7px 0 #18231c,0 0 0 1px rgba(141,255,157,.13);
}
.agent-body::before,
.agent-body::after{
  content:"";
  position:absolute;
  bottom:-8px;
  width:8px;
  height:12px;
  border-radius:0 0 4px 4px;
  background:#111915;
  border:2px solid #070a08;
}
.agent-body::before{left:3px}
.agent-body::after{right:3px}
.flashlight{display:none}

.terminal-sequence{white-space:pre-wrap;text-align:left;background:#08110b;padding:12px;border:1px solid #2aff7a;border-radius:8px;color:#84ff9d;font-family:monospace;}
.success-card hr{border-color:#2aff7a33;margin:18px 0;}
/* --- Séquence finale cinématique : un écran à la fois --- */
.cinematic-screen{background:#020604;transition:opacity .45s ease}
.cinematic-screen.fade-out{opacity:0}
.cinematic-card{width:min(620px,92vw);display:flex;flex-direction:column;align-items:center;gap:24px}
.cinematic-title{font-size:15px;letter-spacing:.28em}
.decrypt-box{width:100%;padding:22px;border:1px solid var(--green);border-radius:10px;text-align:left;background:#061009}
.decrypt-box p{color:var(--green);margin:18px 0 12px}
.decrypt-box strong{display:block;color:var(--green);font-size:28px;text-align:center}
.decrypt-bar{height:20px;border:1px solid rgba(141,255,157,.55);background:#020604;overflow:hidden}
.decrypt-bar span{display:block;height:100%;width:10%;background:repeating-linear-gradient(90deg,#84ff9d 0 9px,#54d978 9px 11px);transition:width .45s ease}
.access-card{min-height:240px;justify-content:center}
.authorized-text{font-size:clamp(32px,7vw,56px);color:#e9f8ed;letter-spacing:.08em;animation:authorizedPulse .9s ease-in-out infinite alternate}
.classified-result-card{width:min(560px,92vw)}
.classified-document{width:100%;box-sizing:border-box;white-space:pre-wrap;text-align:left;background:#061009;padding:28px;border:1px solid var(--green);border-radius:10px;color:#84ff9d;font-family:monospace;font-size:clamp(15px,3.2vw,20px);line-height:1.55;box-shadow:0 0 28px rgba(47,221,116,.08)}
@keyframes authorizedPulse{from{opacity:.55;text-shadow:none}to{opacity:1;text-shadow:0 0 18px rgba(141,255,157,.45)}}

/* Chambre forte : la mallette devient la récompense visuelle de la porte blindée */
.vault{background:radial-gradient(circle at 50% 58%,#253329 0,#111813 42%,#080c09 100%);border-color:#454f49;box-shadow:inset 0 0 0 2px #070a08,inset 0 0 80px rgba(0,0,0,.72),0 0 30px rgba(141,255,157,.06)}
.vault-spotlight{position:absolute;z-index:3;left:1322px;top:1065px;width:235px;height:145px;background:radial-gradient(ellipse at center,rgba(221,255,216,.23) 0,rgba(141,255,157,.08) 38%,transparent 72%);pointer-events:none}
.vault-pedestal{position:absolute;z-index:4;left:1372px;top:1165px;width:136px;height:28px;background:linear-gradient(#3b4640,#171d19);border:4px solid #0c110e;box-shadow:0 8px 18px rgba(0,0,0,.65)}
.briefcase{z-index:7;box-shadow:0 0 28px rgba(243,217,153,.28)}
.alarm-panel span{font-weight:800;letter-spacing:.08em}

.briefcase.hidden-until-open{opacity:0;pointer-events:none;transform:scale(.65);filter:brightness(.25)}
.briefcase.revealed{opacity:1;pointer-events:auto;transform:scale(1);filter:none;transition:opacity .65s ease,transform .65s ease,filter .65s ease}

/* --- Finitions mobile, plein écran et accessibilité tactile --- */
html{-webkit-text-size-adjust:100%;touch-action:manipulation}
body{overscroll-behavior:none;-webkit-user-select:none;user-select:none}
input{-webkit-user-select:text;user-select:text}
button{-webkit-tap-highlight-color:transparent}
.system-controls{position:fixed;z-index:1000;top:max(8px,env(safe-area-inset-top));right:max(8px,env(safe-area-inset-right));display:flex;gap:7px}
.system-button{border:1px solid rgba(141,255,157,.35);background:rgba(3,8,5,.78);color:var(--green);padding:7px 9px;font-size:9px;letter-spacing:.08em;backdrop-filter:blur(7px);cursor:pointer}
.system-button.is-off{color:var(--muted);border-color:rgba(142,160,149,.3)}
.game-screen.is-visible~*{} /* garde la feuille valide sur les anciens navigateurs */
.action-button:active,.primary-button:active,.system-button:active{transform:scale(.96)}
.joystick,.action-button{touch-action:none}
.briefcase.revealed{animation:caseGlow 1.3s ease-in-out infinite alternate}
.player.is-moving .agent-body{animation:agentWalk .22s ease-in-out infinite alternate}
.player.is-moving .agent-head{animation:agentBob .22s ease-in-out infinite alternate}
@keyframes caseGlow{from{box-shadow:0 0 20px rgba(243,217,153,.2)}to{box-shadow:0 0 45px rgba(243,217,153,.62)}}
@keyframes agentWalk{from{transform:translateY(0)}to{transform:translateY(2px)}}
@keyframes agentBob{from{transform:translateY(0)}to{transform:translateY(-1px)}}
@media(max-width:700px){
  .system-controls{top:max(5px,env(safe-area-inset-top));right:max(5px,env(safe-area-inset-right));gap:4px}
  .system-button{padding:6px 7px;font-size:8px}
  .panel,.center-card{max-height:calc(100dvh - 28px)}
  .game-shell{height:100dvh}
  .game-controls{padding-left:max(14px,env(safe-area-inset-left));padding-right:max(14px,env(safe-area-inset-right));bottom:max(10px,env(safe-area-inset-bottom))}
  .game-message{max-width:82vw;white-space:normal;text-align:center}
  .classified-document{padding:18px}
  .success-card{padding:22px 18px}
  .love-line{font-size:17px}
}
@media(max-height:520px) and (orientation:landscape){
  .game-hud{padding:5px 10px}
  .joystick{width:82px;height:82px}
  .joystick-knob{width:40px;height:40px;margin:-20px}
  .action-button{width:80px;height:80px;font-size:12px}
  .game-message{bottom:96px}
  .system-controls{opacity:.55}
}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
