
:root{
  --bg:#0f1b16;
  --panel:#162620;
  --card:#14231d;
  --ink:#e6e2d6;
  --muted:rgba(230,226,214,.72);
  --accent:#9c8f6a;
  --ok:#7fc29a;
  --bad:#ff9b9b;
  --shadow:rgba(0,0,0,.45);
}

*{ box-sizing:border-box; }
html,body{ height:100%; }
body{
  margin:0;
  font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial;
  color:var(--ink);
  background:
    radial-gradient(1200px 800px at 20% 0%, rgba(156,143,106,.10), transparent 60%),
    radial-gradient(900px 700px at 90% 20%, rgba(127,194,154,.10), transparent 55%),
    var(--bg);
  overflow-x:hidden;
  touch-action: manipulation;
  -webkit-tap-highlight-color: rgba(0,0,0,0);
}

.fog{
  position:fixed;
  inset:-25%;
  pointer-events:none;
  z-index:0;
  background:
    radial-gradient(circle at 25% 25%, rgba(230,226,214,.06), transparent 42%),
    radial-gradient(circle at 75% 45%, rgba(230,226,214,.05), transparent 46%),
    radial-gradient(circle at 45% 80%, rgba(230,226,214,.04), transparent 52%);
  animation:fogMove 70s linear infinite;
  mix-blend-mode: screen;
  opacity:.55;
}
@keyframes fogMove{
  0%{ transform: translateX(0) translateY(0); }
  50%{ transform: translateX(-8%) translateY(-4%); }
  100%{ transform: translateX(0) translateY(0); }
}
.dust{
  position:fixed;
  inset:0;
  pointer-events:none;
  z-index:0;
  background-image: radial-gradient(circle, rgba(255,255,255,0.08) 1px, transparent 1px);
  background-size: 140px 140px;
  animation:dustFloat 90s linear infinite;
  opacity: .25;
  mix-blend-mode: screen;
}
@keyframes dustFloat{
  from{ background-position:0 0; }
  to{ background-position: 260px 520px; }
}

.app{
  position:relative;
  z-index:1;
  min-height:100%;
  display:flex;
  flex-direction:column;
}

.top{
  border-bottom:1px solid rgba(156,143,106,.35);
  background: rgba(0,0,0,.12);
}
.posterHeader{ width:100%; display:block; height:auto; }

.stage{
  width:min(920px, 100%);
  margin: 0 auto;
  padding: 18px;
  flex:1;
}

.foot{
  text-align:center;
  padding: 14px 10px 18px 10px;
  border-top:1px solid rgba(156,143,106,.25);
  background: rgba(0,0,0,.08);
}

.screen{ display:none; }
.screen.is-active{ display:block; animation: fadeIn .18s ease; }
@keyframes fadeIn{
  from{ opacity:0; transform: translateY(6px); }
  to{ opacity:1; transform: translateY(0); }
}

.bar{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:12px;
  padding: 10px 2px 12px 2px;
}
.title{
  font-weight:900;
  letter-spacing:2px;
  text-transform:uppercase;
}
.date{ color:var(--muted); font-size:12px; letter-spacing:1px; }
.muted{ color:var(--muted); }

.card{
  background: linear-gradient(180deg, rgba(22,38,32,.92), rgba(20,35,29,.92));
  border:1px solid rgba(156,143,106,.35);
  border-radius:16px;
  box-shadow: 0 22px 60px var(--shadow);
  padding: 16px 16px 14px 16px;
  margin-bottom: 14px;
  backdrop-filter: blur(6px);
}
h2,h3{ margin: 6px 0 10px 0; letter-spacing:.4px; }
p{ margin: 8px 0; line-height:1.35; }

.row{
  display:flex;
  gap:8px;
  align-items:center;
  justify-content:space-between;
  flex-wrap:wrap;
  margin-top: 12px;
}

.pill{
  display:inline-block;
  padding: 4px 10px;
  border-radius:999px;
  border:1px solid rgba(156,143,106,.55);
  background: rgba(0,0,0,.18);
  font-size: 12px;
  letter-spacing:.4px;
}

.btn{
  padding: 10px 14px;
  border-radius: 12px;
  border: none;
  background: linear-gradient(180deg, rgba(127,194,154,1), rgba(127,194,154,.86));
  color: #0f1b16;
  font-weight: 900;
  letter-spacing:.4px;
  cursor:pointer;
  box-shadow: 0 10px 22px rgba(0,0,0,.25);
  touch-action: manipulation;
}
.btn:active{ transform: translateY(1px); }
.btn[disabled]{ opacity:.45; cursor:not-allowed; box-shadow:none; }
.btn-ghost{
  background: transparent;
  color: var(--ink);
  border: 1px solid rgba(156,143,106,.55);
  box-shadow: none;
  font-weight: 800;
}
.btn-ghost:hover{ background: rgba(0,0,0,.12); }

