@import "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap";:root{--primary:#0077b6;--primary-light:#00b4d8;--primary-dark:#023e8a;--accent:#48cae4;--bg:#f0f4f8;--bg-gradient:linear-gradient(135deg, #e8f4fd 0%, #f0f4f8 50%, #ede9fe 100%);--card-bg:#ffffffbf;--card-border:#ffffff80;--card-shadow:0 8px 32px #0077b614;--text:#1e293b;--text-secondary:#64748b;--text-muted:#94a3b8;--success:#10b981;--success-bg:#10b98114;--warning:#f59e0b;--warning-bg:#f59e0b14;--danger:#ef4444;--danger-bg:#ef444414;--radius:16px;--radius-sm:10px;--radius-xs:6px;--transition:.3s cubic-bezier(.4, 0, .2, 1)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);background-image:var(--bg-gradient);min-height:100vh;color:var(--text);-webkit-font-smoothing:antialiased;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.spinner{border:2.5px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:20px;height:20px;animation:.6s linear infinite spin;display:inline-block}.spinner-dark{border-color:#0077b62e;border-top-color:var(--primary);width:16px;height:16px}@keyframes spin{to{transform:rotate(360deg)}}.login-page{background:linear-gradient(135deg,#023e8a 0%,#0077b6 40%,#00b4d8 100%);justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex;position:relative;overflow:hidden}.login-bg-circles .circle{opacity:.08;background:#fff;border-radius:50%;position:absolute}.circle-1{width:400px;height:400px;animation:8s ease-in-out infinite float;top:-100px;right:-80px}.circle-2{width:300px;height:300px;animation:10s ease-in-out infinite reverse float;bottom:-60px;left:-80px}.circle-3{width:200px;height:200px;animation:6s ease-in-out infinite float;top:40%;left:60%}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-30px)}}.login-card{-webkit-backdrop-filter:blur(24px);background:#ffffff1f;border:1px solid #fff3;border-radius:24px;width:100%;max-width:420px;padding:48px 40px;animation:.6s ease-out slideUp;box-shadow:0 24px 64px #0003}@keyframes slideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.login-logo{background:linear-gradient(135deg, var(--primary-light), var(--accent));color:#fff;border-radius:20px;justify-content:center;align-items:center;width:72px;height:72px;margin:0 auto 24px;display:flex;box-shadow:0 8px 24px #00b4d84d}.login-card h1{text-align:center;color:#fff;margin-bottom:4px;font-size:28px;font-weight:700}.login-subtitle{text-align:center;color:#ffffffb3;margin-bottom:32px;font-size:14px}.login-error{color:#fca5a5;border-radius:var(--radius-sm);text-align:center;background:#ef444426;border:1px solid #ef44444d;margin-bottom:20px;padding:12px 16px;font-size:13px}.input-group{margin-bottom:16px;position:relative}.input-icon{color:#ffffff80;pointer-events:none;position:absolute;top:50%;left:16px;transform:translateY(-50%)}.input-group input{border-radius:var(--radius-sm);color:#fff;width:100%;transition:var(--transition);background:#ffffff1a;border:1px solid #ffffff26;outline:none;padding:14px 16px 14px 48px;font-family:Inter,sans-serif;font-size:15px}.input-group input::placeholder{color:#fff6}.input-group input:focus{border-color:var(--accent);background:#ffffff26;box-shadow:0 0 0 3px #48cae433}.btn-primary{background:linear-gradient(135deg, var(--primary-light), var(--primary));color:#fff;border-radius:var(--radius-sm);cursor:pointer;width:100%;transition:var(--transition);border:none;justify-content:center;align-items:center;gap:8px;margin-top:8px;padding:14px;font-family:Inter,sans-serif;font-size:15px;font-weight:600;display:flex}.btn-primary:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 24px #0077b659}.btn-primary:disabled{opacity:.7;cursor:not-allowed}.loading-screen{min-height:100vh;color:var(--text-secondary);flex-direction:column;justify-content:center;align-items:center;gap:20px;font-size:15px;display:flex}.pulse-ring{border:3px solid var(--primary-light);border-radius:50%;width:48px;height:48px;animation:1.2s cubic-bezier(.215,.61,.355,1) infinite pulse-ring}@keyframes pulse-ring{0%{opacity:1;transform:scale(.5)}to{opacity:0;transform:scale(1.5)}}.dashboard-page{min-height:100vh;padding-left:264px}.sidebar{background:var(--card-bg);-webkit-backdrop-filter:blur(20px);border-right:1px solid var(--card-border);z-index:100;flex-direction:column;justify-content:flex-start;align-items:center;width:264px;height:100vh;padding:24px 18px;display:flex;position:fixed;top:0;left:0;box-shadow:1px 0 18px #0000000a}.sidebar-brand{border-bottom:1px solid #0000000d;align-items:center;gap:12px;width:100%;padding:0 8px 24px;display:flex}.sidebar-logo{color:var(--primary);flex-shrink:0}.sidebar-brand h1{color:var(--text);font-size:18px;font-weight:700;line-height:1.2}.sidebar-subtitle{color:var(--text-muted);font-size:12px;font-weight:400}.sidebar-nav{flex-direction:column;gap:6px;width:100%;margin-top:22px;padding-right:2px;display:flex;overflow-y:auto}.nav-link{border-radius:var(--radius-sm);width:100%;color:var(--text-secondary);transition:var(--transition);align-items:center;gap:10px;padding:11px 12px;font-size:14px;font-weight:600;text-decoration:none;display:flex}.nav-link:hover{color:var(--primary);background:#0077b60f}.nav-link.active{background:linear-gradient(135deg, var(--primary-light), var(--primary));color:#fff;box-shadow:0 4px 12px #0077b640}.sidebar-footer{border-top:1px solid #0000000d;flex-direction:column;gap:12px;width:100%;margin-top:auto;padding-top:18px;display:flex}.sidebar-time{width:100%;color:var(--text-secondary);border-radius:var(--radius-sm);background:#0077b60f;flex-direction:column;align-items:center;gap:4px;padding:12px;font-size:13px;font-weight:500;display:flex}.date-value{color:var(--text-secondary)}.time-value{font-variant-numeric:tabular-nums;color:var(--primary);font-weight:600}.btn-logout{border-radius:var(--radius-sm);width:100%;color:var(--danger);cursor:pointer;transition:var(--transition);background:0 0;border:1px solid #ef444433;justify-content:center;align-items:center;gap:6px;padding:10px 14px;font-family:Inter,sans-serif;font-size:13px;font-weight:500;display:flex}.btn-logout:hover{background:var(--danger-bg);border-color:#ef444466}.dashboard-content{max-width:1280px;margin:0 auto;padding:28px 32px 60px}.section{margin-bottom:36px}.section-header{align-items:center;gap:10px;margin-bottom:20px;display:flex}.section-icon{color:var(--primary)}.section-header h2{color:var(--text);font-size:20px;font-weight:700}.live-badge{background:var(--danger-bg);color:var(--danger);letter-spacing:.5px;border-radius:20px;align-items:center;gap:6px;margin-left:auto;padding:4px 10px;font-size:11px;font-weight:700;display:flex}.section-link{color:var(--primary);transition:var(--transition);border-radius:20px;align-items:center;gap:5px;margin-left:auto;padding:6px 12px;font-size:13px;font-weight:600;text-decoration:none;display:inline-flex}.section-link:hover{background:#0077b614}.live-dot{background:var(--danger);border-radius:50%;width:8px;height:8px;animation:1.4s ease-in-out infinite blink}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}.sensor-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px;display:grid}.sensor-grid-single{grid-template-columns:minmax(280px,360px)}.section-hint{color:var(--text-muted);align-items:center;gap:6px;margin:-10px 0 18px;font-size:13px;display:flex}.back-btn{color:var(--text-secondary);cursor:pointer;transition:var(--transition);background:0 0;border:1px solid #00000014;border-radius:20px;align-items:center;gap:6px;margin-bottom:16px;padding:8px 14px;font-family:Inter,sans-serif;font-size:13px;font-weight:600;display:inline-flex}.back-btn:hover{border-color:var(--primary-light);color:var(--primary);background:#00b4d80f}.device-id-chip{color:var(--primary);background:#0077b60f;border-radius:20px;margin-left:auto;padding:4px 12px;font-family:SF Mono,Fira Code,monospace;font-size:12px;font-weight:600}.sensor-card{background:var(--card-bg);-webkit-backdrop-filter:blur(16px);border:1px solid var(--card-border);border-radius:var(--radius);cursor:pointer;transition:var(--transition);padding:20px;position:relative;overflow:hidden}.sensor-card:before{content:"";background:linear-gradient(90deg, var(--primary-light), var(--accent));opacity:0;height:3px;transition:var(--transition);position:absolute;top:0;left:0;right:0}.sensor-card:hover{transform:translateY(-4px);box-shadow:0 12px 40px #0077b61f}.sensor-card:hover:before,.sensor-card.selected:before{opacity:1}.sensor-card.selected{border-color:var(--primary-light);box-shadow:0 8px 32px #0077b626}.sensor-card.status-offline{opacity:.7;filter:grayscale(.3)}.sensor-card.status-danger{border-color:#ef44444d}.sensor-card.status-danger:before{background:linear-gradient(90deg, var(--danger), #f97316);opacity:1}.sensor-card-header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.sensor-card-title{align-items:center;gap:8px;display:flex}.sensor-card-title h3{font-size:16px;font-weight:700}.wifi-icon{color:var(--text-muted);transition:var(--transition)}.wifi-icon.online{color:var(--success)}.status-badge{border-radius:20px;align-items:center;gap:4px;padding:4px 10px;font-size:12px;font-weight:600;display:flex}.status-badge.normal{background:var(--success-bg);color:var(--success)}.status-badge.danger{background:var(--danger-bg);color:var(--danger)}.status-badge.offline{color:var(--text-muted);background:#94a3b81a}.sensor-card-body{align-items:center;gap:16px;display:flex}.sensor-value{text-align:center;border-radius:var(--radius-sm);transition:var(--transition);flex:1;padding:12px 0}.sensor-value.alert{background:var(--danger-bg)}.sensor-label{color:var(--text-secondary);justify-content:center;align-items:center;gap:6px;margin-bottom:6px;font-size:13px;font-weight:500;display:flex}.icon-temp{color:#ef4444}.icon-ph{color:#3b82f6}.sensor-number{color:var(--text);font-variant-numeric:tabular-nums;font-size:28px;font-weight:800;line-height:1.1}.sensor-divider{background:linear-gradient(to bottom, transparent, var(--text-muted), transparent);opacity:.3;width:1px;height:60px}.sensor-card-footer{color:var(--text-muted);border-top:1px solid #0000000a;justify-content:space-between;align-items:center;margin-top:14px;padding-top:12px;font-size:12px;display:flex}.sensor-device-id{color:var(--primary);background:#0077b60f;border-radius:4px;padding:2px 8px;font-family:SF Mono,Fira Code,monospace;font-weight:500}.chart-container{background:var(--card-bg);-webkit-backdrop-filter:blur(16px);border:1px solid var(--card-border);border-radius:var(--radius);box-shadow:var(--card-shadow);padding:24px}.chart-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:24px;display:flex}.chart-stale-notice{background:var(--warning-bg);border-radius:var(--radius-sm);color:var(--warning);border:1px solid #f59e0b40;align-items:center;gap:8px;margin-bottom:18px;padding:10px 14px;font-size:13px;font-weight:500;display:flex}.chart-title{align-items:center;gap:10px;display:flex}.chart-title h2{font-size:18px;font-weight:700}.chart-range-buttons{flex-wrap:wrap;gap:6px;display:flex}.range-btn{color:var(--text-secondary);cursor:pointer;transition:var(--transition);background:0 0;border:1px solid #00000014;border-radius:20px;align-items:center;gap:4px;padding:6px 14px;font-family:Inter,sans-serif;font-size:13px;font-weight:500;display:flex}.range-btn:hover{border-color:var(--primary-light);color:var(--primary);background:#00b4d80f}.range-btn.active{background:linear-gradient(135deg, var(--primary-light), var(--primary));color:#fff;border-color:#0000;box-shadow:0 4px 12px #0077b640}.chart-grid{grid-template-columns:1fr 1fr;gap:24px;display:grid}.chart-panel{border-radius:var(--radius-sm);background:#ffffff80;border:1px solid #0000000a;padding:16px}.chart-panel-title{color:var(--text-secondary);align-items:center;gap:8px;margin-bottom:12px;font-size:14px;font-weight:600;display:flex}.dot{border-radius:50%;width:10px;height:10px}.dot-temp{background:#ef4444}.dot-ph{background:#3b82f6}.chart-loading,.chart-empty{min-height:200px;color:var(--text-muted);flex-direction:column;justify-content:center;align-items:center;gap:12px;font-size:14px;display:flex}.chart-tooltip{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:var(--radius-xs);background:#1e293beb;border:1px solid #ffffff1a;padding:10px 14px;font-size:13px}.tooltip-label{color:#fffc;margin-bottom:4px;font-weight:600}.chart-tooltip p{color:#ffffffe6;margin:2px 0}.weather-actions{flex-wrap:wrap;align-items:center;gap:8px;margin-left:auto;display:flex}.weather-place{color:var(--primary);background:#0077b60f;border-radius:20px;align-items:center;gap:6px;padding:8px 14px;font-size:13px;font-weight:600;display:flex}.weather-btn{color:var(--text-secondary);cursor:pointer;transition:var(--transition);background:0 0;border:1px solid #00000014;border-radius:20px;align-items:center;gap:6px;padding:8px 14px;font-family:Inter,sans-serif;font-size:13px;font-weight:500;display:flex}.weather-btn:hover{border-color:var(--primary-light);color:var(--primary);background:#00b4d80f}.weather-hero{border-radius:var(--radius);color:#fff;background:linear-gradient(135deg,#023e8a 0%,#0077b6 50%,#00b4d8 100%);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:24px;padding:32px;display:flex;position:relative;overflow:hidden;box-shadow:0 12px 40px #0077b640}.weather-hero:before{content:"";pointer-events:none;background:#ffffff14;border-radius:50%;width:320px;height:320px;position:absolute;top:-140px;right:-60px}.weather-hero-compact{padding:24px 28px}.weather-hero-main{z-index:1;align-items:center;gap:20px;display:flex}.weather-hero-icon{color:#fff;opacity:.95;filter:drop-shadow(0 6px 16px #00000026)}.weather-temp{font-variant-numeric:tabular-nums;font-size:64px;font-weight:800;line-height:1}.weather-desc{margin-top:6px;font-size:18px;font-weight:600}.weather-feels{opacity:.8;margin-top:2px;font-size:14px}.weather-metrics{z-index:1;grid-template-columns:repeat(2,auto);gap:16px 28px;display:grid}.weather-metric{align-items:center;gap:10px;display:flex}.weather-metric-icon{background:#ffffff26;border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:38px;height:38px;display:flex}.weather-metric-label{opacity:.8;font-size:12px}.weather-metric-value{font-variant-numeric:tabular-nums;font-size:16px;font-weight:700}.forecast-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px;display:grid}.forecast-card{background:var(--card-bg);-webkit-backdrop-filter:blur(16px);border:1px solid var(--card-border);border-radius:var(--radius);text-align:center;transition:var(--transition);padding:18px}.forecast-card:hover{transform:translateY(-4px);box-shadow:0 12px 40px #0077b61f}.forecast-day{color:var(--text);font-size:14px;font-weight:700}.forecast-date{color:var(--text-muted);margin-bottom:12px;font-size:12px}.forecast-icon{color:var(--primary);margin:0 auto 10px;display:block}.forecast-desc{color:var(--text-secondary);min-height:30px;margin-bottom:10px;font-size:12px}.forecast-temps{font-variant-numeric:tabular-nums;justify-content:center;align-items:baseline;gap:8px;display:flex}.forecast-max{color:var(--text);font-size:20px;font-weight:800}.forecast-min{color:var(--text-muted);font-size:15px;font-weight:600}.forecast-rain{color:var(--primary);justify-content:center;align-items:center;gap:5px;margin-top:10px;font-size:12px;font-weight:600;display:flex}.weather-updated{color:var(--text-muted);align-items:center;gap:6px;margin:-8px 0 16px;font-size:12px;display:flex}.hourly-strip{scroll-snap-type:x proximity;gap:12px;padding:4px 2px 10px;display:flex;overflow-x:auto}.hourly-strip::-webkit-scrollbar{height:6px}.hourly-strip::-webkit-scrollbar-thumb{background:#0077b633;border-radius:3px}.hourly-item{scroll-snap-align:start;background:var(--card-bg);-webkit-backdrop-filter:blur(16px);border:1px solid var(--card-border);border-radius:var(--radius-sm);cursor:pointer;width:80px;transition:var(--transition);flex-direction:column;flex:none;align-items:center;gap:8px;padding:14px 10px;font-family:Inter,sans-serif;display:flex}.hourly-item:hover{transform:translateY(-3px);box-shadow:0 8px 24px #0077b61f}.hourly-item:focus-visible{outline:2px solid var(--primary-light);outline-offset:2px}.hourly-item.active{background:#00b4d814;border-color:#0077b647;box-shadow:0 8px 24px #0077b61f}.hourly-hour{color:var(--text-secondary);white-space:nowrap;font-size:12px;font-weight:600}.hourly-icon{color:var(--primary)}.hourly-temp{color:var(--text);font-variant-numeric:tabular-nums;font-size:18px;font-weight:800}.hourly-rain{color:var(--primary);align-items:center;gap:4px;font-size:11px;font-weight:600;display:flex}.log-count{color:var(--text-muted);font-size:12px;font-weight:500}.log-table-wrap{border-radius:var(--radius-sm);border:1px solid #0000000d;max-height:440px;overflow:auto}.log-table{border-collapse:collapse;width:100%;font-size:13px}.log-table th{z-index:1;text-align:left;-webkit-backdrop-filter:blur(8px);color:var(--text-secondary);background:#ffffffeb;border-bottom:1px solid #00000014;padding:11px 14px;font-weight:600;position:sticky;top:0}.log-table td{color:var(--text);font-variant-numeric:tabular-nums;border-bottom:1px solid #0000000a;padding:9px 14px}.log-table tbody tr:hover td{background:#0077b608}.users-refresh{margin-bottom:0;margin-left:auto}.admin-alert{border-radius:var(--radius-sm);margin-bottom:16px;padding:12px 16px;font-size:13px;font-weight:600}.admin-alert.danger{background:var(--danger-bg);color:var(--danger);border:1px solid #ef44442e}.admin-alert.success{background:var(--success-bg);color:var(--success);border:1px solid #10b9812e}.admin-grid{grid-template-columns:minmax(280px,340px) minmax(0,1fr);align-items:start;gap:20px;display:grid}.admin-panel{background:var(--card-bg);-webkit-backdrop-filter:blur(16px);border:1px solid var(--card-border);border-radius:var(--radius);box-shadow:var(--card-shadow);padding:20px}.admin-panel-header{align-items:center;gap:8px;margin-bottom:16px;display:flex}.admin-panel-header h3{color:var(--text);font-size:16px;font-weight:700}.admin-panel-header .log-count{margin-left:auto}.user-form,.user-modal{flex-direction:column;gap:14px;display:flex}.user-form label,.user-modal label{color:var(--text-secondary);flex-direction:column;gap:7px;font-size:12px;font-weight:700;display:flex}.user-form input,.user-form select,.user-modal input,.user-modal select,.table-select,.password-inline input{border-radius:var(--radius-sm);width:100%;color:var(--text);transition:var(--transition);background:#ffffffb8;border:1px solid #00000014;outline:none;font-family:Inter,sans-serif;font-size:13px}.user-form input,.user-form select,.user-modal input,.user-modal select{padding:11px 12px}.table-select{min-width:92px;padding:7px 9px}.password-inline input,.editable-inline input{min-width:150px;padding:8px 10px}.user-form input:focus,.user-form select:focus,.user-modal input:focus,.user-modal select:focus,.table-select:focus,.password-inline input:focus,.editable-inline input:focus{border-color:var(--primary-light);box-shadow:0 0 0 3px #00b4d81f}.admin-submit{margin-top:4px}.users-table-panel{min-width:0}.table-toolbar{justify-content:flex-end;align-items:center;gap:12px;margin:-4px 0 14px;display:flex}.search-field{border-radius:var(--radius-sm);width:min(360px,100%);color:var(--text-muted);background:#ffffffb8;border:1px solid #00000014;align-items:center;gap:8px;padding:9px 11px;display:flex}.search-field input{width:100%;color:var(--text);background:0 0;border:0;outline:0;font-family:Inter,sans-serif;font-size:13px}.search-field input::placeholder{color:var(--text-muted)}.users-table-wrap{max-height:560px}.users-table th,.users-table td{white-space:nowrap;vertical-align:middle}.user-email{font-weight:700}.user-meta{color:var(--text-muted);margin-top:3px;font-size:11px}.user-status{margin-left:0;display:inline-flex}.password-inline,.editable-inline,.table-actions{align-items:center;gap:8px;display:flex}.editable-inline input{min-width:220px}.icon-action{border-radius:var(--radius-xs);width:32px;height:32px;color:var(--text-secondary);cursor:pointer;transition:var(--transition);background:#ffffffa6;border:1px solid #00000014;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.icon-action:hover{border-color:var(--primary-light);color:var(--primary);background:#00b4d814}.icon-action.danger:hover{color:var(--danger);background:var(--danger-bg);border-color:#ef444447}.action-menu-wrap{justify-content:flex-end;position:relative}.action-menu{z-index:60;border-radius:var(--radius-sm);background:#fffffff5;border:1px solid #00000014;width:190px;min-width:190px;padding:6px;position:fixed;box-shadow:0 16px 40px #0f172a1f}.action-menu button{border-radius:var(--radius-xs);width:100%;color:var(--text-secondary);cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:9px 10px;font-family:Inter,sans-serif;font-size:13px;font-weight:700;display:flex}.action-menu button:hover:not(:disabled){color:var(--primary);background:#00b4d814}.action-menu button.danger{color:var(--danger)}.action-menu button.danger:hover:not(:disabled){background:var(--danger-bg)}.action-menu button:disabled{opacity:.45;cursor:not-allowed}.modal-backdrop{z-index:30;-webkit-backdrop-filter:blur(4px);background:#0f172a47;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.user-modal{width:min(460px,100%)}.modal-close{margin-left:auto}.admin-loading{min-height:180px}.api-base-card{color:#fff;border-radius:var(--radius);background:linear-gradient(135deg,#023e8a 0%,#0077b6 58%,#00b4d8 100%);justify-content:space-between;align-items:center;gap:16px;margin-bottom:20px;padding:20px 22px;display:flex;box-shadow:0 12px 40px #0077b638}.api-base-card code{color:#fff;word-break:break-all;margin-top:6px;font-size:15px;font-weight:700;display:block}.api-label{opacity:.76;font-size:12px;font-weight:700}.api-docs-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;display:grid}.api-group{min-width:0}.api-group-desc{color:var(--text-secondary);margin:-4px 0 16px;font-size:13px;line-height:1.5}.api-endpoint-list{flex-direction:column;gap:10px;display:flex}.api-endpoint{border-radius:var(--radius-sm);background:#ffffff85;border:1px solid #0000000d;justify-content:space-between;align-items:center;gap:12px;padding:12px;display:flex}.api-endpoint-main{min-width:0}.api-endpoint code{max-width:100%;color:var(--text);word-break:break-all;font-size:13px;font-weight:700;display:inline-block}.api-method{border-radius:var(--radius-xs);letter-spacing:.4px;justify-content:center;align-items:center;min-width:54px;margin-right:8px;padding:4px 7px;font-size:11px;font-weight:800;display:inline-flex}.method-get{color:var(--primary);background:#0077b61a}.method-post{background:var(--success-bg);color:var(--success)}.method-put,.method-patch{background:var(--warning-bg);color:var(--warning)}.method-delete{background:var(--danger-bg);color:var(--danger)}.api-note{color:var(--text-muted);margin-top:5px;font-size:12px}.copy-action.copied{color:var(--success);background:var(--success-bg);border-color:#10b98140}.activity-panel{min-width:0}.activity-table-wrap{max-height:620px}.activity-table th,.activity-table td{vertical-align:top}.activity-table th{white-space:nowrap}.activity-table td{white-space:normal}.activity-table code{color:var(--text);overflow-wrap:anywhere;font-size:12px}.activity-severity{border-radius:var(--radius-xs);justify-content:center;align-items:center;min-width:72px;padding:5px 8px;font-size:11px;font-weight:800;display:inline-flex}.activity-severity.info{color:var(--primary);background:#0077b61a}.activity-severity.warning{background:var(--warning-bg);color:var(--warning)}.activity-severity.error{background:var(--danger-bg);color:var(--danger)}.activity-actor,.activity-target{flex-direction:column;gap:3px;min-width:120px;display:flex}.activity-actor strong{color:var(--text);overflow-wrap:anywhere;font-size:13px}.activity-actor span,.activity-target span{color:var(--text-muted);font-size:11px;font-weight:700}.activity-action,.activity-source{overflow-wrap:anywhere;max-width:180px;display:inline-block}.activity-metadata{white-space:pre-wrap;overflow-wrap:anywhere;border-radius:var(--radius-xs);max-width:520px;max-height:160px;color:var(--text-secondary);background:#0f172a0a;margin:0;padding:8px 10px;font-family:Inter,sans-serif;font-size:12px;line-height:1.45;overflow:auto}.device-detail-section{margin-bottom:28px}.device-detail-grid{grid-template-columns:minmax(300px,380px) minmax(0,1fr);align-items:start;gap:20px;display:grid}.device-detail-grid .sensor-card{height:100%;min-height:238px}.device-side-stack{gap:16px;min-width:0;display:grid}.detail-tool-panel{padding:18px}.detail-tool-header{align-items:center;gap:8px;margin-bottom:8px;display:flex}.detail-tool-header h3{color:var(--text);font-size:15px;font-weight:800}.detail-tool-desc{color:var(--text-secondary);margin:0 0 14px;font-size:12px;line-height:1.45}.threshold-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:20px;display:grid}.threshold-card .device-id-chip{margin-left:auto}.threshold-detail-card{max-width:none}.threshold-fields-detail{grid-template-columns:repeat(2,minmax(0,1fr))}.threshold-fields,.export-fields{gap:14px;display:grid}.threshold-field,.export-fields label{color:var(--text-secondary);flex-direction:column;gap:7px;font-size:12px;font-weight:700;display:flex}.threshold-field span{align-items:center;gap:5px;display:inline-flex}.threshold-field input,.export-fields input,.export-fields select{border-radius:var(--radius-sm);width:100%;color:var(--text);transition:var(--transition);background:#ffffffb8;border:1px solid #00000014;outline:none;padding:10px 11px;font-family:Inter,sans-serif;font-size:13px}.threshold-field input:focus,.export-fields input:focus,.export-fields select:focus{border-color:var(--primary-light);box-shadow:0 0 0 3px #00b4d81f}.threshold-save,.export-submit{margin-top:14px}.alert-list{gap:14px;display:grid}.alert-card{align-items:flex-start;gap:14px;display:flex}.alert-card.danger{border-color:#ef444429}.alert-card.offline{border-color:#f59e0b2e}.alert-card-icon{width:44px;height:44px;color:var(--danger);background:var(--danger-bg);border-radius:14px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.alert-card.offline .alert-card-icon{color:var(--warning);background:var(--warning-bg)}.alert-card-main{min-width:0}.alert-title-row{align-items:center;gap:8px;margin-bottom:5px;display:flex}.alert-title-row h3,.empty-state-panel h3{color:var(--text);font-size:16px}.alert-card p,.empty-state-panel p{color:var(--text-secondary);font-size:13px}.alert-values{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.alert-values span{border-radius:var(--radius-xs);color:var(--text-secondary);background:#0077b60f;padding:5px 9px;font-size:12px;font-weight:600}.empty-state-panel{text-align:center;padding:42px 24px}.empty-state-icon{color:var(--success);margin-bottom:12px}.export-panel{max-width:none}.export-fields{grid-template-columns:repeat(3,minmax(0,1fr))}.export-fields-detail{grid-template-columns:repeat(2,minmax(0,1fr))}.settings-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;display:grid}.settings-row{color:var(--text-secondary);justify-content:space-between;align-items:center;gap:12px;font-size:13px;display:flex}.settings-row code{color:var(--text);word-break:break-all;text-align:right;font-weight:700}.settings-row strong{color:var(--text)}.settings-devices{grid-column:span 2}.settings-device-list{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.settings-device{border-radius:var(--radius-sm);color:var(--text-secondary);background:#0077b60d;justify-content:space-between;align-items:center;gap:10px;padding:12px;font-size:13px;font-weight:600;display:flex}.settings-device code{color:var(--primary);font-weight:800}@media (width<=900px){.chart-grid,.device-detail-grid{grid-template-columns:1fr}.device-detail-grid .sensor-card{min-height:0}}@media (width<=768px){.dashboard-page{padding-left:0}.sidebar{border-right:0;border-bottom:1px solid var(--card-border);flex-flow:wrap;align-items:center;width:100%;height:auto;padding:12px 16px;position:sticky;box-shadow:0 1px 12px #0000000a}.sidebar-brand{border-bottom:0;flex:auto;width:auto;padding:0}.sidebar-time{display:none}.sidebar-footer{border-top:0;width:auto;margin-top:0;padding-top:0}.sidebar-footer .btn-logout{width:auto}.sidebar-nav{flex-direction:row;order:3;gap:8px;width:100%;margin-top:8px;overflow-x:auto}.sidebar-nav::-webkit-scrollbar{display:none}.nav-link{white-space:nowrap;flex:none;justify-content:center;width:auto}.dashboard-content{padding:20px 16px 40px}.weather-hero{flex-direction:column;align-items:flex-start;padding:24px}.weather-temp{font-size:52px}.weather-metrics{width:100%}.sensor-grid{grid-template-columns:1fr 1fr;gap:12px}.sensor-number{font-size:22px}.admin-grid,.api-docs-grid,.export-fields,.threshold-fields-detail,.settings-grid,.settings-device-list{grid-template-columns:1fr}.settings-devices{grid-column:auto}.chart-header{flex-direction:column;align-items:flex-start}.login-card{padding:32px 24px}}@media (width<=480px){.sensor-grid{grid-template-columns:1fr}}
