:root{--hue: 190;--hue-3: 300;--md-primary: oklch(.84 .1 var(--hue));--md-on-primary: oklch(.26 .06 var(--hue));--md-primary-container: oklch(.38 .08 var(--hue));--md-on-primary-container: oklch(.93 .06 var(--hue));--md-secondary: oklch(.82 .035 var(--hue));--md-secondary-container: oklch(.36 .04 var(--hue));--md-on-secondary-container: oklch(.93 .03 var(--hue));--md-tertiary: oklch(.84 .09 var(--hue-3));--md-on-tertiary: oklch(.27 .06 var(--hue-3));--md-tertiary-container: oklch(.4 .08 var(--hue-3));--md-on-tertiary-container: oklch(.94 .05 var(--hue-3));--md-surface: oklch(.155 .012 var(--hue));--md-surface-low: oklch(.19 .014 var(--hue));--md-surface-container: oklch(.215 .016 var(--hue));--md-surface-high: oklch(.255 .018 var(--hue));--md-surface-highest: oklch(.3 .02 var(--hue));--md-on-surface: oklch(.93 .012 var(--hue));--md-on-surface-variant: oklch(.81 .02 var(--hue));--md-outline: oklch(.62 .02 var(--hue));--md-outline-variant: oklch(.36 .02 var(--hue));--bg: var(--md-surface);--surface: var(--md-surface-container);--surface-2: var(--md-surface-high);--surface-3: var(--md-surface-highest);--border: var(--md-outline-variant);--text: var(--md-on-surface);--text-2: var(--md-on-surface-variant);--text-3: oklch(.72 .02 var(--hue));--primary: var(--md-primary);--primary-soft: var(--md-primary-container);--primary-text: var(--md-on-primary);--live: var(--md-tertiary);--live-soft: var(--md-tertiary-container);--on-live-soft: var(--md-on-tertiary-container);--success: oklch(.85 .12 155);--success-soft: oklch(.33 .07 155);--on-success-soft: oklch(.93 .07 155);--warning: oklch(.86 .11 85);--warning-soft: oklch(.36 .06 85);--on-warning-soft: oklch(.94 .07 85);--danger: oklch(.82 .1 25);--danger-soft: oklch(.36 .11 25);--on-danger-soft: oklch(.93 .04 25);--info: var(--md-primary);--info-soft: oklch(.3 .05 var(--hue));--code-bg: oklch(.125 .01 var(--hue));--code-text: oklch(.9 .015 var(--hue));--radius-sm: 12px;--radius: 16px;--radius-lg: 28px;--radius-full: 999px;--font-display: "Roboto Flex", "Roboto", system-ui, sans-serif;--font-body: "Roboto Flex", "Roboto", system-ui, sans-serif;--font-mono: "Roboto Mono", ui-monospace, monospace;--duration-fast: .12s;--duration-base: .2s;--duration-slow: .4s;--ease: cubic-bezier(.2, 0, 0, 1);--spring: cubic-bezier(.34, 1.4, .64, 1);--wave: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='10' viewBox='0 0 24 10'%3E%3Cpath d='M0 5 Q6 0.5 12 5 T24 5' fill='none' stroke='black' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E");color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}html{transition:--hue 0s}body{margin:0;background:var(--bg);color:var(--text);font:400 15px/1.5 var(--font-body);-webkit-font-smoothing:antialiased;transition:background var(--duration-slow) var(--ease),color var(--duration-slow) var(--ease)}body:before,body:after{content:"";position:fixed;z-index:0;pointer-events:none;border-radius:50%;filter:blur(96px);opacity:.4;will-change:transform}body:before{width:46vw;height:46vw;left:-12vw;top:-14vw;background:var(--md-primary-container);animation:drift-a 26s var(--ease) infinite alternate}body:after{width:40vw;height:40vw;right:-12vw;bottom:-16vw;background:var(--md-tertiary-container);animation:drift-b 32s var(--ease) infinite alternate}#root{position:relative;z-index:1}h1,h2,h3,h4{font-family:var(--font-display);line-height:1.2;margin:0;font-weight:500}h1{font-size:32px;letter-spacing:-.01em;font-weight:400}h2{font-size:20px}h3{font-size:16px}p{margin:0}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}code,.mono{font-family:var(--font-mono);font-size:13px}:focus-visible{outline:2px solid var(--md-primary);outline-offset:2px;border-radius:8px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}::selection{background:var(--md-primary-container);color:var(--md-on-primary-container)}.ripple{position:absolute;border-radius:50%;background:currentColor;opacity:.22;transform:scale(0);pointer-events:none;animation:ripple .56s var(--ease) forwards}.logo{display:block}.logo .cookie{transform-origin:50% 50%;transform-box:fill-box;animation:spin 28s linear infinite;fill:var(--md-primary)}.logo .glyph{stroke:var(--md-on-primary);fill:var(--md-on-primary)}.logo .spark{fill:var(--md-tertiary-container);stroke:var(--md-on-primary);stroke-width:1.2}.shell{display:grid;grid-template-columns:280px 1fr;min-height:100vh}.sidebar{position:sticky;top:0;height:100vh;overflow-y:auto;padding:20px 12px;background:color-mix(in oklch,var(--md-surface-low) 86%,transparent);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);display:flex;flex-direction:column;gap:20px}.brand{display:flex;align-items:center;gap:12px;font-family:var(--font-display);font-weight:500;font-size:19px;color:var(--text);padding:4px 12px}.brand:hover{text-decoration:none}.nav-group{display:flex;flex-direction:column;gap:2px}.nav-label{font-size:12px;font-weight:500;color:var(--text-3);letter-spacing:.04em;padding:0 16px 6px}.nav-link{display:flex;align-items:center;gap:12px;height:52px;padding:0 20px;border-radius:var(--radius-full);color:var(--text-2);font-weight:500;font-size:14px;position:relative;overflow:hidden;transition:background var(--duration-base) var(--ease),color var(--duration-base) var(--ease)}.nav-link:hover{background:color-mix(in oklch,var(--md-on-surface) 8%,transparent);color:var(--text);text-decoration:none}.nav-link.active{background:var(--md-secondary-container);color:var(--md-on-secondary-container)}.nav-link svg{flex:none;transition:transform var(--duration-slow) var(--spring)}.nav-link.active svg{transform:scale(1.12)}.sidebar-foot{margin-top:auto;display:flex;flex-direction:column;gap:12px}.user-chip{display:flex;align-items:center;gap:8px;padding:8px 8px 8px 12px;border-radius:var(--radius-full);background:var(--surface-2);font-size:13px;min-width:0}.user-chip img,.avatar{width:28px;height:28px;border-radius:50%;flex:none;background:var(--md-primary-container)}.user-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main{min-width:0;padding:32px 32px 64px}.page{max-width:1200px;margin:0 auto;display:flex;flex-direction:column;gap:24px}.page>*{animation:rise var(--duration-slow) var(--ease) both}.page>*:nth-child(2){animation-delay:50ms}.page>*:nth-child(3){animation-delay:.1s}.page>*:nth-child(4){animation-delay:.15s}.page>*:nth-child(n+5){animation-delay:.2s}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}.page-head p{color:var(--text-2);margin-top:4px}.topbar,.bottom-nav{display:none}.fab{display:inline-flex;align-items:center;gap:12px;height:56px;padding:0 20px 0 16px;border:0;border-radius:var(--radius);background:var(--md-primary-container);color:var(--md-on-primary-container);font:500 15px var(--font-body);cursor:pointer;position:relative;overflow:hidden;align-self:flex-start;box-shadow:0 2px 6px #00000059;transition:border-radius var(--duration-slow) var(--spring),box-shadow var(--duration-base) var(--ease),transform var(--duration-slow) var(--spring)}.fab:hover{text-decoration:none;border-radius:var(--radius-lg);box-shadow:0 6px 16px #0006;transform:translateY(-1px)}.fab:active{transform:scale(.97)}.fab svg{animation:nudge 3.2s var(--ease) infinite}.scheme-dots{display:flex;gap:8px;padding:4px 12px;flex-wrap:wrap}.scheme-dot{width:28px;height:28px;border-radius:50%;border:0;padding:0;cursor:pointer;position:relative;background:conic-gradient(from 210deg,oklch(.84 .1 var(--h)) 0 50%,oklch(.84 .09 var(--h3)) 50% 100%);transition:transform var(--duration-slow) var(--spring),border-radius var(--duration-slow) var(--spring)}.scheme-dot:hover{transform:scale(1.12)}.scheme-dot[aria-checked=true]{border-radius:10px;transform:rotate(45deg) scale(1.05);box-shadow:0 0 0 2px var(--md-surface),0 0 0 4px var(--md-on-surface)}@media(max-width:880px){.shell{grid-template-columns:1fr}.sidebar{position:fixed;inset:0 auto 0 0;width:300px;z-index:40;transform:translate(-100%);transition:transform var(--duration-slow) var(--ease);background:var(--md-surface-low);border-radius:0 var(--radius-lg) var(--radius-lg) 0}.sidebar.open{transform:none}.topbar{display:flex;align-items:center;justify-content:space-between;padding:8px 8px 8px 4px;background:color-mix(in oklch,var(--md-surface-low) 90%,transparent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);position:sticky;top:0;z-index:20}.main{padding:24px 16px 112px}.scrim{position:fixed;inset:0;background:#0000008c;z-index:35;animation:fade var(--duration-base) ease-out}h1{font-size:26px}.bottom-nav{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;inset:auto 0 0;z-index:30;height:80px;padding:12px 4px;background:var(--md-surface-container)}.bnav-item{display:flex;flex-direction:column;align-items:center;gap:4px;font-size:12px;font-weight:500;color:var(--text-2);background:none;border:0;cursor:pointer;padding:0}.bnav-item:hover{text-decoration:none}.bnav-item .pill{width:64px;height:32px;border-radius:var(--radius-full);display:grid;place-items:center;position:relative;overflow:hidden;transition:background var(--duration-base) var(--ease),width var(--duration-slow) var(--spring)}.bnav-item.active{color:var(--text)}.bnav-item.active .pill{background:var(--md-secondary-container);color:var(--md-on-secondary-container)}}.card{background:var(--surface);border:1px solid transparent;border-radius:var(--radius-lg);padding:24px;transition:background var(--duration-base) var(--ease),border-color var(--duration-base) var(--ease),transform var(--duration-slow) var(--spring)}.card.tight{padding:16px 20px}.card.outlined{background:transparent;border-color:var(--border)}a.card:hover{background:var(--surface-2);text-decoration:none;transform:translateY(-2px)}.card-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px}.grid{display:grid;gap:16px}.grid.cols-2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}.grid.cols-3{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.grid.stats{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.grid.charts{grid-template-columns:minmax(0,1.6fr) minmax(240px,.8fr) minmax(280px,1fr)}@media(max-width:1180px){.grid.charts{grid-template-columns:1fr 1fr}.grid.charts>:first-child{grid-column:1 / -1}}@media(max-width:640px){.grid.charts{grid-template-columns:1fr}}.row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.stack{display:flex;flex-direction:column;gap:12px}.stack.lg{gap:24px}.muted{color:var(--text-2)}.subtle{color:var(--text-3);font-size:13px}.spacer{flex:1}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:8px 24px;border-radius:var(--radius-full);border:1px solid var(--md-outline);background:transparent;color:var(--md-primary);font:500 14px/1 var(--font-body);letter-spacing:.01em;cursor:pointer;white-space:nowrap;position:relative;overflow:hidden;transition:background var(--duration-base) var(--ease),box-shadow var(--duration-base) var(--ease),transform var(--duration-slow) var(--spring),border-radius var(--duration-slow) var(--spring)}.btn:after{content:"";position:absolute;inset:0;background:currentColor;opacity:0;transition:opacity var(--duration-base) var(--ease);pointer-events:none}.btn:hover:after{opacity:.08}.btn:hover{text-decoration:none}.btn:active{transform:scale(.97);border-radius:var(--radius-sm)}.btn:disabled,.btn[aria-disabled=true]{opacity:.38;cursor:not-allowed;transform:none;border-radius:var(--radius-full)}.btn:disabled:after{opacity:0}.btn.primary{background:var(--md-primary);border-color:transparent;color:var(--md-on-primary)}.btn.primary:hover:not(:disabled){box-shadow:0 1px 3px #0006,0 6px 16px color-mix(in oklch,var(--md-primary) 28%,transparent)}.btn.tonal{background:var(--md-secondary-container);border-color:transparent;color:var(--md-on-secondary-container)}.btn.danger{color:var(--danger);border-color:color-mix(in oklch,var(--danger) 50%,transparent)}.btn.danger.filled{background:var(--danger);color:#400c0c;border-color:transparent}.btn.ghost{border-color:transparent;color:var(--text-2);padding:8px 12px}.btn.sm{min-height:32px;padding:4px 16px;font-size:13px}.btn.ghost.sm{padding:4px 8px}.btn.lg{min-height:56px;padding:16px 32px;font-size:16px}.btn.block{width:100%}.field{display:flex;flex-direction:column;gap:4px}.field label,.label{font-size:12px;font-weight:500;color:var(--text-2);letter-spacing:.02em}.field .hint{font-size:12px;color:var(--text-3)}.input,select.input,textarea.input{width:100%;min-height:52px;padding:12px 16px;border-radius:var(--radius-sm);border:1px solid var(--md-outline);background:transparent;color:var(--text);font:400 15px/1.4 var(--font-body);transition:border-color var(--duration-base) var(--ease),box-shadow var(--duration-base) var(--ease)}.input::placeholder{color:var(--text-3)}.input:hover{border-color:var(--md-on-surface)}.input:focus{outline:none;border-color:var(--md-primary);box-shadow:inset 0 0 0 1px var(--md-primary)}select.input option{background:var(--md-surface-high);color:var(--text)}.input.mono{font-family:var(--font-mono);font-size:13px}.input-prefix{display:flex;align-items:stretch}.input-prefix span{display:grid;place-items:center;padding:0 14px;border:1px solid var(--md-outline);border-right:0;border-radius:var(--radius-sm) 0 0 var(--radius-sm);background:var(--surface-2);color:var(--text-2)}.input-prefix .input{border-radius:0 var(--radius-sm) var(--radius-sm) 0}.check{display:flex;gap:12px;align-items:flex-start;font-size:14px;cursor:pointer}.check input{margin-top:3px;accent-color:var(--md-primary);width:18px;height:18px}.chips{display:flex;gap:8px;flex-wrap:wrap}.chip{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 16px;border-radius:8px;border:1px solid var(--md-outline);background:transparent;color:var(--text-2);font:500 13px var(--font-body);cursor:pointer;position:relative;overflow:hidden;transition:background var(--duration-base) var(--ease),border-color var(--duration-base) var(--ease),padding var(--duration-slow) var(--spring)}.chip:hover{background:color-mix(in oklch,var(--md-on-surface) 8%,transparent)}.chip[aria-pressed=true]{background:var(--md-secondary-container);color:var(--md-on-secondary-container);border-color:transparent;padding-left:10px}.chip svg{flex:none}.badge{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:8px;font-size:12px;font-weight:500;background:var(--surface-3);color:var(--text-2);white-space:nowrap}.badge.success{background:var(--success-soft);color:var(--on-success-soft)}.badge.danger{background:var(--danger-soft);color:var(--on-danger-soft)}.badge.warning{background:var(--warning-soft);color:var(--on-warning-soft)}.badge.info{background:var(--md-primary-container);color:var(--md-on-primary-container)}.badge.live{background:var(--live-soft);color:var(--on-live-soft)}.badge .dot{width:6px;height:6px;border-radius:50%;background:currentColor}.badge.pulse .dot{animation:pulse 1.4s ease-out infinite}.badge.live .dot{animation:pulse 2.4s ease-out infinite}.alert{display:flex;gap:12px;padding:16px 20px;border-radius:var(--radius);font-size:14px}.alert>svg{flex:none;margin-top:2px}.alert>div{min-width:0}.alert.info{background:var(--info-soft);color:var(--md-on-primary-container)}.alert.warning{background:var(--warning-soft);color:var(--on-warning-soft)}.alert.danger{background:var(--danger-soft);color:var(--on-danger-soft)}.alert.success{background:var(--success-soft);color:var(--on-success-soft)}.alert a{color:inherit;text-decoration:underline}.alert code{background:#00000040;padding:1px 6px;border-radius:6px;overflow-wrap:anywhere}.alert ul{margin:4px 0 0;padding-left:18px}.stat{display:flex;flex-direction:column;gap:4px}.stat .value{font-family:var(--font-display);font-size:40px;font-weight:400;line-height:1.05;color:var(--md-primary);font-variant-numeric:tabular-nums}.stat .label{font-size:13px;color:var(--text-2)}.stat-tile{position:relative;overflow:hidden}.stat-tile:after{content:"";position:absolute;right:-28px;top:-28px;width:96px;height:96px;border-radius:38% 62% 55% 45%/45% 40% 60% 55%;background:var(--md-primary-container);opacity:.45;animation:morph 9s ease-in-out infinite}.stat-tile:nth-child(2n):after{background:var(--md-tertiary-container);animation-duration:11s;animation-direction:reverse}.stat-tile>*{position:relative;z-index:1}.table{width:100%;border-collapse:collapse;font-size:14px}.table th{text-align:left;font-size:12px;font-weight:500;color:var(--text-2);letter-spacing:.03em;padding:12px 16px;border-bottom:1px solid var(--border)}.table td{padding:14px 16px;border-bottom:1px solid color-mix(in oklch,var(--border) 60%,transparent);vertical-align:middle}.table tbody tr{transition:background var(--duration-fast) var(--ease)}.table tbody tr:hover{background:color-mix(in oklch,var(--md-on-surface) 5%,transparent)}.table tr:last-child td{border-bottom:0}.table-wrap{overflow-x:auto;border-radius:var(--radius)}.url{font-family:var(--font-mono);font-size:13px;word-break:break-all}.kv{display:grid;grid-template-columns:minmax(120px,max-content) 1fr;gap:10px 24px;font-size:14px}.kv dt{color:var(--text-3)}.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}.empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;padding:48px 24px;color:var(--text-2)}.empty h3{color:var(--text);font-size:18px}.empty-icon{width:64px;height:64px;display:grid;place-items:center;background:var(--md-primary-container);color:var(--md-on-primary-container);border-radius:38% 62% 55% 45%/45% 40% 60% 55%;animation:morph 8s ease-in-out infinite,float 4s ease-in-out infinite}.skeleton{background:linear-gradient(90deg,var(--surface-2) 0%,var(--surface-3) 50%,var(--surface-2) 100%);background-size:200% 100%;animation:shimmer 1.4s linear infinite;border-radius:var(--radius-sm)}.spinner{width:18px;height:18px;background:currentColor;border-radius:38% 62% 55% 45%/45% 40% 60% 55%;animation:morph 1.6s ease-in-out infinite,spin 1.6s linear infinite;flex:none}.spinner.lg{width:44px;height:44px;color:var(--md-primary)}.wavy{display:block;width:100%;height:12px;overflow:hidden}.wavy .track{stroke:var(--md-secondary-container)}.wavy .wave{stroke:var(--md-primary);animation:wave-slide 1.1s linear infinite}.logs{background:var(--code-bg);color:var(--code-text);border-radius:var(--radius);padding:16px;max-height:480px;overflow:auto;font:400 12.5px/1.6 var(--font-mono);white-space:pre-wrap;word-break:break-word;border:1px solid var(--border)}.logs .ln{display:grid;grid-template-columns:76px 128px 1fr;gap:12px}.logs .ts{color:var(--text-3)}.logs .src{color:var(--md-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.logs .err{color:var(--danger)}.logs .warn{color:var(--warning)}@media(max-width:640px){.logs .ln{grid-template-columns:1fr;gap:0}.logs .src{display:none}}pre.code{background:var(--code-bg);color:var(--code-text);border-radius:var(--radius);padding:16px;overflow:auto;font:400 12.5px/1.6 var(--font-mono);margin:0;border:1px solid var(--border)}.tabs{display:flex;gap:0;border-bottom:1px solid var(--border);overflow-x:auto}.tab{padding:14px 20px;border:0;background:none;color:var(--text-2);font:500 14px var(--font-body);border-bottom:3px solid transparent;border-radius:3px 3px 0 0;cursor:pointer;margin-bottom:-1px;white-space:nowrap;position:relative;overflow:hidden;transition:color var(--duration-base) var(--ease),background var(--duration-base) var(--ease),border-color var(--duration-base) var(--ease)}.tab:hover{background:color-mix(in oklch,var(--md-on-surface) 6%,transparent);color:var(--text)}.tab[aria-selected=true]{color:var(--md-primary);border-bottom-color:var(--md-primary)}.dropzone{border:2px dashed var(--md-outline);border-radius:28px;padding:48px 24px;text-align:center;background:var(--md-surface-low);display:flex;flex-direction:column;align-items:center;gap:12px;transition:border-color var(--duration-base) var(--ease),background var(--duration-base) var(--ease),transform var(--duration-slow) var(--spring)}.dropzone.over{border-color:var(--md-primary);background:var(--info-soft);transform:scale(1.015)}.list-item{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:var(--radius);border:1px solid transparent;background:var(--surface-2);cursor:pointer;position:relative;overflow:hidden;transition:background var(--duration-base) var(--ease),border-color var(--duration-base) var(--ease)}.list-item:hover{background:var(--surface-3)}.list-item.selected{background:var(--md-secondary-container);border-color:var(--md-primary)}.list-item input[type=radio]{accent-color:var(--md-primary)}details>summary{cursor:pointer;padding:4px 0}details>summary::marker{color:var(--md-primary)}dialog.dialog{border:0;padding:24px;border-radius:28px;background:var(--md-surface-high);color:var(--text);width:min(92vw,420px);box-shadow:0 12px 40px #0000008c}dialog.dialog[open]{animation:dialog-in var(--duration-slow) var(--spring)}dialog.dialog::backdrop{background:#0000008c;animation:fade var(--duration-base) ease-out}.dialog h2{font-size:24px;font-weight:400;margin-bottom:12px}.dialog .actions{display:flex;justify-content:flex-end;gap:8px;margin-top:24px}.dialog-icon{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;background:var(--md-secondary-container);color:var(--md-on-secondary-container);margin-bottom:16px}.provider-card{display:flex;flex-direction:column;gap:12px;position:relative}.provider-card:not(.incompatible):hover{background:var(--surface-2);transform:translateY(-2px)}.provider-card.incompatible{opacity:.6}.monogram{width:40px;height:40px;border-radius:var(--radius-sm);display:grid;place-items:center;font:500 15px var(--font-display);flex:none;background:oklch(.27 .012 var(--hue));color:var(--text);border:1px solid var(--md-outline-variant)}.monogram svg{display:block}.reasons{margin:0;padding-left:18px;font-size:13px;color:var(--text-2)}.chart-card{display:flex;flex-direction:column;gap:12px;min-width:0;justify-content:space-between}.chart-card .big{font:400 32px/1 var(--font-display);color:var(--text);font-variant-numeric:tabular-nums}.chart{width:100%;height:auto;display:block;overflow:visible}.chart .grid-line{stroke:var(--border);stroke-dasharray:2 6}.chart .area{fill:url(#area-fill);animation:fade .9s var(--ease) .3s both}.chart .line{fill:none;stroke:var(--md-primary);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;animation:draw 1.4s var(--ease) forwards}.chart .line.second{stroke:var(--md-tertiary);stroke-width:2;stroke-dasharray:1;animation-delay:.2s;opacity:.9}.chart .pt{fill:var(--md-surface-container);stroke:var(--md-primary);stroke-width:2;animation:pop .5s var(--spring) both}.chart .runner{fill:var(--md-tertiary);offset-rotate:0deg;animation:run 5s linear infinite;filter:drop-shadow(0 0 6px var(--md-tertiary))}.chart .axis{fill:var(--text-3);font:400 11px var(--font-body)}.legend{display:flex;gap:16px;font-size:12px;color:var(--text-2);flex-wrap:wrap}.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px}.donut{position:relative;width:min(100%,200px);margin:0 auto}.donut svg{width:100%;height:auto;display:block;transform:rotate(-90deg)}.donut .track{stroke:var(--surface-3)}.donut .arc{stroke:var(--md-primary);stroke-linecap:round;transition:stroke-dashoffset 1.4s var(--ease)}.donut .arc.rest{stroke:var(--danger);opacity:.75}.donut .orbit{stroke:var(--md-tertiary);stroke-dasharray:2 10;opacity:.7;transform-origin:50% 50%;animation:spin 18s linear infinite}.donut .center{position:absolute;inset:0;display:grid;place-content:center;text-align:center}.donut .center b{font:400 36px/1 var(--font-display);font-variant-numeric:tabular-nums}.donut .center span{font-size:12px;color:var(--text-2)}.bars{display:flex;flex-direction:column;gap:14px}.bar-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:12px;align-items:center;font-size:13px}.bar-track{height:12px;border-radius:var(--radius-full);background:var(--surface-3);overflow:hidden;position:relative}.bar-fill{height:100%;border-radius:var(--radius-full);background:var(--md-primary);width:0;transition:width 1.2s var(--ease);position:relative;overflow:hidden}.bar-fill:after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,oklch(1 0 0 / 35%) 50%,transparent 70%);transform:translate(-100%);animation:sweep 2.6s var(--ease) infinite}.bar-name{display:flex;justify-content:space-between;gap:8px;margin-bottom:4px;color:var(--text-2)}.hub{width:100%;max-width:380px;height:auto;display:block;margin:0 auto;overflow:visible}.hub .link{stroke:var(--md-outline-variant);stroke-width:2;stroke-dasharray:3 9;stroke-linecap:round;animation:dash 1.2s linear infinite}.hub .packet{fill:var(--md-tertiary);animation:travel 2.6s var(--ease) infinite;filter:drop-shadow(0 0 5px var(--md-tertiary))}.hub .ring{fill:none;stroke:var(--md-primary);transform-origin:50% 50%;transform-box:fill-box;animation:ripple-out 3.2s ease-out infinite}.hub .node{fill:oklch(.27 .012 var(--hue));stroke:var(--md-outline-variant);stroke-width:1.5}.hub .node-text{fill:var(--md-on-surface);font:500 13px var(--font-display);text-anchor:middle;dominant-baseline:central}.hub .node-label{fill:var(--md-on-surface-variant);font:400 11px var(--font-body);text-anchor:middle}.hub .core{fill:var(--md-primary);transform-origin:50% 50%;transform-box:fill-box;animation:spin 24s linear infinite}.hub .core-glyph{fill:var(--md-on-primary);stroke:var(--md-on-primary)}.hub .bob{animation:float 5s ease-in-out infinite}.hero{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:24px;align-items:center;background:linear-gradient(120deg,var(--md-primary-container),var(--md-surface-container) 55%,var(--md-tertiary-container));background-size:200% 200%;animation:sheen 14s ease-in-out infinite;overflow:hidden}.hero h1{font-size:36px;color:var(--md-on-primary-container)}.hero p{color:var(--md-on-surface);max-width:46ch}@media(max-width:880px){.hero{grid-template-columns:1fr}.hero h1{font-size:28px}.hero .hub{max-width:280px}}.route{display:grid;grid-template-columns:repeat(6,1fr);gap:0;position:relative;margin:0;padding:0;list-style:none}.route-stop{display:flex;flex-direction:column;align-items:center;gap:8px;position:relative;text-align:center;font-size:13px;color:var(--text-3)}.route-stop:before{content:"";position:absolute;top:14px;left:calc(-50% + 22px);width:calc(100% - 44px);height:10px;background:var(--surface-3);z-index:0;-webkit-mask:linear-gradient(#000 0 0) center / 100% 4px no-repeat;mask:linear-gradient(#000 0 0) center / 100% 4px no-repeat}.route-stop:first-child:before{display:none}.route-stop.done:before,.route-stop.live:before{background:var(--md-primary)}.route-stop.active:before{background:var(--md-tertiary);-webkit-mask:var(--wave) 0 50% / 24px 10px repeat-x;mask:var(--wave) 0 50% / 24px 10px repeat-x;animation:wave-mask .9s linear infinite}.route-node{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:var(--surface-3);z-index:1;color:var(--text-2);transition:background var(--duration-slow) var(--ease),color var(--duration-slow) var(--ease),transform var(--duration-slow) var(--spring),border-radius var(--duration-slow) var(--spring)}.route-stop.done .route-node{background:var(--md-primary);color:var(--md-on-primary)}.route-stop.active{color:var(--text);font-weight:500}.route-stop.active .route-node{background:var(--md-tertiary-container);color:var(--md-on-tertiary-container);animation:morph 2.4s ease-in-out infinite,ring 1.6s ease-out infinite}.route-stop.failed .route-node{background:var(--danger-soft);color:var(--on-danger-soft);border-radius:12px}.route-stop.failed{color:var(--danger);font-weight:500}.route-stop.live .route-node{background:var(--md-tertiary);color:var(--md-on-tertiary);transform:scale(1.14);animation:ring 2.4s ease-out infinite}.route-stop.live{color:var(--md-tertiary);font-weight:500}@media(max-width:640px){.route-stop span{font-size:11px}.route-node{width:30px;height:30px}.route-stop:before{top:10px;left:calc(-50% + 18px);width:calc(100% - 36px)}}.ticket{background:linear-gradient(120deg,var(--md-tertiary-container),var(--md-primary-container),var(--md-tertiary-container));background-size:220% 220%;animation:sheen 9s ease-in-out infinite;color:var(--md-on-primary-container)}.ticket .big-url{font:500 18px/1.4 var(--font-mono);word-break:break-all}.ticket a:not(.btn){color:#f8f8f8}.ticket .subtle{color:var(--md-on-tertiary-container)}.md{line-height:1.7;max-width:820px}.md h1{margin:0 0 16px}.md h2{margin:32px 0 12px;font-size:22px;color:var(--md-primary)}.md h3{margin:24px 0 8px}.md p,.md ul,.md ol,.md table,.md pre{margin:0 0 16px}.md pre{background:var(--code-bg);color:var(--code-text);padding:16px;border-radius:var(--radius);overflow:auto;border:1px solid var(--border)}.md code{background:var(--surface-3);padding:2px 6px;border-radius:6px}.md pre code{background:none;padding:0;color:inherit}.md table{border-collapse:collapse;width:100%;font-size:14px;display:block;overflow-x:auto}.md th,.md td{border:1px solid var(--border);padding:8px 12px;text-align:left}.md th{background:var(--surface-2)}.md blockquote{margin:0 0 16px;padding:12px 16px;border-left:4px solid var(--md-primary);background:var(--info-soft);border-radius:0 var(--radius-sm) var(--radius-sm) 0}.login{min-height:100vh;display:grid;grid-template-columns:1.1fr 1fr}.login-art{background:linear-gradient(125deg,var(--md-primary-container),oklch(.28 .06 var(--hue)),var(--md-tertiary-container),var(--md-primary-container));background-size:300% 300%;animation:sheen 18s ease-in-out infinite;color:var(--md-on-primary-container);padding:48px;display:flex;flex-direction:column;justify-content:space-between;gap:24px;border-radius:0 40px 40px 0;position:relative;overflow:hidden}.login-art>*{position:relative;z-index:1}.login-art h1{font-size:44px;max-width:520px;color:oklch(.98 .01 var(--hue));font-weight:400}.login-art p{color:var(--md-on-primary-container);max-width:480px}.login-panel{display:grid;place-items:center;padding:32px 16px}.login-box{width:100%;max-width:400px;display:flex;flex-direction:column;gap:16px;background:var(--surface);padding:32px;border-radius:28px;animation:rise var(--duration-slow) var(--ease) both}.google-btn{background:#fcfcfc;color:#161616;border-color:transparent}@media(max-width:880px){.login{grid-template-columns:1fr}.login-art{padding:32px 20px;border-radius:0 0 32px 32px}.login-art h1{font-size:30px}.login-art .hub{max-width:260px}}*{scrollbar-width:thin;scrollbar-color:var(--md-outline-variant) transparent}@keyframes spin{to{transform:rotate(360deg)}}@keyframes shimmer{to{background-position:-200% 0}}@keyframes pulse{0%{box-shadow:0 0 0 0 currentColor}to{box-shadow:0 0 0 7px transparent}}@keyframes ring{0%{box-shadow:0 0 color-mix(in oklch,var(--md-tertiary) 55%,transparent)}to{box-shadow:0 0 0 12px transparent}}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes float{0%,to{translate:0 0}50%{translate:0 -6px}}@keyframes nudge{0%,80%,to{transform:rotate(0)}88%{transform:rotate(90deg) scale(1.15)}}@keyframes sheen{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}@keyframes drift-a{0%{transform:translate(0) scale(1)}to{transform:translate(18vw,14vh) scale(1.2)}}@keyframes drift-b{0%{transform:translate(0) scale(1.1)}to{transform:translate(-16vw,-12vh) scale(.9)}}@keyframes morph{0%,to{border-radius:38% 62% 55% 45%/45% 40% 60% 55%}33%{border-radius:60% 40% 38% 62%/55% 62% 38% 45%}66%{border-radius:45% 55% 62% 38%/38% 50% 50% 62%}}@keyframes ripple{to{transform:scale(1);opacity:0}}@keyframes draw{to{stroke-dashoffset:0}}@keyframes pop{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes run{0%{offset-distance:0%}to{offset-distance:100%}}@keyframes travel{0%{offset-distance:0%;opacity:0}12%{opacity:1}85%{opacity:1}to{offset-distance:100%;opacity:0}}@keyframes dash{to{stroke-dashoffset:-24}}@keyframes ripple-out{0%{transform:scale(.6);opacity:.7;stroke-width:3}to{transform:scale(2.6);opacity:0;stroke-width:.5}}@keyframes sweep{to{transform:translate(100%)}}@keyframes wave-slide{to{transform:translate(-24px)}}@keyframes wave-mask{to{-webkit-mask-position:-24px 50%;mask-position:-24px 50%}}@keyframes dialog-in{0%{opacity:0;transform:translateY(24px) scale(.94)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}body:before,body:after,.hub .packet,.chart .runner{animation:none}.hub .packet,.chart .runner{opacity:0}.chart .line{stroke-dashoffset:0}}
