/* Live-Welt · Bühne. Eine Welt statt Folien: das Diorama füllt den Bildschirm, die Kamera fährt per transform,
   Texte liegen als große Zeilen darüber. Farben und Schrift stehen oben als Variablen, je Projekt hier anpassen. */
:root{
  --ink:#ffffff;
  --ink-soft:rgba(255,255,255,.84);
  --ink-dark:#0b1530;     /* Schrift auf hellen Karten */
  --night:#0b1530;
  --accent:#ff7a1a;       /* Vorzeile, Schilder, Knöpfe, Fokus */
  --accent-ink:#1a0e05;   /* Schrift auf Akzentflächen */
  --deep:#1d4e89;         /* Zusatzzeilen auf hellen Karten */
  --bar:#6cc4ff;          /* Balken der Abstimmung */
  --live:#ff3b30;         /* Live-Punkt */
  --light:#ffc940;        /* Handy-Licht */
  --go:#3ccf86;
  --glass:rgba(8,16,40,.68);
  --font:"Archivo","Helvetica Neue",Arial,sans-serif;
  --move:1.8s;
  color-scheme:dark;
}
@media (prefers-reduced-motion: reduce){ :root{ --move:.01s } }

*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{height:100%;margin:0}
body{background:var(--night);color:var(--ink);font-family:var(--font);overflow:hidden;-webkit-font-smoothing:antialiased}
button{font:inherit}

/* Welt und Kamera */
#stage{position:fixed;inset:0;overflow:hidden;background:var(--night)}
#world{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform;transition:transform var(--move) cubic-bezier(.65,.02,.25,1)}
.world-img{position:absolute;inset:0;width:100%;height:100%;display:block;transition:opacity 2.2s ease}
#img-day{opacity:0}
body.day #img-day{opacity:1}
#labels .label{position:absolute;transform:translate(-50%,-100%);padding:.35em .8em;border-radius:999px;background:var(--accent);color:var(--accent-ink);font-weight:900;font-size:96px;letter-spacing:.02em;white-space:nowrap;opacity:0;transition:opacity .8s ease;box-shadow:0 10px 40px rgba(0,0,0,.45)}
#labels .label::after{content:"";position:absolute;left:50%;top:100%;transform:translateX(-50%);border:30px solid transparent;border-top-color:var(--accent)}
#labels .label.on{opacity:1}

/* Detailszene */
#plate{position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity .9s ease}
#plate img{width:100%;height:100%;object-fit:cover;transform:scale(1.08);transition:transform 9s ease-out}
#plate.on{opacity:1}
#plate.on img{transform:scale(1)}
#shade{position:absolute;inset:0;pointer-events:none;background:
  linear-gradient(90deg,rgba(4,10,18,.62) 0%,rgba(4,10,18,0) 48%),
  linear-gradient(0deg,rgba(4,10,18,.55) 0%,rgba(4,10,18,0) 42%);opacity:.95}
body.text-right #shade{background:
  linear-gradient(270deg,rgba(4,10,18,.62) 0%,rgba(4,10,18,0) 48%),
  linear-gradient(0deg,rgba(4,10,18,.55) 0%,rgba(4,10,18,0) 42%)}
/* Text oben: der obere Rand wird dunkler statt des unteren, sonst steht Weiß auf hellem Tageshimmel */
body.text-top #shade{background:
  linear-gradient(90deg,rgba(4,10,18,.62) 0%,rgba(4,10,18,0) 50%),
  linear-gradient(180deg,rgba(4,10,18,.5) 0%,rgba(4,10,18,0) 48%)}
body.text-top.text-right #shade{background:
  linear-gradient(270deg,rgba(4,10,18,.62) 0%,rgba(4,10,18,0) 50%),
  linear-gradient(180deg,rgba(4,10,18,.5) 0%,rgba(4,10,18,0) 48%)}

#ki-badge{position:fixed;right:max(14px,env(safe-area-inset-right));bottom:max(12px,env(safe-area-inset-bottom));padding:.28rem .6rem;border-radius:6px;background:rgba(0,0,0,.55);color:rgba(255,255,255,.85);font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;z-index:6}

