/* ===== ELSA GAMBLING — stile neon/casino ===== */ :root { --bg: #0a0512; --bg2: #140a26; --panel: rgba(24, 12, 46, 0.72); --gold: #ffd23f; --gold-2: #ff9e00; --pink: #ff2e88; --cyan: #00e5ff; --green: #29e08a; --red: #ff3b5c; --text: #f3e9ff; --muted: #9c86b8; } * { box-sizing: border-box; } html, body { margin: 0; height: 100%; background: radial-gradient(1200px 700px at 50% -10%, #2a1150 0%, var(--bg) 60%), var(--bg); color: var(--text); font-family: "Bebas Neue", system-ui, sans-serif; overflow: hidden; } #bg3d { position: fixed; inset: 0; z-index: 0; display: block; } #confetti { position: fixed; inset: 0; width: 100vw; height: 100vh; z-index: 60; pointer-events: none; } #app { position: relative; z-index: 10; height: 100vh; display: flex; flex-direction: column; padding: 14px 18px 18px; gap: 12px; } /* ===== Topbar ===== */ .topbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .brand { display: flex; align-items: center; gap: 12px; font-family: "Anton", sans-serif; font-size: clamp(26px, 4vw, 52px); letter-spacing: 2px; } .brand-emoji { font-size: 0.8em; filter: drop-shadow(0 0 10px var(--gold)); } .neon-gold { color: var(--gold); text-shadow: 0 0 6px var(--gold), 0 0 22px var(--gold-2), 0 0 40px var(--gold-2); } .neon-pink { color: var(--pink); text-shadow: 0 0 6px var(--pink), 0 0 22px var(--pink), 0 0 42px #ff007b; } .hud { display: flex; gap: 12px; } .hud-box { display: flex; flex-direction: column; align-items: center; padding: 6px 16px; background: var(--panel); border: 1px solid rgba(255, 210, 63, 0.35); border-radius: 12px; box-shadow: inset 0 0 18px rgba(255, 46, 136, 0.12); } .hud-label { font-size: 13px; letter-spacing: 3px; color: var(--muted); } .hud-value { font-family: "Orbitron", monospace; font-weight: 900; font-size: 26px; color: var(--cyan); text-shadow: 0 0 10px var(--cyan); } .hud-value.led { color: var(--gold); text-shadow: 0 0 12px var(--gold-2); } /* ===== Stage layout ===== */ .stage { flex: 1; min-height: 0; display: grid; grid-template-columns: 1fr 1.35fr 1fr; gap: 16px; } .panel { background: var(--panel); border: 1px solid rgba(0, 229, 255, 0.22); border-radius: 16px; padding: 12px 14px; backdrop-filter: blur(6px); overflow: hidden; display: flex; flex-direction: column; min-height: 0; } .panel-title { font-family: "Anton", sans-serif; font-weight: 400; letter-spacing: 2px; font-size: 20px; margin: 4px 0 10px; color: var(--gold); text-shadow: 0 0 10px var(--gold-2); } .bet-panel .panel-title { margin-top: 12px; } /* ===== Rooms board ===== */ .rooms-board { overflow-y: auto; display: flex; flex-direction: column; gap: 8px; padding-right: 4px; } .room-card { border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 12px; padding: 8px 10px; background: linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(0, 0, 0, 0.15)); transition: box-shadow 0.3s, border-color 0.3s, transform 0.3s; } .room-card.gender-F { border-left: 4px solid var(--pink); } .room-card.gender-M { border-left: 4px solid var(--cyan); } .room-card.jacuzzi { box-shadow: 0 0 14px rgba(255, 210, 63, 0.25); } .room-card.hot { border-color: var(--gold); box-shadow: 0 0 22px var(--gold-2); transform: scale(1.02); } .room-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; } .room-name { font-family: "Anton", sans-serif; font-size: 18px; letter-spacing: 1px; } .room-cap { font-family: "Orbitron", monospace; font-size: 13px; color: var(--muted); } .room-occupants { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; min-height: 6px; } .occ-chip { font-family: "Bebas Neue", sans-serif; font-size: 15px; letter-spacing: 0.5px; padding: 1px 8px; border-radius: 999px; background: rgba(0, 229, 255, 0.16); border: 1px solid rgba(0, 229, 255, 0.4); animation: pop 0.5s ease; } .gender-F .occ-chip { background: rgba(255, 46, 136, 0.16); border-color: rgba(255, 46, 136, 0.45); } .occ-slot-empty { width: 42px; height: 20px; border-radius: 999px; border: 1px dashed rgba(255, 255, 255, 0.18); } @keyframes pop { 0% { transform: scale(0.4); opacity: 0; } 70% { transform: scale(1.15); } 100% { transform: scale(1); opacity: 1; } } /* ===== Slot machine ===== */ .machine { display: flex; flex-direction: column; align-items: center; gap: 12px; min-height: 0; } .marquee { display: flex; gap: 10px; padding: 6px; } .marquee .bulb { width: 12px; height: 12px; border-radius: 50%; background: var(--gold); box-shadow: 0 0 10px var(--gold-2), 0 0 18px var(--gold-2); animation: chase 1s infinite; } @keyframes chase { 0%, 100% { opacity: 0.25; transform: scale(0.8); } 50% { opacity: 1; transform: scale(1.1); } } .now-playing { text-align: center; } .np-label { display: block; font-size: 14px; letter-spacing: 5px; color: var(--muted); } .np-name { font-family: "Anton", sans-serif; font-size: clamp(28px, 4vw, 48px); color: var(--text); text-shadow: 0 0 16px var(--pink); } .slot { display: flex; align-items: stretch; gap: 0; padding: 16px; border-radius: 22px; background: linear-gradient(180deg, #2a0e4e, #150725); border: 3px solid var(--gold); box-shadow: 0 0 30px rgba(255, 158, 0, 0.5), inset 0 0 40px rgba(0, 0, 0, 0.6); transform-origin: center center; transition: transform 0.45s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.45s ease; } /* zoom in avanti durante lo spin */ .slot.zoom { transform: scale(1.14); box-shadow: 0 0 70px rgba(255, 158, 0, 0.85), 0 0 120px rgba(255, 46, 136, 0.35), inset 0 0 40px rgba(0, 0, 0, 0.6); z-index: 20; } /* tremolio mantenendo lo zoom (le keyframe tengono scale(1.14)) */ .slot.zoom.shake { animation: slotShake 0.22s linear infinite; } @keyframes slotShake { 0%, 100% { transform: scale(1.14) translate(0, 0) rotate(0deg); } 20% { transform: scale(1.14) translate(-7px, 4px) rotate(-0.5deg); } 40% { transform: scale(1.14) translate(7px, -5px) rotate(0.5deg); } 60% { transform: scale(1.14) translate(-5px, 6px) rotate(-0.4deg); } 80% { transform: scale(1.14) translate(6px, -4px) rotate(0.4deg); } } .slot-side { width: 46px; display: flex; align-items: center; justify-content: center; } .reel-window { position: relative; width: min(46vw, 460px); height: 264px; overflow: hidden; border-radius: 12px; background: #05020a; border: 2px solid rgba(255, 255, 255, 0.15); box-shadow: inset 0 0 40px rgba(0, 0, 0, 0.9); } .reel-strip { will-change: transform; } .reel-item { height: 88px; display: flex; align-items: center; justify-content: center; gap: 10px; font-family: "Anton", sans-serif; font-size: 34px; letter-spacing: 1px; color: #fff; text-shadow: 0 0 10px rgba(255, 255, 255, 0.35); } .reel-item.jz { color: var(--gold); text-shadow: 0 0 14px var(--gold-2); } .payline { position: absolute; left: 0; right: 0; top: 88px; height: 88px; border-top: 2px solid rgba(255, 210, 63, 0.7); border-bottom: 2px solid rgba(255, 210, 63, 0.7); box-shadow: 0 0 26px rgba(255, 210, 63, 0.4); pointer-events: none; z-index: 3; } .reel-fade { position: absolute; left: 0; right: 0; height: 88px; z-index: 2; pointer-events: none; } .reel-fade.top { top: 0; background: linear-gradient(180deg, #05020a, transparent); } .reel-fade.bottom { bottom: 0; background: linear-gradient(0deg, #05020a, transparent); } /* leva */ .lever { width: 14px; height: 130px; background: linear-gradient(90deg, #7a7a85, #d7d7e0, #7a7a85); border-radius: 8px; position: relative; transform-origin: bottom center; transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1); touch-action: none; } /* area di presa invisibile piu' ampia (facile da afferrare/toccare) */ .lever::before { content: ""; position: absolute; left: -22px; right: -22px; top: -22px; bottom: -10px; } .lever.armed { cursor: grab; animation: leverBob 1.1s ease-in-out infinite; } .lever.armed .lever-knob { box-shadow: 0 0 16px var(--red), 0 0 30px var(--red), 0 0 46px #ff004c; animation: knobPulse 1.1s ease-in-out infinite; } @keyframes leverBob { 0%, 100% { transform: rotate(0deg); } 50% { transform: rotate(-5deg); } } @keyframes knobPulse { 0%, 100% { filter: brightness(1); } 50% { filter: brightness(1.5); } } .lever.pull { transform: rotate(28deg); animation: none; } .lever-knob { position: absolute; top: -14px; left: 50%; transform: translateX(-50%); width: 30px; height: 30px; border-radius: 50%; background: radial-gradient(circle at 35% 30%, #ff8ab0, var(--red) 60%, #8b0022); box-shadow: 0 0 16px var(--red); } /* effetto "gaslighting": mentre finge di essersi fermato sulla stanza sbagliata */ .reel-window.teasing { animation: teaseShake 0.12s linear infinite; } .reel-window.teasing .payline { border-color: var(--red); box-shadow: 0 0 26px rgba(255, 59, 92, 0.6); } @keyframes teaseShake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-2px); } 75% { transform: translateX(2px); } } .mc-line { min-height: 26px; text-align: center; font-size: 20px; letter-spacing: 1px; color: var(--cyan); text-shadow: 0 0 10px rgba(0, 229, 255, 0.5); } /* ===== Controlli ===== */ .controls { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; } .btn { font-family: "Anton", sans-serif; letter-spacing: 2px; font-size: 20px; padding: 10px 22px; border-radius: 12px; border: none; cursor: pointer; color: #1a0a2e; transition: transform 0.12s, box-shadow 0.2s, filter 0.2s; } .btn:active { transform: translateY(2px) scale(0.98); } .btn:disabled { filter: grayscale(0.7) brightness(0.6); cursor: not-allowed; } .btn-gold { background: linear-gradient(180deg, #ffe98a, var(--gold) 45%, var(--gold-2)); box-shadow: 0 6px 0 #b36b00, 0 0 24px rgba(255, 158, 0, 0.6); } .btn-gold:active { box-shadow: 0 2px 0 #b36b00, 0 0 24px rgba(255, 158, 0, 0.6); } .btn-ghost { background: rgba(255, 255, 255, 0.08); color: var(--text); border: 1px solid rgba(255, 255, 255, 0.25); box-shadow: none; } .btn-ghost.active { border-color: var(--green); color: var(--green); box-shadow: 0 0 14px rgba(41, 224, 138, 0.5); } /* ===== Scommesse ===== */ .odds { display: flex; flex-direction: column; gap: 6px; max-height: 32%; overflow-y: auto; } .odd-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 6px 10px; border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.04); cursor: pointer; transition: border-color 0.2s, box-shadow 0.2s, transform 0.1s; } .odd-row:hover { border-color: var(--gold); } .odd-row.picked { border-color: var(--green); box-shadow: 0 0 14px rgba(41, 224, 138, 0.45); } .odd-row.disabled { opacity: 0.4; pointer-events: none; } .odd-name { font-size: 17px; letter-spacing: 0.5px; } .odd-mult { font-family: "Orbitron", monospace; font-weight: 700; color: var(--gold); } .bet-hint { font-size: 14px; color: var(--muted); letter-spacing: 1px; margin: 2px 0 4px; } /* ===== Leaderboard ===== */ .leaderboard { display: flex; flex-direction: column; gap: 4px; } .lb-row { display: flex; justify-content: space-between; padding: 3px 10px; border-radius: 8px; font-size: 17px; transition: background 0.3s; } .lb-row.you { background: rgba(255, 210, 63, 0.14); color: var(--gold); } .lb-chips { font-family: "Orbitron", monospace; font-weight: 700; } /* ===== Log ===== */ .log { flex: 1; overflow-y: auto; display: flex; flex-direction: column-reverse; gap: 3px; font-size: 15px; letter-spacing: 0.4px; color: var(--text); } .log-entry { padding: 2px 6px; border-left: 2px solid rgba(255, 255, 255, 0.15); opacity: 0.9; } .log-entry.win { border-color: var(--green); } .log-entry.jackpot { border-color: var(--gold); color: var(--gold); } /* ===== FX ===== */ .shake { animation: shake 0.5s; } @keyframes shake { 0%, 100% { transform: translate(0, 0); } 20% { transform: translate(-8px, 4px); } 40% { transform: translate(8px, -6px); } 60% { transform: translate(-6px, 6px); } 80% { transform: translate(6px, -4px); } } .flash { position: fixed; inset: 0; z-index: 55; pointer-events: none; background: radial-gradient(circle, rgba(255, 210, 63, 0.55), transparent 60%); opacity: 0; } .flash.go { animation: flash 0.6s ease; } @keyframes flash { 0% { opacity: 0; } 30% { opacity: 1; } 100% { opacity: 0; } } @media (max-width: 980px) { .stage { grid-template-columns: 1fr; grid-auto-rows: min-content; overflow-y: auto; } body { overflow: auto; } } @media (prefers-reduced-motion: reduce) { * { animation-duration: 0.001ms !important; } }