:root{--font-heading: "Spectral", Georgia, serif;--font-body: "Figtree", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--brand-red: #d40000;--brand-red-hover: #b00000;--brand-red-active: #8f0000;--brand-red-bright: #e60000;--brand-red-glow: rgba(212, 0, 0, .25);--brand-red-subtle: rgba(212, 0, 0, .08);--bg-app: #faf9f7;--bg-surface: #ffffff;--bg-card: #ffffff;--bg-subtle: #f4f2ee;--bg-hover: #ebe8e2;--bg-input: #ffffff;--border-color: #e3dfd6;--border-subtle: #ece9e2;--border-focus: #d40000;--text-main: #1c1917;--text-muted: #57534e;--text-dim: #8a857c;--text-inverse: #ffffff;--color-success: #15803d;--color-success-bg: rgba(21, 128, 61, .1);--color-warning: #b45309;--color-warning-bg: rgba(180, 83, 9, .12);--color-danger: #dc2626;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 4px 12px rgba(0, 0, 0, .06), 0 1px 3px rgba(0, 0, 0, .04);--shadow-lg: 0 10px 25px -5px rgba(0, 0, 0, .08), 0 8px 10px -6px rgba(0, 0, 0, .04);--shadow-red: 0 8px 20px rgba(212, 0, 0, .25);--radius-sm: 6px;--radius-md: 12px;--radius-lg: 18px;--radius-full: 9999px}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-body);background-color:var(--bg-app);color:var(--text-main);line-height:1.5;-webkit-font-smoothing:antialiased;min-height:100vh}h1,h2,h3,h4{font-family:var(--font-heading);font-weight:700;color:var(--text-main);line-height:1.2}button,input,select,textarea{font-family:inherit}@keyframes pulseGlow{0%,to{box-shadow:0 0 #d4000066}50%{box-shadow:0 0 0 12px #d4000000}}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fadeIn .3s cubic-bezier(.16,1,.3,1) forwards}.pulse-glow{animation:pulseGlow 2s infinite}@keyframes spin{to{transform:rotate(360deg)}}.form-error{margin-bottom:1rem;padding:.65rem .75rem;border:1px solid #fecaca;border-radius:var(--radius-md);background-color:#fef2f2;color:#b91c1c;font-size:.85rem}.field-label{display:block;margin-bottom:.3rem;font-size:.82rem;font-weight:600;color:var(--text-muted)}.field-wrap{position:relative;display:flex;align-items:center}.field-icon{position:absolute;left:.75rem;top:50%;transform:translateY(-50%);color:var(--text-dim);pointer-events:none}.field-toggle{position:absolute;right:.4rem;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;border-radius:var(--radius-sm);background:none;color:var(--text-dim);cursor:pointer;transition:color .15s ease,background-color .15s ease}.field-toggle:hover{background-color:var(--bg-subtle);color:var(--text-main)}.field-toggle:focus-visible{outline:2px solid var(--brand-red);outline-offset:1px}.input-field{width:100%;padding:.65rem .75rem;border:1.5px solid var(--border-color);border-radius:var(--radius-md);background-color:var(--bg-input);color:var(--text-main);font-size:.92rem;outline:none;transition:border-color .15s ease,box-shadow .15s ease}.input-field--password{padding-right:2.9rem}.input-field:focus-visible{border-color:var(--border-focus);box-shadow:0 0 0 3px var(--brand-red-subtle)}.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:.75rem 1rem;border:none;border-radius:var(--radius-md);background-color:var(--brand-red);color:var(--text-inverse);font-size:.95rem;font-weight:700;cursor:pointer;box-shadow:var(--shadow-red);transition:background-color .18s ease,transform .18s ease,box-shadow .18s ease}.btn-primary:hover:not(:disabled){background-color:var(--brand-red-hover)}.btn-primary:active:not(:disabled){background-color:var(--brand-red-active);transform:translateY(1px)}.btn-primary:disabled{cursor:not-allowed;opacity:.65;box-shadow:none}.btn-primary:focus-visible{outline:3px solid var(--brand-red-bright);outline-offset:2px}.login-wrap{display:flex;align-items:center;justify-content:center;min-height:80vh;padding:1.5rem}.login-card{width:100%;max-width:400px;padding:2rem;background-color:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.login-form{display:flex;flex-direction:column;gap:1rem}.login-submit{margin-top:.5rem}.login-card .spin{animation:spin .9s linear infinite}@media (max-width: 480px){.login-wrap{align-items:flex-start;padding:1rem}.login-card{padding:1.5rem 1.25rem}.input-field{font-size:16px}}.admin-shell{min-height:100vh;display:flex;flex-direction:column;background-color:var(--bg-app)}.admin-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1rem;padding:.85rem 1.5rem;background-color:var(--bg-surface);border-bottom:1px solid var(--border-color)}.admin-brand{display:flex;align-items:center;gap:12px;min-width:0}.admin-brand__logo{flex:0 0 auto;height:42px;width:auto;object-fit:contain}.admin-brand__text{min-width:0}.admin-brand__title{font-size:1.15rem;line-height:1.2;color:var(--text-main)}.admin-brand__sub{font-size:.78rem;color:var(--text-dim)}.admin-actions{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.admin-user{font-size:.85rem;color:var(--text-muted)}.btn-ghost{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:38px;padding:.45rem .75rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);background-color:var(--bg-subtle);color:var(--text-main);font-size:.8rem;font-weight:600;cursor:pointer;transition:background-color .15s ease,border-color .15s ease}.btn-ghost:hover{background-color:var(--bg-hover);border-color:#d5cfc3}.btn-ghost:focus-visible{outline:2px solid var(--brand-red);outline-offset:2px}.btn-danger{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:38px;padding:.45rem .85rem;border:none;border-radius:var(--radius-sm);background-color:#fee2e2;color:#dc2626;font-size:.8rem;font-weight:600;cursor:pointer;transition:background-color .15s ease}.btn-danger:hover{background-color:#fecaca}.btn-danger:focus-visible{outline:2px solid #dc2626;outline-offset:2px}.admin-tabs{position:sticky;top:0;z-index:40;display:flex;gap:.25rem;padding:0 1rem;overflow-x:auto;scrollbar-width:none;background-color:var(--bg-surface);border-bottom:1px solid var(--border-color)}.admin-tabs::-webkit-scrollbar{display:none}.admin-tab{display:inline-flex;align-items:center;gap:8px;flex:0 0 auto;min-height:48px;padding:.6rem .9rem;border:none;border-bottom:3px solid transparent;background:none;color:var(--text-muted);font-size:.92rem;font-weight:500;white-space:nowrap;cursor:pointer;transition:color .18s ease,border-color .18s ease}.admin-tab:hover{color:var(--text-main)}.admin-tab.is-active{color:var(--brand-red);font-weight:700;border-bottom-color:var(--brand-red)}.admin-tab:focus-visible{outline:2px solid var(--brand-red);outline-offset:-2px;border-radius:var(--radius-sm) var(--radius-sm) 0 0}.admin-main{flex:1;width:100%;max-width:1280px;margin:0 auto;padding:1.5rem}.admin-stack{display:flex;flex-direction:column;gap:1.25rem}.admin-loading{display:flex;align-items:center;justify-content:center;gap:10px;height:300px;color:var(--text-muted);font-weight:600}.admin-shell .spin{animation:spin .9s linear infinite;color:var(--brand-red)}.panel{padding:1.25rem;background-color:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.panel-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1rem;margin-bottom:1rem}.panel-title{margin-bottom:2px;font-size:1.02rem;color:var(--text-main)}.panel-sub{font-size:.8rem;color:var(--text-muted)}.admin-kpis{display:grid;grid-template-columns:1fr;gap:.9rem}.admin-charts,.admin-demo{display:grid;grid-template-columns:1fr;gap:1rem}.admin-filter{display:flex;align-items:center;flex-wrap:wrap;gap:.6rem .75rem;padding:.75rem 1rem}.admin-filter__label{font-size:.85rem;font-weight:700;color:var(--text-muted)}.admin-filter__dash{color:var(--text-dim)}.admin-filter__hint{font-size:.78rem;color:var(--text-dim)}.filter-field{display:flex;flex-direction:column;gap:2px}.filter-field__label{font-size:.7rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase;color:var(--text-dim)}.filter-field .admin-date{min-width:150px}.admin-filter__actions{display:flex;align-items:center;align-self:flex-end;gap:.5rem}.admin-date{width:auto;min-height:38px;padding:.4rem .6rem}.admin-filter__apply{width:auto;padding:.5rem .9rem;font-size:.82rem}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:var(--radius-sm)}.table-scroll:focus-visible{outline:2px solid var(--brand-red);outline-offset:2px}.table-scroll table{width:100%;min-width:640px;border-collapse:collapse;font-size:.86rem}.table-scroll th:first-child,.table-scroll td:first-child{position:sticky;left:0;z-index:1;background-color:var(--bg-card);border-right:1px solid var(--border-subtle)}.table-toolbar{display:flex;flex-wrap:wrap;gap:.5rem}.table-select{width:auto;min-height:38px}.table-search{width:auto;min-width:220px;min-height:38px;padding-left:2rem}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:1rem;background-color:#1c191780;animation:overlayIn .18s ease-out}@keyframes overlayIn{0%{opacity:0}to{opacity:1}}.modal-card{display:flex;flex-direction:column;width:100%;max-width:480px;max-height:calc(100vh - 2rem);max-height:calc(100dvh - 2rem);overflow:hidden;background-color:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);animation:modalIn .2s cubic-bezier(.16,1,.3,1)}@keyframes modalIn{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.25rem 1.5rem;border-bottom:1px solid var(--border-subtle)}.modal-close{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:var(--radius-sm);background:none;color:var(--text-dim);cursor:pointer;transition:background-color .15s ease,color .15s ease}.modal-close:hover{background-color:var(--bg-subtle);color:var(--text-main)}.modal-close:focus-visible{outline:2px solid var(--brand-red);outline-offset:1px}.modal-form{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.modal-body{display:flex;flex:1 1 auto;flex-direction:column;gap:1rem;min-height:0;padding:1.25rem 1.5rem;overflow-y:auto;overscroll-behavior:contain}.modal-foot{display:flex;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--border-subtle)}.modal-foot .btn-primary,.modal-foot .btn-ghost{flex:1}.modal-grid{display:grid;grid-template-columns:1fr;gap:.75rem}.modal-note{padding:.6rem .75rem;border:1px solid var(--border-color);border-radius:var(--radius-md);background-color:var(--bg-subtle);color:var(--text-muted);font-size:.78rem}.modal-note strong{color:var(--text-main)}.modal-note ul{margin:.35rem 0 0;padding-left:1.1rem}.segmented{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:.6rem;border:1px solid var(--border-color);border-radius:var(--radius-md);background-color:var(--bg-surface);color:var(--text-muted);font-size:.82rem;font-weight:600;cursor:pointer;transition:border-color .15s ease,background-color .15s ease,color .15s ease}.segmented.is-active{border:2px solid var(--brand-red);background-color:var(--brand-red-subtle);color:var(--brand-red)}.segmented:focus-visible{outline:2px solid var(--brand-red);outline-offset:2px}.dropzone{display:flex;align-items:center;flex-wrap:wrap;gap:.6rem;padding:.6rem .75rem;border:1.5px dashed var(--border-color);border-radius:var(--radius-md);background-color:var(--bg-surface);transition:border-color .15s ease,background-color .15s ease}.dropzone.is-dragging{border-color:var(--brand-red);background-color:var(--brand-red-subtle)}.dropzone:focus-within{border-color:var(--brand-red)}.dropzone__hint{font-size:.78rem;color:var(--text-muted)}.file-button{display:inline-flex;align-items:center;gap:6px;padding:.45rem .8rem;border-radius:var(--radius-sm);background-color:var(--brand-red);color:#fff;font-size:.8rem;font-weight:700;cursor:pointer}.file-button:focus-visible{outline:3px solid var(--brand-red-bright);outline-offset:2px}.upload-error{margin-top:.4rem;font-size:.78rem;color:#dc2626}.media-advisory{margin-top:.4rem;padding-left:1.1rem;font-size:.78rem;color:#b45309}.field-hint{display:block;font-size:.72rem;color:var(--text-dim)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (min-width: 560px){.admin-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.modal-grid{grid-template-columns:1fr 1fr}}@media (min-width: 820px){.admin-demo{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 900px){.admin-kpis{grid-template-columns:repeat(3,minmax(0,1fr))}.admin-charts{grid-template-columns:1.2fr .8fr}}@media (max-width: 640px){.admin-header{padding:.75rem 1rem}.admin-brand__logo{height:36px}.admin-main,.panel{padding:1rem}.admin-tab{padding:.6rem .7rem;font-size:.88rem}.table-toolbar{width:100%}.table-toolbar .field-wrap{flex:1 1 100%}.table-search,.table-select{width:100%;min-width:0}.table-toolbar .btn-ghost{flex:1 1 auto}}@media (max-width: 559px){.modal-overlay{align-items:flex-end;padding:0}.modal-card{max-width:100%;max-height:92dvh;border-radius:var(--radius-lg) var(--radius-lg) 0 0}}.kpi-card{display:flex;flex-direction:column;gap:.6rem;padding:1.1rem 1.15rem;background-color:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);transition:transform .2s cubic-bezier(.16,1,.3,1),box-shadow .2s ease,border-color .2s ease}@media (hover: hover){.kpi-card:hover{transform:translateY(-2px);border-color:#d9d4c9;box-shadow:var(--shadow-md)}}.kpi-card__top{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.kpi-card__label{font-size:.78rem;font-weight:600;line-height:1.35;color:var(--text-muted)}.kpi-card__icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:36px;height:36px;border-radius:10px;background-color:var(--brand-red-subtle);color:var(--brand-red)}.kpi-card__value{font-size:1.9rem;font-weight:800;line-height:1.05;letter-spacing:-.02em;color:var(--text-main);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.kpi-card__foot{display:flex;align-items:center;flex-wrap:wrap;gap:.4rem .5rem;margin-top:auto;font-size:.76rem}.kpi-card__trend{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--radius-full);background-color:var(--color-success-bg);color:var(--color-success);font-weight:700}.kpi-card__subtitle{color:var(--text-dim)}.chart-frame{position:relative;width:100%;height:260px}.chart-frame--doughnut{height:180px}@media (max-width: 640px){.chart-frame{height:220px}}.demo-gender{display:flex;flex-direction:column;align-items:center;gap:.75rem;margin-top:1rem}.demo-gender__center{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none}.demo-gender__total{font-size:1.5rem;font-weight:800;line-height:1;color:var(--text-main);font-variant-numeric:tabular-nums}.demo-gender__total-label{font-size:.68rem;color:var(--text-dim)}.legend{list-style:none;display:flex;flex-direction:column;gap:.4rem;width:100%}.legend__item{display:flex;align-items:center;gap:.5rem;font-size:.82rem}.legend__dot{flex:0 0 auto;width:10px;height:10px;border-radius:var(--radius-full)}.legend__label{color:var(--text-muted)}.legend__value{display:inline-flex;align-items:baseline;gap:.4rem;margin-left:auto;font-weight:700;color:var(--text-main);font-variant-numeric:tabular-nums}.legend__pct{font-size:.72rem;font-weight:600;color:var(--text-dim)}.panel-empty{margin-top:1rem;font-size:.85rem;color:var(--text-dim)}.panel-note{margin:.35rem 0 1rem;font-size:.78rem;line-height:1.45;color:var(--text-muted)}.device-label{display:inline-flex;align-items:center;gap:6px;min-width:0}.device-label svg{flex:0 0 auto;color:var(--text-dim)}.live-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:var(--radius-full);background-color:var(--color-success-bg);color:var(--color-success);font-size:.75rem;font-weight:700}.status-pill{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--radius-full);background-color:var(--brand-red-subtle);color:var(--brand-red);font-size:.75rem;font-weight:700;font-variant-numeric:tabular-nums}.device-list{display:flex;flex-direction:column;gap:.75rem;margin-top:.9rem}.device-row__head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.35rem;font-size:.84rem}.device-row__name{display:inline-flex;align-items:center;gap:8px;min-width:0;font-weight:600;color:var(--text-main)}.device-row__name svg{flex:0 0 auto;color:var(--brand-red)}.device-row__count{flex:0 0 auto;padding:1px 8px;border:1px solid var(--border-subtle);border-radius:var(--radius-full);background-color:var(--bg-subtle);color:var(--text-muted);font-weight:700;font-variant-numeric:tabular-nums}.device-row__meter{height:5px;border-radius:var(--radius-full);background-color:var(--bg-subtle);overflow:hidden}.device-row__meter>span{display:block;width:100%;height:100%;border-radius:inherit;background-color:var(--brand-red);transform-origin:left center;transition:transform .45s cubic-bezier(.16,1,.3,1)}@media (min-width: 560px){.demo-gender{flex-direction:row;align-items:center;justify-content:space-between;gap:1.25rem}.demo-gender .chart-frame--doughnut{flex:0 0 auto;width:180px}}@media (prefers-reduced-motion: reduce){.admin-shell *,.login-card *,.modal-overlay,.modal-card{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.connect-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:1.5rem 1rem;background-color:var(--bg-app)}.connect-card{width:100%;max-width:440px;display:flex;flex-direction:column;align-items:center;text-align:center;padding:2.25rem 1.75rem 1.75rem;background-color:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.connect-logo{height:72px;width:auto;object-fit:contain;margin-bottom:.75rem;filter:drop-shadow(0 2px 8px rgba(0,0,0,.08))}.connect-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:var(--radius-full);background-color:var(--brand-red-subtle);color:var(--brand-red);font-size:.85rem;font-weight:600}.connect-title{margin:.5rem 0 0;font-size:1.65rem;letter-spacing:-.02em}.connect-signal{position:relative;display:grid;place-items:center;width:132px;height:132px;margin:1.5rem 0 .25rem}.connect-signal__core{position:relative;z-index:2;display:inline-flex;align-items:center;justify-content:center;width:84px;height:84px;border-radius:var(--radius-full);border:1px solid var(--border-subtle);color:var(--brand-red);background:radial-gradient(circle at 50% 38%,#ffffff 0%,var(--brand-red-subtle) 100%);box-shadow:0 10px 24px -8px var(--brand-red-glow);animation:wifiCorePulse 2.8s ease-in-out infinite}.connect-signal__ring{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--radius-full);border:2px solid var(--brand-red);opacity:0;animation:wifiRing 2.8s cubic-bezier(.16,1,.3,1) infinite}.connect-signal__ring--delay{animation-delay:1.4s}@keyframes wifiRing{0%{transform:scale(.62);opacity:0}18%{opacity:.5}to{transform:scale(1);opacity:0}}@keyframes wifiCorePulse{0%,to{box-shadow:0 10px 24px -8px var(--brand-red-glow)}50%{box-shadow:0 10px 36px -4px var(--brand-red-glow)}}.connect-welcome{margin:1rem 0 .35rem;font-family:var(--font-heading);font-size:1.3rem;font-weight:700;color:var(--text-main)}.connect-copy{max-width:32ch;margin-bottom:1.5rem;color:var(--text-muted);font-size:.94rem}.connect-button{display:inline-flex;align-items:center;justify-content:center;gap:9px;width:100%;padding:1rem 1.25rem;border:none;border-radius:var(--radius-md);background-color:var(--brand-red);color:var(--text-inverse);font-size:1.02rem;font-weight:800;letter-spacing:.01em;cursor:pointer;box-shadow:var(--shadow-red);transition:background-color .2s ease,transform .2s ease}.connect-button:hover{background-color:var(--brand-red-hover)}.connect-button:active{background-color:var(--brand-red-active);transform:translateY(1px)}.connect-button:focus-visible{outline:3px solid var(--brand-red-bright);outline-offset:3px}.connect-note{margin-top:1.25rem;font-size:.78rem;color:var(--text-dim)}@media (prefers-reduced-motion: reduce){.connect-signal__core,.connect-signal__ring{animation:none}.connect-signal__ring{opacity:.3;transform:scale(.72)}.connect-signal__ring--delay{opacity:.16;transform:scale(.9)}}
