:root{--bg-dark: #1a1714;--bg-card: #2a2520;--bg-paper: #f4e9d6;--text-light: #f4e9d6;--text-dark: #1a1714;--liberal-primary: #0a5c8f;--liberal-light: #4a9fd4;--liberal-dark: #063d5c;--fascist-primary: #8b0000;--fascist-light: #c41e3a;--fascist-dark: #5c0000;--hitler-primary: #2d1b1b;--gold: #c9a227;--gold-light: #e8c547;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px}*{box-sizing:border-box;margin:0;padding:0}html{font-size:16px}body{font-family:EB Garamond,Georgia,serif;background:var(--bg-dark);background-image:radial-gradient(ellipse at top,rgba(42,37,32,.8) 0%,transparent 50%),repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,0,0,.03) 2px,rgba(0,0,0,.03) 4px);color:var(--text-light);min-height:100vh;min-height:100dvh;line-height:1.5}.container{min-height:100vh;min-height:100dvh;padding:var(--spacing-md);padding-bottom:calc(var(--spacing-md) + env(safe-area-inset-bottom));max-width:600px;margin:0 auto}.title{font-family:UnifrakturMaguntia,cursive;font-size:2.5rem;text-align:center;color:var(--gold);text-shadow:2px 2px 4px rgba(0,0,0,.5);margin-bottom:var(--spacing-sm);letter-spacing:2px}.subtitle{text-align:center;font-style:italic;color:var(--text-light);opacity:.8;margin-bottom:var(--spacing-xl)}h2,h3{font-family:EB Garamond,Georgia,serif;font-weight:600}.btn{font-family:EB Garamond,Georgia,serif;font-size:1.1rem;font-weight:600;padding:var(--spacing-md) var(--spacing-lg);border:none;border-radius:var(--radius-md);cursor:pointer;transition:all .2s ease;text-transform:uppercase;letter-spacing:1px;touch-action:manipulation}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:linear-gradient(135deg,var(--gold) 0%,var(--gold-light) 100%);color:var(--text-dark);box-shadow:0 4px 6px #0000004d}.btn-primary:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 12px #0006}.btn-secondary{background:var(--bg-card);color:var(--text-light);border:2px solid var(--gold)}.btn-ghost{background:transparent;color:var(--text-light);opacity:.7}.btn-ghost:hover{opacity:1}.btn-danger{background:linear-gradient(135deg,var(--fascist-primary) 0%,var(--fascist-light) 100%);color:#fff}.btn-icon{background:var(--bg-card);color:var(--gold);border:1px solid var(--gold);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-sm);font-size:.85rem;cursor:pointer}.vote-ja{background:linear-gradient(135deg,#2e7d32,#4caf50);color:#fff;font-size:1.3rem;padding:var(--spacing-lg) var(--spacing-xl)}.vote-nein{background:linear-gradient(135deg,var(--fascist-primary) 0%,var(--fascist-light) 100%);color:#fff;font-size:1.3rem;padding:var(--spacing-lg) var(--spacing-xl)}.form-group{margin-bottom:var(--spacing-lg)}.form-group label{display:block;margin-bottom:var(--spacing-xs);color:var(--gold);font-weight:600}.form-group input{width:100%;padding:var(--spacing-md);border:2px solid var(--gold);border-radius:var(--radius-md);background:var(--bg-card);color:var(--text-light);font-family:inherit;font-size:1.1rem}.form-group input:focus{outline:none;border-color:var(--gold-light);box-shadow:0 0 0 3px #c9a22733}.room-code-input{text-align:center;font-size:1.5rem!important;letter-spacing:8px;text-transform:uppercase}.loading{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:80vh}.loading p{animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.5}50%{opacity:1}}.error-banner{background:var(--fascist-primary);color:#fff;padding:var(--spacing-md);border-radius:var(--radius-md);margin-bottom:var(--spacing-md);cursor:pointer}.error-banner .dismiss{opacity:.7;font-size:.9rem}.lobby{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:80vh;text-align:center}.lobby-buttons{display:flex;flex-direction:column;gap:var(--spacing-md);width:100%;max-width:300px}.lobby-form{width:100%;max-width:350px;background:var(--bg-card);padding:var(--spacing-xl);border-radius:var(--radius-lg);border:1px solid rgba(201,162,39,.3)}.lobby-form h2{color:var(--gold);margin-bottom:var(--spacing-lg)}.form-actions{display:flex;flex-direction:column;gap:var(--spacing-sm)}.credits{margin-top:var(--spacing-xl);opacity:.6;font-size:.85rem}.waiting-room{padding-top:var(--spacing-lg)}.room-code-display{background:var(--bg-card);padding:var(--spacing-lg);border-radius:var(--radius-lg);text-align:center;margin-bottom:var(--spacing-lg);border:2px solid var(--gold)}.room-code-display .label{display:block;color:var(--gold);font-size:.9rem;margin-bottom:var(--spacing-xs)}.room-code-display .code{font-family:Courier New,Consolas,monospace;font-size:3rem;letter-spacing:8px;color:var(--text-light);font-weight:700}.player-list{background:var(--bg-card);padding:var(--spacing-lg);border-radius:var(--radius-lg);margin-bottom:var(--spacing-lg)}.player-list h2{color:var(--gold);margin-bottom:var(--spacing-md);font-size:1.2rem}.player-list ul{list-style:none}.player-list li{padding:var(--spacing-sm) 0;border-bottom:1px solid rgba(255,255,255,.1);display:flex;align-items:center;gap:var(--spacing-sm)}.player-list li:last-child{border-bottom:none}.player-list li.disconnected{opacity:.5}.badge{background:var(--gold);color:var(--text-dark);padding:2px 8px;border-radius:var(--radius-sm);font-size:.75rem;font-weight:600}.status{font-size:.85rem;opacity:.7}.hint{text-align:center;opacity:.8;margin-bottom:var(--spacing-md)}.actions{display:flex;flex-direction:column;gap:var(--spacing-sm);margin-bottom:var(--spacing-lg)}.test-mode-toggle{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);background:#ffffff0d;border-radius:var(--radius-md);cursor:pointer;font-size:.9rem}.test-mode-toggle input{width:18px;height:18px;accent-color:var(--gold)}.test-mode-toggle span{color:var(--gold)}.player-count-info{background:var(--bg-card);padding:var(--spacing-lg);border-radius:var(--radius-lg)}.player-count-info h3{color:var(--gold);margin-bottom:var(--spacing-md);font-size:1rem}.player-count-info table{width:100%;border-collapse:collapse;font-size:.9rem}.player-count-info th,.player-count-info td{padding:var(--spacing-xs) var(--spacing-sm);text-align:center}.player-count-info th{color:var(--gold);border-bottom:1px solid var(--gold)}.player-count-info tr.active{background:#c9a22733;font-weight:700}.role-reveal{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:80vh;text-align:center}.role-card{background:var(--bg-card);padding:var(--spacing-xl);border-radius:var(--radius-lg);margin:var(--spacing-lg) 0;width:100%;max-width:350px;border:3px solid}.role-card.hidden{border-color:var(--gold)}.role-card.liberal{border-color:var(--liberal-primary);background:linear-gradient(135deg,var(--bg-card) 0%,rgba(10,92,143,.2) 100%)}.role-card.fascist{border-color:var(--fascist-primary);background:linear-gradient(135deg,var(--bg-card) 0%,rgba(139,0,0,.2) 100%)}.role-card.hitler{border-color:var(--fascist-light);background:linear-gradient(135deg,var(--bg-card) 0%,rgba(196,30,58,.3) 100%)}.card-back{padding:var(--spacing-xl) 0}.card-back p:first-child{font-size:1.2rem;margin-bottom:var(--spacing-sm)}.role-title{font-family:UnifrakturMaguntia,cursive;font-size:2rem;margin-bottom:var(--spacing-md)}.role-card.liberal .role-title{color:var(--liberal-light)}.role-card.fascist .role-title,.role-card.hitler .role-title{color:var(--fascist-light)}.role-description{line-height:1.6;margin-bottom:var(--spacing-lg)}.team-info{border-top:1px solid rgba(255,255,255,.2);padding-top:var(--spacing-md)}.team-info h3{color:var(--fascist-light);margin-bottom:var(--spacing-sm)}.team-info ul{list-style:none}.team-info li{padding:var(--spacing-xs) 0;display:flex;justify-content:space-between}.member-role{font-weight:600}.member-role.hitler{color:var(--fascist-light)}.member-role.fascist{color:var(--fascist-primary)}.game-board{padding-bottom:var(--spacing-xl)}.game-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--spacing-md);padding-bottom:var(--spacing-sm);border-bottom:1px solid rgba(201,162,39,.3)}.game-header .room-code{font-family:monospace;background:var(--bg-card);padding:4px 8px;border-radius:var(--radius-sm);font-size:.85rem}.phase-title{font-size:1rem;color:var(--gold);flex:1;text-align:center;margin:0 var(--spacing-sm)}.role-reminder{text-align:center;padding:var(--spacing-sm);border-radius:var(--radius-sm);margin-bottom:var(--spacing-md)}.role-reminder.liberal{background:#0a5c8f4d;border:1px solid var(--liberal-primary)}.role-reminder.fascist,.role-reminder.hitler{background:#8b00004d;border:1px solid var(--fascist-primary)}.policy-tracks{background:var(--bg-card);padding:var(--spacing-md);border-radius:var(--radius-lg);margin-bottom:var(--spacing-md)}.track{margin-bottom:var(--spacing-md)}.track:last-of-type{margin-bottom:var(--spacing-sm)}.track h3{font-size:.9rem;margin-bottom:var(--spacing-xs)}.liberal-track h3{color:var(--liberal-light)}.fascist-track h3{color:var(--fascist-light)}.slots{display:flex;gap:var(--spacing-xs)}.slot{flex:1;aspect-ratio:1;max-width:60px;border:2px solid;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;position:relative}.liberal-track .slot{border-color:var(--liberal-primary);background:#0a5c8f1a}.fascist-track .slot{border-color:var(--fascist-primary);background:#8b00001a}.fascist-track .slot.hitler-zone{background:#8b000040}.slot.filled{background:none}.policy{width:80%;height:80%;border-radius:var(--radius-sm)}.policy.liberal{background:linear-gradient(135deg,var(--liberal-primary) 0%,var(--liberal-light) 100%)}.policy.fascist{background:linear-gradient(135deg,var(--fascist-primary) 0%,var(--fascist-light) 100%)}.power-label{font-size:.6rem;color:var(--fascist-light);text-transform:uppercase;position:absolute;bottom:2px}.track-info{display:flex;justify-content:space-between;align-items:center;margin-top:var(--spacing-xs)}.win-text{font-size:.75rem;opacity:.7}.veto-badge{background:var(--gold);color:var(--text-dark);padding:2px 6px;border-radius:var(--radius-sm);font-size:.7rem;font-weight:600}.election-tracker{display:flex;align-items:center;gap:var(--spacing-sm);padding-top:var(--spacing-sm);border-top:1px solid rgba(255,255,255,.1)}.election-tracker .label{font-size:.85rem;color:var(--gold)}.tracker-dots{display:flex;gap:var(--spacing-xs)}.dot{width:20px;height:20px;border-radius:50%;border:2px solid var(--gold);background:transparent}.dot.active{background:var(--gold)}.election-tracker .warning{color:var(--fascist-light);font-size:.8rem;font-weight:600;animation:blink 1s ease-in-out infinite}@keyframes blink{0%,to{opacity:1}50%{opacity:.5}}.government{display:flex;gap:var(--spacing-md);margin-bottom:var(--spacing-md)}.government-role{flex:1;background:var(--bg-card);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-md);text-align:center}.government-role .label{display:block;font-size:.75rem;color:var(--gold);text-transform:uppercase}.government-role .name{font-size:1.1rem;font-weight:600}.government-role .pending{font-size:.8rem;opacity:.7;display:block}.game-area{background:var(--bg-card);padding:var(--spacing-lg);border-radius:var(--radius-lg);margin-bottom:var(--spacing-md);min-height:200px}.waiting{text-align:center;padding:var(--spacing-xl) 0;opacity:.8}.election h3{color:var(--gold);margin-bottom:var(--spacing-md);text-align:center}.candidate-list{display:flex;flex-direction:column;gap:var(--spacing-sm);margin-bottom:var(--spacing-lg)}.candidate{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-md);background:#ffffff0d;border:2px solid transparent;border-radius:var(--radius-md);cursor:pointer;transition:all .2s;font-family:inherit;font-size:1rem;color:var(--text-light)}.candidate:hover:not(:disabled){background:#ffffff1a}.candidate.selected{border-color:var(--gold);background:#c9a2271a}.candidate.ineligible{opacity:.4;cursor:not-allowed}.candidate .status{font-size:.85rem;color:var(--fascist-light)}.voting-info{text-align:center;margin-bottom:var(--spacing-lg);padding-bottom:var(--spacing-md);border-bottom:1px solid rgba(255,255,255,.1)}.vote-buttons{display:flex;gap:var(--spacing-md);justify-content:center;margin-bottom:var(--spacing-lg)}.vote-cast{text-align:center;margin-bottom:var(--spacing-lg)}.vote-cast .ja{color:#4caf50}.vote-cast .nein{color:var(--fascist-light)}.vote-status{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--spacing-sm)}.voter{display:flex;justify-content:space-between;padding:var(--spacing-xs) var(--spacing-sm);background:#ffffff0d;border-radius:var(--radius-sm);font-size:.9rem}.voter .name{opacity:.8}.voter .vote.ja{color:#4caf50;font-weight:600}.voter .vote.nein{color:var(--fascist-light);font-weight:600}.voter .pending{opacity:.5}.dead-message{text-align:center;opacity:.6;font-style:italic}.legislative h3{color:var(--gold);text-align:center;margin-bottom:var(--spacing-sm)}.legislative .instruction{text-align:center;opacity:.8;margin-bottom:var(--spacing-lg)}.policy-cards{display:flex;justify-content:center;gap:var(--spacing-md);margin-bottom:var(--spacing-lg)}.policy-card{width:80px;height:120px;border-radius:var(--radius-md);border:3px solid transparent;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;font-family:inherit}.policy-card.liberal{background:linear-gradient(135deg,var(--liberal-primary) 0%,var(--liberal-light) 100%)}.policy-card.fascist{background:linear-gradient(135deg,var(--fascist-primary) 0%,var(--fascist-light) 100%)}.policy-card.selected{border-color:var(--gold);transform:translateY(-8px);box-shadow:0 8px 20px #0006}.policy-card:hover{transform:translateY(-4px)}.policy-label{color:#fff;font-weight:600;font-size:.8rem;writing-mode:vertical-rl;text-orientation:mixed;letter-spacing:2px}.chancellor-actions{display:flex;flex-direction:column;gap:var(--spacing-sm);align-items:center}.veto-status{color:var(--gold);font-style:italic}.veto-response{text-align:center}.veto-buttons{display:flex;gap:var(--spacing-md);justify-content:center;margin-top:var(--spacing-lg)}.executive-action h3{color:var(--gold);text-align:center;margin-bottom:var(--spacing-sm)}.executive-action .instruction{text-align:center;opacity:.8;margin-bottom:var(--spacing-lg)}.player-select{display:flex;flex-direction:column;gap:var(--spacing-sm);margin-bottom:var(--spacing-lg)}.player-option{padding:var(--spacing-md);background:#ffffff0d;border:2px solid transparent;border-radius:var(--radius-md);cursor:pointer;transition:all .2s;font-family:inherit;font-size:1rem;color:var(--text-light);text-align:left}.player-option:hover{background:#ffffff1a}.player-option.selected{border-color:var(--gold);background:#c9a2271a}.investigate-result .result-card{padding:var(--spacing-xl);border-radius:var(--radius-lg);margin:var(--spacing-lg) 0;text-align:center}.result-card.liberal{background:linear-gradient(135deg,#0a5c8f4d,#0a5c8f1a);border:2px solid var(--liberal-primary)}.result-card.fascist{background:linear-gradient(135deg,#8b00004d,#8b00001a);border:2px solid var(--fascist-primary)}.result-card .player-name{font-size:1.5rem;font-weight:600;margin-bottom:var(--spacing-sm)}.result-card .party-result{font-size:1.1rem}.result-card.liberal .party-result strong{color:var(--liberal-light)}.result-card.fascist .party-result strong{color:var(--fascist-light)}.peeked-policies{display:flex;justify-content:center;gap:var(--spacing-md);margin-bottom:var(--spacing-lg)}.peek-card{width:70px;height:100px;border-radius:var(--radius-md);display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff}.peek-card.liberal{background:linear-gradient(135deg,var(--liberal-primary) 0%,var(--liberal-light) 100%)}.peek-card.fascist{background:linear-gradient(135deg,var(--fascist-primary) 0%,var(--fascist-light) 100%)}.peek-card .order{font-size:.8rem;opacity:.8;margin-bottom:var(--spacing-xs)}.peek-card .policy-type{font-size:.7rem;font-weight:600;letter-spacing:1px}.player-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:var(--spacing-sm)}.player-card{background:var(--bg-card);padding:var(--spacing-sm);border-radius:var(--radius-md);text-align:center;position:relative;border:2px solid transparent}.player-card.me{border-color:var(--gold)}.player-card.president{background:linear-gradient(135deg,var(--bg-card) 0%,rgba(201,162,39,.2) 100%)}.player-card.chancellor{background:linear-gradient(135deg,var(--bg-card) 0%,rgba(201,162,39,.15) 100%)}.player-card.dead{opacity:.4}.player-card .player-name{font-size:.9rem;display:block;margin-bottom:var(--spacing-xs)}.role-badge{display:inline-block;width:22px;height:22px;line-height:22px;border-radius:50%;font-size:.75rem;font-weight:600}.role-badge.president{background:var(--gold);color:var(--text-dark)}.role-badge.chancellor{background:var(--gold-light);color:var(--text-dark)}.dead-marker{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-15deg);background:var(--fascist-primary);color:#fff;padding:2px 8px;font-size:.7rem;font-weight:600}.vote-badge{display:block;margin-top:var(--spacing-xs);padding:2px 6px;border-radius:var(--radius-sm);font-size:.7rem;font-weight:600}.vote-badge.ja{background:#2e7d32;color:#fff}.vote-badge.nein{background:var(--fascist-primary);color:#fff}.game-over{min-height:100vh;display:flex;flex-direction:column;align-items:center;padding-top:var(--spacing-xl)}.result-banner{text-align:center;margin-bottom:var(--spacing-xl)}.winner-text{font-family:UnifrakturMaguntia,cursive;font-size:2.5rem;margin-bottom:var(--spacing-sm)}.game-over.liberal .winner-text{color:var(--liberal-light)}.game-over.fascist .winner-text{color:var(--fascist-light)}.win-condition{font-size:1.1rem;opacity:.9}.personal-result{padding:var(--spacing-lg);border-radius:var(--radius-lg);text-align:center;margin-bottom:var(--spacing-xl);width:100%;max-width:300px}.personal-result.victory{background:linear-gradient(135deg,#2e7d324d,#2e7d321a);border:2px solid #4caf50}.personal-result.defeat{background:linear-gradient(135deg,#8b00004d,#8b00001a);border:2px solid var(--fascist-primary)}.personal-result .liberal{color:var(--liberal-light)}.personal-result .fascist,.personal-result .hitler{color:var(--fascist-light)}.personal-result .outcome{font-size:1.5rem;font-weight:600;margin-top:var(--spacing-sm)}.personal-result.victory .outcome{color:#4caf50}.personal-result.defeat .outcome{color:var(--fascist-light)}.role-reveal-all{width:100%;max-width:400px}.role-reveal-all h2{color:var(--gold);text-align:center;margin-bottom:var(--spacing-md)}.all-roles{display:flex;flex-direction:column;gap:var(--spacing-sm)}.role-item{display:flex;justify-content:space-between;padding:var(--spacing-md);background:var(--bg-card);border-radius:var(--radius-md);border-left:4px solid}.role-item.liberal{border-color:var(--liberal-primary)}.role-item.fascist{border-color:var(--fascist-primary)}.role-item.hitler{border-color:var(--fascist-light)}.role-item .role{font-weight:600}.role-item.liberal .role{color:var(--liberal-light)}.role-item.fascist .role,.role-item.hitler .role{color:var(--fascist-light)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000;padding:var(--spacing-md)}.modal{background:var(--bg-card);padding:var(--spacing-xl);border-radius:var(--radius-lg);border:2px solid var(--gold);max-width:350px;width:100%;text-align:center}.modal h3{color:var(--gold);margin-bottom:var(--spacing-md)}.modal p{margin-bottom:var(--spacing-lg);opacity:.9}.modal-actions{display:flex;gap:var(--spacing-sm);justify-content:center}.modal-actions .btn{flex:1}@media (max-width: 400px){html{font-size:14px}.title{font-size:2rem}.room-code-display .code{font-size:2.5rem;letter-spacing:6px}.policy-card{width:65px;height:95px}.slot{max-width:45px}}@supports (padding: env(safe-area-inset-bottom)){.container{padding-left:calc(var(--spacing-md) + env(safe-area-inset-left));padding-right:calc(var(--spacing-md) + env(safe-area-inset-right))}}
