/* Shared light palette. Component files reference these semantic tokens. */
:root{
 color-scheme:light;
 --page-bg:#E4EEF0;--surface:#FFFFFF;--surface-secondary:#F8FAFC;--surface-hover:#EAF4F3;--disabled-surface:#E8EDEF;
 --text-primary:#16232A;--text-secondary:#475569;--border-soft:#CCDCDD;
 --success-text:#075056;--success-surface:#E7F3F1;--success-border:#8BB7B5;
 --info-text:#1E40AF;--info-surface:#EFF6FF;--info-border:#93B4DD;
 --purple-text:#6B21A8;--purple-surface:#FAF5FF;--purple-border:#C4A4DE;
 --warning-text:#9A3906;--warning-surface:#FFF1E7;--warning-border:#E9B08D;--orange-accent:#FF5B04;
 --danger-text:#991B1B;--danger-surface:#FEF2F2;--danger-border:#DB9A9A;
 --brand-fill:#075056;--brand-hover:#063F44;--brand-pressed:#043238;--on-brand:#FFFFFF;
 --shadow-color:rgba(15,23,42,.08);--overlay-color:rgba(15,23,42,.35);
 --bg:var(--page-bg);--panel:var(--surface);--panel2:var(--surface-secondary);
 --text:var(--text-primary);--muted:var(--text-secondary);--border:var(--border-soft);
 --accent:var(--success-text);--accent2:var(--purple-text);--warn:var(--warning-text);--danger:var(--danger-text);--blue:var(--info-text);
}
html,body{background:var(--page-bg);--control-ink:var(--text-primary);color:var(--text-primary)}
body{background-image:none}
button,input,select,textarea{color-scheme:light}
a{color:var(--brand-fill)}
input::placeholder,textarea::placeholder{color:var(--text-secondary);opacity:1}
input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]),select,textarea{background-color:var(--surface);--control-ink:var(--text-primary);color:var(--text-primary);border-color:var(--border-soft)}
button:focus-visible,a:focus-visible,summary:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--success-text);outline-offset:3px}
button:disabled,input:disabled,select:disabled,textarea:disabled{cursor:not-allowed;opacity:1;color:var(--text-secondary);background-color:var(--surface-secondary);--control-ink:var(--text-primary);border-color:var(--border-soft)}
button.primary,.button-link.primary,.primary{background:var(--action-bg,var(--brand-fill));--control-ink:var(--on-brand);color:var(--on-brand);border-color:var(--success-border)}
button.primary:hover:not(:disabled),.button-link.primary:hover{background:var(--action-bg,var(--brand-fill));--control-ink:var(--on-brand)}
button.secondary,.button-link.secondary,.secondary{background-color:var(--surface);--control-ink:var(--text-primary);color:var(--brand-fill);border-color:var(--brand-fill)}
button.secondary:hover:not(:disabled),.button-link.secondary:hover{background-color:var(--surface-hover);--control-ink:var(--text-primary)}
button.danger,.button-link.danger{background:var(--surface);--control-ink:var(--text-primary);color:var(--danger-text);border-color:var(--danger-text)}
.card,.modal,.admin-details,.sx-dialog{box-shadow:0 4px 20px var(--shadow-color)}
.modal-backdrop,.auth-backdrop,.sx-dialog-backdrop{background:var(--overlay-color)}
dialog::backdrop{background:var(--overlay-color)}
/* Preserve supplied logo geometry, adapting its dark raster matte for white. */
.ralliqo-logo-frame{background:transparent;border:0;box-shadow:none}
.ralliqo-logo{filter:none}
.bp-wheel-pointer{border-top-color:var(--success-text)}
::selection{background:var(--success-border);--control-ink:var(--text-primary);color:var(--text-primary)}
/* Keyboard focus must remain visible even on components with hover resets. */
button:focus-visible,a:focus-visible,summary:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--success-text)!important;outline-offset:3px!important}
.progress-fill{background:var(--success-text);--control-ink:var(--text-primary)}
.game-mode-confirm-backdrop,.confirm-overlay,.mobile-drawer-backdrop{background:var(--overlay-color)}
/* Opaque navigation needs no dark-theme glass effect. */
.ot-tabs,.public-tabs,.ot-navigation{backdrop-filter:none;-webkit-backdrop-filter:none}
.schedule-modal,.import-players-modal,.openplay-app .choose-players-modal,.openplay-app .confirm-overlay{background:var(--overlay-color)}

