@layer reset,tokens,base,components,utilities;@layer tokens{:root{--p-n-0: oklch(1 0 255);--p-n-25: oklch(.988 .003 255);--p-n-50: oklch(.976 .005 255);--p-n-100: oklch(.955 .008 255);--p-n-200: oklch(.912 .012 255);--p-n-300: oklch(.858 .016 255);--p-n-400: oklch(.72 .024 255);--p-n-450: oklch(.645 .03 255);--p-n-500: oklch(.604 .032 255);--p-n-550: oklch(.56 .03 255);--p-n-600: oklch(.512 .04 255);--p-n-700: oklch(.424 .044 255);--p-n-800: oklch(.33 .045 255);--p-n-850: oklch(.29 .026 255);--p-n-900: oklch(.252 .045 255);--p-n-950: oklch(.19 .038 255);--p-n-1000: oklch(.145 .03 255);--p-n-1050: oklch(.115 .024 255);--p-a-50: oklch(.972 .014 55);--p-a-100: oklch(.938 .032 52);--p-a-200: oklch(.884 .062 50);--p-a-300: oklch(.812 .1 48);--p-a-400: oklch(.726 .14 46);--p-a-500: oklch(.646 .163 44);--p-a-600: oklch(.58 .158 42);--p-a-700: oklch(.5 .135 41);--p-a-800: oklch(.42 .11 40);--p-a-900: oklch(.34 .086 40);--p-a-950: oklch(.255 .055 42);--p-g-50: oklch(.968 .016 160);--p-g-100: oklch(.93 .036 160);--p-g-200: oklch(.88 .062 158);--p-g-300: oklch(.8 .09 156);--p-g-400: oklch(.7 .105 155);--p-g-500: oklch(.6 .105 155);--p-g-600: oklch(.52 .095 155);--p-g-700: oklch(.445 .082 155);--p-g-800: oklch(.365 .066 156);--p-g-900: oklch(.295 .052 157);--p-g-950: oklch(.25 .038 158);--p-w-50: oklch(.972 .018 85);--p-w-100: oklch(.94 .04 84);--p-w-200: oklch(.892 .072 82);--p-w-300: oklch(.82 .1 80);--p-w-400: oklch(.74 .115 78);--p-w-500: oklch(.65 .115 76);--p-w-600: oklch(.565 .105 74);--p-w-700: oklch(.48 .09 72);--p-w-800: oklch(.4 .074 70);--p-w-900: oklch(.325 .058 70);--p-w-950: oklch(.255 .038 72);--p-d-50: oklch(.955 .014 25);--p-d-100: oklch(.922 .032 24);--p-d-200: oklch(.874 .058 23);--p-d-300: oklch(.812 .098 22);--p-d-400: oklch(.712 .14 22);--p-d-500: oklch(.62 .17 22);--p-d-600: oklch(.552 .17 22);--p-d-700: oklch(.478 .15 22);--p-d-800: oklch(.4 .122 22);--p-d-900: oklch(.328 .094 22);--p-d-950: oklch(.25 .045 22)}:root{color-scheme:light dark;--color-surface: light-dark(var(--p-n-50), var(--p-n-1000));--color-surface-raised: light-dark(var(--p-n-0), var(--p-n-950));--color-surface-sunken: light-dark(var(--p-n-100), var(--p-n-1050));--color-surface-inverse: light-dark(var(--p-n-900), var(--p-n-100));--color-scrim: color-mix(in oklab, var(--p-n-1000) 55%, transparent);--color-brand-surface: var(--p-n-900);--color-on-brand: var(--p-n-25);--color-on-brand-soft: var(--p-n-300);--color-ink: light-dark(var(--p-n-900), var(--p-n-50));--color-ink-soft: light-dark(var(--p-n-700), var(--p-n-300));--color-ink-faint: light-dark(var(--p-n-600), var(--p-n-400));--color-ink-inverse: light-dark(var(--p-n-25), var(--p-n-950));--color-line: light-dark(var(--p-n-200), var(--p-n-850));--color-line-strong: light-dark(var(--p-n-450), var(--p-n-550));--color-accent: light-dark(var(--p-a-600), var(--p-a-500));--color-accent-hover: light-dark(var(--p-a-700), var(--p-a-400));--color-accent-ink: light-dark(var(--p-a-700), var(--p-a-300));--color-accent-surface: light-dark(var(--p-a-50), var(--p-a-950));--color-on-accent: light-dark(var(--p-n-0), var(--p-n-1000));--color-ok: light-dark(var(--p-g-600), var(--p-g-400));--color-ok-ink: light-dark(var(--p-g-700), var(--p-g-300));--color-ok-surface: light-dark(var(--p-g-50), var(--p-g-950));--color-warn: light-dark(var(--p-w-600), var(--p-w-400));--color-warn-ink: light-dark(var(--p-w-700), var(--p-w-300));--color-warn-surface: light-dark(var(--p-w-50), var(--p-w-950));--color-bad: light-dark(var(--p-d-600), var(--p-d-400));--color-bad-ink: light-dark(var(--p-d-700), var(--p-d-300));--color-bad-surface: light-dark(var(--p-d-50), var(--p-d-950));--color-focus: light-dark(var(--p-a-600), var(--p-a-400));--color-focus-halo: color-mix(in oklab, var(--color-focus) 30%, transparent);--color-shadow-weak: light-dark( color-mix(in oklab, var(--p-n-900) 6%, transparent), color-mix(in oklab, var(--p-n-1050) 45%, transparent));--color-shadow-strong: light-dark( color-mix(in oklab, var(--p-n-900) 9%, transparent), color-mix(in oklab, var(--p-n-1050) 60%, transparent));--color-shadow-accent: color-mix(in oklab, var(--color-accent) 22%, transparent);--font-sans: "Noto Sans SC", -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;--font-mono: ui-monospace, "SF Mono", "Cascadia Mono", Menlo, monospace;--text-2xs: .75rem;--text-xs: .8125rem;--text-sm: .875rem;--text-md: .9375rem;--text-base: 1rem;--text-lg: 1.125rem;--text-xl: clamp(1.25rem, 1.15rem + .5vw, 1.5rem);--text-2xl: clamp(1.5rem, 1.35rem + .75vw, 1.875rem);--text-3xl: clamp(1.875rem, 1.6rem + 1.35vw, 2.5rem);--leading-tight: 1.25;--leading-snug: 1.4;--leading-body: 1.75;--measure-page: 78rem;--measure-page-wide: 90rem;--measure-cjk: 36ic;--page-gutter: var(--space-lg);--space-3xs: .125rem;--space-2xs: .25rem;--space-xs: .5rem;--space-sm: .75rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--space-2xl: 3rem;--space-3xl: 4rem;--radius-xs: .375rem;--radius-sm: .5rem;--radius-md: .625rem;--radius-lg: .875rem;--radius-xl: 1.25rem;--radius-full: 999px;--shadow-sm: 0 1px 2px var(--color-shadow-weak);--shadow-md: 0 1px 2px var(--color-shadow-weak), 0 8px 24px var(--color-shadow-strong);--shadow-lg: 0 2px 6px var(--color-shadow-weak), 0 18px 40px var(--color-shadow-strong);--shadow-accent: 0 6px 16px var(--color-shadow-accent);--duration-fast: .12s;--duration-base: .18s;--duration-slow: .28s;--duration-fade: .15s;--ease-standard: cubic-bezier(.2, 0, 0, 1);--ease-out: cubic-bezier(.16, 1, .3, 1);--motion-press: 1px;--z-base: 0;--z-sticky: 100;--z-dropdown: 200;--z-overlay: 300;--z-toast: 400;--topbar-h: 3.5rem;--sidebar-w: 13rem}@media(min-width:62rem){:root{--page-gutter: var(--space-xl)}}@media(prefers-reduced-motion:reduce){:root{--duration-fast: .01ms;--duration-base: .01ms;--duration-slow: .01ms;--motion-press: 0px}}}@layer reset{*,*:before,*:after{box-sizing:border-box}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}img,picture,svg,video{max-width:100%;display:block}input,button,textarea,select{font:inherit;color:inherit}}@layer base{html{scroll-padding-top:var(--topbar-h)}body{font-family:var(--font-sans);color:var(--color-ink);background:var(--color-surface);font-size:var(--text-base);line-height:var(--leading-body);-webkit-font-smoothing:antialiased}h1,h2,h3,h4{line-height:var(--leading-tight);margin-block-end:.5em;text-wrap:balance}h1{font-size:var(--text-2xl)}h2{font-size:var(--text-xl)}h3{font-size:var(--text-lg)}h4{font-size:var(--text-base)}p{text-wrap:pretty}a{color:var(--color-accent-ink);text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}:lang(zh){font-synthesis:weight}:lang(zh) :is(em,i){font-style:normal;-webkit-text-emphasis:filled dot currentColor;text-emphasis:filled dot currentColor;-webkit-text-emphasis-position:under right;text-emphasis-position:under right}}@layer components{.card{--card-bg: var(--color-surface-raised);--card-border: var(--color-line);--card-radius: var(--radius-lg);--card-shadow: var(--shadow-sm);--card-pad: var(--space-md);background:var(--card-bg);border:1px solid var(--card-border);border-radius:var(--card-radius);box-shadow:var(--card-shadow);padding:var(--card-pad)}.btn{--btn-bg: var(--color-accent);--btn-bg-hover: var(--color-accent-hover);--btn-ink: var(--color-on-accent);--btn-border: transparent;--btn-pad-block: var(--space-xs);--btn-pad-inline: var(--space-lg);--btn-radius: var(--radius-full);--btn-shadow: var(--shadow-accent);display:inline-block;padding:var(--btn-pad-block) var(--btn-pad-inline);border:1px solid var(--btn-border);border-radius:var(--btn-radius);background:var(--btn-bg);color:var(--btn-ink);font-size:var(--text-md);font-weight:500;line-height:var(--leading-snug);cursor:pointer;box-shadow:var(--btn-shadow);white-space:nowrap;transition:background-color var(--duration-fade) var(--ease-standard),translate var(--duration-fast) var(--ease-standard)}.btn:hover{background:var(--btn-bg-hover);text-decoration:none}.btn:active{translate:0 var(--motion-press)}.btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.btn.ghost{--btn-bg: transparent;--btn-bg-hover: var(--color-surface-sunken);--btn-ink: var(--color-ink);--btn-border: var(--color-line-strong);--btn-shadow: none}.btn.danger{--btn-bg: var(--color-bad);--btn-bg-hover: var(--color-bad-ink);--btn-shadow: none}.btn.sm{--btn-pad-block: var(--space-3xs);--btn-pad-inline: var(--space-sm);font-size:var(--text-sm)}.btn.link{--btn-bg: transparent;--btn-bg-hover: transparent;--btn-ink: var(--color-accent-ink);--btn-shadow: none;--btn-pad-inline: 0}.tag{--tag-bg: var(--color-surface-sunken);--tag-ink: var(--color-ink-soft);--tag-border: var(--color-line);display:inline-block;padding:var(--space-3xs) var(--space-sm);border:1px solid var(--tag-border);border-radius:var(--radius-full);background:var(--tag-bg);color:var(--tag-ink);font-size:var(--text-2xs);line-height:var(--leading-snug);white-space:nowrap}.tag.accent{--tag-bg: var(--color-accent-surface);--tag-ink: var(--color-accent-ink);--tag-border: transparent}.tag.ok{--tag-bg: var(--color-ok-surface);--tag-ink: var(--color-ok-ink);--tag-border: transparent}.tag.warn{--tag-bg: var(--color-warn-surface);--tag-ink: var(--color-warn-ink);--tag-border: transparent}.tag.bad{--tag-bg: var(--color-bad-surface);--tag-ink: var(--color-bad-ink);--tag-border: transparent}.notice{--notice-bg: var(--color-surface-sunken);--notice-ink: var(--color-ink-soft);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm);background:var(--notice-bg);color:var(--notice-ink);font-size:var(--text-sm)}.notice.ok{--notice-bg: var(--color-ok-surface);--notice-ink: var(--color-ok-ink)}.notice.warn{--notice-bg: var(--color-warn-surface);--notice-ink: var(--color-warn-ink)}.notice.bad{--notice-bg: var(--color-bad-surface);--notice-ink: var(--color-bad-ink)}input,select,textarea{--field-bg: var(--color-surface-raised);--field-border: var(--color-line-strong);width:100%;padding:var(--space-xs) var(--space-sm);border:1px solid var(--field-border);border-radius:var(--radius-md);background:var(--field-bg);color:var(--color-ink);font-size:var(--text-md)}input[type=checkbox],input[type=radio]{width:auto}input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--color-focus);outline-offset:1px;border-color:var(--color-focus)}input::placeholder,textarea::placeholder{color:var(--color-ink-faint)}label{display:block;font-size:var(--text-sm);font-weight:500;color:var(--color-ink-soft);margin-block:var(--space-sm) var(--space-2xs)}.field-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));column-gap:var(--space-md)}.table{--table-head-bg: var(--color-surface-sunken);--table-line: var(--color-line);--table-pad: var(--space-xs) var(--space-sm);width:100%;border-collapse:collapse;font-size:var(--text-sm);line-height:var(--leading-snug)}.table th,.table td{padding:var(--table-pad);border-bottom:1px solid var(--table-line);text-align:start;vertical-align:top}.table th{background:var(--table-head-bg);color:var(--color-ink-soft);font-weight:500;white-space:nowrap}.table td.num,.table th.num{text-align:end;font-variant-numeric:tabular-nums}.table-wrap{overflow-x:auto}.meter{--meter-track: var(--color-surface-sunken);--meter-fill: var(--color-accent);--meter-h: .5rem;position:relative;height:var(--meter-h);border-radius:var(--radius-full);background:var(--meter-track);overflow:hidden}.meter:after{content:"";position:absolute;inset-block:0;inset-inline-start:0;width:var(--meter-value, 0%);background:var(--meter-fill);border-radius:inherit}.meter.ok{--meter-fill: var(--color-ok)}.meter.warn{--meter-fill: var(--color-warn)}.meter.bad{--meter-fill: var(--color-bad)}.drawer-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-overlay);background:var(--color-scrim);display:flex;justify-content:flex-end}.drawer{--drawer-w: min(36rem, 100vw);width:var(--drawer-w);height:100%;overflow-y:auto;background:var(--color-surface-raised);box-shadow:var(--shadow-lg);padding:var(--space-lg)}.drawer-actions{display:flex;gap:var(--space-xs);justify-content:flex-end;margin-block-start:var(--space-lg)}.dialog-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-overlay);background:var(--color-scrim);display:grid;place-items:center;padding:var(--space-md)}.dialog{width:min(32rem,100%);background:var(--color-surface-raised);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:var(--space-lg)}}@layer utilities{.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.muted{color:var(--color-ink-faint);font-size:var(--text-sm)}.tnum{font-variant-numeric:tabular-nums}.mono{font-family:var(--font-mono);font-size:var(--text-sm)}.stack>*+*{margin-block-start:var(--stack-gap, var(--space-md))}.row{display:flex;gap:var(--space-xs);align-items:center;flex-wrap:wrap}.spread{display:flex;gap:var(--space-sm);align-items:center;justify-content:space-between;flex-wrap:wrap}}@media(forced-colors:active){.card,.tag,.dialog,.drawer{border:1px solid CanvasText;box-shadow:none}.btn{border:1px solid ButtonBorder;background:ButtonFace;color:ButtonText;box-shadow:none}.btn:hover,.btn:focus-visible{border-color:Highlight}.btn:disabled{border-color:GrayText;color:GrayText}.meter{border:1px solid CanvasText}.meter:after{background:Highlight}:focus-visible{outline:2px solid Highlight;outline-offset:2px}}.shell{min-height:100dvh;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:var(--z-sticky);height:var(--topbar-h);display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding-inline:var(--page-gutter);background:var(--color-brand-surface);color:var(--color-on-brand)}.topbar-brand{color:var(--color-on-brand);font-weight:700;font-size:var(--text-lg);letter-spacing:.02em}.topbar-brand:hover{text-decoration:none}.topbar-tools{display:flex;align-items:center;gap:var(--space-sm)}.topbar-lang{width:auto;padding-block:var(--space-3xs);font-size:var(--text-sm)}.topbar-user{display:flex;flex-direction:column;line-height:var(--leading-tight);font-size:var(--text-sm);text-align:end;color:var(--color-on-brand)}.topbar-user:hover{text-decoration:underline}.topbar-role{color:var(--color-on-brand-soft);font-size:var(--text-2xs)}.topbar-logout{--btn-ink: var(--color-on-brand);--btn-border: var(--color-on-brand-soft);--btn-bg-hover: transparent}.shell-body{flex:1;display:grid;grid-template-columns:var(--sidebar-w) minmax(0,1fr)}.shell-body--solo{grid-template-columns:minmax(0,1fr)}.sidebar{border-inline-end:1px solid var(--color-line);background:var(--color-surface-raised);padding:var(--space-md) var(--space-sm)}.sidebar-h{font-size:var(--text-2xs);font-weight:700;letter-spacing:.12em;color:var(--color-ink-faint);padding-inline:var(--space-sm);margin-block-end:var(--space-xs)}.sidebar ul{list-style:none;margin:0;padding:0}.sidebar a{display:block;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm);color:var(--color-ink-soft);font-size:var(--text-md)}.sidebar a:hover{background:var(--color-surface-sunken);text-decoration:none}.sidebar a.active{background:var(--color-accent-surface);color:var(--color-accent-ink);font-weight:600}.sidebar-group{display:block;font-size:var(--text-2xs);font-weight:700;letter-spacing:.12em;color:var(--color-ink-faint);padding:var(--space-md) var(--space-sm) var(--space-2xs)}.content{padding:var(--space-lg) var(--page-gutter) var(--space-2xl);max-width:var(--measure-page-wide);width:100%}.boot{padding:var(--space-2xl) var(--page-gutter)}@media(max-width:48rem){.shell-body{grid-template-columns:1fr}.sidebar{border-inline-end:0;border-block-end:1px solid var(--color-line);padding-block:var(--space-xs)}.sidebar-h,.sidebar-group{display:none}.sidebar ul{display:flex;gap:var(--space-2xs);overflow-x:auto}.topbar-user{display:none}}.login-page{min-height:100dvh;display:flex;flex-direction:column}.login-main{flex:1;display:grid;place-items:center;padding:var(--space-xl) var(--page-gutter)}.login-card{--card-pad: var(--space-xl);width:min(26rem,100%)}.login-card h1{font-size:var(--text-xl)}.login-error{margin-block-start:var(--space-md)}.login-submit{width:100%;margin-block-start:var(--space-lg)}
