/* --- Panels --- */ .glass-panel { background: color-mix(in srgb, var(--surface) 88%, transparent); border: 1px solid var(--edge); border-radius: var(--radius-lg); padding: 2rem; box-shadow: var(--shadow-soft); transition: var(--transition-smooth); } .glass-panel:hover { border-color: var(--edge-accent); } .card { background: var(--surface); border: 1px solid var(--edge); border-radius: var(--radius-lg); padding: 1.5rem; margin-bottom: 1.5rem; box-shadow: var(--shadow-soft); } .card h3 { color: var(--accent); font-size: 1.35rem; margin-bottom: 1rem; border-bottom: 1px solid var(--edge-accent); padding-bottom: 0.5rem; } /* Sunken sub-section inside a panel (character sheet groups, ledgers...) */ .sheet-group { background: var(--well); padding: 1rem; border-radius: var(--radius-sm); border-left: 2px solid var(--accent-dark); } .sheet-group h4 { color: var(--accent); font-size: 1.05rem; margin-bottom: 0.5rem; letter-spacing: 0.5px; } /* Notice banners (first-scene framing, over-limit warnings...) */ .notice-banner { border: 1px dashed var(--edge); border-radius: var(--radius-md); padding: 1rem 1.5rem; margin: 0 auto 1.5rem; max-width: 700px; text-align: left; } .notice-banner h4 { margin-bottom: 0.5rem; } .notice-banner.accent { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 9%, transparent); } .notice-banner.accent h4 { color: var(--accent); } .notice-banner.danger { border-color: var(--danger); background: color-mix(in srgb, var(--danger) 9%, transparent); } .notice-banner.danger h4 { color: var(--danger); } /* Prompt boxes (character-sheet callouts: death, ghost, name...) */ .prompt-box { border: 1px dashed var(--edge); border-left: 2px solid var(--edge); padding: 1rem; border-radius: var(--radius-md); margin-bottom: 1rem; background: var(--well); } .prompt-box h4 { margin-bottom: 0.5rem; } .prompt-box.accent { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, transparent); } .prompt-box.accent h4 { color: var(--accent); } .prompt-box.danger { border-color: var(--danger); background: color-mix(in srgb, var(--danger) 9%, transparent); } .prompt-box.danger h4 { color: var(--danger); } .prompt-box.ghostly { border-color: var(--ghost); background: color-mix(in srgb, var(--ghost) 10%, transparent); } .prompt-box.ghostly h4 { color: var(--ghost); } /* --- Forms & controls --- */ .form-group { margin-bottom: 1.25rem; text-align: left; } .form-group label { display: block; margin-bottom: 0.5rem; font-size: 0.95rem; color: var(--text-muted); font-weight: 500; } .input-field, .form-control, .select-field, .copy-input { width: 100%; padding: 0.7rem 1rem; background: var(--well); border: 1px solid var(--edge); border-radius: var(--radius-sm); color: var(--text); font-family: var(--font-body); font-size: 1rem; transition: var(--transition-smooth); } .input-field::placeholder, .form-control::placeholder { color: color-mix(in srgb, var(--text-muted) 70%, transparent); } .input-field:focus, .form-control:focus, .select-field:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 20%, transparent); } .select-field { cursor: pointer; } .input-large { padding: 0.9rem 1.1rem; font-size: 1.1rem; } .input-row { display: flex; gap: 0.5rem; } .input-row .input-field { flex: 1; } .select-small { padding: 0.5rem; font-size: 0.9rem; flex: 1; } .select-xsmall { padding: 0.4rem 0.5rem; font-size: 0.85rem; width: 140px; } .checkbox-label { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; font-size: 0.95rem; } .checkbox-label:has(input:disabled) { cursor: default; } .objectives-checklist { display: flex; flex-direction: column; gap: 0.35rem; } /* --- Buttons --- */ .btn { display: inline-block; padding: 0.7rem 1.5rem; font-family: var(--font-heading); font-weight: 700; font-size: 1rem; letter-spacing: 1px; border: 1px solid transparent; border-radius: var(--radius-sm); cursor: pointer; transition: var(--transition-smooth); text-decoration: none; } .btn-primary { background: linear-gradient(160deg, var(--accent-bright) 0%, var(--accent) 45%, var(--accent-dark) 100%); border-color: var(--accent-dark); color: var(--text-inverse); box-shadow: var(--shadow-soft); } .btn-primary:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 6px 18px color-mix(in srgb, var(--accent) 35%, transparent); } .btn-secondary { background: color-mix(in srgb, var(--text) 8%, transparent); border-color: var(--edge); color: var(--text); } .btn-secondary:hover:not(:disabled) { background: color-mix(in srgb, var(--text) 15%, transparent); transform: translateY(-2px); } .btn-deep { background: color-mix(in srgb, var(--deep) 10%, var(--surface)); border-color: var(--deep); color: var(--deep); } .btn-deep:hover:not(:disabled) { background: var(--deep); color: var(--text-inverse); transform: translateY(-2px); } .btn-danger { background: color-mix(in srgb, var(--danger) 18%, var(--surface)); border-color: var(--danger); color: color-mix(in srgb, var(--danger) 70%, var(--text)); } .btn-danger:hover:not(:disabled) { background: var(--danger); color: var(--text-inverse); transform: translateY(-2px); } .btn-success { background: color-mix(in srgb, var(--success) 18%, var(--surface)); border-color: var(--success); color: color-mix(in srgb, var(--success) 70%, var(--text)); } .btn-success:hover:not(:disabled) { background: var(--success); color: var(--text-inverse); } .btn-gold { background: transparent; border: 2px solid var(--accent); color: var(--accent); } .btn-gold:hover:not(:disabled) { background: var(--accent); color: var(--text-inverse); box-shadow: 0 0 20px color-mix(in srgb, var(--accent) 40%, transparent); transform: translateY(-2px); } .btn-full, .btn-block { width: 100%; } .btn-small { padding: 0.4rem 0.8rem; font-size: 0.85rem; } .btn-large { padding: 0.9rem 2rem; font-size: 1.15rem; } .btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none !important; box-shadow: none !important; } .glow-effect:hover { filter: brightness(1.15); } /* --- Alerts --- */ .alert { padding: 0.75rem 1.25rem; margin-bottom: 1.5rem; border-radius: var(--radius-sm); text-align: center; font-weight: 500; } .alert-danger { background: color-mix(in srgb, var(--danger) 14%, transparent); border: 1px solid var(--danger); color: color-mix(in srgb, var(--danger) 75%, var(--text)); } /* --- Player chips --- */ .player-chips { display: flex; flex-direction: column; gap: 0.75rem; margin-top: 1rem; } .player-chip { background: color-mix(in srgb, var(--text) 6%, transparent); border: 1px solid var(--edge); padding: 0.5rem 1.25rem; border-radius: var(--radius-md); display: flex; align-items: center; gap: 0.5rem; width: 100%; transition: var(--transition-smooth); } .player-chip.current-user { background: color-mix(in srgb, var(--accent) 14%, transparent); border-color: var(--accent); } .player-chip.voted-chip { border-color: var(--success); background-color: color-mix(in srgb, var(--success) 6%, transparent); } .player-chip.not-voted-chip { border-color: var(--edge); } .list-chips { align-items: stretch; } .list-chips .player-chip { padding: 0.4rem 1rem; font-size: 0.9rem; } .deep-chip { border-color: var(--deep); background: color-mix(in srgb, var(--deep) 5%, transparent); } .pirat-chip { border-color: var(--pirat); background: color-mix(in srgb, var(--pirat) 5%, transparent); } .player-chip.is-ghost { border-color: var(--ghost); color: var(--ghost); background: color-mix(in srgb, var(--ghost) 10%, transparent); } .player-chip.is-dead { border-color: var(--danger); color: var(--danger); background: color-mix(in srgb, var(--danger) 10%, transparent); } .player-chip.is-captain { border-color: var(--accent); color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, transparent); } /* --- Badges --- */ .creator-badge { background: var(--accent); color: var(--text-inverse); font-size: 0.7rem; font-weight: 700; padding: 0.1rem 0.4rem; border-radius: 4px; text-transform: uppercase; } .deep-badge, .pirat-badge, .ghost-badge { padding: 0.1rem 0.45rem; font-size: 0.75rem; font-weight: 700; border-radius: 4px; margin-left: 0.35rem; white-space: nowrap; } .deep-badge { background: color-mix(in srgb, var(--deep) 14%, transparent); border: 1px solid var(--deep); color: var(--deep); } .pirat-badge { background: color-mix(in srgb, var(--pirat) 14%, transparent); border: 1px solid var(--pirat); color: var(--pirat); } .ghost-badge { background: color-mix(in srgb, var(--ghost) 14%, transparent); border: 1px solid var(--ghost); color: var(--ghost); } /* --- Waiting indicator --- */ .waiting-box, .waiting-indicator { font-size: 0.95rem; color: var(--accent); display: flex; align-items: center; justify-content: center; gap: 0.75rem; } /* --- Modal overlay (shared by popups) --- */ .modal-backdrop { position: fixed; inset: 0; z-index: 2000; display: flex; align-items: center; justify-content: center; padding: 20px; background: color-mix(in srgb, var(--bg-deep) 70%, transparent); backdrop-filter: blur(6px); } .modal-box { position: relative; max-width: 440px; width: 100%; max-height: 88vh; overflow-y: auto; padding: 1.75rem; border: 1px solid var(--edge); border-radius: var(--radius-md); box-shadow: var(--shadow-deep); } .modal-box h3 { margin-top: 0; } .modal-box.sheet-modal { max-width: 520px; text-align: left; } .modal-box.character-sheet-modal { max-width: 1260px; } .modal-close { position: absolute; top: 0.6rem; right: 0.75rem; background: transparent; border: none; color: var(--text-muted); font-size: 1.6rem; line-height: 1; cursor: pointer; padding: 0.1rem 0.4rem; border-radius: var(--radius-sm); } .modal-close:hover { color: var(--text); background: color-mix(in srgb, var(--text) 10%, transparent); } /* --- Graphical tooltip (lib/tooltip.js action) --- */ .tooltip-pop { position: fixed; z-index: 3000; max-width: 280px; padding: 0.6rem 0.7rem; background: var(--surface-raised); border: 1px solid var(--edge-accent); border-radius: var(--radius-md); box-shadow: var(--shadow-deep); color: var(--text); font-family: var(--font-body); font-size: 0.82rem; line-height: 1.4; pointer-events: none; opacity: 0; transform: translateY(3px); transition: opacity 0.12s ease, transform 0.12s ease; } .tooltip-pop.visible { opacity: 1; transform: translateY(0); } .tooltip-pop .tt-head { display: flex; align-items: baseline; gap: 0.4rem; margin-bottom: 0.3rem; } .tooltip-pop .tt-card { font-family: var(--font-heading); font-weight: 900; font-size: 1rem; } .tooltip-pop .tt-card.tt-red { color: var(--suit-red); } .tooltip-pop .tt-card.tt-black { color: var(--suit-black); } .tooltip-pop .tt-card.tt-joker { color: var(--accent); } .tooltip-pop .tt-color { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.04em; font-weight: 700; padding: 0.05rem 0.35rem; border-radius: 999px; } .tooltip-pop .tt-color-red { color: var(--suit-red); background: color-mix(in srgb, var(--suit-red) 16%, transparent); } .tooltip-pop .tt-color-black { color: var(--suit-black); background: color-mix(in srgb, var(--suit-black) 16%, transparent); } .tooltip-pop .tt-theme { color: var(--text-muted); margin-bottom: 0.35rem; } .tooltip-pop .tt-row { margin-top: 0.25rem; } .tooltip-pop .tt-label { display: block; font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--accent); font-weight: 700; }