:root{
  --bg:#e9f0f3;
  --card:rgba(255,249,241,.92);
  --card-strong:rgba(255,252,247,.96);
  --glass:rgba(18,39,52,.58);
  --ink:#20313a;
  --green:#1f6b47;
  --green-dark:#154833;
  --red:#b72d37;
  --gold:#c79b47;
  --cream:#f7efe2;
  --line:rgba(136,110,66,.25);
  --muted:#58656d;
  --shadow:0 18px 42px rgba(20,30,37,.20);
}
*{box-sizing:border-box}
html,body{min-height:100%}
body{
  margin:0;
  font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  color:var(--ink);
  background:#dfe9ef url('/assets/noel-background.jpg') center center / cover fixed no-repeat;
  min-height:100vh;
  position:relative;
}
.page-backdrop{position:fixed;inset:0;background:linear-gradient(180deg,rgba(11,22,30,.35),rgba(10,16,24,.26));pointer-events:none;z-index:-1}
.test-banner{background:#8f2330;color:#fff;text-align:center;font-weight:800;padding:8px 10px;letter-spacing:.03em;position:relative;z-index:6}
.top{
  min-height:78px;display:flex;align-items:center;justify-content:space-between;gap:18px;
  padding:12px max(18px,calc((100vw - 1240px)/2));
  background:rgba(17,33,45,.72);backdrop-filter:blur(10px);border-bottom:1px solid rgba(255,255,255,.12);
  position:sticky;top:0;z-index:5;color:#fff;
}
.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:#fff;font-weight:800}
.brand-hat{font-size:2rem;filter:drop-shadow(0 6px 12px rgba(0,0,0,.18))}
.brand strong{display:block;font-size:1.38rem;line-height:1.1}
.brand small{display:block;color:rgba(255,255,255,.85);font-weight:500;margin-top:2px}
.top-nav{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;flex:1}
.top-nav a{color:rgba(255,255,255,.95);text-decoration:none;padding:10px 14px;border-radius:12px;font-weight:700}
.top-nav a:hover{background:rgba(255,255,255,.09)}
.top-actions{display:flex;align-items:center;gap:10px}
.wrap{width:min(1240px,calc(100% - 28px));margin:28px auto 58px}
.hero,.hero-card,.card{
  background:var(--card);
  border:1px solid rgba(255,255,255,.45);
  border-radius:28px;
  box-shadow:var(--shadow);
  backdrop-filter:blur(7px);
}
.hero{padding:32px 34px;margin-bottom:22px}
.hero h1,.hero-card h1,.card h1,.card h2{font-family:Georgia,'Times New Roman',serif;margin-top:0;color:#173140}
.hero h1{font-size:clamp(2rem,4vw,3.4rem);margin-bottom:12px}
.hero p{max-width:880px;font-size:1.08rem;line-height:1.65;margin:0;color:#243942}
.hero-card{padding:22px 26px}
.card{padding:24px;margin-bottom:22px}
.card h2{font-size:2rem;margin-bottom:8px}
.narrow{max-width:760px;margin-left:auto;margin-right:auto}
.center{text-align:center}
.center-text{text-align:center}
.grid.two{display:grid;grid-template-columns:1.05fr .95fr;gap:22px;align-items:start}
.grid.dashboard{display:grid;grid-template-columns:1.3fr .9fr;gap:22px;align-items:start}
.stack{display:grid;gap:15px}
label{display:grid;gap:7px;font-weight:700;color:#28444d}
input,textarea,select{
  width:100%;font:inherit;padding:13px 14px;border-radius:14px;border:1px solid #d8cdb9;background:#fffdfa;color:var(--ink)
}
input:focus,textarea:focus,select:focus{outline:3px solid rgba(45,128,93,.14);border-color:#589273}
button,.button{font:inherit;border:0;border-radius:14px;padding:12px 16px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;font-weight:800;gap:8px}
.primary{background:linear-gradient(180deg,#bf2f38,#981f2b);color:#fff;box-shadow:0 8px 18px rgba(183,45,55,.25)}
.secondary{background:#f1e5d4;color:#234a39}
.success{background:linear-gradient(180deg,#257550,#1b5a3d);color:#fff}
.danger{background:#f6d9dd;color:#8d2630}
.huge{padding:15px 24px;font-size:1.05rem}
.linkbtn{background:none;color:#fff;padding:8px 10px}
.button-row{display:flex;gap:12px;flex-wrap:wrap}
.button-row .button,.button-row button{flex:0 0 auto}
.title-row{display:flex;justify-content:space-between;gap:14px;align-items:flex-start;flex-wrap:wrap}
.mode-line{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.campaign-list{display:grid;gap:12px}
.campaign-row{display:flex;justify-content:space-between;align-items:center;text-decoration:none;color:inherit;border:1px solid var(--line);padding:16px 18px;border-radius:18px;background:rgba(255,255,255,.56);gap:14px}
.campaign-row:hover{transform:translateY(-1px)}
.campaign-row-main{display:grid;gap:4px}
.campaign-row-main strong{font-size:1.08rem}
.campaign-row-main span{font-size:.95rem;color:var(--muted)}
.campaign-row-badges{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.status{font-size:.74rem!important;font-weight:900;padding:7px 10px;border-radius:999px;letter-spacing:.03em}
.status.test{background:#f7dfe3;color:#8c2731}
.status.prod{background:#dbeee2;color:#195d3d}
.status.draft{background:#ede8df;color:#63594d}
.status.drawn,.status.revealed{background:#f9ebc8;color:#6a5324}
.participants{list-style:none;padding:0;margin:14px 0;display:grid;gap:8px}
.participants li{display:flex;justify-content:space-between;align-items:center;border-bottom:1px dashed var(--line);padding:12px 0;gap:10px}
.badge{font-size:.78rem;padding:6px 10px;border-radius:999px;font-weight:800}
.badge.ok{background:#d8efe2}.badge.warn{background:#fff0c9}.badge.muted{background:#ecebe8}
.muted{color:var(--muted)}.small{font-size:.88rem}.lead{font-size:1.1rem;line-height:1.65;color:#203844}.bigicon{font-size:3rem}
.login-card,.empty-state{text-align:center}
.participant-page .wrap{width:min(920px,calc(100% - 26px));margin-left:auto;margin-right:auto;display:flex;justify-content:center}
.participant-shell{display:block;width:min(860px,100%);margin:0 auto}
.participant-shell .reveal-card{width:100%;margin:0 auto}
.reveal-card{
  background:linear-gradient(180deg,rgba(22,66,91,.78),rgba(32,92,118,.63));
  color:#fff;position:relative;overflow:hidden;
}
.reveal-card::before{content:'';position:absolute;inset:0;background:radial-gradient(circle at top,rgba(255,255,255,.18),transparent 55%);pointer-events:none}
.kicker{display:inline-flex;align-items:center;gap:10px;padding:8px 12px;border-radius:999px;background:rgba(255,255,255,.12);font-weight:700;margin-bottom:12px}
.reveal-card h1{color:#fff;font-size:clamp(2rem,4vw,3rem);margin-bottom:10px}
.reveal-card .lead{color:rgba(255,255,255,.92)}
.reveal-stage{position:relative;margin:26px auto 20px;max-width:560px;padding:0 42px}
.slot{
  height:130px;border:4px solid rgba(255,228,188,.8);border-radius:28px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(180deg,rgba(79,28,33,.92),rgba(128,32,43,.92));
  color:#fff7ea;font-size:clamp(2rem,5.4vw,3.5rem);font-weight:900;letter-spacing:.03em;
  box-shadow:inset 0 0 0 7px rgba(255,240,210,.45),0 18px 28px rgba(0,0,0,.18);overflow:hidden;text-shadow:0 2px 0 rgba(0,0,0,.2)
}
.slot.rolling{animation:pulse .35s infinite alternate}
.slot.finished{animation:pop .5s ease}
.reel-decoration{position:absolute;top:50%;transform:translateY(-50%);width:54px;height:54px;border-radius:50%;background:radial-gradient(circle,#f9df7b,#c18d24);box-shadow:0 0 0 8px rgba(255,240,210,.28)}
.reel-decoration.left{left:0}.reel-decoration.right{right:0}
.reveal-actions{display:flex;justify-content:center;align-items:center;margin:0 auto 20px}.reveal-actions form{margin:0}.reveal-btn{min-width:320px}.hidden{display:none!important}
.info-pill{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:rgba(255,251,244,.85);padding:12px 16px;border-radius:16px;color:#314d57;border:1px solid rgba(255,255,255,.5)}
.result-card{background:rgba(255,250,242,.96)}
.result-banner{display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;background:linear-gradient(180deg,#fff7e9,#f6ebd9);border:1px solid rgba(199,155,71,.45);border-radius:22px;padding:18px 20px;margin-bottom:20px}
.result-tag{display:inline-flex;align-items:center;gap:14px;border-radius:999px;padding:15px 24px;background:#fff;border:2px solid rgba(199,155,71,.55);box-shadow:inset 0 0 0 4px rgba(247,238,223,.6)}
.result-tag strong,.winner{font-size:clamp(2rem,5vw,3rem);font-family:Georgia,'Times New Roman',serif;color:var(--red)}
.winner{margin:10px 0 22px}
.helper-panel{display:grid;gap:16px}
.helper-grid{display:grid;grid-template-columns:1fr;gap:22px}
.panel-title{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:16px 0}
.stat{background:rgba(255,255,255,.62);border:1px solid var(--line);border-radius:18px;padding:15px;text-align:center}
.stat strong{display:block;font-size:1.8rem;color:#173140}
.share-list{display:grid;gap:12px}
.share-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px;align-items:center;border:1px solid var(--line);border-radius:18px;padding:12px 14px;background:rgba(255,255,255,.58)}
.share-row code,.commit code{display:block;overflow-wrap:anywhere;background:#f2eee6;padding:8px 10px;border-radius:10px;margin-top:8px;font-size:.82rem}
.copy{background:#ece6da;color:var(--green);white-space:nowrap}
.opening-code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:clamp(1.3rem,4vw,2.2rem);font-weight:900;letter-spacing:.08em;margin:18px 0;color:var(--red)}
.warning-box{border:2px solid #d8b363;background:#fff6df;padding:22px;border-radius:20px;margin:18px 0 28px}
.commit{border:1px dashed #b9ad99;background:#faf6ef;padding:16px;border-radius:16px;margin:22px 0}
.verified{background:#dcefe3;border:1px solid #afd1bb;padding:14px;border-radius:14px;font-weight:800}
.final-sheet{max-width:920px;margin-inline:auto}
.final-table{width:100%;border-collapse:collapse;margin:22px 0;font-size:1.1rem;background:rgba(255,255,255,.55);border-radius:18px;overflow:hidden}
.final-table td{padding:14px;border-bottom:1px solid var(--line)}
.final-table tr:last-child td{border-bottom:0}
.final-table td:nth-child(2){width:44px;text-align:center}
.code-input{text-transform:uppercase;text-align:center;font-family:ui-monospace,monospace;font-size:1.1rem;letter-spacing:.05em}.flash{padding:13px 15px;border-radius:14px;margin-bottom:16px}.flash.error{color:#8d2630;background:#f8dfe1}.flash.ok{background:#dcefe3}.error-text{display:block;width:max-content;max-width:100%;margin:12px auto 0;padding:8px 12px;border-radius:12px;color:#8d2630;background:#f8dfe1}.back{display:inline-block;margin-bottom:14px;color:#fff;text-decoration:none;font-weight:800;text-shadow:0 1px 2px rgba(0,0,0,.35)}.actions{margin-top:24px}footer{text-align:center;color:#fff;padding:20px;text-shadow:0 1px 2px rgba(0,0,0,.35)}.inline{display:inline}.test-card{border-color:#bd6b72}
.icon-bullets{padding-left:18px;margin:12px 0 0}
.icon-bullets li{margin:8px 0}
@keyframes pulse{from{transform:scale(.99)}to{transform:scale(1.015)}}
@keyframes pop{0%{transform:scale(.8)}70%{transform:scale(1.08)}100%{transform:scale(1)}}

@media(max-width:980px){
  .grid.two,.grid.dashboard{grid-template-columns:1fr}
  .helper-grid{grid-template-columns:1fr}
  .top{padding-inline:14px;min-height:68px}
  .top-nav{display:none}
  .wrap{margin-top:18px}
}
@media(max-width:760px){
  .card,.hero,.hero-card{padding:18px;border-radius:22px}
  .brand strong{font-size:1.18rem}.brand small{font-size:.87rem}
  .share-row{grid-template-columns:1fr 1fr}
  .share-row>div{grid-column:1/-1}
  .slot{height:110px;font-size:clamp(1.8rem,10vw,2.8rem)}
  .reveal-stage{padding:0 26px}
  .reel-decoration{width:38px;height:38px}
  .button-row>*{width:100%}
  .reveal-btn,.huge{width:100%}
  .stat-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:520px){
  .top{gap:12px}
  .brand{gap:10px}
  .brand-hat{font-size:1.6rem}
  .participant-shell{gap:16px}
  .result-banner{padding:14px}
  .result-tag{width:100%;justify-content:center;flex-wrap:wrap;text-align:center}
  .stat-grid{grid-template-columns:1fr}
}
@media print{
  .test-banner,.top,footer,.copy,.back,.button-row,.actions,.danger,.button,.page-backdrop{display:none!important}
  body{background:#fff!important}
  .wrap{width:100%;margin:0}
  .card,.hero,.hero-card{box-shadow:none;border:0;background:#fff}
  .warning-box{break-inside:avoid}
  .share-list{display:none}.opening-code{font-size:28pt}.final-table{font-size:14pt}
}

/* Administration 2FA */
.totp-input{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:1.5rem;letter-spacing:.28em;text-align:center;font-weight:800}
.qr-wrap{display:inline-flex;padding:16px;background:#fff;border-radius:22px;border:1px solid var(--line);box-shadow:0 12px 28px rgba(20,30,37,.12);margin:16px auto}
.qr-wrap img{display:block;max-width:100%;height:auto;image-rendering:pixelated}
.manual-secret{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-weight:900;letter-spacing:.12em;overflow-wrap:anywhere;background:#f3ecdf;border:1px dashed #bd9a5e;padding:14px 16px;border-radius:14px;margin:12px 0 20px;color:#603c24}
.recovery-codes{list-style:none;padding:0;margin:18px auto;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;max-width:560px}
.recovery-codes li{background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px}
.recovery-codes code{font-size:1.05rem;font-weight:850;letter-spacing:.08em;color:#573d2a}
@media(max-width:560px){.recovery-codes{grid-template-columns:1fr}.totp-input{font-size:1.3rem}}

.error-text:empty{display:none!important}
[hidden]{display:none!important}

/* Pages participant : identité visuelle uniquement, aucun menu d'administration */
.participant-top{
  width:100%;
  display:flex;
  justify-content:center;
  align-items:center;
  padding:14px 18px 6px;
  background:transparent;
  position:relative;
  z-index:4;
}
.participant-brand{
  display:inline-flex;
  align-items:center;
  gap:10px;
  padding:10px 18px;
  color:#fff;
  background:rgba(17,33,45,.64);
  border:1px solid rgba(255,255,255,.16);
  border-radius:18px;
  backdrop-filter:blur(9px);
  box-shadow:0 10px 28px rgba(0,0,0,.18);
  text-align:left;
}
.participant-brand strong{display:block;font-size:1.18rem;line-height:1.1}
.participant-brand small{display:block;color:rgba(255,255,255,.84);font-size:.82rem;margin-top:2px}
.participant-page .wrap{margin-top:12px}
@media(max-width:520px){
  .participant-top{padding:10px 12px 2px}
  .participant-brand{padding:8px 14px;border-radius:16px}
  .participant-brand .brand-hat{font-size:1.45rem}
  .participant-brand strong{font-size:1.05rem}
}
@media print{.participant-top{display:none!important}}
