
:root{
  color-scheme:light dark;
  --bg:#f4f6fb;
  --surface:rgba(255,255,255,.78);
  --surface-solid:#ffffff;
  --surface-soft:#eef2f7;
  --text:#0e1424;
  --muted:#6c7486;
  --line:rgba(15,23,42,.08);
  --accent:#4f46e5;
  --accent-2:#14b8a6;
  --success:#16a34a;
  --danger:#dc2626;
  --warning:#d97706;
  --shadow:0 16px 50px rgba(15,23,42,.08);
  --shadow-soft:0 8px 28px rgba(15,23,42,.06);
}
@media(prefers-color-scheme:dark){
  :root{
    --bg:#070b14;
    --surface:rgba(18,24,38,.78);
    --surface-solid:#101624;
    --surface-soft:#151d2d;
    --text:#f8fafc;
    --muted:#9aa4b7;
    --line:rgba(255,255,255,.08);
    --accent:#818cf8;
    --accent-2:#2dd4bf;
    --success:#22c55e;
    --danger:#f87171;
    --warning:#f59e0b;
    --shadow:0 18px 60px rgba(0,0,0,.24);
    --shadow-soft:0 10px 30px rgba(0,0,0,.18);
  }
}
*{box-sizing:border-box}
html,body{margin:0;width:100%;min-width:0;overflow-x:hidden;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro Text","Segoe UI",sans-serif;-webkit-text-size-adjust:100%;overscroll-behavior-x:none}
body{padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}
a{text-decoration:none;color:inherit}
button,select,input{font:inherit}
button,a,select{-webkit-tap-highlight-color:transparent}
.app-shell{width:100%;max-width:1180px;margin:0 auto;padding:12px 12px calc(104px + env(safe-area-inset-bottom));overflow-x:hidden}
.page-content{min-width:0}
.glass{backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}
.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 18px;border:1px solid var(--line);border-radius:26px;background:rgba(11,16,32,.92);color:#fff;box-shadow:var(--shadow)}
.brand-copy{min-width:0}
.eyebrow,.section-kicker{text-transform:uppercase;letter-spacing:.095em;font-size:.7rem;font-weight:800;opacity:.65}
h1,h2,h3,p{margin-top:0}
h1{font-size:clamp(1.45rem,4.8vw,2rem);margin:4px 0 0;letter-spacing:-.035em}
h2{font-size:1.25rem;letter-spacing:-.025em;margin-bottom:8px}
p{color:var(--muted)}
.icon-button{width:46px;height:46px;border-radius:15px;display:grid;place-items:center;background:rgba(255,255,255,.12);font-size:1.1rem;flex:0 0 auto}
.page-heading{padding:24px 4px 8px}
.page-heading h2{font-size:1.65rem;margin:5px 0 5px}
.page-heading p{margin-bottom:0}
.hero-status{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-top:16px;padding:20px;border-radius:26px;border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow-soft)}
.hero-status.charging{background:linear-gradient(145deg,rgba(34,197,94,.12),var(--surface))}
.connection-pill,.inline-chip,.current-badge{display:inline-flex;align-items:center;gap:7px;padding:7px 10px;border-radius:999px;font-size:.78rem;font-weight:750;background:var(--surface-soft);white-space:nowrap}
.connection-pill.is-online{color:var(--success)}
.connection-pill.is-offline{color:var(--danger)}
.status-dot{width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 0 5px color-mix(in srgb,currentColor 12%,transparent)}
.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(180px,100%),1fr));gap:12px;margin:16px 0}
.metric-card{padding:17px;border:1px solid var(--line);border-radius:22px;background:var(--surface);box-shadow:var(--shadow-soft);min-width:0}
.metric-card.accent{background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 13%,var(--surface)),var(--surface))}
.metric-card span{display:block;color:var(--muted);font-weight:650;font-size:.84rem}
.metric-card strong{display:block;margin-top:5px;font-size:1.55rem;letter-spacing:-.035em}
.metric-card .metric-text{font-size:1.1rem}
.metric-card small{display:block;margin-top:4px;color:var(--muted)}
.soc-track{height:7px;border-radius:999px;background:var(--surface-soft);overflow:hidden;margin-top:12px}
.soc-track span{height:100%;display:block;border-radius:999px;background:var(--accent)}
.panel{margin-top:14px;padding:18px;border-radius:26px;border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow-soft);min-width:0;overflow:hidden}
.section-title{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}
.section-title h2{margin:4px 0 0}
.notice{padding:14px 16px;border-radius:18px;margin:12px 0}
.error-notice{background:color-mix(in srgb,var(--danger) 12%,var(--surface));color:var(--danger);border:1px solid color-mix(in srgb,var(--danger) 18%,transparent)}
.button,.danger-button{min-height:44px;border:0;border-radius:14px;padding:10px 15px;font-weight:750;display:inline-flex;align-items:center;justify-content:center}
.button{background:var(--text);color:var(--bg)}
.button.secondary{background:var(--surface-soft);color:var(--text)}
.danger-button{background:color-mix(in srgb,var(--danger) 12%,var(--surface));color:var(--danger)}
.wide{width:100%}
table{width:100%;border-collapse:collapse;table-layout:fixed}
th,td{text-align:left;padding:12px 10px;border-bottom:1px solid var(--line);vertical-align:top;overflow-wrap:anywhere}
th{color:var(--muted);font-size:.78rem;font-weight:700}
select,input{width:100%;max-width:100%;min-height:44px;border-radius:14px;border:1px solid var(--line);padding:9px 11px;background:var(--surface-solid);color:var(--text);font-size:16px}
small{color:var(--muted)}
.source-summary,.source-pills{display:flex;flex-wrap:wrap;gap:6px}
.source-summary span,.source-pills span{padding:6px 8px;border-radius:10px;background:var(--surface-soft);font-size:.76rem;color:var(--muted)}
.mobile-list{display:none}
.session-current{outline:2px solid color-mix(in srgb,var(--success) 55%,transparent);background:color-mix(in srgb,var(--success) 8%,var(--surface))}
.session-card{border:1px solid var(--line);border-radius:20px;padding:14px;background:var(--surface-solid)}
.session-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:10px}
.auto-note{display:block;margin:8px 0}
.settings-form{display:grid;gap:14px}
.switch-row{display:grid!important;grid-template-columns:1fr auto;align-items:center}
.switch-row input{width:auto}
.qr-grid,.control-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr));gap:12px}
.qr-card{padding:14px;border:1px solid var(--line);border-radius:18px;background:var(--surface-solid)}
.qr-card img{width:min(220px,100%);display:block;margin:0 auto 10px}
.report-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px}
.charts-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.chart-panel{overflow:visible}
.wide-chart{grid-column:1/-1}
.interactive-chart-wrap{position:relative;width:100%;min-height:280px;touch-action:pan-y}
.interactive-chart-wrap canvas{width:100%;height:280px;display:block}
.donut-wrap canvas{height:300px}
.chart-tooltip{position:absolute;z-index:12;pointer-events:none;min-width:120px;max-width:210px;padding:10px 11px;border-radius:14px;background:rgba(11,16,32,.94);color:#fff;box-shadow:0 14px 36px rgba(0,0,0,.24);font-size:.78rem;line-height:1.35;transform:translate(-50%,-115%);white-space:normal}
.chart-tooltip strong{display:block;margin-bottom:3px}
.chart-legend{display:flex;flex-wrap:wrap;gap:8px}
.chart-legend span{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:.75rem}
.chart-legend span:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--legend-color,var(--accent))}
.chart-legend span:nth-child(2){--legend-color:#14b8a6}
.chart-legend span:nth-child(3){--legend-color:#f59e0b}
.chart-legend span:nth-child(4){--legend-color:#64748b}
.chart-legend span:nth-child(5){--legend-color:#ec4899}
.bottom-nav{position:fixed;left:12px;right:12px;bottom:max(10px,env(safe-area-inset-bottom));max-width:560px;margin:0 auto;padding:7px;border-radius:24px;background:rgba(11,16,32,.9);border:1px solid rgba(255,255,255,.08);box-shadow:0 20px 60px rgba(0,0,0,.28);z-index:40}
.bottom-nav{display:grid;grid-template-columns:repeat(4,1fr)}
.bottom-nav a{display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;border-radius:17px;color:rgba(255,255,255,.58);font-size:.69rem;font-weight:700}
.bottom-nav a.active{background:rgba(255,255,255,.11);color:#fff}
.nav-icon{font-size:1.05rem;line-height:1}
@media(max-width:760px){
  .app-shell{padding:10px 10px calc(98px + env(safe-area-inset-bottom))}
  .topbar{border-radius:22px;padding:16px}
  .hero-status{border-radius:22px;padding:17px;flex-direction:column}
  .metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .metric-card{border-radius:19px;padding:14px}
  .metric-card strong{font-size:1.32rem}
  .panel{padding:14px;border-radius:22px}
  .desktop-table{display:none}
  .mobile-list{display:flex;flex-direction:column;gap:10px}
  .charts-grid{grid-template-columns:1fr}
  .wide-chart{grid-column:auto}
  .interactive-chart-wrap{min-height:250px}
  .interactive-chart-wrap canvas{height:250px}
  .report-toolbar{align-items:flex-start;flex-direction:column}
  .section-title{flex-direction:column}
  .chart-legend.compact{gap:6px}
}
@media(max-width:390px){
  .metric-grid{grid-template-columns:1fr 1fr}
  .metric-card strong{font-size:1.18rem}
  .bottom-nav a{font-size:.64rem}
}

.quick-action-fab{position:fixed;right:max(18px,calc(env(safe-area-inset-right) + 14px));bottom:calc(92px + env(safe-area-inset-bottom));z-index:55;width:58px;height:58px;border:0;border-radius:19px;display:grid;place-items:center;background:linear-gradient(145deg,var(--accent),color-mix(in srgb,var(--accent) 65%,#111827));color:#fff;box-shadow:0 16px 38px color-mix(in srgb,var(--accent) 32%,transparent);font-size:1.25rem;font-weight:800;-webkit-tap-highlight-color:transparent}
.quick-action-fab:active{transform:scale(.96)}
.quick-sheet-backdrop{position:fixed;inset:0;z-index:60;background:rgba(3,7,18,.38);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}
.quick-sheet{position:fixed;left:50%;bottom:0;z-index:61;width:min(680px,100%);max-width:100%;transform:translate(-50%,105%);transition:transform .28s cubic-bezier(.22,.8,.22,1);padding:10px 14px calc(18px + env(safe-area-inset-bottom));border-radius:28px 28px 0 0;background:var(--surface-solid);border:1px solid var(--line);box-shadow:0 -24px 70px rgba(0,0,0,.22)}
.quick-sheet.open{transform:translate(-50%,0)}
.quick-sheet-handle{width:42px;height:5px;border-radius:999px;background:color-mix(in srgb,var(--muted) 28%,transparent);margin:2px auto 14px}
.quick-sheet-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:14px}
.quick-sheet-head h2{margin:4px 0 0}
.quick-sheet-close{width:38px;height:38px;border:0;border-radius:50%;background:var(--surface-soft);color:var(--text);font-size:1.45rem;line-height:1}
.quick-actions-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.quick-actions-grid form{margin:0}
.quick-action-card{width:100%;min-height:112px;border:1px solid var(--line);border-radius:20px;background:var(--surface);color:var(--text);display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;gap:4px;padding:14px;text-align:left}
.quick-action-card:active{transform:scale(.985)}
.quick-action-card .quick-icon{display:grid;place-items:center;width:36px;height:36px;margin-bottom:auto;border-radius:12px;background:color-mix(in srgb,var(--accent) 13%,var(--surface))}
.quick-action-card strong{font-size:.96rem}
.quick-action-card small{color:var(--muted);font-size:.76rem}
.quick-action-card.danger-action .quick-icon{background:color-mix(in srgb,var(--danger) 12%,var(--surface))}
.quick-settings-link{display:flex;align-items:center;justify-content:center;min-height:46px;margin-top:12px;border-radius:15px;background:var(--surface-soft);color:var(--text);font-weight:750}
body.quick-sheet-open{overflow:hidden}
@media(max-width:390px){.quick-action-fab{right:14px;bottom:calc(88px + env(safe-area-inset-bottom));width:54px;height:54px;border-radius:18px}.quick-sheet{padding-left:10px;padding-right:10px}.quick-action-card{min-height:104px;padding:12px}}


html{scroll-behavior:smooth}
body{-webkit-overflow-scrolling:touch}
.page-content,.page{transition:opacity .16s ease,transform .16s ease}
html.page-leaving .page-content,html.page-leaving .page{opacity:.72;transform:translateY(3px)}
button,.button,.quick-action-card,.bottom-nav a,.icon-button,.quick-action-fab{
  transition:transform .12s ease,opacity .12s ease,background-color .16s ease,border-color .16s ease;
}
button:active,.button:active,.bottom-nav a:active,.icon-button:active{transform:scale(.97)}
.quick-sheet{will-change:transform;transition:transform .22s cubic-bezier(.2,.75,.25,1)}
.quick-sheet-backdrop{transition:opacity .18s ease}
.quick-action-fab{touch-action:manipulation}
.quick-action-card{touch-action:manipulation}
@media(prefers-reduced-motion:reduce){
  *{scroll-behavior:auto!important;transition:none!important;animation:none!important}
}

@media(max-width:760px){
  .glass,.quick-sheet-backdrop{
    backdrop-filter:none;
    -webkit-backdrop-filter:none;
  }
  .panel,.metric-card,.session-card,.chart-panel,.status-card{
    box-shadow:0 6px 20px rgba(15,23,42,.06);
  }
}

.live-flow-panel{overflow:hidden;padding:20px}
.flow-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}
.flow-head h2{margin:3px 0 4px}
.flow-head p{margin:0;color:var(--muted);font-size:.82rem}
.flow-live-pill{display:inline-flex;align-items:center;gap:7px;min-height:32px;padding:0 11px;border-radius:999px;background:color-mix(in srgb,var(--success) 10%,var(--surface));color:var(--success);border:1px solid color-mix(in srgb,var(--success) 18%,var(--line));font-size:.74rem;font-weight:800}
.flow-live-pill i{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 0 5px color-mix(in srgb,currentColor 10%,transparent)}

.premium-flow{position:relative;min-height:500px;border-radius:28px;overflow:hidden;background:radial-gradient(circle at 50% 48%,color-mix(in srgb,var(--accent) 8%,transparent),transparent 27%),linear-gradient(180deg,color-mix(in srgb,var(--surface-soft) 88%,transparent),color-mix(in srgb,var(--surface) 88%,transparent));border:1px solid var(--line)}
.premium-flow::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(255,255,255,.03),transparent 28%,transparent 75%,rgba(255,255,255,.02))}

.flow-center-card{position:absolute;left:50%;top:50%;z-index:4;transform:translate(-50%,-50%);width:176px;min-height:132px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:18px;border-radius:28px;text-align:center;background:color-mix(in srgb,var(--surface-solid) 94%,transparent);border:1px solid color-mix(in srgb,var(--accent) 18%,var(--line));box-shadow:0 18px 50px rgba(15,23,42,.10)}
.flow-center-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:15px;margin-bottom:8px;background:color-mix(in srgb,var(--accent) 12%,var(--surface));font-size:1.2rem}
.flow-center-card span{font-size:.76rem;color:var(--muted);font-weight:700}
.flow-center-card strong{font-size:1.7rem;letter-spacing:-.04em;margin-top:3px}
.flow-center-card small{font-size:.68rem;color:var(--muted);margin-top:4px}

.flow-source{position:absolute;z-index:4;display:flex;align-items:center;gap:11px;min-width:166px;padding:12px 14px;border-radius:20px;background:color-mix(in srgb,var(--surface-solid) 94%,transparent);border:1px solid var(--line);box-shadow:0 10px 30px rgba(15,23,42,.07)}
.flow-source-icon{flex:0 0 auto;width:38px;height:38px;display:grid;place-items:center;border-radius:13px;font-size:1rem;background:var(--surface-soft)}
.flow-source>div:last-child{min-width:0}
.flow-source span{display:block;color:var(--muted);font-size:.72rem;font-weight:700}
.flow-source strong{display:block;margin-top:2px;font-size:1.04rem;letter-spacing:-.02em}
.flow-source small{display:block;margin-top:2px;color:var(--muted);font-size:.68rem}
.flow-source-pv{left:50%;top:22px;transform:translateX(-50%)}
.flow-source-grid{left:18px;top:50%;transform:translateY(-50%)}
.flow-source-battery{right:18px;top:50%;transform:translateY(-50%)}
.flow-source-wallbox{left:50%;bottom:22px;transform:translateX(-50%)}
.flow-source-pv .flow-source-icon{background:rgba(245,158,11,.11)}
.flow-source-grid .flow-source-icon{background:rgba(100,116,139,.11)}
.flow-source-battery .flow-source-icon{background:rgba(168,85,247,.10)}
.flow-source-wallbox .flow-source-icon{background:rgba(37,99,235,.10)}

.premium-flow-lines{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none}
.premium-flow-line{fill:none;stroke-width:5;stroke-linecap:round;opacity:.88;stroke-dasharray:8 11;animation:premiumFlow 1s linear infinite}
.path-pv{stroke:url(#pvFlow)}
.path-grid{stroke:url(#gridFlow)}
.path-battery{stroke:url(#batteryFlow)}
.path-wallbox{stroke:url(#wallboxFlow)}
.premium-flow-line.inactive{opacity:.12;animation:none}
.premium-flow-line.reverse{animation-direction:reverse}
@keyframes premiumFlow{to{stroke-dashoffset:-19}}
.flow-summary{margin-top:12px;min-height:20px;text-align:center;color:var(--muted);font-size:.76rem;line-height:1.45}

@media(max-width:620px){
  .live-flow-panel{padding:16px}
  .flow-head{margin-bottom:14px}
  .premium-flow{min-height:570px;border-radius:24px;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto 1fr auto;gap:12px;padding:16px}
  .premium-flow-lines{display:none}
  .flow-center-card{position:relative;left:auto;top:auto;transform:none;grid-column:1/-1;grid-row:2;align-self:center;justify-self:center;width:min(210px,72%);min-height:138px}
  .flow-source{position:relative;left:auto;right:auto;top:auto;bottom:auto;transform:none;min-width:0;width:100%;min-height:76px;padding:11px 12px}
  .flow-source-pv{grid-column:1;grid-row:1}
  .flow-source-grid{grid-column:2;grid-row:1}
  .flow-source-battery{grid-column:1;grid-row:3}
  .flow-source-wallbox{grid-column:2;grid-row:3}
  .flow-source-icon{width:34px;height:34px;border-radius:12px}
  .flow-source span{font-size:.67rem}
  .flow-source strong{font-size:.94rem}
  .flow-center-card strong{font-size:1.9rem}
  .flow-center-card::before,.flow-center-card::after{content:"";position:absolute;left:50%;width:2px;height:54px;transform:translateX(-50%);background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--accent) 35%,transparent),transparent)}
  .flow-center-card::before{top:-60px}
  .flow-center-card::after{bottom:-60px}
}
@media(max-width:380px){
  .premium-flow{padding:12px;gap:10px;min-height:550px}
  .flow-source{gap:8px;padding:10px}
  .flow-source-icon{width:32px;height:32px}
  .flow-source strong{font-size:.88rem}
  .flow-center-card{width:74%;min-height:132px}
}
@media(prefers-reduced-motion:reduce){.premium-flow-line{animation:none}}

.flow-source{
  cursor:pointer;
  appearance:none;
  -webkit-appearance:none;
  color:var(--text);
  font:inherit;
  text-align:left;
  transition:transform .16s ease,border-color .18s ease,background .18s ease,box-shadow .18s ease;
  touch-action:manipulation;
}
.flow-source:hover{border-color:color-mix(in srgb,var(--accent) 22%,var(--line))}
.flow-source:active{transform:scale(.975)}
.flow-source.is-selected{
  border-color:color-mix(in srgb,var(--accent) 38%,var(--line));
  background:color-mix(in srgb,var(--accent) 6%,var(--surface-solid));
  box-shadow:0 14px 36px rgba(15,23,42,.10);
}
.flow-source.is-active .flow-source-icon{
  box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 8%,transparent);
}
.flow-particle{
  opacity:.95;
  filter:drop-shadow(0 0 5px rgba(255,255,255,.35));
  transition:opacity .18s ease;
}
.particle-pv{fill:#f59e0b}
.particle-grid{fill:#64748b}
.particle-battery{fill:#a855f7}
.particle-wallbox{fill:#2563eb}
.flow-particle.inactive{opacity:0}
.flow-particle.reverse{transform-box:fill-box;transform-origin:center}
.flow-detail{
  display:flex;
  align-items:center;
  gap:12px;
  margin-top:12px;
  padding:12px 14px;
  border-radius:18px;
  background:color-mix(in srgb,var(--surface-soft) 78%,transparent);
  border:1px solid var(--line);
  animation:flowDetailIn .18s ease both;
}
.flow-detail[hidden]{display:none}
.flow-detail-icon{
  flex:0 0 auto;
  width:38px;height:38px;
  display:grid;place-items:center;
  border-radius:13px;
  background:color-mix(in srgb,var(--accent) 10%,var(--surface));
}
.flow-detail-copy{min-width:0;display:flex;flex-direction:column}
.flow-detail-copy span{font-size:.72rem;color:var(--muted);font-weight:700}
.flow-detail-copy strong{font-size:1.05rem;margin-top:1px}
.flow-detail-copy small{font-size:.7rem;color:var(--muted);margin-top:2px}
.flow-detail-close{
  margin-left:auto;
  width:34px;height:34px;
  border:0;border-radius:50%;
  background:var(--surface);
  color:var(--text);
  font-size:1.2rem;
}
@keyframes flowDetailIn{
  from{opacity:0;transform:translateY(4px)}
  to{opacity:1;transform:translateY(0)}
}
@media(max-width:620px){
  .flow-source{min-height:82px}
  .flow-source.is-selected{transform:none}
  .flow-detail{margin-top:10px;padding:11px 12px}
}
@media(prefers-reduced-motion:reduce){
  .flow-particle{display:none}
  .flow-detail{animation:none}
}