.helpers{
  display:grid;
  grid-template-columns: repeat(3, minmax(0,1fr));
  gap:8px;
  margin-top: 10px;
}
@media (max-width: 680px){
  .helpers{ grid-template-columns: repeat(2, minmax(0,1fr)); }
}
@media (max-width: 440px){
  .helpers{ grid-template-columns: 1fr; }
}
.helper{
  display:block;
  text-decoration:none;
  text-align:center;
  padding: 12px 10px;
  border-radius: 14px;
  border:1px solid rgba(156,143,106,.75);
  background: rgba(0,0,0,.20);
  color: var(--ink);
  font-weight: 900;
  position:relative;
}
.helper.used{
  border-color: rgba(127,194,154,.9);
  box-shadow: 0 0 0 2px rgba(127,194,154,.12) inset;
}
.helper.used::after{
  content:"✓";
  position:absolute;
  top:8px;
  right:10px;
  width:22px;
  height:22px;
  border-radius:999px;
  border:1px solid rgba(127,194,154,.8);
  background: rgba(127,194,154,.16);
  display:flex;
  align-items:center;
  justify-content:center;
  color: rgba(127,194,154,1);
}

.audioRow{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:12px;
  flex-wrap:wrap;
  margin-top: 12px;
}
.audioLeft, .audioRight{
  display:flex;
  align-items:center;
  gap:8px;
}
.switch{
  width:46px;
  height:26px;
  border-radius:999px;
  border:1px solid rgba(156,143,106,.65);
  background: rgba(0,0,0,.18);
  cursor:pointer;
  position:relative;
}
.switch[aria-checked="true"]{ border-color: rgba(127,194,154,.9); }
.knob{
  width:18px;
  height:18px;
  border-radius:999px;
  position:absolute;
  top:50%;
  transform: translateY(-50%);
  left:4px;
  background: rgba(156,143,106,.95);
  transition: left .15s ease, background .15s ease;
}
.switch[aria-checked="true"] .knob{
  left:24px;
  background: rgba(127,194,154,.95);
}
#volSlider{ width:160px; }

.field{ margin-top: 10px; }
label{ display:block; font-weight:900; margin-bottom:6px; letter-spacing:.3px; }
input, textarea{
  width:100%;
  border-radius:12px;
  border:1px solid rgba(156,143,106,.55);
  background: rgba(0,0,0,.22);
  color: var(--ink);
  padding: 12px 12px;
  font-size:16px;
  outline:none;
  touch-action: manipulation;
}
textarea{ min-height: 74px; resize: vertical; }
input:focus, textarea:focus{
  border-color: rgba(127,194,154,.95);
  box-shadow: 0 0 0 3px rgba(127,194,154,.10);
}

.err{ color: var(--bad); font-weight: 900; min-height: 1.2em; }

/* Accordion */
.accordion{
  display:flex;
  flex-direction:column;
  gap:8px;
  margin-bottom: 16px;
}
.accItem{
  border:1px solid rgba(156,143,106,.45);
  border-radius:14px;
  overflow:hidden;
  background: rgba(0,0,0,.18);
}
.accTitle{
  width:100%;
  text-align:left;
  padding: 12px 12px;
  border: none;
  background: rgba(0,0,0,.22);
  color: var(--ink);
  font-weight: 900;
  letter-spacing:1px;
  cursor:pointer;
}
.accBody{
  display:none;
  padding: 12px 12px;
}
.accItem.open .accBody{ display:block; }
.hintRow{ margin-bottom: 10px; }
.hintWho{ font-weight: 900; margin-bottom: 6px; }
.hintABC{ padding: 7px 10px; border-left:3px solid rgba(127,194,154,.8); background: rgba(0,0,0,.18); margin-bottom:6px; border-radius:10px; }
.hintABC span{ display:inline-block; width:20px; font-weight: 900; }

/* Templates */
.templates{
  display:grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap:8px;
}
@media (max-width: 880px){
  .templates{ grid-template-columns: 1fr; }
}
.tpl{
  border:1px solid rgba(156,143,106,.35);
  border-radius:14px;
  background: rgba(0,0,0,.14);
  padding: 12px;
}
.tplHead{ font-weight: 900; letter-spacing:.6px; margin-bottom: 8px; }
.tplBody{ font-size: 14px; line-height:1.35; color: var(--muted); margin-bottom: 10px; }