/* Shared interaction states. Component button colors use these same tokens. */
:is(button,.button-link).primary:active:not(:disabled){background:var(--action-bg,var(--brand-fill));--control-ink:var(--on-brand)}
:is(button,.button-link).secondary:active:not(:disabled){background:var(--success-surface);--control-ink:var(--text-primary)}
:is(button,.button-link).danger:hover:not(:disabled){background:var(--danger-surface);--control-ink:var(--text-primary)}
button:disabled,input:disabled,select:disabled,textarea:disabled,[aria-disabled="true"]{color:var(--text-secondary)!important;background:var(--disabled-surface)!important;--control-ink:var(--text-primary)!important;border-color:var(--border-soft)!important;opacity:1;box-shadow:none;cursor:not-allowed}
button[aria-busy="true"]{cursor:progress}
button.primary svg,.button-link.primary svg{color:inherit}
.complete-game-btn{background:var(--surface);--control-ink:var(--text-primary);color:var(--danger-text);box-shadow:inset 0 0 0 1px var(--danger-text)}
.complete-game-btn:hover:not(:disabled){background:var(--danger-surface);--control-ink:var(--text-primary)}
.player-status.waiting,.status-waiting{background:var(--warning-surface);--control-ink:var(--text-primary);color:var(--warning-text);border-color:var(--warning-border)}
/* Audience links share the existing primary action treatment. */
.openplay-app .button-link.nav-audience,#publicViewLink{background:var(--action-bg,var(--brand-fill));--control-ink:var(--on-brand);color:var(--on-brand);border-color:var(--brand-fill)}
.openplay-app .button-link.nav-audience:hover,#publicViewLink:hover{background:var(--action-bg,var(--brand-fill));--control-ink:var(--on-brand);color:var(--on-brand)}
.openplay-app .button-link.nav-audience:active,#publicViewLink:active{background:var(--action-bg,var(--brand-fill));--control-ink:var(--on-brand)}
.openplay-app .player-status-cell[data-status="WAITING"]{background:var(--warning-surface);--control-ink:var(--text-primary);color:var(--warning-text);border-color:var(--warning-border)}
.openplay-app .player-status-cell[data-status="PLAYING"]{background:var(--success-surface);--control-ink:var(--text-primary);color:var(--success-text);border-color:var(--success-border)}
/* State tokens avoid competing component-specific button backgrounds. */
:is(.primary,.battle-button,.schedule-edit-score,.nav-audience,#publicViewLink):hover{--action-bg:var(--brand-hover)}
:is(.primary,.battle-button,.schedule-edit-score,.nav-audience,#publicViewLink):active{--action-bg:var(--brand-pressed)}
:is(.primary,.battle-button,.schedule-edit-score,.nav-audience,#publicViewLink):disabled{--action-bg:var(--disabled-surface)}

/* Foreground follows each control's own surface, including interaction states.
   Non-inheritance prevents dark parent panels from recoloring neutral buttons. */
@property --control-ink{syntax:"<color>";inherits:false;initial-value:#16232A}
:root body :is(button,.button-link,[role="button"],[role="tab"],.tab,.global-nav-audience){color:var(--control-ink)!important}
:root body :is(button,.button-link,[role="button"],[role="tab"],.tab,.global-nav-audience) :is(span,small,strong,b,i,svg){color:inherit!important}
:root body :is(button,.button-link,[role="button"],[role="tab"],.tab,.global-nav-audience) svg [stroke]:not([stroke="none"]){stroke:currentColor}
:root body :is(button,.button-link,[role="button"],[role="tab"],.tab,.global-nav-audience) svg [fill]:not([fill="none"]){fill:currentColor}
