:root,[data-theme=hot-spring]{--color-bg: #f6efe2;--color-surface: #fcf6eb;--color-surface-raised:#f0e6d2;--color-border: #e2d6bf;--color-border-strong:#cdbe9e;--color-text: #2c2218;--color-text-muted: #6b5e52;--color-text-faint: #9a8a76;--color-text-on-dark: #fcf6eb;--color-accent: #3a8d83;--color-accent-hover: #2f7a70;--color-primary: #c47844;--color-primary-hover:#a96433;--color-secondary: #d9cbb1;--color-secondary-hover:#cab98e;--color-success: #5a8c5a;--color-success-bg: #dfebd5;--color-warning: #d49a3a;--color-warning-bg: #f4e5c4;--color-danger: #c14e34;--color-danger-bg: #f3d6cd;--color-online: #5a8c5a;--color-online-bg: #dfebd5;--color-stale: #d49a3a;--color-stale-bg: #f4e5c4;--color-offline: #c14e34;--color-offline-bg: #f3d6cd;--color-input-bg: #ffffff;--shadow-card: 0 1px 2px rgba(44, 34, 24, .06), 0 2px 6px rgba(44, 34, 24, .05)}[data-theme=dark]{--color-bg: #1a1a2e;--color-surface: #16213e;--color-surface-raised:#0f3460;--color-border: #1f2a44;--color-border-strong:#3a4a6a;--color-text: #eaeaea;--color-text-muted: #9aa4b8;--color-text-faint: #6b7280;--color-text-on-dark: #0b1020;--color-accent: #00d4ff;--color-accent-hover: #5be4ff;--color-primary: #00d4ff;--color-primary-hover:#5be4ff;--color-secondary: #374151;--color-secondary-hover:#4b5563;--color-success: #4ade80;--color-success-bg: #064e3b;--color-warning: #fbbf24;--color-warning-bg: #78350f;--color-danger: #f87171;--color-danger-bg: #7f1d1d;--color-online: #4ade80;--color-online-bg: #064e3b;--color-stale: #fbbf24;--color-stale-bg: #78350f;--color-offline: #f87171;--color-offline-bg: #7f1d1d;--color-input-bg: #0f3460;--shadow-card: 0 1px 2px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .3)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--color-bg);color:var(--color-text);min-height:100vh}.admin-layout .container{max-width:1200px;margin:0 auto;padding:20px}.user-layout .container{max-width:420px;margin:0 auto;padding:15px}.admin-layout header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:15px}.admin-layout header h1{color:var(--color-text);font-size:24px}.user-layout header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;padding-bottom:15px;border-bottom:1px solid var(--color-border)}.user-layout header h1{color:var(--color-text);font-size:18px}.header-right{display:flex;align-items:center;gap:15px}.user-info{font-size:14px;color:var(--color-text-muted)}.user-info a{color:var(--color-accent);text-decoration:none}.user-info a:hover{text-decoration:underline}.nav{display:flex;gap:10px;margin-bottom:15px;flex-wrap:wrap}.nav a{flex:1;min-width:80px;text-align:center;padding:10px;background:var(--color-surface);color:var(--color-text);text-decoration:none;border:1px solid var(--color-border);border-radius:6px;font-size:14px}.nav a:hover{background:var(--color-surface-raised);border-color:var(--color-border-strong)}.nav a.router-link-active,.nav a.active{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-text-on-dark)}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;padding:20px;margin-bottom:15px;box-shadow:var(--shadow-card)}.card h2{font-size:14px;color:var(--color-text-muted);margin-bottom:15px;text-transform:uppercase}.form-group{margin-bottom:15px}label{display:block;color:var(--color-text-muted);margin-bottom:5px;font-size:14px}input,select{width:100%;padding:12px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-input-bg);color:var(--color-text);font-size:16px}input:focus,select:focus{outline:2px solid var(--color-accent);border-color:var(--color-accent)}input::placeholder{color:var(--color-text-faint)}.btn{padding:12px 20px;border:none;border-radius:8px;font-size:14px;font-weight:700;cursor:pointer;transition:transform .1s,opacity .1s;text-decoration:none;display:inline-block;text-align:center}.btn:hover{opacity:.9}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:var(--color-text-on-dark)}.btn-primary:hover{background:var(--color-primary-hover);opacity:1}.btn-secondary{background:var(--color-secondary);color:var(--color-text)}.btn-secondary:hover{background:var(--color-secondary-hover);opacity:1}.btn-warning{background:var(--color-warning);color:var(--color-text)}.btn-danger{background:var(--color-danger);color:var(--color-text-on-dark)}.btn-full{width:100%}.btn-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.btn-grid .btn-full{grid-column:span 2}.btn-sm{padding:6px 12px;font-size:12px}.admin-layout .device-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(350px,1fr));gap:20px}.user-layout .device-grid{display:flex;flex-direction:column;gap:15px}.user-layout .device-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:16px;padding:20px;box-shadow:var(--shadow-card)}.device-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;padding:20px;box-shadow:var(--shadow-card)}.device-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.device-name{font-size:18px;color:var(--color-text);margin:0}.connection-status{font-size:12px;padding:4px 10px;border-radius:4px;text-transform:uppercase;font-weight:700}.connection-status.online{background:var(--color-online-bg);color:var(--color-online)}.connection-status.stale{background:var(--color-stale-bg);color:var(--color-stale)}.connection-status.offline{background:var(--color-offline-bg);color:var(--color-offline)}.device-temp{text-align:center;padding:15px 0}.user-layout .device-temp{padding:25px 0}.current-temp{font-size:48px;font-weight:700;color:var(--color-accent)}.user-layout .current-temp{font-size:64px}.temp-unit{font-size:24px;color:var(--color-accent)}.user-layout .temp-unit{font-size:28px}.target-temp{color:var(--color-text-muted);font-size:14px;margin-top:5px}.device-state{display:flex;justify-content:center;gap:10px;font-size:16px;margin-bottom:15px}.state-label{color:var(--color-text-muted)}.state-value{font-weight:700;text-transform:uppercase}.state-value.standby{color:var(--color-text-muted)}.state-value.filling{color:var(--color-accent)}.state-value.emptying{color:var(--color-warning)}.state-value.boost_hot{color:var(--color-danger)}.state-value.boost_cold{color:#4882a5}.valve-status{display:flex;justify-content:center;gap:20px;margin-bottom:15px}.valve{text-align:center}.valve-label{display:block;font-size:12px;color:var(--color-text-muted);margin-bottom:5px}.valve-state{display:block;font-size:14px;font-weight:700;padding:5px 12px;background:var(--color-surface-raised);border-radius:6px;text-transform:uppercase}.valve-state.open{color:var(--color-success)}.valve-state.closed{color:var(--color-danger)}.valve-state.partial,.valve-state.opening,.valve-state.closing{color:var(--color-warning)}.device-footer{display:flex;justify-content:space-between;font-size:12px;color:var(--color-text-faint);padding-top:15px;border-top:1px solid var(--color-border)}.table-container{overflow-x:auto}table{width:100%;border-collapse:collapse}th,td{padding:12px;text-align:left;border-bottom:1px solid var(--color-border)}th{color:var(--color-text-muted);font-size:12px;text-transform:uppercase;font-weight:400}td{font-size:14px}tr:hover{background:#3a8d830f}.badge{display:inline-block;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:700;text-transform:uppercase}.badge-admin{background:var(--color-primary);color:var(--color-text-on-dark)}.badge-super{background:var(--color-accent);color:var(--color-text-on-dark)}.auth-container{max-width:400px;margin:60px auto;padding:20px}.auth-container h1{text-align:center;color:var(--color-text);margin-bottom:30px}.auth-footer{text-align:center;margin-top:20px;font-size:14px;color:var(--color-text-muted)}.auth-footer a{color:var(--color-accent);text-decoration:none}.auth-footer a:hover{text-decoration:underline}.alert{padding:12px 15px;border-radius:6px;margin-bottom:15px;font-size:14px}.alert-error{background:var(--color-danger-bg);color:var(--color-danger);border:1px solid var(--color-danger)}.alert-success{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success)}.loading{text-align:center;color:var(--color-text-muted);padding:50px}.no-devices{text-align:center;color:var(--color-text-muted);padding:50px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px}.log-filters{display:flex;gap:10px;margin-bottom:15px;flex-wrap:wrap}.log-filters select{width:auto;min-width:150px;flex:1}.log-filters .btn{flex-shrink:0}.logs-table{font-size:13px}.logs-table th{font-size:11px}.logs-table td{font-size:13px;vertical-align:top}.log-time{white-space:nowrap;color:var(--color-text-muted)}.log-action{display:inline-block;padding:2px 6px;border-radius:4px;font-size:11px;font-weight:700}.log-action.action-login,.log-action.action-register,.log-action.action-logout{background:var(--color-primary);color:var(--color-text-on-dark)}.log-action.action-command{background:var(--color-accent);color:var(--color-text-on-dark)}.log-details{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--color-text-muted);font-family:monospace;font-size:11px}.log-ip{color:var(--color-text-faint);font-family:monospace;font-size:11px}.no-logs{text-align:center;color:var(--color-text-muted);padding:30px}.log-pagination{display:flex;justify-content:space-between;align-items:center;margin-top:15px;padding-top:15px;border-top:1px solid var(--color-border);font-size:13px;color:var(--color-text-muted)}.pagination-btns{display:flex;gap:10px}.device-name-cell{display:flex;align-items:center;gap:8px}.btn-icon{background:none;border:none;color:var(--color-text-muted);cursor:pointer;padding:2px 6px;font-size:14px;border-radius:4px;transition:color .2s,background .2s}.btn-icon:hover{color:var(--color-accent);background:#3a8d831a}.client-id{font-family:monospace;font-size:12px;color:var(--color-text-muted)}@media (max-width: 768px){.admin-layout header{flex-direction:column;text-align:center}.admin-layout .device-grid,.btn-grid{grid-template-columns:1fr}.btn-grid .btn-full{grid-column:span 1}.nav{flex-wrap:wrap}.nav a{flex:1 1 calc(50% - 5px)}}
