@charset "UTF-8";.menu-backdrop[data-v-55ae8fa9]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:150}.user-menu[data-v-55ae8fa9]{z-index:200}:root{color-scheme:light;--bg-app: #f5f3ee;--bg-primary: #f5f3ee;--bg-secondary: #ffffff;--bg-elevated: #fbfaf7;--bg-sunken: #efece5;--border: #e7e3da;--border-strong: #d8d3c7;--text-primary: #23212b;--text-secondary: #656170;--text-muted: #9c97a4;--accent: #5646e6;--accent-strong: #4c3bd6;--accent-2: #8b5cf6;--accent-soft: #ece9fd;--accent-ink: #4335c4;--accent-grad: linear-gradient(135deg, #5646e6 0%, #8b5cf6 100%);--success: #15926a;--success-soft: #dcf3ea;--warning: #c2760a;--warning-soft: #fbeccf;--danger: #d64550;--danger-soft: #fbe3e4;--neutral: #6b7280;--neutral-soft: #ecedef;--radius-sm: 9px;--radius: 13px;--radius-lg: 20px;--radius-xl: 28px;--shadow-sm: 0 1px 2px rgba(35, 33, 43, .05);--shadow: 0 1px 3px rgba(35, 33, 43, .04), 0 12px 28px -14px rgba(35, 33, 43, .16);--shadow-lg: 0 30px 60px -24px rgba(35, 33, 43, .28);--ring: 0 0 0 3.5px rgba(86, 70, 230, .18);--font-sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-display: "Fraunces", Georgia, "Times New Roman", serif;--font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace;--topbar-h: 64px;--tabbar-h: 66px;--maxw: 1160px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-sans);background:var(--bg-app);color:var(--text-primary);line-height:1.55;font-size:15px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;min-height:100vh}body:before{content:"";position:fixed;inset:0 0 auto 0;height:420px;z-index:-1;background:radial-gradient(900px 340px at 12% -8%,rgba(139,92,246,.12),transparent 70%),radial-gradient(760px 300px at 100% -12%,rgba(86,70,230,.1),transparent 70%);pointer-events:none}::selection{background:var(--accent-soft)}:focus-visible{outline:none;box-shadow:var(--ring);border-radius:8px}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{font-family:var(--font-display);font-weight:600;letter-spacing:-.01em;color:var(--text-primary);line-height:1.15}h1{font-size:clamp(1.7rem,4.5vw,2.3rem)}h2{font-size:1.2rem}.mono{font-family:var(--font-mono);font-size:.86em}.muted{color:var(--text-secondary)}.app-shell{display:flex;flex-direction:column;min-height:100vh}.app-main{flex:1;width:100%;max-width:var(--maxw);margin-inline:auto;padding:2rem 1.75rem 3rem}.topbar{position:sticky;top:0;z-index:100;background:#ffffffd1;-webkit-backdrop-filter:saturate(180%) blur(14px);backdrop-filter:saturate(180%) blur(14px);border-bottom:1px solid var(--border)}.topbar-inner{max-width:var(--maxw);margin-inline:auto;height:var(--topbar-h);padding:0 1.75rem;display:flex;align-items:center;gap:1.25rem}.brand{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--font-display);font-weight:600;font-size:1.2rem;color:var(--text-primary);letter-spacing:-.02em;flex-shrink:0}.brand:hover{text-decoration:none}.brand .mark{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:var(--accent-grad);box-shadow:0 6px 14px -4px #5646e680}.brand .mark svg{width:17px;height:17px}.topnav{display:flex;align-items:center;gap:.15rem;margin-left:.5rem}.topnav a{position:relative;display:inline-flex;align-items:center;gap:.45rem;padding:.5rem .85rem;border-radius:10px;font-size:.9rem;font-weight:500;color:var(--text-secondary);transition:color .15s,background .15s}.topnav a svg{width:17px;height:17px;opacity:.85}.topnav a:hover{color:var(--text-primary);background:var(--bg-sunken);text-decoration:none}.topnav a.router-link-active{color:var(--accent-ink);background:var(--accent-soft)}.topbar-spacer{flex:1}.topbar-actions{display:flex;align-items:center;gap:.75rem;flex-shrink:0}.user-menu{position:relative}.avatar{width:38px;height:38px;border-radius:50%;border:none;cursor:pointer;display:grid;place-items:center;font-size:.82rem;font-weight:700;color:#fff;background:var(--accent-grad);box-shadow:var(--shadow-sm);transition:transform .15s}.avatar:hover{transform:scale(1.05)}.user-dropdown{position:absolute;right:0;top:calc(100% + 10px);min-width:220px;background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:.5rem;z-index:200}.user-dropdown .who{padding:.6rem .7rem;border-bottom:1px solid var(--border);margin-bottom:.4rem}.user-dropdown .who .who-name{font-weight:600;font-size:.9rem}.user-dropdown .who .who-email{font-size:.78rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-dropdown .who .who-role{display:inline-block;margin-top:.35rem}.user-dropdown .menu-item{display:flex;align-items:center;gap:.5rem;width:100%;padding:.55rem .7rem;border:none;background:transparent;border-radius:9px;font:inherit;font-size:.88rem;color:var(--text-primary);cursor:pointer;text-align:left}.user-dropdown .menu-item:hover{background:var(--bg-sunken);text-decoration:none}.user-dropdown .menu-item.danger:hover{color:var(--danger);background:var(--danger-soft)}.user-dropdown .menu-item svg{width:16px;height:16px}.tabbar{display:none;position:fixed;inset:auto 0 0 0;z-index:100;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom,0px));padding-bottom:env(safe-area-inset-bottom,0px);background:#ffffffeb;-webkit-backdrop-filter:saturate(180%) blur(14px);backdrop-filter:saturate(180%) blur(14px);border-top:1px solid var(--border);justify-content:space-around;align-items:stretch}.tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--text-muted);font-size:.66rem;font-weight:600;letter-spacing:.01em;position:relative}.tabbar a svg{width:22px;height:22px}.tabbar a:hover{text-decoration:none}.tabbar a.router-link-active{color:var(--accent)}.tabbar a.router-link-active:before{content:"";position:absolute;top:0;width:28px;height:3px;border-radius:0 0 4px 4px;background:var(--accent-grad)}.fab{display:none}.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.6rem 1.15rem;background:var(--accent-grad);color:#fff;border:none;border-radius:999px;font:inherit;font-size:.9rem;font-weight:600;cursor:pointer;box-shadow:0 8px 18px -8px #5646e699;transition:transform .15s,box-shadow .15s,filter .15s}.btn-primary:hover{filter:brightness(1.05);transform:translateY(-1px);box-shadow:0 12px 24px -8px #5646e6a6;text-decoration:none}.btn-primary:active{transform:translateY(0)}.btn-primary:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.btn-ghost,.btn-logout,.btn-page{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.5rem .9rem;background:#fff;color:var(--text-secondary);border:1px solid var(--border);border-radius:999px;font:inherit;font-size:.85rem;font-weight:500;cursor:pointer;transition:color .15s,border-color .15s,background .15s,box-shadow .15s}.btn-ghost:hover:not(:disabled),.btn-logout:hover:not(:disabled),.btn-page:hover:not(:disabled){color:var(--text-primary);border-color:var(--border-strong);box-shadow:var(--shadow-sm);text-decoration:none}.btn-ghost:disabled,.btn-logout:disabled,.btn-page:disabled{opacity:.45;cursor:not-allowed}.btn-logout:hover:not(:disabled){color:var(--danger);border-color:var(--danger);background:var(--danger-soft)}.card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.4rem 1.5rem;box-shadow:var(--shadow-sm)}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;margin-inline:-.25rem;padding-inline:.25rem}.data-table{width:100%;border-collapse:collapse;min-width:520px}.data-table th,.data-table td{padding:.8rem 1rem;text-align:left;white-space:nowrap}.data-table thead th{font-size:.7rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.07em;border-bottom:1px solid var(--border)}.data-table tbody td{border-bottom:1px solid var(--border);font-size:.9rem}.data-table tbody tr:last-child td{border-bottom:none}.data-table .clickable{cursor:pointer;transition:background .12s}.data-table .clickable:hover{background:var(--bg-elevated)}input,select,textarea{font-family:inherit;accent-color:var(--accent)}input[type=text],input[type=email],input[type=url],input[type=search],input[type=number],select,textarea{background:var(--bg-primary);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.92rem}input[type=text]::placeholder,input[type=email]::placeholder,input[type=url]::placeholder,input[type=search]::placeholder,input[type=number]::placeholder,select::placeholder,textarea::placeholder{color:var(--text-muted)}input[type=text]:focus,input[type=email]:focus,input[type=url]:focus,input[type=search]:focus,input[type=number]:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);background:#fff;box-shadow:var(--ring)}.status-badge{display:inline-flex;align-items:center;gap:.4em;padding:.24em .7em;border-radius:999px;font-size:.72rem;font-weight:600;letter-spacing:.02em;text-transform:uppercase}.status-badge:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.status-badge.large{font-size:.82rem;padding:.32em .9em}.status-badge.success{color:var(--success);background:var(--success-soft)}.status-badge.warning{color:var(--warning);background:var(--warning-soft)}.status-badge.danger{color:var(--danger);background:var(--danger-soft)}.status-badge.muted{color:var(--neutral);background:var(--neutral-soft)}.role-badge{display:inline-block;padding:.16rem .55rem;border-radius:999px;font-size:.72rem;font-weight:600;background:var(--accent-soft);color:var(--accent-ink)}.page-header{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;flex-wrap:wrap;margin-bottom:1.75rem}.page-header .page-sub{color:var(--text-secondary);font-size:.95rem;margin-top:.25rem}.spinner{width:26px;height:26px;border:3px solid var(--bg-sunken);border-top-color:var(--accent);border-radius:50%;animation:spin .75s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.empty,.empty-inline{display:flex;justify-content:center;align-items:center;padding:2rem 0;color:var(--text-secondary)}.fade-enter-active,.fade-leave-active{transition:opacity .2s ease,transform .2s ease}.fade-enter-from{opacity:0;transform:translateY(6px)}.fade-leave-to{opacity:0}@media (max-width: 860px){.topnav{display:none}.topbar-inner{padding:0 1rem}.desktop-only{display:none!important}.tabbar{display:flex}.app-main{padding:1.25rem 1rem calc(var(--tabbar-h) + 1.5rem)}.card{padding:1.15rem}.page-header{margin-bottom:1.25rem}}@media (min-width: 861px){.mobile-only{display:none!important}}
