/*
 * Copyright (c) 2026 Novy International NV. All Rights Reserved.
 *
 * Styles for the lighting sensor dashboard.
 */

:root {
  --bg: #14161a; --panel: #1d2026; --line: #2c313a;
  --text: #d6dae2; --dim: #7d8590; --accent: #4da3ff;
  --up: #ff5d5d; --mid: #ffb84d; --down: #5dd97c; --out: #566070;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body { background: var(--bg); color: var(--text); font: 14px/1.45 system-ui, sans-serif; padding: 16px; }
h1 { font-size: 18px; font-weight: 600; }
header { display: flex; align-items: center; gap: 16px; margin-bottom: 14px; flex-wrap: wrap; }
button { background: var(--accent); border: 0; color: #fff; padding: 8px 18px; border-radius: 6px;
         font-size: 14px; cursor: pointer; }
button:disabled { background: var(--line); color: var(--dim); cursor: default; }
button.secondary { background: var(--panel); border: 1px solid var(--line); color: var(--text); }
#status { color: var(--dim); }
#status.connected { color: var(--down); }
.stats { display: flex; gap: 22px; margin: 6px 0 14px; color: var(--dim); font-size: 13px; flex-wrap: wrap; }
.stats b { color: var(--text); font-variant-numeric: tabular-nums; }
section { background: var(--panel); border: 1px solid var(--line); border-radius: 8px;
          padding: 12px; margin-bottom: 14px; }
section h2 { font-size: 13px; font-weight: 600; color: var(--dim); text-transform: uppercase;
             letter-spacing: .06em; margin-bottom: 8px; }
canvas { width: 100%; display: block; }
.legend { display: flex; gap: 16px; font-size: 12px; color: var(--dim); margin-top: 8px; }
.legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: 5px; }
#gesture-scroll { max-height: 240px; overflow-y: auto; }
#gesture-table { width: 100%; border-collapse: collapse; font-size: 13px;
                 font-variant-numeric: tabular-nums; }
#gesture-table th { text-align: left; color: var(--dim); font-weight: 500; padding: 2px 12px 6px 0; }
#gesture-table td { padding: 3px 12px 3px 0; border-top: 1px solid var(--line); }
#gesture-table .pat { font-weight: 600; }
.p1, .p2 { color: var(--down); }
.p3, .p5 { color: var(--accent); }
.p6 { color: var(--up); }
.p7, .p8 { color: var(--mid); }
.p4, .p9 { color: var(--dim); }
.state-row { color: var(--accent); }
#settings-modal { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.55);
                  z-index: 10; }
#settings-modal.open { display: flex; align-items: flex-start; justify-content: center; }
#settings-panel { background: var(--panel); border: 1px solid var(--line); border-radius: 10px;
                  margin-top: 60px; padding: 18px 22px; min-width: 460px; max-height: 80vh;
                  overflow-y: auto; }
#settings-head { display: flex; align-items: center; gap: 12px; margin-bottom: 6px; }
#settings-head h2 { margin-right: auto; font-size: 14px; }
#settings-head button { padding: 4px 14px; font-size: 12px; }
#settings-note { color: var(--dim); font-size: 12px; margin-bottom: 10px; max-width: 420px; }
#settings-table { border-collapse: collapse; font-size: 13px; font-variant-numeric: tabular-nums;
                  width: 100%; }
#settings-table td { padding: 4px 14px 4px 0; border-top: 1px solid var(--line); }
#settings-table td:first-child { color: var(--dim); }
#settings-table input { background: var(--bg); border: 1px solid var(--line); color: var(--text);
                        padding: 3px 8px; border-radius: 4px; width: 140px; font-size: 13px; }
#settings-table button { padding: 3px 12px; font-size: 12px; }
#settings-table button.toggle { display: inline-flex; align-items: center; gap: 8px;
                                background: var(--bg); border: 1px solid var(--line);
                                color: var(--dim); padding: 3px 12px 3px 4px;
                                border-radius: 999px; font-size: 12px; width: 68px; }
#settings-table button.toggle i { width: 26px; height: 14px; border-radius: 999px;
                                  background: var(--line); position: relative;
                                  transition: background .15s; }
#settings-table button.toggle i::after { content: ''; position: absolute; top: 2px; left: 2px;
                                         width: 10px; height: 10px; border-radius: 50%;
                                         background: var(--dim); transition: left .15s, background .15s; }
#settings-table button.toggle.on { color: var(--text); }
#settings-table button.toggle.on i { background: var(--accent); }
#settings-table button.toggle.on i::after { left: 14px; background: #fff; }
.slider-wrap { display: flex; align-items: center; gap: 10px; }
.slider-wrap input[type="range"] { flex: 1; min-width: 160px; accent-color: var(--accent); }
.slider-val { font-size: 12px; min-width: 78px; text-align: right; white-space: nowrap; }

/* --- Party button & pre-party warning modal ------------------------------ */
#btn-party { background: linear-gradient(90deg, #ff2d78, #ff8a2d, #ffd52d, #4dd97c, #4da3ff, #b04dff, #ff2d78);
             background-size: 300% 100%; animation: party-shift 4s linear infinite;
             font-weight: 600; }
#btn-party:hover { animation-duration: 1s; }
@keyframes party-shift { to { background-position: 300% 0; } }

#party-modal { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.65); z-index: 20; }
#party-modal.open { display: flex; align-items: center; justify-content: center; }
#party-panel { background: var(--panel); border: 1px solid var(--line); border-radius: 14px;
               padding: 28px 34px; max-width: 420px; text-align: center;
               box-shadow: 0 0 60px rgba(255,45,120,0.25); }
#party-panel h2 { font-size: 18px; margin-bottom: 10px; }
#party-panel p { color: var(--dim); font-size: 13px; margin-bottom: 18px; }
#party-ball { font-size: 44px; animation: party-swing 1.6s ease-in-out infinite; }
@keyframes party-swing { 0%, 100% { transform: rotate(-12deg); } 50% { transform: rotate(12deg); } }
#party-actions { display: flex; gap: 12px; justify-content: center; }
#btn-party-go { background: linear-gradient(90deg, #ff2d78, #b04dff); font-weight: 600; }
#party-countdown { font-size: 40px; font-weight: 700; min-height: 0; }
#party-countdown:not(:empty) { margin-top: 14px; animation: party-pop .9s ease both; }
@keyframes party-pop { 0% { transform: scale(0.3); opacity: 0; }
                       30% { transform: scale(1.25); opacity: 1; }
                       100% { transform: scale(1); opacity: 1; } }

.confetti { position: fixed; top: -24px; z-index: 30; pointer-events: none;
            animation: confetti-fall linear both; }
@keyframes confetti-fall { to { transform: translateY(110vh) rotate(720deg); } }

/* Firmware-version stat: warning chip for firmware older than the
   dashboard fully supports (hover for details). */
#fw-warn { color: var(--mid); border: 1px solid var(--mid); border-radius: 999px;
           padding: 1px 8px; font-size: 11px; cursor: help; white-space: nowrap; }

/* Sensor CSV recording controls. */
#rec-controls { display: inline-flex; align-items: center; gap: 6px; color: var(--dim);
                font-size: 12px; }
#rec-dur { background: var(--panel); border: 1px solid var(--line); color: var(--text);
           padding: 7px 8px; border-radius: 6px; width: 64px; font-size: 13px; }
#rec-dur:disabled { color: var(--dim); }
#btn-record.recording { background: var(--up); border: 0; color: #fff;
                        animation: rec-blink 1.2s steps(2) infinite; }
@keyframes rec-blink { 50% { opacity: 0.75; } }