/* Texte */
#tx{position:fixed;z-index:5;max-width:min(64rem,88vw);padding:0 max(4vw,20px);pointer-events:none;transition:opacity .6s ease, transform .6s ease}
#tx.hide{opacity:0;transform:translateY(12px)}
#tx.pos-bl{left:0;bottom:9vh}
#tx.pos-tl{left:0;top:8vh}
#tx.pos-tr{right:0;top:8vh;text-align:right}
#tx.pos-br{right:0;bottom:9vh;text-align:right}
#tx.pos-c{left:50%;top:50%;transform:translate(-50%,-50%);text-align:center}
#tx.pos-c.hide{transform:translate(-50%,-46%)}
#tx .lead{margin:0 0 .6rem;font-size:clamp(.95rem,1.6vw,1.45rem);font-weight:900;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);text-shadow:0 2px 12px rgba(0,0,0,.6)}
#tx .big{margin:0;font-size:clamp(2.3rem,6.4vw,6.2rem);line-height:1.02;font-weight:900;letter-spacing:-.01em;text-wrap:balance;text-shadow:0 4px 30px rgba(0,0,0,.55)}
#tx .small{margin:1.1rem 0 0;max-width:46rem;font-size:clamp(1rem,1.75vw,1.6rem);line-height:1.45;font-weight:400;color:var(--ink-soft);text-shadow:0 2px 16px rgba(0,0,0,.7)}
#tx.pos-tr .small,#tx.pos-br .small{margin-left:auto}
#tx .small:empty,#tx .lead:empty{display:none}
#tx .reveal{display:inline-block;margin-top:1.1rem;padding:.5rem 1rem;border-radius:12px;background:var(--glass);font-size:clamp(1.05rem,1.9vw,1.75rem);font-weight:700;color:#fff;border-left:8px solid var(--go)}
/* Neben Ergebnis oder Ideenwand bleibt der Text links und etwas kleiner */
body.board-on #tx{max-width:min(60rem,56vw)}
body.board-on #tx .big{font-size:clamp(2rem,4.8vw,4.8rem)}

