.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);border:1px solid transparent;border-radius:var(--radius-md);font-weight:500;cursor:pointer;transition:background var(--transition),border-color var(--transition),opacity var(--transition),transform var(--transition);white-space:nowrap}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn--sm{padding:var(--space-1) var(--space-3);font-size:.8125rem}.btn--md{padding:var(--space-2) var(--space-4);font-size:.9375rem}.btn--lg{padding:var(--space-3) var(--space-5);font-size:1rem}.btn--block{width:100%}.btn--primary{background:var(--gradient-brand);color:var(--primary-fg);box-shadow:var(--shadow-sm)}.btn--primary:hover:not(:disabled){filter:brightness(1.1)}.btn--secondary{background:var(--surface);border-color:var(--border);color:var(--text)}.btn--secondary:hover:not(:disabled){background:var(--surface-hover)}.btn--ghost{background:transparent;color:var(--text-muted)}.btn--ghost:hover:not(:disabled){background:var(--surface-hover);color:var(--text)}.btn--danger{background:var(--danger);color:#fff}.btn--danger:hover:not(:disabled){filter:brightness(1.1)}.btn__spinner{width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:var(--radius-full);animation:btn-spin .64s linear infinite}.btn--loading .btn__label{opacity:.8}@keyframes btn-spin{to{transform:rotate(360deg)}}.field{display:flex;flex-direction:column;gap:var(--space-2)}.field__label{font-size:.8125rem;font-weight:500;color:var(--text-muted)}.field__control{display:flex;align-items:center;gap:var(--space-2);padding:0 var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);transition:border-color var(--transition),box-shadow var(--transition)}.field__control:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px #307de82e}.field__control--error{border-color:var(--danger)}.field__control--error:focus-within{box-shadow:0 0 0 3px #e236362e}.field__icon{display:flex;color:var(--text-muted);flex-shrink:0}.field__input{flex:1;min-width:0;padding:var(--space-3) 0;background:transparent;border:none;outline:none}.field__input::placeholder{color:var(--text-muted);opacity:.7}.field__error{font-size:.8125rem;color:var(--danger)}.field__hint{font-size:.8125rem;color:var(--text-muted)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:grid;place-items:center;padding:var(--space-4);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal{width:100%;max-width:400px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.modal__header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4);border-bottom:1px solid var(--border)}.modal__title{font-size:1.05rem;font-weight:600}.modal__close{display:grid;place-items:center;padding:var(--space-1);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer}.modal__close:hover{background:var(--surface-hover);color:var(--text)}.modal__body{display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-4)}.modal__error{padding:var(--space-3);background:#e236361f;border:1px solid hsl(0 75% 55% / .4);border-radius:var(--radius-md);color:var(--danger);font-size:.875rem}.modal__success{color:var(--success);font-size:.9375rem}.env-switcher{position:relative}.env-switcher__trigger{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:.875rem;cursor:pointer;transition:border-color var(--transition)}.env-switcher__trigger:hover{border-color:var(--primary)}.env-switcher__label{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.env-switcher__menu{position:absolute;top:calc(100% + var(--space-2));right:0;z-index:60;min-width:240px;max-height:320px;overflow-y:auto;padding:var(--space-2);list-style:none;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg)}.env-switcher__option{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);width:100%;padding:var(--space-2) var(--space-3);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text);font-size:.875rem;text-align:left;cursor:pointer}.env-switcher__option:hover{background:var(--surface-hover)}.env-switcher__option--active{color:var(--primary);font-weight:500}.env-switcher__count{padding:0 var(--space-2);background:var(--surface-hover);border-radius:var(--radius-full);font-size:.75rem;color:var(--text-muted)}.env-switcher__empty{padding:var(--space-3);font-size:.8125rem;color:var(--text-muted);text-align:center}@media(max-width:768px){.env-switcher__label{max-width:90px}}.header{display:flex;align-items:center;gap:var(--space-3);height:var(--header-height);flex-shrink:0;padding:0 var(--space-4);background:var(--surface-glass);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:50}.header__burger{display:none;align-items:center;padding:var(--space-2);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer}.header__burger:hover{background:var(--surface-hover);color:var(--text)}.header__brand{display:flex;align-items:center;gap:var(--space-2);font-weight:600;color:var(--text);text-decoration:none}.header__brand:hover{text-decoration:none}.header__logo{width:20px;height:20px;border-radius:var(--radius-sm);background:var(--gradient-brand)}.header__spacer{flex:1}.header__icon-btn{display:flex;align-items:center;padding:var(--space-2);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer;transition:background var(--transition),color var(--transition)}.header__icon-btn:hover{background:var(--surface-hover);color:var(--text)}.header__user{display:flex;align-items:center;gap:var(--space-2)}.header__avatar{display:grid;place-items:center;width:30px;height:30px;border-radius:var(--radius-full);background:var(--gradient-brand);color:var(--primary-fg);font-size:.8125rem;font-weight:600}.header__name{font-size:.9375rem}@media(max-width:768px){.header__burger{display:flex}.header__name,.header__logout-label{display:none}}.sidebar{width:var(--sidebar-width);flex-shrink:0;display:flex;flex-direction:column;gap:var(--space-1);padding:var(--space-4) var(--space-3);background:var(--surface);border-right:1px solid var(--border);overflow-y:auto}.sidebar__nav{display:flex;flex-direction:column;gap:2px}.sidebar__link{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);color:var(--text-muted);font-size:.9375rem;text-decoration:none;transition:background var(--transition),color var(--transition)}.sidebar__link:hover{background:var(--surface-hover);color:var(--text);text-decoration:none}.sidebar__link--active{background:#307de824;color:var(--primary);font-weight:500}.sidebar__divider{height:1px;margin:var(--space-4) var(--space-2);background:var(--border)}.sidebar__section-title{padding:0 var(--space-3) var(--space-2);font-size:.6875rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted)}@media(max-width:768px){.sidebar{position:fixed;top:var(--header-height);left:0;bottom:0;z-index:40;transform:translate(-100%);transition:transform var(--transition);box-shadow:var(--shadow-lg)}.sidebar--open{transform:translate(0)}}.layout{display:flex;flex-direction:column;height:100%}.layout__body{display:flex;flex:1;min-height:0}.layout__main{flex:1;min-width:0;overflow-y:auto;padding:var(--space-5)}.layout__overlay{display:none}@media(max-width:768px){.layout__overlay{display:block;position:fixed;inset:var(--header-height) 0 0 0;z-index:30;background:#00000080}.layout__main{padding:var(--space-4)}}.placeholder{max-width:640px;margin:var(--space-8) auto;padding:var(--space-6);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);text-align:center}.placeholder__title{font-size:1.25rem;margin-bottom:var(--space-3)}.placeholder__text{color:var(--text-muted)}.spinner-wrap{display:flex;align-items:center;justify-content:center;padding:var(--space-6)}.spinner-wrap--full{min-height:100vh}.spinner{width:28px;height:28px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:var(--radius-full);animation:spinner-rotate .7s linear infinite}@keyframes spinner-rotate{to{transform:rotate(360deg)}}.auth{display:grid;place-items:center;min-height:100%;padding:var(--space-5);background:radial-gradient(60% 50% at 50% 0%,hsl(215 80% 55% / .14),transparent 70%),var(--bg)}.auth__card{display:flex;flex-direction:column;gap:var(--space-4);width:100%;max-width:400px;padding:var(--space-6);background:var(--surface-glass);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.auth__header{display:flex;flex-direction:column;align-items:center;gap:var(--space-2);text-align:center;margin-bottom:var(--space-2)}.auth__logo{width:44px;height:44px;border-radius:var(--radius-md);background:var(--gradient-brand);box-shadow:var(--shadow-md)}.auth__title{font-size:1.375rem;font-weight:600}.auth__subtitle{font-size:.875rem;color:var(--text-muted)}.auth__error{padding:var(--space-3);background:#e236361f;border:1px solid hsl(0 75% 55% / .4);border-radius:var(--radius-md);color:var(--danger);font-size:.875rem}.auth__footer{text-align:center;font-size:.875rem;color:var(--text-muted)}:root{--primary: hsl(215 80% 55%);--primary-hover: hsl(215 80% 62%);--primary-fg: hsl(0 0% 100%);--secondary: hsl(260 70% 60%);--accent: hsl(170 75% 45%);--bg: hsl(220 20% 8%);--surface: hsl(220 18% 12%);--surface-hover: hsl(220 18% 16%);--surface-glass: hsl(220 18% 14% / .72);--text: hsl(0 0% 95%);--text-muted: hsl(0 0% 60%);--border: hsl(220 15% 20%);--danger: hsl(0 75% 55%);--success: hsl(145 65% 45%);--warning: hsl(38 92% 55%);--gradient-brand: linear-gradient(135deg, var(--primary), var(--secondary));--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.5rem;--space-6: 2rem;--space-8: 3rem;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--radius-full: 999px;--shadow-sm: 0 1px 2px hsl(0 0% 0% / .3);--shadow-md: 0 4px 16px hsl(0 0% 0% / .35);--shadow-lg: 0 12px 40px hsl(0 0% 0% / .45);--font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, "Cascadia Code", monospace;--transition: .16s cubic-bezier(.4, 0, .2, 1);--sidebar-width: 260px;--header-height: 56px}[data-theme=light]{--bg: hsl(220 25% 97%);--surface: hsl(0 0% 100%);--surface-hover: hsl(220 20% 95%);--surface-glass: hsl(0 0% 100% / .8);--text: hsl(220 25% 12%);--text-muted: hsl(220 10% 45%);--border: hsl(220 15% 88%);--shadow-sm: 0 1px 2px hsl(220 20% 20% / .08);--shadow-md: 0 4px 16px hsl(220 20% 20% / .1);--shadow-lg: 0 12px 40px hsl(220 20% 20% / .15)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}code,pre{font-family:var(--font-mono);font-size:.9em}button,input,textarea,select{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}::selection{background:#307de859}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-full);border:2px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
