*{margin:0;padding:0;box-sizing:border-box}:root{--color-primary: #1a4480;--color-primary-dark: #0f2d4f;--color-primary-light: #2c5aa0;--color-secondary: #4a5568;--color-success: #2d5016;--color-danger: #721c24;--color-warning: #856404;--color-info: #004085;--color-gray-50: #f9fafb;--color-gray-100: #f3f4f6;--color-gray-200: #e5e7eb;--color-gray-300: #d1d5db;--color-gray-400: #9ca3af;--color-gray-500: #6b7280;--color-gray-600: #4b5563;--color-gray-700: #374151;--color-gray-800: #1f2937;--color-gray-900: #111827;--bg-primary: #ffffff;--bg-secondary: #f9fafb;--bg-tertiary: #f3f4f6;--text-primary: #1f2937;--text-secondary: #4b5563;--text-tertiary: #6b7280;--text-inverse: #ffffff;--border-color: #e5e7eb;--border-color-dark: #d1d5db;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--spacing-2xl: 3rem;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-size-3xl: 1.875rem;--font-size-4xl: 2.25rem;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .04);--radius-sm: .25rem;--radius-md: .375rem;--radius-lg: .5rem;--radius-xl: .75rem;--transition-fast: .15s ease-in-out;--transition-base: .2s ease-in-out;--transition-slow: .3s ease-in-out;--public-header-height: 64px;--public-footer-height: 72px;--dash-header-height: 56px;--dash-nav-width: 280px}body{font-family:var(--font-family);font-size:var(--font-size-base);line-height:1.6;color:var(--text-primary);background-color:var(--bg-secondary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.2;color:var(--text-primary);margin-bottom:var(--spacing-md)}h1{font-size:var(--font-size-3xl)}h2{font-size:var(--font-size-2xl)}h3{font-size:var(--font-size-xl)}.btn{display:inline-flex;align-items:center;justify-content:center;padding:var(--spacing-sm) var(--spacing-lg);font-size:var(--font-size-base);font-weight:500;line-height:1.5;text-align:center;text-decoration:none;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-base);white-space:nowrap}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background-color:var(--color-primary);color:var(--text-inverse);border-color:var(--color-primary)}.btn-primary:hover:not(:disabled){background-color:var(--color-primary-dark);border-color:var(--color-primary-dark)}.btn-secondary{background-color:var(--color-secondary);color:var(--text-inverse);border-color:var(--color-secondary)}.btn-secondary:hover:not(:disabled){background-color:var(--color-gray-700);border-color:var(--color-gray-700)}.btn-danger{background-color:var(--color-danger);color:var(--text-inverse);border-color:var(--color-danger)}.btn-danger:hover:not(:disabled){background-color:#5a161c;border-color:#5a161c}.btn-outline{background-color:transparent;color:var(--color-primary);border-color:var(--color-primary)}.btn-outline:hover:not(:disabled){background-color:var(--color-primary);color:var(--text-inverse)}.btn-ghost{background-color:transparent;color:var(--text-secondary);border-color:var(--border-color)}.btn-ghost:hover:not(:disabled){background-color:var(--bg-tertiary);color:var(--text-primary)}.form-group{margin-bottom:var(--spacing-lg)}.form-label{display:block;font-size:var(--font-size-sm);font-weight:500;color:var(--text-primary);margin-bottom:var(--spacing-sm)}.form-input{display:block;width:100%;padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-base);line-height:1.5;color:var(--text-primary);background-color:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-md);transition:border-color var(--transition-base),box-shadow var(--transition-base)}.form-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #1a44801a}.form-input:disabled{background-color:var(--bg-tertiary);cursor:not-allowed}.form-error{display:block;margin-top:var(--spacing-xs);font-size:var(--font-size-sm);color:var(--color-danger)}.card{background-color:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:var(--spacing-lg);transition:box-shadow var(--transition-base)}.card:hover{box-shadow:var(--shadow-md)}.table-container{background-color:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-lg);overflow-x:auto;-webkit-overflow-scrolling:touch;box-shadow:var(--shadow-sm)}.table{width:100%;border-collapse:collapse;min-width:600px}.table thead{background-color:var(--bg-tertiary)}.table th{padding:var(--spacing-md);text-align:left;font-size:var(--font-size-sm);font-weight:600;color:var(--text-primary);text-transform:uppercase;letter-spacing:.05em;border-bottom:2px solid var(--border-color);white-space:nowrap}.table td{padding:var(--spacing-md);border-bottom:1px solid var(--border-color);color:var(--text-secondary)}.table tbody tr:hover{background-color:var(--bg-secondary)}.table tbody tr:last-child td{border-bottom:none}.alert{padding:var(--spacing-md);border-radius:var(--radius-md);margin-bottom:var(--spacing-md)}.alert-error{background-color:#f8d7da;border:1px solid #f5c6cb;color:var(--color-danger)}.alert-success{background-color:#d4edda;border:1px solid #c3e6cb;color:var(--color-success)}.alert-info{background-color:#d1ecf1;border:1px solid #bee5eb;color:var(--color-info)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000;padding:var(--spacing-md)}.modal-content{background-color:var(--bg-primary);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);max-width:500px;width:100%;max-height:90vh;overflow-y:auto}.modal-header{padding:var(--spacing-lg);border-bottom:1px solid var(--border-color)}.modal-body{padding:var(--spacing-lg)}.modal-footer{padding:var(--spacing-lg);border-top:1px solid var(--border-color);display:flex;gap:var(--spacing-md);justify-content:flex-end;flex-wrap:wrap}.loading{display:flex;align-items:center;justify-content:center;padding:var(--spacing-2xl);color:var(--text-secondary)}.container{max-width:1200px;margin:0 auto;padding:0 var(--spacing-lg)}.page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--spacing-xl);padding-bottom:var(--spacing-md);border-bottom:1px solid var(--border-color);gap:var(--spacing-md);flex-wrap:wrap}.page-title{font-size:var(--font-size-2xl);font-weight:600;color:var(--text-primary);margin:0}.text-center{text-align:center}.mt-1{margin-top:var(--spacing-sm)}.mt-2{margin-top:var(--spacing-md)}.mt-3{margin-top:var(--spacing-lg)}.mt-4{margin-top:var(--spacing-xl)}.mb-1{margin-bottom:var(--spacing-sm)}.mb-2{margin-bottom:var(--spacing-md)}.mb-3{margin-bottom:var(--spacing-lg)}.mb-4{margin-bottom:var(--spacing-xl)}.gap-1{gap:var(--spacing-sm)}.gap-2{gap:var(--spacing-md)}.gap-3{gap:var(--spacing-lg)}.gap-4{gap:var(--spacing-xl)}.dash{min-height:100dvh;display:flex;flex-direction:column;background-color:var(--bg-secondary)}.dash-header{position:sticky;top:0;z-index:100;height:var(--dash-header-height);background:var(--color-primary);color:var(--text-inverse);box-shadow:var(--shadow-md)}.dash-header__inner{display:flex;align-items:center;justify-content:space-between;height:100%;padding:0 var(--spacing-md);max-width:1400px;margin:0 auto}.dash-header__title{font-size:1.1rem;font-weight:600;margin:0;color:var(--text-inverse);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dash-header__right{display:flex;align-items:center;gap:var(--spacing-sm)}.dash-user{display:none;align-items:center;gap:var(--spacing-xs);font-size:var(--font-size-sm)}.dash-user__name{font-weight:500}.dash-user__badge{background:#ffffff2e;padding:2px 8px;border-radius:var(--radius-md);font-size:var(--font-size-xs);font-weight:600}.dash-btn{display:none;align-items:center;justify-content:center;padding:6px 14px;font-size:var(--font-size-sm);font-weight:500;border:1px solid rgba(255,255,255,.25);border-radius:var(--radius-md);background:#ffffff14;color:var(--text-inverse);cursor:pointer;transition:background var(--transition-base)}.dash-btn:hover{background:#ffffff29}.dash-hamburger{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:5px;width:40px;height:40px;background:transparent;border:none;cursor:pointer;padding:8px;border-radius:var(--radius-md);transition:background var(--transition-base)}.dash-hamburger:hover{background:#ffffff1a}.dash-hamburger__bar{display:block;width:22px;height:2px;background:var(--text-inverse);border-radius:1px;transition:transform var(--transition-base),opacity var(--transition-base)}.dash-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:199;opacity:0;visibility:hidden;transition:opacity var(--transition-slow),visibility var(--transition-slow)}.dash-backdrop.is-visible{opacity:1;visibility:visible}.dash-nav{position:fixed;top:0;right:0;bottom:0;width:var(--dash-nav-width);max-width:85vw;background:var(--bg-primary);z-index:200;display:flex;flex-direction:column;transform:translate(100%);transition:transform var(--transition-slow);box-shadow:-4px 0 24px #00000026}.dash-nav.is-open{transform:translate(0)}.dash-nav__header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color);background:var(--bg-tertiary)}.dash-nav__title{font-size:var(--font-size-lg);font-weight:600;color:var(--text-primary)}.dash-nav__close{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;font-size:1.25rem;color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-md);transition:background var(--transition-base),color var(--transition-base)}.dash-nav__close:hover{background:var(--color-gray-200);color:var(--text-primary)}.dash-nav__list{flex:1;list-style:none;padding:var(--spacing-sm) 0;overflow-y:auto}.dash-nav__link{display:flex;align-items:center;gap:var(--spacing-md);padding:var(--spacing-md) var(--spacing-lg);font-size:var(--font-size-base);font-weight:500;color:var(--text-secondary);text-decoration:none;transition:background var(--transition-base),color var(--transition-base)}.dash-nav__link:hover{background:var(--bg-tertiary);color:var(--text-primary)}.dash-nav__link.is-active{background:var(--color-primary);color:var(--text-inverse)}.dash-nav__icon{width:20px;height:20px;flex-shrink:0}.dash-nav__footer{padding:var(--spacing-md) var(--spacing-lg);border-top:1px solid var(--border-color)}.dash-nav__logout{display:flex;align-items:center;gap:var(--spacing-md);width:100%;padding:var(--spacing-md);font-size:var(--font-size-base);font-weight:500;color:var(--color-danger);background:transparent;border:1px solid var(--border-color);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-base),border-color var(--transition-base)}.dash-nav__logout:hover{background:#fef2f2;border-color:var(--color-danger)}.dash-topnav{display:none;background:var(--bg-primary);border-bottom:1px solid var(--border-color);box-shadow:var(--shadow-sm)}.dash-topnav__inner{display:flex;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-lg);max-width:1400px;margin:0 auto;flex-wrap:wrap}.dash-topnav__link{display:inline-flex;align-items:center;padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-sm);font-weight:500;color:var(--text-secondary);text-decoration:none;border-radius:var(--radius-md);transition:all var(--transition-base)}.dash-topnav__link:hover{background:var(--bg-tertiary);color:var(--text-primary)}.dash-topnav__link.is-active{background:var(--color-primary);color:var(--text-inverse)}.dash-main{flex:1;padding:var(--spacing-lg) 0}.dash-container{max-width:1400px;margin:0 auto;padding:0 var(--spacing-md)}.public-header{position:fixed;top:0;left:0;right:0;height:var(--public-header-height);background:#fff;border-bottom:1px solid #e0e0e0;display:flex;align-items:center;justify-content:space-between;padding:0 20px;z-index:1000;box-shadow:var(--shadow-sm)}.public-header__brand{font-size:1.25rem;font-weight:700;color:#1f2937}.public-header__login{display:inline-flex;align-items:center;justify-content:center;padding:8px 14px;background-color:#1a4480;color:#fff;border:1px solid #13325b;border-radius:6px;font-size:.95rem;font-weight:600;cursor:pointer;transition:background-color var(--transition-base),border-color var(--transition-base)}.public-header__login:hover{background-color:#0f2d4f;border-color:#0f2d4f}.public-footer{position:fixed;bottom:0;left:0;right:0;height:var(--public-footer-height);background:#fff;border-top:1px solid #e5e7eb;box-shadow:var(--shadow-sm);display:flex;align-items:center;justify-content:center;padding:12px 20px max(12px,env(safe-area-inset-bottom));z-index:1000}.public-footer__content{max-width:960px;color:var(--text-secondary);font-size:var(--font-size-sm);text-align:center;line-height:1.45}.public-footer__strong{font-weight:600;color:#1f2937}@media (min-width: 640px){.dash-header__title{font-size:1.25rem}.dash-container{padding:0 var(--spacing-lg)}.page-title{font-size:var(--font-size-3xl)}}@media (min-width: 900px){.dash-user{display:flex}.dash-btn{display:inline-flex}.dash-hamburger,.dash-nav,.dash-backdrop{display:none}.dash-topnav{display:block}.dash-header__inner{padding:0 var(--spacing-lg)}.dash-header__title{font-size:1.35rem}}@media (max-width: 480px){.page-header{flex-direction:column;align-items:stretch}.page-header .btn{width:100%;justify-content:center}.modal-footer{flex-direction:column}.modal-footer .btn{width:100%}.table{min-width:500px}}@media (max-width: 640px){:root{--public-header-height: 56px;--public-footer-height: 88px}.public-header{padding:0 14px}.public-header__brand{font-size:1.05rem}.public-header__login{padding:8px 12px;font-size:.9rem}.public-footer{padding:10px 14px max(12px,env(safe-area-inset-bottom))}.public-footer__content{font-size:var(--font-size-xs)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.nav{display:flex;gap:var(--spacing-sm);padding:var(--spacing-md) 0;flex-wrap:wrap}.nav-link{display:inline-flex;align-items:center;padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-base);font-weight:500;color:var(--text-secondary);text-decoration:none;border-radius:var(--radius-md);transition:all var(--transition-base)}.nav-link:hover{background-color:var(--bg-tertiary);color:var(--text-primary)}.nav-link.active{background-color:var(--color-primary);color:var(--text-inverse)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}.text-strong{font-weight:600;color:var(--text-primary)}.card-title{font-size:var(--font-size-lg);font-weight:600;color:var(--text-primary);margin:0}.stat-grid{display:flex;flex-wrap:wrap;gap:var(--spacing-xs) var(--spacing-md);font-size:var(--font-size-sm);color:var(--text-secondary)}.badge{display:inline-flex;align-items:center;padding:2px 8px;font-size:var(--font-size-xs);font-weight:600;border-radius:var(--radius-md);background:var(--bg-tertiary);color:var(--text-secondary)}.badge-error{background:#fee2e2;color:#991b1b}.badge-success{background:#d1fae5;color:#065f46}.icon{fill:none;stroke:currentColor}