/* Ergebnisse und Quiz */
#board{position:fixed;z-index:5;right:max(3vw,16px);top:50%;transform:translateY(-50%);width:min(34rem,40vw);padding:1.3rem 1.4rem;border-radius:18px;background:var(--glass);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);box-shadow:0 20px 60px rgba(0,0,0,.45)}
.board-title{margin:0 0 .9rem;font-size:.85rem;font-weight:900;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}
.bars{list-style:none;margin:0;padding:0;display:grid;gap:.75rem}
.bar{display:grid;gap:.35rem}
.bar-top{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;font-size:clamp(1rem,1.6vw,1.45rem);font-weight:700}
.bar-top .pct{font-variant-numeric:tabular-nums;font-weight:900}
.bar-track{height:clamp(14px,1.6vw,22px);border-radius:999px;background:rgba(255,255,255,.14);overflow:hidden}
.bar-fill{height:100%;width:0;border-radius:inherit;background:var(--bar);transition:width .6s ease}
.bar.win .bar-fill{background:var(--go)}
.bar.dim{opacity:.38}
.bar.win .bar-top{color:#fff}
.bar.win .bar-top::after{content:"✓";margin-left:.4rem;color:var(--go)}
.bar button{all:unset;cursor:pointer}
.board-foot{margin:.9rem 0 0;font-size:.95rem;color:var(--ink-soft)}
.board-foot:empty{display:none}
.self-pick{display:grid;gap:.6rem}
.self-pick button{padding:.8rem 1rem;border-radius:12px;border:2px solid rgba(255,255,255,.35);background:rgba(255,255,255,.08);color:#fff;font-size:1.15rem;font-weight:700;text-align:left;cursor:pointer}
.self-pick button:hover{border-color:var(--accent)}

/* Ideenwand */
#wall{position:fixed;z-index:5;right:max(3vw,16px);top:7vh;bottom:9vh;width:min(46rem,52vw);overflow:hidden;display:flex;flex-direction:column;justify-content:flex-start}
.ideas{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.7rem;align-content:start}
.ideas li{padding:.85rem 1rem;border-radius:14px;background:rgba(255,255,255,.93);color:var(--ink-dark);font-size:clamp(.95rem,1.25vw,1.2rem);line-height:1.35;font-weight:700;box-shadow:0 10px 30px rgba(0,0,0,.35);animation:pop .5s ease both;cursor:default;overflow-wrap:anywhere}
.ideas li small{display:block;margin-top:.35rem;font-size:.75em;font-weight:900;letter-spacing:.06em;text-transform:uppercase;color:var(--deep)}
.ideas li:nth-child(3n+2){background:rgba(255,238,224,.95)}
.wall-empty{margin:0;padding:1rem 1.2rem;border-radius:14px;background:var(--glass);color:var(--ink-soft);font-size:1.1rem}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion: reduce){.ideas li{animation:none}}

/* Mitmachen */
#join{position:fixed;z-index:6;right:max(2vw,14px);bottom:max(5vh,46px);display:flex;align-items:center;gap:1rem;padding:.8rem 1rem .8rem .8rem;border-radius:18px;background:rgba(255,255,255,.96);color:var(--ink-dark);box-shadow:0 16px 50px rgba(0,0,0,.45)}
#join img{width:clamp(96px,10vw,150px);height:auto;display:block;border-radius:8px}
.join-lead{margin:0;font-size:.8rem;font-weight:900;letter-spacing:.12em;text-transform:uppercase;color:var(--deep)}
.join-url{margin:.25rem 0 0;font-size:clamp(1rem,1.4vw,1.35rem);font-weight:900}
.join-count{margin:.3rem 0 0;font-size:.95rem;font-weight:700;color:#3a4b5a}
.join-count:empty{display:none}
body.board-on #join{bottom:auto;top:max(3vh,14px)}
body.board-on.join-on #board{top:auto;bottom:max(10vh,74px);transform:none}
body.wall-on #join{top:auto;right:auto;left:max(4vw,20px);bottom:max(10vh,74px)}

/* Zähler „N in der Welt“ */
.join-count .n{display:inline-block;font-weight:900;color:var(--deep);font-variant-numeric:tabular-nums}
.join-count.pop .n{animation:zahl .6s ease}
@keyframes zahl{0%{transform:scale(1)}35%{transform:scale(1.35)}100%{transform:scale(1)}}

/* Startfolie: QR-Code groß, darunter live, wie viele schon in der Welt sind */
#join.join-hero{right:max(4vw,24px);top:50%;bottom:auto;transform:translateY(-46%);flex-direction:column;align-items:center;gap:.9rem;padding:1.6rem 1.8rem 1.4rem;border-radius:26px;text-align:center}
#join.join-hero img{width:clamp(200px,21vw,360px)}
#join.join-hero .join-lead{font-size:clamp(.9rem,1.1vw,1.15rem)}
#join.join-hero .join-url{font-size:clamp(1.05rem,1.45vw,1.55rem)}
#join.join-hero .join-count{margin-top:.5rem;font-size:clamp(1.05rem,1.4vw,1.5rem);color:var(--ink-dark)}
#join.join-hero .join-count .n{display:block;font-size:clamp(2.6rem,4.6vw,4.8rem);line-height:1}
body.hero-on #tx{max-width:min(58rem,56vw)}

/* Handy-Licht: Lichtpunkte in der Welt und Zähler */
#glows{position:absolute;inset:0;pointer-events:none}
#glows i{position:absolute;width:calc(28px * var(--s,1));height:calc(28px * var(--s,1));margin:-14px 0 0 -14px;border-radius:50%;background:radial-gradient(circle,#fffdf0 0%,#ffe29a 45%,rgba(255,209,102,0) 72%);box-shadow:0 0 40px 18px rgba(255,214,110,.6);animation:licht-an .8s ease-out both,funkeln 2.8s ease-in-out var(--d,0s) infinite}
@keyframes licht-an{from{opacity:0;transform:scale(.2)}to{opacity:1;transform:scale(1)}}
@keyframes funkeln{0%,100%{filter:brightness(1)}50%{filter:brightness(1.35)}}
@media (prefers-reduced-motion: reduce){#glows i{animation:none}}
#lights{position:fixed;z-index:5;right:max(3vw,16px);top:50%;transform:translateY(-50%);min-width:min(22rem,34vw);padding:1.4rem 1.6rem;border-radius:22px;background:var(--glass);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.45)}
.lights-n{margin:0;font-size:clamp(3.4rem,7vw,7rem);line-height:1;font-weight:900;color:var(--light);text-shadow:0 0 40px rgba(255,209,102,.6);font-variant-numeric:tabular-nums}
.lights-label{margin:.3rem 0 0;font-size:clamp(1.1rem,1.6vw,1.6rem);font-weight:900}
.lights-total{margin:.3rem 0 0;color:var(--ink-soft);font-size:clamp(.95rem,1.2vw,1.2rem)}
.lights-total:empty{display:none}
body.lights-on #tx{max-width:min(56rem,58vw)}

/* Schneekugel: Flocken über der ganzen Welt, Zähler rechts */
#snow{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
#snowbox{position:fixed;z-index:5;right:max(3vw,16px);top:50%;transform:translateY(-50%);min-width:min(22rem,34vw);padding:1.4rem 1.6rem;border-radius:22px;background:var(--glass);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.45)}
.snow-n{margin:0;font-size:clamp(3rem,6vw,6rem);line-height:1;font-weight:900;color:#fff;text-shadow:0 0 30px rgba(170,215,255,.7);font-variant-numeric:tabular-nums}
.snow-label{margin:.35rem 0 0;font-size:clamp(1.1rem,1.6vw,1.6rem);font-weight:900}
body.snow-on #join{bottom:auto;top:max(3vh,14px)}

/* Reaktionen aus dem Saal: steigen rechts über der Welt auf */
#reacts{position:fixed;inset:0;z-index:6;pointer-events:none;overflow:hidden}
#reacts .react{position:absolute;bottom:-60px;font-size:clamp(30px,3.2vw,60px);line-height:1;filter:drop-shadow(0 4px 10px rgba(0,0,0,.45));animation:steigen var(--dauer,3.8s) cubic-bezier(.2,.6,.35,1) both}
@keyframes steigen{0%{opacity:0;transform:translate(0,0) scale(.5)}12%{opacity:1;transform:translate(calc(var(--dx) * .2),-8vh) scale(1.08)}100%{opacity:0;transform:translate(var(--dx),-72vh) scale(.95)}}
@media (prefers-reduced-motion: reduce){#reacts .react{animation-duration:2s}}

/* Verbindung weg: unübersehbar oben in der Mitte */
#offline{position:fixed;z-index:9;left:50%;top:max(14px,env(safe-area-inset-top));transform:translateX(-50%);max-width:calc(100% - 32px);padding:.7rem 1.1rem;border-radius:12px;background:#b3261e;color:#fff;font-weight:900;font-size:clamp(.95rem,1.2vw,1.15rem);text-align:center;box-shadow:0 12px 40px rgba(0,0,0,.5)}

/* Vortragen: Bühne anmelden */
#controls #present{width:auto;height:44px;padding:0 1rem;border-radius:999px;background:var(--accent);color:var(--accent-ink);font-size:.9rem;font-weight:900;letter-spacing:.04em}
#controls #present:hover{background:var(--accent);filter:brightness(1.1)}
#login{position:fixed;inset:0;z-index:12;display:grid;place-items:center;padding:16px;background:rgba(4,8,14,.72);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
#login form{width:min(26rem,100%);padding:1.6rem 1.5rem;border-radius:18px;background:#141a26;border:1px solid #2a3446;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.login-lead{margin:0 0 .3rem;font-size:.8rem;font-weight:900;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}
#login h2{margin:0;font-size:1.6rem;font-weight:900}
.login-hint{margin:.6rem 0 1rem;color:var(--ink-soft);font-size:.95rem;line-height:1.45}
#login input{width:100%;padding:.8rem .9rem;border-radius:12px;border:2px solid #2a3446;background:#0e131d;color:#fff;font:inherit;font-size:1.05rem}
#login input:focus{outline:none;border-color:var(--accent)}
.login-actions{display:flex;justify-content:flex-end;gap:.6rem;margin-top:1rem}
.login-actions button{min-height:44px;padding:0 1.1rem;border-radius:999px;border:0;font-weight:900;cursor:pointer}
.login-actions button[type=submit]{background:var(--accent);color:var(--accent-ink)}
.login-cancel{background:rgba(255,255,255,.12);color:#fff}

/* Steuerung, Live-Punkt, Notizen */
#controls{position:fixed;z-index:7;left:50%;bottom:max(12px,env(safe-area-inset-bottom));transform:translateX(-50%);display:flex;align-items:center;gap:.6rem;padding:.3rem .45rem;border-radius:999px;background:rgba(0,0,0,.5);transition:opacity .4s ease}
#controls button{width:44px;height:44px;border-radius:50%;border:0;background:rgba(255,255,255,.14);color:#fff;font-size:1.6rem;line-height:1;cursor:pointer}
#controls button:hover{background:rgba(255,255,255,.28)}
#controls button:disabled{opacity:.3;cursor:default}
#pos{min-width:4.5rem;text-align:center;font-size:.85rem;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink-soft)}
body.stage-mode.idle #controls{opacity:0}
body.stage-mode.idle{cursor:none}
#live-dot{position:fixed;z-index:7;left:max(14px,env(safe-area-inset-left));bottom:max(14px,env(safe-area-inset-bottom));padding:.25rem .6rem;border-radius:999px;background:rgba(0,0,0,.55);font-size:.72rem;font-weight:900;letter-spacing:.1em}
#live-dot.on::before{content:"";display:inline-block;width:.55rem;height:.55rem;margin-right:.4rem;border-radius:50%;background:var(--live);box-shadow:0 0 10px var(--live)}
#live-dot.off::before{content:"";display:inline-block;width:.55rem;height:.55rem;margin-right:.4rem;border-radius:50%;background:#888}
#notes{position:fixed;z-index:9;left:max(2vw,14px);top:max(2vh,14px);width:min(36rem,92vw);max-height:70vh;overflow:auto;padding:1rem 1.2rem;border-radius:14px;background:rgba(0,0,0,.86);font-size:1.05rem;line-height:1.5}
#notes b{color:var(--accent)}
#black{position:fixed;inset:0;z-index:10;background:#000}
:focus-visible{outline:3px solid var(--accent);outline-offset:3px}

/* Schmale Bildschirme (Selbstklicken am Handy) */
@media (max-width:820px){
  #tx,body.board-on #tx{max-width:100%;padding:0 18px}
  #ki-badge{bottom:auto;top:max(8px,env(safe-area-inset-top));right:max(10px,env(safe-area-inset-right));font-size:.62rem}
  #tx.pos-tl,#tx.pos-tr{top:6vh}
  #tx.pos-bl,#tx.pos-br{bottom:84px}
  #shade,body.text-right #shade,body.text-top #shade,body.text-top.text-right #shade{background:linear-gradient(0deg,rgba(4,10,18,.78) 0%,rgba(4,10,18,0) 60%),linear-gradient(180deg,rgba(4,10,18,.55) 0%,rgba(4,10,18,0) 35%)}
  #board{left:16px;right:16px;width:auto;top:auto;bottom:84px;transform:none;padding:1rem}
  #wall{left:16px;right:16px;width:auto;top:auto;bottom:84px;max-height:45vh}
  .ideas{grid-template-columns:1fr}
  #join,#join.join-hero{left:16px;right:16px;top:auto;bottom:auto;top:max(12px,env(safe-area-inset-top));transform:none;flex-direction:row;text-align:left;padding:.8rem 1rem .8rem .8rem}
  #join.join-hero img{width:110px}
  #lights{left:16px;right:16px;top:auto;bottom:84px;transform:none;min-width:0}
  #snowbox{left:16px;right:16px;top:auto;bottom:84px;transform:none;min-width:0}
  body.lights-on #tx{max-width:100%}
  #join.join-hero .join-count .n{display:inline-block;font-size:1.6rem}
  body.hero-on #tx{max-width:100%}
  /* QR-Kasten oben (etwa am Schluss der Selbstklick-Fassung): Text darunter, nicht dahinter */
  body.join-on:not(.board-on) #tx.pos-tl,body.join-on:not(.board-on) #tx.pos-tr{top:calc(max(12px,env(safe-area-inset-top)) + 150px)}
  body.board-on #join{display:none}
  body.board-on #tx.pos-tl,body.board-on #tx.pos-tr{top:4vh}
  body.board-on #tx.pos-bl,body.board-on #tx.pos-br{top:4vh;bottom:auto}
  body.board-on #tx .small{display:none}
}
