:root{color-scheme:light;font-family:Geist Sans,Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;--background: #ffffff;--surface: #ffffff;--surface-raised: #fafafa;--sidebar-bg: #fafafa;--input-bg: #ffffff;--primary-button-bg: #171717;--primary-button-fg: #ffffff;--border: #e5e5e5;--border-strong: #a8a8a8;--border-subtle: #ebebeb;--accent-fg: #ffffff;--foreground: #171717;--muted: #4d4d4d;--muted-2: #7d7d7d;--accent: #006efe;--accent-soft: #e9f4ff;--accent-shadow: 0 2px 8px rgba(0, 110, 254, .08);--success: #28a948;--success-soft: #ecfdec;--danger: #d8001b;--danger-soft: #ffeeef;--warning: #ffae00;--qr-light: #ffffff;--qr-dark: #171717;--radius: 8px}:root[data-theme=dark]{color-scheme:dark;--background: #000000;--surface: #0a0a0a;--surface-raised: #111111;--sidebar-bg: #050505;--input-bg: #050505;--primary-button-bg: #ededed;--primary-button-fg: #000000;--border: #2e2e2e;--border-strong: #6a6a6a;--border-subtle: #1f1f1f;--accent-fg: #ffffff;--foreground: #ededed;--muted: #a0a0a0;--muted-2: #7d7d7d;--accent: #006efe;--accent-soft: #06193a;--accent-shadow: 0 2px 8px rgba(0, 110, 254, .16);--success: #00ca50;--success-soft: #002608;--danger: #f13242;--danger-soft: #330a11;--qr-light: #ffffff;--qr-dark: #000000}*{box-sizing:border-box}body{margin:0;background:var(--background);color:var(--foreground);letter-spacing:0;transition:background-color .16s ease,color .16s ease}button,input{font:inherit}a{color:inherit;text-decoration:none}.auth-screen{min-height:100vh;display:grid;place-items:center;padding:24px}.auth-panel{width:min(420px,100%);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);padding:28px}.eyebrow{margin:0 0 10px;color:var(--muted);font-size:13px}.title{margin:0;font-size:28px;font-weight:600;line-height:36px}.subtitle{margin:10px 0 0;color:var(--muted);font-size:14px;line-height:22px}.form{display:grid;gap:14px;margin-top:24px}.field{display:grid;gap:8px}.field label{color:var(--muted);font-size:13px}.input{width:100%;height:42px;border:1px solid var(--border);border-radius:6px;background:var(--input-bg);color:var(--foreground);padding:0 12px;outline:none}.input:focus{border-color:var(--accent);box-shadow:0 0 0 3px #006efe2e}.button{height:40px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--border);border-radius:6px;background:var(--primary-button-bg);color:var(--primary-button-fg);padding:0 14px;font-weight:500;cursor:pointer}.button.secondary{background:var(--surface-raised);color:var(--foreground)}.button:disabled{cursor:not-allowed;opacity:.56}.button.danger{background:var(--danger-soft);color:var(--danger);border-color:var(--danger)}.button.danger:disabled{background:var(--surface-raised);color:var(--muted-2);border-color:var(--border)}.link-row{display:flex;justify-content:space-between;gap:12px;margin-top:18px;color:var(--muted);font-size:13px}.app-shell{min-height:100vh;display:grid;grid-template-columns:248px minmax(0,1fr)}.sidebar{border-right:1px solid var(--border-subtle);background:var(--sidebar-bg);padding:20px}.brand{display:flex;align-items:center;gap:10px;height:36px;font-weight:600}.brand-mark{width:22px;height:22px;border:1px solid var(--border);border-radius:6px;background:linear-gradient(135deg,var(--foreground),var(--muted-2))}.nav{display:grid;gap:4px;margin-top:28px}.nav a{display:flex;align-items:center;gap:10px;height:36px;border-radius:6px;color:var(--muted);padding:0 10px;font-size:14px}.nav a.router-link-active{background:var(--surface-raised);color:var(--foreground)}.sidebar-actions{margin-top:24px}.theme-toggle{width:100%;height:36px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--foreground);cursor:pointer;font-size:13px}.theme-toggle:hover{background:var(--surface-raised)}.auth-theme{position:fixed;top:20px;right:20px;width:96px}.main{min-width:0;padding:28px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:24px}.page-title{margin:0;font-size:24px;font-weight:600;line-height:32px}.grid{display:grid;gap:16px}.grid.two{grid-template-columns:minmax(0,1.1fr) minmax(320px,.9fr)}.panel{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:14px;border-bottom:1px solid var(--border-subtle);padding:16px}.panel-title{margin:0;font-size:15px;font-weight:600}.panel-body{padding:16px}.status{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--border);border-radius:999px;padding:4px 8px;color:var(--muted);font-size:12px}.status:before{content:"";width:7px;height:7px;border-radius:999px;background:var(--success)}.copy-box{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid var(--border-strong);border-radius:6px;background:var(--input-bg);padding:10px 12px;color:var(--muted);font-family:Geist Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;overflow:hidden}.copy-box span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.device{border:1px solid var(--border);border-radius:6px;background:var(--surface-raised);padding:14px}.device strong{display:block;font-size:14px}.device span{display:block;margin-top:6px;color:var(--muted);font-size:12px}.qr{display:grid;place-items:center;aspect-ratio:1;border:1px solid var(--border);border-radius:6px;background:linear-gradient(90deg,var(--qr-light) 10px,transparent 10px) 0 0 / 18px 18px,linear-gradient(var(--qr-light) 10px,transparent 10px) 0 0 / 18px 18px,var(--qr-dark);color:var(--qr-dark);font-size:0}.table{width:100%;border-collapse:collapse;font-size:14px}.table th,.table td{border-bottom:1px solid var(--border-subtle);padding:12px 16px;text-align:left;vertical-align:middle}.table th{color:var(--muted);font-size:12px;font-weight:500}.error{color:var(--danger);font-size:13px}.admin-create{display:grid;grid-template-columns:minmax(140px,1fr) minmax(180px,1fr) auto;gap:10px;align-items:center}.admin-create .copy-box{grid-column:1 / -1}.row-actions{display:flex;gap:8px;flex-wrap:wrap}@media(max-width:820px){.app-shell{grid-template-columns:1fr}.sidebar{position:sticky;top:0;z-index:10;border-right:0;border-bottom:1px solid var(--border-subtle)}.nav{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:16px}.sidebar-actions{margin-top:12px}.auth-theme{position:absolute}.main{padding:20px}.grid.two,.device-grid,.admin-create{grid-template-columns:1fr}.table{min-width:760px}.panel-body{overflow-x:auto}}@media(max-width:640px){.main{padding:16px}.page-title{font-size:20px;line-height:28px}.topbar{flex-direction:column;align-items:flex-start;gap:12px}.nav{grid-template-columns:repeat(auto-fit,minmax(80px,1fr))}.nav a{justify-content:center;font-size:13px;padding:0 8px}.panel-header{flex-direction:column;align-items:flex-start;gap:12px}.row-actions{flex-direction:column;align-items:stretch}.row-actions .button{width:100%}}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-wght-normal-BgDaEnEv.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--auth-background: #fafafa;--auth-surface: rgb(255 255 255 / .78);--auth-field: #f2f2f2;--auth-hover: #ebebeb;--auth-ink: #171717;--auth-muted: #666;--auth-accent: #006bff;--auth-primary: #171717;--auth-primary-ink: #fff;--auth-shadow: 0 1px 2px rgb(0 0 0 / .025), 0 4px 9px -5px rgb(0 0 0 / .055), 0 12px 24px -12px rgb(0 0 0 / .07);--auth-ease: cubic-bezier(.22, 1, .36, 1);background:var(--auth-background)}:root[data-theme=dark]{--auth-background: #0b0b0b;--auth-surface: rgb(23 23 23 / .82);--auth-field: #222;--auth-hover: #2e2e2e;--auth-ink: #ededed;--auth-muted: #a1a1a1;--auth-accent: #3d8bff;--auth-primary: #ededed;--auth-primary-ink: #0b0b0b;--auth-shadow: 0 1px 2px rgb(0 0 0 / .1), 0 4px 9px -5px rgb(0 0 0 / .2), 0 12px 24px -12px rgb(0 0 0 / .25)}body{background:var(--auth-background)}.veyra-auth{min-height:100svh;display:flex;flex-direction:column;background:var(--auth-background);color:var(--auth-ink);font-family:Geist Variable,PingFang SC,Microsoft YaHei,sans-serif;-webkit-font-smoothing:antialiased;font-synthesis:none;scrollbar-color:var(--auth-muted) var(--auth-background)}.veyra-auth ::selection{background:#dfefff;color:#002359}.veyra-auth a,.veyra-auth button{-webkit-tap-highlight-color:transparent}.veyra-auth :is(a,button):focus-visible{outline:2px solid var(--auth-accent);outline-offset:4px}.auth-header{padding:24px 32px 0}.auth-navigation{display:flex;align-items:center;justify-content:space-between;gap:16px;max-width:1240px;height:64px;margin:0 auto;padding:0 12px 0 20px;border-radius:999px;background:var(--auth-surface);box-shadow:var(--auth-shadow);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.auth-brand{display:inline-flex;align-items:center;gap:10px;border-radius:99px;font-size:15px;font-weight:600;letter-spacing:-.025em}.auth-brand svg{width:28px;height:28px;color:var(--auth-accent)}.auth-header-actions{display:flex;align-items:center;gap:12px}.auth-tutorial-link{display:flex;align-items:center;min-height:44px;padding-inline:12px;border-radius:999px;font-size:13px;color:var(--auth-muted);transition:color .2s var(--auth-ease),background .2s var(--auth-ease)}.auth-tutorial-link:hover{color:var(--auth-ink);background:var(--auth-field)}.veyra-auth .theme-toggle{width:44px;height:44px;border:0;border-radius:50%;background:transparent;color:var(--auth-muted);transition:background .2s var(--auth-ease)}.veyra-auth .theme-toggle span{display:none}.veyra-auth .theme-toggle svg{width:18px;height:18px}.veyra-auth .theme-toggle:hover{background:var(--auth-field);color:var(--auth-ink)}.auth-main{flex:1;display:grid;align-content:center;justify-items:center;padding:48px 24px}.auth-card{width:min(100%,440px);min-height:584px;display:flex;flex-direction:column;padding:40px;border-radius:24px;background:var(--auth-surface);box-shadow:var(--auth-shadow)}.auth-card-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:32px}.auth-card h1{margin:0;font-size:30px;font-weight:600;line-height:1.3;letter-spacing:-.03em}.auth-host-label{padding:6px 10px;border-radius:99px;background:var(--auth-field);color:var(--auth-muted);font-size:12px}.auth-form{display:grid;gap:24px}.auth-field{display:grid;gap:9px;min-width:0}.auth-field label{font-size:13px;font-weight:500}.auth-input{display:block;width:100%;min-width:0;height:50px;padding:0 16px;border:0;border-radius:12px;background:var(--auth-field);color:var(--auth-ink);caret-color:var(--auth-accent);outline:2px solid transparent;outline-offset:2px;transition:background .2s var(--auth-ease),outline-color .2s var(--auth-ease);font-size:16px}.auth-input:hover:not(:disabled){background:var(--auth-hover)}.auth-input:focus{outline-color:var(--auth-accent);background:var(--auth-field)}.auth-input:disabled{opacity:.6}.auth-password{position:relative}.auth-password .auth-input{padding-right:52px}.auth-password-toggle{position:absolute;top:3px;right:4px;width:44px;height:44px;display:flex;align-items:center;justify-content:center;background:transparent;color:var(--auth-muted);border:0;border-radius:10px;cursor:pointer}.auth-password-toggle:hover:not(:disabled){color:var(--auth-ink)}.auth-submit{min-height:50px;padding:12px 18px;display:flex;justify-content:center;align-items:center;gap:10px;border:0;border-radius:999px;background:var(--auth-primary);color:var(--auth-primary-ink);font-size:14px;font-weight:500;cursor:pointer;transition:opacity .2s var(--auth-ease),transform .2s var(--auth-ease)}.auth-submit:hover:not(:disabled){opacity:.85}.auth-submit:active:not(:disabled){transform:scale(.985)}.auth-submit:disabled{cursor:wait;opacity:.6}.auth-error{margin:-8px 0;color:var(--danger);font-size:13px;line-height:1.6;overflow-wrap:anywhere}.auth-card-footer{display:flex;justify-content:center;margin-top:auto;padding-top:28px}.auth-card-footer a{min-height:44px;display:inline-flex;justify-content:center;align-items:center;gap:8px;border-radius:99px;color:var(--auth-muted);font-size:13px}.auth-card-footer a:hover{color:var(--auth-accent)}.auth-page-footer{display:flex;justify-content:center;padding:0 24px 24px;font-size:12px;color:var(--auth-muted)}.auth-page-footer a{display:inline-flex;align-items:center;min-height:32px;border-radius:8px}.auth-spinner{animation:auth-spin .8s linear infinite}@keyframes auth-spin{to{transform:rotate(360deg)}}@media(max-width:600px){.auth-header{padding:16px 16px 0}.auth-navigation{height:60px;padding-left:16px;padding-right:8px}.auth-header-actions{gap:0}.auth-tutorial-link{padding-inline:8px}.auth-main{padding:32px 20px}.auth-card{padding:32px 24px;min-height:568px;border-radius:22px}}@media(prefers-reduced-motion:reduce){.veyra-auth *,.veyra-auth *:before,.veyra-auth *:after{transition:none!important;animation:none!important}}