/* Vault visuals */
.vault{
  display:flex;
  justify-content:center;
  margin-top: 12px;
}
.vaultRing{
  width:min(540px, 92vw);
  aspect-ratio: 1/1;
  border-radius: 22px;
  border:1px solid rgba(156,143,106,.55);
  background:
    radial-gradient(circle at 30% 30%, rgba(230,226,214,.08), transparent 55%),
    radial-gradient(circle at 70% 75%, rgba(0,0,0,.38), transparent 60%),
    linear-gradient(180deg, rgba(55,62,58,1), rgba(16,20,18,1));
  box-shadow: inset 0 0 0 6px rgba(0,0,0,.18), 0 26px 70px rgba(0,0,0,.42);
  position:relative;
  overflow:hidden;
  display:flex;
  align-items:center;
  justify-content:center;
}
.dialWrap{
  width:64%;
  aspect-ratio: 1/1;
  border-radius:999px;
  border:1px solid rgba(156,143,106,.6);
  background: radial-gradient(circle at 40% 40%, rgba(156,143,106,.14), rgba(0,0,0,.20));
  box-shadow: inset 0 0 0 10px rgba(0,0,0,.20);
  display:flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  user-select:none;
}
.dialDisk{
  width:86%;
  aspect-ratio: 1/1;
  border-radius:999px;
  border:1px solid rgba(230,226,214,.25);
  background:
    radial-gradient(circle at 30% 30%, rgba(230,226,214,.10), transparent 55%),
    linear-gradient(180deg, rgba(38,44,40,1), rgba(12,14,12,1));
  transform: rotate(var(--dialRot, 0deg));
  transition: transform .18s ease;
  position:relative;
  box-shadow: inset 0 0 0 8px rgba(0,0,0,.18);
}
.dialMarks{
  position:absolute; inset:0;
  border-radius:999px;
  background: repeating-conic-gradient(from 0deg, rgba(230,226,214,.14) 0deg 2deg, rgba(0,0,0,0) 2deg 10deg);
  opacity:.45;
  mask: radial-gradient(circle at center, transparent 0 48%, #000 52%);
}
.dialNeedle{
  position:absolute;
  left:50%; top:7%;
  width:8px; height:24px;
  background: rgba(230,226,214,.9);
  transform: translateX(-50%);
  border-radius:6px;
  box-shadow:0 10px 22px rgba(0,0,0,.35);
  opacity:.95;
}
.codeWindows{
  position:absolute;
  bottom:10%;
  left:50%;
  transform: translateX(-50%);
  display:flex;
  gap:8px;
  padding:10px 12px;
  border-radius:16px;
  background: rgba(0,0,0,.24);
  border:1px solid rgba(156,143,106,.35);
  box-shadow: 0 12px 28px rgba(0,0,0,.25);
}
.win{
  width: clamp(44px, 16vw, 56px); height: clamp(52px, 18vw, 62px);
  border-radius:14px;
  border:1px solid rgba(156,143,106,.8);
  background: rgba(0,0,0,.18);
  box-shadow: inset 0 0 0 2px rgba(0,0,0,.18);
  overflow:hidden;
}
.win input{
  width:100%; height:100%;
  text-align:center;
  font-size: clamp(24px, 7vw, 30px);
  font-weight: 900;
  border:none; background:transparent;
  outline:none; color: var(--ink);
  font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial;
}
.win input::placeholder{ color: rgba(230,226,214,.18); }

/* Steam */
.steam{
  position:absolute;
  inset:0;
  pointer-events:none;
  opacity:0;
  border-radius:22px;
}
.steam span{
  position:absolute;
  bottom:12%;
  left:50%;
  width:14px;
  height:14px;
  border-radius:999px;
  background: rgba(230,226,214,.20);
  box-shadow: 0 0 18px rgba(230,226,214,.12);
  transform: translateX(-50%);
  opacity:0;
}
.vaultRing.open .steam{ opacity:1; }
.vaultRing.open .steam span{ animation: steamRise .95s ease forwards; }
.vaultRing.open .steam span:nth-child(1){ left:42%; animation-delay:0.00s; }
.vaultRing.open .steam span:nth-child(2){ left:50%; animation-delay:0.06s; }
.vaultRing.open .steam span:nth-child(3){ left:58%; animation-delay:0.12s; }
.vaultRing.open .steam span:nth-child(4){ left:46%; animation-delay:0.18s; }
.vaultRing.open .steam span:nth-child(5){ left:54%; animation-delay:0.24s; }
@keyframes steamRise{
  0%{ transform: translateX(-50%) translateY(0) scale(0.9); opacity:0; }
  20%{ opacity:0.9; }
  100%{ transform: translateX(-50%) translateY(-180px) scale(2.3); opacity:0; }
}
.vaultRing.bad{ animation: shake .25s ease; }
@keyframes shake{
  0%{ transform: translateX(0); }
  25%{ transform: translateX(-4px); }
  50%{ transform: translateX(4px); }
  75%{ transform: translateX(-3px); }
  100%{ transform: translateX(0); }
}
.vaultRing.open .dialDisk{
  transition: transform .9s cubic-bezier(.16,.84,.18,1);
  transform: rotate(calc(var(--dialRot, 0deg) + 1080deg));
}

/* Door */
.door{
  display:flex;
  justify-content:center;
  margin-top: 12px;
}
.doorPanel{
  width:min(760px, 96vw);
  border-radius: 20px;
  border:1px solid rgba(156,143,106,.55);
  background:
    radial-gradient(520px 260px at 40% 30%, rgba(156,143,106,.16), transparent 60%),
    linear-gradient(180deg, rgba(26,42,34,1), rgba(12,18,14,1));
  box-shadow: 0 26px 70px rgba(0,0,0,.42);
  padding: 16px;
  position:relative;
  overflow:hidden;
}
.doorMist{
  position:absolute;
  inset:-40%;
  background:
    radial-gradient(circle at 30% 40%, rgba(230,226,214,.06), transparent 45%),
    radial-gradient(circle at 70% 60%, rgba(230,226,214,.05), transparent 46%);
  animation: fogMove 55s linear infinite;
  mix-blend-mode: screen;
  opacity:.35;
  pointer-events:none;
}
.doorSlots{
  display:grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap:8px;
}
@media (max-width: 760px){
  .doorSlots{ grid-template-columns: repeat(6, minmax(0,1fr)); }
}
.doorSlots input{
  height: clamp(46px, 10vw, 56px);
  text-align:center;
  font-size: clamp(18px, 5.5vw, 22px);
  font-weight: 900;
  padding: 0;
}
.doorBolt{
  position:absolute;
  top: 50%;
  right:-140px;
  width: 220px;
  height: 24px;
  border-radius: 999px;
  border:1px solid rgba(156,143,106,.55);
  background: linear-gradient(180deg, rgba(55,62,58,1), rgba(16,20,18,1));
  box-shadow: 0 10px 22px rgba(0,0,0,.35);
  transform: translateY(-50%);
  opacity:.9;
}
.doorPanel.unlock .doorBolt{
  animation: boltSlide .65s ease forwards;
}
@keyframes boltSlide{
  to{ transform: translate(-220px, -50%); }
}

/* Summary */
.grid{
  display:grid;
  grid-template-columns: 1fr 1fr;
  gap:12px;
}
@media (max-width: 760px){
  .grid{ grid-template-columns: 1fr; }
}
.suggest{
  margin-top: 12px;
  border:1px dashed rgba(156,143,106,.55);
  border-radius: 14px;
  padding: 12px;
  background: rgba(0,0,0,.18);
}
.suggest .suggestTitle{ font-weight: 900; margin-bottom: 8px; }
.suggest .suggestBtns{ display:flex; flex-wrap:wrap; gap:8px; margin-top: 10px; }
.suggest .suggestBtns a{ flex:1; min-width: 150px; text-align:center; }

/* Final */
.finalBox{
  border-radius: 16px;
  border:1px solid rgba(156,143,106,.55);
  background: rgba(0,0,0,.18);
  padding: 12px;
  margin-top: 10px;
}
.finalLine{
  display:flex;
  justify-content:space-between;
  gap:8px;
  padding: 10px 10px;
  border-bottom: 1px solid rgba(156,143,106,.22);
}
.finalLine:last-child{ border-bottom:none; }
.finalLine span{ color: var(--muted); font-weight: 800; }
.finalLine b{ letter-spacing:.3px; }

/* Lists */
.list{ margin: 8px 0 0 18px; padding:0; }
.list li{ margin: 6px 0; }


/* Mobile keyboard friendliness */
.top{ position: sticky; top: 0; z-index: 3; }
.posterHeader{ width:100%; display:block; height:auto; }
@media (max-width: 520px){
  .posterHeader{ width:100%; display:block; height:auto; }
  .stage{ padding: 12px; }
  .card{ padding: 14px; border-radius: 14px; }
}
/* Extra bottom space so inputs aren't hidden behind keyboard */
.stage{ padding-bottom: calc(140px + env(safe-area-inset-bottom)); }

body.typing .top{ backdrop-filter: blur(10px); background: rgba(0,0,0,.20); }

body.typing .stage{ padding-top: 8px; }
