:root,[data-theme=light]{--bg0: #f5f5f5;--bg1: #ffffff;--bg2: #f0f0f0;--line: #e2e2e2;--text: #111111;--muted: #5c5c5c;--accent: #111111;--accent-invert: #ffffff;--accent-soft: rgba(17, 17, 17, .06);--warn: #9a6b00;--warn-bg: #f7eed8;--danger: #c0392b;--danger-bg: #fdecea;--ok: #1a7a3c;--ok-bg: #e8f5ec;--chip: #ececec;--chart-selected: #111111;--chart-idle: #d4d4d4;--chart-grid: #e8e8e8;--shadow: 0 16px 40px rgba(0, 0, 0, .08);--header-bg: rgba(255, 255, 255, .9);--login-card-bg: #ffffff;--radius: 14px}[data-theme=dark]{--bg0: #0f0f0f;--bg1: #171717;--bg2: #222222;--line: #2e2e2e;--text: #f2f2f2;--muted: #a0a0a0;--accent: #f2f2f2;--accent-invert: #111111;--accent-soft: rgba(242, 242, 242, .08);--warn: #e0b84a;--warn-bg: #3a3218;--danger: #e06b6b;--danger-bg: #3a1f1f;--ok: #7dcea0;--ok-bg: #1a2e22;--chip: #2a2a2a;--chart-selected: #f2f2f2;--chart-idle: #3a3a3a;--chart-grid: #2a2a2a;--shadow: 0 20px 48px rgba(0, 0, 0, .45);--header-bg: rgba(23, 23, 23, .92);--login-card-bg: #171717}html{color-scheme:light}html[data-theme=dark]{color-scheme:dark}*{box-sizing:border-box}body{margin:0;min-height:100vh;font-family:Outfit,system-ui,sans-serif;color:var(--text);background:var(--bg0)}#root{min-height:100vh}a{color:var(--text);text-decoration-thickness:1px;text-underline-offset:3px}a:hover{opacity:.75}button,input,select{font:inherit}button{cursor:pointer;border:0;border-radius:10px;padding:.55rem 1rem;background:var(--accent);color:var(--accent-invert);font-weight:600;transition:opacity .15s ease,transform .15s ease}button:hover:not(:disabled){opacity:.88}button:active:not(:disabled){transform:translateY(1px)}button.secondary{background:var(--bg1);color:var(--text);border:1px solid var(--line);font-weight:550}button.danger{background:var(--danger);color:#fff}button:disabled{opacity:.45;cursor:not-allowed}input,select{background:var(--bg1);border:1px solid var(--line);color:var(--text);border-radius:10px;padding:.65rem .8rem;width:100%}input::placeholder{color:var(--muted);opacity:.7}input:focus,select:focus{outline:none;border-color:var(--text);box-shadow:0 0 0 3px var(--accent-soft)}label{display:flex;flex-direction:column;gap:.35rem;font-size:.86rem;color:var(--muted);font-weight:500}.app{max-width:1120px;margin:0 auto;padding:1.1rem 1.35rem 2.5rem;min-height:100vh;display:flex;flex-direction:column}.app-login{max-width:none;padding:0}.site-header{display:flex;flex-wrap:wrap;align-items:center;gap:.85rem 1.25rem;margin-bottom:1.5rem;padding:.8rem 1rem;border:1px solid var(--line);border-radius:16px;background:var(--header-bg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.brand-link{display:flex;align-items:center;gap:.75rem;text-decoration:none;color:inherit}.brand-mark{width:2.4rem;height:2.4rem;border-radius:10px;display:grid;place-items:center;background:var(--text);color:var(--bg1);font-weight:700;font-size:.8rem;letter-spacing:.04em}.brand-link strong{display:block;font-size:1.05rem;letter-spacing:-.02em}.brand-link small{display:block;color:var(--muted);font-size:.74rem;margin-top:.1rem}.nav{display:flex;flex-wrap:wrap;gap:.25rem;margin-left:auto}.nav a{text-decoration:none;color:var(--muted);padding:.4rem .8rem;border-radius:999px;font-size:.9rem;font-weight:550}.nav a:hover{color:var(--text);background:var(--bg2);opacity:1}.nav a.active{color:var(--text);background:var(--accent-soft);font-weight:650}.header-auth{display:flex;align-items:center;gap:.45rem}.theme-toggle{font-size:.85rem;padding:.4rem .75rem}.user-pill{max-width:10rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-link{display:inline-flex;align-items:center;text-decoration:none;color:var(--text);font-weight:600;padding:.45rem .9rem;border-radius:10px;border:1px solid var(--line);background:var(--bg1)}.btn-link:hover{background:var(--bg2);opacity:1}.secondary-link{background:transparent;color:var(--muted)}.main{flex:1}.page-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:1rem;align-items:flex-end;margin-bottom:1.25rem}.page-head h1{margin:0;font-size:clamp(1.5rem,2.4vw,1.85rem);letter-spacing:-.03em;font-weight:700;color:var(--text)}.page-head .muted{margin:.3rem 0 0}.grid{display:grid;gap:1rem}@media(min-width:900px){.grid.two{grid-template-columns:1.2fr 1fr}.grid.three{grid-template-columns:repeat(3,1fr)}}.panel{background:var(--bg1);border:1px solid var(--line);border-radius:var(--radius);padding:1.15rem 1.2rem;box-shadow:var(--shadow)}.panel.stat{position:relative;overflow:hidden}.panel.stat:before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--text)}.panel h2{margin:0 0 .7rem;font-size:1.02rem;font-weight:650;letter-spacing:-.01em;color:var(--text)}.stat{display:flex;flex-direction:column;gap:.25rem}.stat .value{font-family:IBM Plex Mono,monospace;font-size:1.4rem;font-weight:500;color:var(--text)}.stat .label{color:var(--muted);font-size:.8rem;font-weight:500}.badge{display:inline-flex;align-items:center;gap:.3rem;padding:.22rem .55rem;border-radius:999px;background:var(--chip);font-size:.75rem;color:var(--muted);font-weight:550}.badge.on{color:var(--ok);background:var(--ok-bg)}.badge.off{color:var(--danger);background:var(--danger-bg)}.badge.warn{color:var(--warn);background:var(--warn-bg)}.form-row{display:grid;gap:.8rem;margin-bottom:.85rem}@media(min-width:600px){.form-row.cols-2{grid-template-columns:1fr 1fr}.form-row.cols-3{grid-template-columns:1fr 1fr 1fr}}.actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.8rem}.chart-wrap{width:100%;height:290px}.slot-hint{font-size:.8rem;color:var(--muted);margin-top:.5rem}.error{color:var(--danger);font-size:.9rem;margin:.5rem 0}.success{color:var(--ok);font-size:.9rem;margin:.5rem 0}.muted{color:var(--muted);font-size:.88rem}.check{display:flex;align-items:center;gap:.5rem;color:var(--text);font-size:.9rem}.check input{width:auto}.settings-stack{display:grid;gap:1rem}.settings-section .section-head{margin-bottom:1rem;padding-bottom:.8rem;border-bottom:1px solid var(--line)}.settings-section .section-head h2{margin:0 0 .25rem}.settings-section .section-head p{margin:0;color:var(--muted);font-size:.88rem}.setting-rows{display:grid;gap:.4rem;margin-bottom:.85rem}.switch-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.8rem .9rem;border-radius:11px;background:var(--bg2);border:1px solid var(--line);flex-direction:row;color:var(--text)}.switch-row span{display:flex;flex-direction:column;gap:.15rem}.switch-row strong{font-size:.95rem}.switch-row small{color:var(--muted);font-size:.8rem;font-weight:450}.switch-row input{width:auto;accent-color:var(--text);scale:1.1}.lock-panel{max-width:480px;margin:2.5rem auto}.lock-panel h1{margin-top:0;color:var(--text)}.login-page{min-height:100vh;display:grid;place-items:center;padding:1.5rem;position:relative;overflow:hidden;background:var(--bg0)}.login-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(500px 320px at 20% 15%,var(--accent-soft),transparent 60%),var(--bg0);pointer-events:none}.login-backdrop:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(color-mix(in srgb,var(--text) 6%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--text) 6%,transparent) 1px,transparent 1px);background-size:48px 48px;-webkit-mask-image:radial-gradient(ellipse at center,black 15%,transparent 70%);mask-image:radial-gradient(ellipse at center,black 15%,transparent 70%);opacity:.6}.login-card{position:relative;width:min(420px,100%);padding:1.7rem 1.55rem 1.45rem;border-radius:20px;border:1px solid var(--line);background:var(--login-card-bg);box-shadow:var(--shadow);animation:login-in .4s ease both}@keyframes login-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.login-card.is-shake{animation:login-shake .4s ease}@keyframes login-shake{0%,to{transform:translate(0)}20%{transform:translate(-7px)}40%{transform:translate(7px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}}.login-brand{display:flex;align-items:center;gap:.85rem;margin-bottom:.95rem}.login-kicker{margin:0;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}.login-card h1{margin:.12rem 0 0;font-size:1.6rem;letter-spacing:-.03em;font-weight:700;color:var(--text)}.login-lead{margin:0 0 1.1rem;color:var(--muted);font-size:.92rem;line-height:1.45}.login-error{margin-bottom:.9rem;padding:.65rem .8rem;border-radius:10px;background:var(--danger-bg);border:1px solid color-mix(in srgb,var(--danger) 35%,var(--line));color:var(--danger);font-size:.9rem}.login-fields{display:grid;gap:.85rem;margin-bottom:1.1rem}.password-field{position:relative;display:flex;align-items:center}.password-field input{padding-right:4.4rem}.password-toggle{position:absolute;right:.3rem;top:50%;transform:translateY(-50%);background:transparent;color:var(--muted);border:0;padding:.35rem .6rem;font-size:.8rem;font-weight:600;box-shadow:none}.password-toggle:hover{color:var(--text);opacity:1}.login-submit{width:100%;padding:.8rem 1rem;font-size:1rem;border-radius:11px}.login-back{display:block;text-align:center;margin-top:1rem;color:var(--muted);text-decoration:none;font-size:.9rem;font-weight:500}.login-back:hover{color:var(--text);opacity:1}.login-theme{position:absolute;top:1rem;right:1rem;z-index:2}.tip-card p{margin-top:0}.guide-toc{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:1rem}.guide-toc a{font-weight:600;text-decoration:none}.guide-section{margin-bottom:1rem;scroll-margin-top:1rem}.guide-steps{margin:0;padding-left:1.2rem;display:grid;gap:1rem}.guide-steps li strong{display:block;margin-bottom:.25rem;color:var(--text)}.guide-steps p{margin:.25rem 0;color:var(--muted);font-size:.92rem}.guide-list{margin:0;padding-left:1.2rem;color:var(--muted);display:grid;gap:.5rem}.callout{margin-top:1.2rem;padding:.85rem 1rem;border-radius:11px;background:var(--warn-bg);border:1px solid color-mix(in srgb,var(--warn) 30%,var(--line))}.callout p{margin:.35rem 0 0;color:var(--warn);font-size:.9rem}code{font-family:IBM Plex Mono,monospace;font-size:.82em;background:var(--bg2);padding:.1rem .35rem;border-radius:4px;color:var(--text)}.schedule-card .schedule-row{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1rem;margin-top:.75rem}.ocpp-banner.ok{border-color:color-mix(in srgb,var(--ok) 35%,var(--line));background:color-mix(in srgb,var(--ok) 8%,var(--panel))}.ocpp-banner.warn{border-color:color-mix(in srgb,var(--warn) 35%,var(--line));background:var(--warn-bg)}.history-table-wrap{overflow-x:auto}.history-table{width:100%;border-collapse:collapse;font-size:.92rem}.history-table th,.history-table td{text-align:left;padding:.5rem .65rem;border-bottom:1px solid var(--line)}.history-table th{color:var(--muted);font-weight:600;font-size:.8rem;text-transform:uppercase;letter-spacing:.03em}.ocpp-values{display:grid;gap:.75rem;margin-top:1rem}.ocpp-copy-row{display:grid;grid-template-columns:minmax(8rem,11rem) 1fr auto;gap:.5rem .75rem;align-items:center;padding:.65rem .75rem;background:var(--bg2);border-radius:10px;border:1px solid var(--line)}.ocpp-copy-row .label{font-size:.8rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}.ocpp-copy-row code{word-break:break-all}@media(max-width:700px){.ocpp-copy-row{grid-template-columns:1fr}}.today-slot-list{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}.today-slot{display:grid;grid-template-columns:1fr auto auto auto;gap:.5rem .75rem;align-items:center;padding:.55rem .75rem;border-radius:10px;border:1px solid var(--line);background:var(--bg2)}.today-slot--now{border-color:color-mix(in srgb,var(--warn) 40%,var(--line));background:var(--warn-bg)}.today-slot--past{opacity:.65}.today-slot-time{font-variant-numeric:tabular-nums;font-weight:500}.charging-control .danger{min-width:7rem}@media(max-width:700px){.today-slot{grid-template-columns:1fr 1fr}}@media(max-width:700px){.nav{order:3;width:100%;margin-left:0}.header-auth{margin-left:auto}}.app-native{min-height:100vh;display:flex;flex-direction:column;background:var(--bg0)}.mobile-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.85rem 1rem;padding-top:max(.85rem,env(safe-area-inset-top));background:var(--header-bg);border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.mobile-hint{font-size:.75rem}.mobile-main{flex:1;overflow-y:auto;padding:1rem 1rem 5.5rem}.mobile-tabbar{position:fixed;bottom:0;left:0;right:0;display:grid;grid-template-columns:1fr 1fr;gap:0;padding-bottom:env(safe-area-inset-bottom);background:var(--bg1);border-top:1px solid var(--line);box-shadow:0 -8px 24px #0000000f;z-index:20}.mobile-tab{display:flex;flex-direction:column;align-items:center;gap:.2rem;padding:.55rem .5rem .65rem;color:var(--muted);text-decoration:none;font-size:.72rem;font-weight:500}.mobile-tab.active{color:#0f766e}.mobile-tab svg{opacity:.85}.mobile-tab.active svg{opacity:1}.mobile-page{display:flex;flex-direction:column;gap:1rem}.mobile-title{margin:0;font-size:1.5rem}.mobile-hero{text-align:center;padding:1.25rem 1rem}.mobile-price{display:block;font-size:2.25rem;font-weight:700;line-height:1.1;margin:.35rem 0}.mobile-price small{font-size:1rem;font-weight:500;color:var(--muted)}.mobile-hero-meta{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center;align-items:center}.mobile-refresh{width:100%}.warn-panel{border-color:color-mix(in srgb,var(--warn) 35%,var(--line));background:var(--warn-bg)}.app-logo{display:flex;align-items:center;gap:.65rem}.app-logo-mark{flex-shrink:0;border-radius:12px;box-shadow:0 4px 14px #0f766e59}.app-logo-text{display:flex;flex-direction:column;line-height:1.1}.app-logo-text strong{font-size:1.05rem;letter-spacing:-.02em}.app-logo-text small{font-size:.72rem;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.mobile-tabbar-4{grid-template-columns:repeat(4,1fr)}.mobile-subtabs{display:flex;gap:.35rem;overflow-x:auto;padding-bottom:.35rem;margin-bottom:.5rem;-webkit-overflow-scrolling:touch;scrollbar-width:none}.mobile-subtabs::-webkit-scrollbar{display:none}.mobile-subtab{flex:0 0 auto;border:1px solid var(--line);background:var(--bg2);color:var(--text);border-radius:999px;padding:.45rem .85rem;font-size:.8rem;font-weight:500}.mobile-subtab.active{background:#0f766e;border-color:#0f766e;color:#fff}.mobile-settings-hub button[type=button]:not(.mobile-subtab){width:100%;margin-top:.5rem}.mobile-ocpp-embed .page-head{display:none}.mobile-ocpp-embed>div>.page-head+*{margin-top:0}
