.user-bar[data-v-5163cde8]{display:flex;align-items:center;gap:12px;margin-left:auto}.role-select[data-v-5163cde8]{padding:6px 10px;border:1px solid #e5e7eb;border-radius:8px;background:#fff;font-size:13px;color:#374151;cursor:pointer}.user-name[data-v-5163cde8]{font-size:14px;color:#374151;font-weight:500}.logout[data-v-5163cde8]{border:none;background:transparent;color:#6b7280;font-size:13px;cursor:pointer}.logout[data-v-5163cde8]:hover{color:#dc2626}.side-footer[data-v-5163cde8]{margin-top:auto;padding:16px 18px;border-top:1px solid #eef0f4}.current-role[data-v-5163cde8]{font-size:12px;font-weight:600;padding:4px 10px;border-radius:999px;background:currentColor;background-opacity:.1;color:#5b5fc7}:root{--primary: #1677ff;--primary-hover: #4096ff;--primary-active: #0958d9;--primary-weak: #e6f4ff;--primary-soft: #f0f7ff;--link: #1677ff;--link-hover: #4096ff;--ok: #00b578;--ok-weak: #e6fbf2;--warn: #ff8d00;--warn-weak: #fff4e6;--danger: #d9363e;--danger-weak: #ffeded;--bg: #f5f7fa;--panel: #ffffff;--line: #e5e8ed;--line-strong: #d6dae0;--text: #1f2329;--text-weak: #646a73;--text-faint: #8f959e;--brand: var(--primary);--sub: var(--text-weak);--chip: var(--primary-weak);--accent: var(--primary);--radius: 8px;--radius-sm: 6px;--radius-lg: 12px;--shadow: 0 2px 12px rgba(20, 50, 100, .08);--shadow-soft: 0 1px 5px rgba(20, 50, 100, .06);--shadow-hover: 0 6px 20px rgba(20, 50, 100, .12)}*{box-sizing:border-box}html,body{margin:0;height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;background:#fff url(/bg-soft.jpg) center top / cover no-repeat fixed;color:var(--text);font-size:14px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--link);text-decoration:none}a:hover{color:var(--link-hover)}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:14px}.app-shell{display:flex;height:100vh;overflow:hidden}.side{width:200px;background:var(--panel);color:var(--text);flex-shrink:0;padding:16px 0;display:flex;flex-direction:column}.side .brand{color:var(--primary);font-weight:700;font-size:17px;padding:4px 20px 18px;display:flex;align-items:center;gap:8px}.side .brand .logo{width:22px;height:22px;border-radius:5px;background:linear-gradient(135deg,#1677ff,#4096ff);display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:700}.nav-group{margin:14px 0 4px;font-size:12px;color:var(--text-faint);padding:0 20px}.nav-item{display:flex;align-items:center;gap:9px;padding:9px 20px 9px 24px;color:var(--text);margin-top:1px;border-left:3px solid transparent;transition:background .14s,color .14s,border-color .14s;font-size:14px}.nav-item:hover{background:var(--primary-soft);color:var(--primary)}.nav-item.active{background:var(--primary-soft);color:var(--primary);font-weight:600;border-left-color:var(--primary)}.nav-item .ic{font-size:15px;width:18px;text-align:center}.main{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{height:56px;background:#fff9;-webkit-backdrop-filter:saturate(180%) blur(14px);backdrop-filter:saturate(180%) blur(14px);display:flex;align-items:center;padding:0 24px;gap:16px}.topbar h1{font-size:15px;margin:0;font-weight:600;color:var(--text)}.topbar .crumb{color:var(--text-weak);font-size:13px}.topbar .crumb .sep{margin:0 6px;color:var(--text-faint)}.content{flex:1;min-height:0;padding:24px;overflow:auto}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}.card{background:var(--panel);border:none;border-radius:var(--radius);padding:18px;box-shadow:var(--shadow-soft);transition:box-shadow .16s,transform .16s}.card:hover{box-shadow:var(--shadow-hover)}.card h3{margin:0 0 6px;font-size:15px;color:var(--text)}.card .sub{color:var(--text-weak);font-size:12px}.card .row{display:flex;align-items:center;justify-content:space-between;margin-top:12px}.tile{display:flex;align-items:center;gap:12px;padding:16px;background:var(--panel);border:none;border-radius:var(--radius);box-shadow:var(--shadow-soft);transition:box-shadow .16s,transform .16s;cursor:pointer}.tile:hover{box-shadow:var(--shadow-hover);transform:translateY(-1px)}.tile .ic{width:36px;height:36px;border-radius:6px;flex-shrink:0;background:var(--primary-weak);color:var(--primary);display:flex;align-items:center;justify-content:center;font-size:18px}.tile .name{font-size:14px;font-weight:600;color:var(--text)}.tile .meta{font-size:12px;color:var(--text-weak);margin-top:2px}.badge{display:inline-block;padding:1px 8px;border-radius:4px;font-size:12px;font-weight:500;line-height:1.6}.badge.online{background:var(--ok-weak);color:var(--ok)}.badge.offline{background:var(--danger-weak);color:var(--danger)}.badge.review{background:var(--warn-weak);color:var(--warn)}.badge.draft{background:var(--line);color:var(--text-weak)}.badge.dev{background:var(--primary-weak);color:var(--primary)}.badge.new{background:var(--danger);color:#fff;border-radius:8px;padding:0 6px;font-size:10px}.badge.trial{background:var(--warn);color:#fff}.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:20px}.stat{background:var(--panel);border:none;border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow-soft);transition:box-shadow .16s,transform .16s}.stat:hover{box-shadow:var(--shadow-hover);transform:translateY(-1px)}.stat .k{color:var(--text-weak);font-size:13px;display:flex;align-items:center;gap:4px}.stat .v{font-size:26px;font-weight:600;margin-top:6px;color:var(--text);letter-spacing:-.5px}.stat .d{color:var(--text-weak);font-size:12px;margin-top:4px}.stat .v.accent{color:var(--primary)}.stat .v.up{color:var(--ok)}.stat .v.down{color:var(--danger)}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px}.search{flex:1;min-width:200px}.search input{width:100%;padding:7px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;transition:border-color .14s,box-shadow .14s}.search input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-weak)}.scene-tabs{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:16px;border-bottom:1px solid var(--line);padding-bottom:0}.scene-tabs button{border:none;background:transparent;padding:10px 16px;font-size:14px;color:var(--text-weak);border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .14s,border-color .14s}.scene-tabs button:hover{color:var(--primary)}.scene-tabs button.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;border-radius:var(--radius-sm);padding:6px 16px;font-size:13px;font-weight:500;color:var(--text);transition:background .14s,color .14s,border-color .14s,box-shadow .14s;white-space:nowrap}.btn:hover{border-color:var(--primary);color:var(--primary)}.btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-weak)}.btn:active{background:var(--primary-soft)}.btn.primary{background:var(--primary);color:#fff;border-color:var(--primary)}.btn.primary:hover{background:var(--primary-hover);color:#fff;border-color:var(--primary-hover)}.btn.primary:active{background:var(--primary-active)}.btn.danger{color:var(--danger);border-color:var(--danger-weak)}.btn.danger:hover{background:var(--danger-weak);color:var(--danger);border-color:var(--danger)}.btn.ghost{border-color:transparent}.btn.ghost:hover{background:var(--primary-soft);color:var(--primary);border-color:transparent}.btn.sm{padding:3px 10px;font-size:12px}.btn.lg{padding:9px 20px;font-size:14px}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-link{background:transparent;border:none;color:var(--primary);padding:4px 8px;font-size:13px}.btn-link:hover{color:var(--primary-hover);background:var(--primary-soft);border-radius:var(--radius-sm)}.stars{color:#ff8d00;letter-spacing:1px;font-size:13px}.muted{color:var(--text-weak)}.faint{color:var(--text-faint)}.pill{font-size:12px;color:var(--text-weak);background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:1px 8px}.table{width:100%;border-collapse:collapse;background:var(--panel);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-soft)}.table th,.table td{text-align:left;padding:12px 16px;border-bottom:1px solid var(--line);font-size:13px}.table th{background:#fafbfc;color:var(--text-weak);font-weight:500;font-size:12px}.table tr:last-child td{border-bottom:none}.table tr:hover td{background:#fafbfc}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#141e3273;display:flex;align-items:center;justify-content:center;z-index:50}.modal{width:560px;max-width:92vw;max-height:88vh;overflow:auto;background:#fff;border-radius:var(--radius-lg);box-shadow:0 8px 32px #1432642e}.modal-head{padding:18px 24px 14px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}.modal-head h2{margin:0;font-size:16px;font-weight:600}.modal-head .close{background:none;border:none;font-size:20px;color:var(--text-weak);padding:0 4px}.modal-head .close:hover{color:var(--text)}.modal-body{padding:20px 24px}.modal-foot{padding:14px 24px;border-top:1px solid var(--line);display:flex;gap:10px;justify-content:flex-end;background:#fafbfc;border-radius:0 0 var(--radius-lg) var(--radius-lg)}.field{margin-bottom:16px}.field label{display:block;font-size:13px;color:var(--text);margin-bottom:6px}.field label .req{color:var(--danger);margin-left:2px}.field input,.field select,.field textarea{width:100%;padding:7px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;transition:border-color .14s,box-shadow .14s;color:var(--text)}.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-weak)}.field .hint{font-size:12px;color:var(--text-faint);margin-top:4px}.steps{display:flex;gap:8px;margin-bottom:20px}.steps .step{flex:1;text-align:center;font-size:12px;padding:8px;border-radius:var(--radius-sm);background:#fafbfc;color:var(--text-weak)}.steps .step.active{background:var(--primary-weak);color:var(--primary)}.empty{text-align:center;color:var(--text-weak);padding:40px}.tag{display:inline-block;font-size:12px;padding:1px 8px;border-radius:4px;background:var(--primary-weak);color:var(--primary);margin:2px 4px 2px 0}.section-head{display:flex;align-items:center;justify-content:space-between;margin:4px 0 14px}.section-head h2{font-size:15px;font-weight:600;margin:0;color:var(--text);display:flex;align-items:center;gap:8px}.section-head h2:before{content:"";display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px}.section-head .act{display:flex;gap:8px}.input{width:100%;padding:7px 12px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:14px;transition:border-color .14s,box-shadow .14s}.input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-weak)}.input::placeholder{color:var(--text-faint)}.progress{position:relative;height:6px;background:var(--bg);border-radius:3px;overflow:hidden}.progress>.bar{height:100%;width:0;background:var(--primary);border-radius:3px;transition:width .5s ease,background .3s}.progress.warn>.bar{background:var(--warn)}.progress.danger>.bar{background:var(--danger)}.crumb{color:var(--text-weak);font-size:13px;margin-bottom:16px}.crumb a{color:var(--text-weak)}.crumb a:hover{color:var(--primary)}.crumb .sep{margin:0 6px;color:var(--text-faint)}.crumb .cur{color:var(--text)}.welcome-bar{background:linear-gradient(90deg,var(--primary-soft) 0%,var(--panel) 100%);border:none;border-radius:var(--radius);padding:16px 20px;margin-bottom:20px;display:flex;align-items:center;justify-content:space-between;box-shadow:var(--shadow-soft)}.welcome-bar .left h2{margin:0 0 4px;font-size:16px;color:var(--text)}.welcome-bar .left p{margin:0;color:var(--text-weak);font-size:13px}.welcome-bar .right{display:flex;gap:8px}
