:root,[data-theme="dark"]{--bg-primary:#0D1117;--bg-secondary:#161B22;--bg-tertiary:#21262D;--bg-input:#21262D;--text-primary:#E6EDF3;--text-secondary:#8B949E;--text-tertiary:#6E7681;--border:#30363D;--border-hover:#444C56;--accent:#1D9E97;--accent-hover:#39D0C8;--accent-bg:rgba(29,158,151,.12);--red:#F85149;--red-bg:rgba(248,81,73,.10);--amber:#E3B341;--amber-bg:rgba(227,179,65,.10);--green:#3FB950;--green-bg:rgba(63,185,80,.10);--blue:#58A6FF;--blue-bg:rgba(88,166,255,.10);--font-sans:'Segoe UI',system-ui,-apple-system,sans-serif;--font-mono:'Cascadia Code','Consolas',monospace;--sidebar-w:220px;--topbar-h:48px;--radius:6px;--radius-lg:10px}
[data-theme="light"]{--bg-primary:#FFFFFF;--bg-secondary:#F6F8FA;--bg-tertiary:#EAEEF2;--bg-input:#FFFFFF;--text-primary:#1A1A2E;--text-secondary:#57606A;--text-tertiary:#8C959F;--border:#D0D7DE;--border-hover:#AFB8C1;--accent:#0F6E56;--accent-hover:#1D9E97;--accent-bg:rgba(15,110,86,.08);--red:#CF222E;--red-bg:rgba(207,34,46,.08);--amber:#D1810A;--amber-bg:rgba(209,129,10,.08);--green:#1A7F37;--green-bg:rgba(26,127,55,.08);--blue:#0969DA;--blue-bg:rgba(9,105,218,.08)}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;font-family:var(--font-sans);font-size:13px;color:var(--text-primary);background:var(--bg-primary);overflow:hidden}
.topbar{position:fixed;top:0;left:0;right:0;height:var(--topbar-h);z-index:200;background:var(--bg-secondary);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 16px;gap:12px}
.topbar-logo{display:flex;align-items:center;gap:8px;flex-shrink:0}
.logo-icon{width:26px;height:26px;background:var(--accent-bg);border:1px solid var(--accent);border-radius:5px;display:flex;align-items:center;justify-content:center;color:var(--accent)}
.logo-text{font-family:var(--font-mono);font-size:15px;font-weight:600;color:var(--accent)}
.logo-badge{font-size:10px;font-family:var(--font-mono);color:var(--text-tertiary);background:var(--bg-tertiary);border:1px solid var(--border);border-radius:4px;padding:1px 6px}
.topbar-search{flex:1;max-width:400px;position:relative}
.search-box{display:flex;align-items:center;gap:8px;background:var(--bg-tertiary);border:1px solid var(--border);border-radius:var(--radius);padding:5px 10px}
.search-box:focus-within{border-color:var(--accent)}
.search-box input{background:none;border:none;outline:none;color:var(--text-primary);font-size:12px;flex:1;font-family:var(--font-sans)}
.search-box input::placeholder{color:var(--text-tertiary)}
.search-kbd{font-size:10px;font-family:var(--font-mono);color:var(--text-tertiary);background:var(--bg-primary);border:1px solid var(--border);border-radius:3px;padding:1px 5px;white-space:nowrap}
.search-results{position:absolute;top:100%;left:0;right:0;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);margin-top:4px;max-height:320px;overflow-y:auto;z-index:300}
.search-result-item{display:flex;align-items:center;gap:10px;padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--border);text-decoration:none;color:inherit}
.search-result-item:last-child{border-bottom:none}
.search-result-item:hover{background:var(--bg-tertiary)}
.search-result-type{font-size:10px;font-family:var(--font-mono);padding:2px 6px;border-radius:3px;background:var(--accent-bg);color:var(--accent);flex-shrink:0}
.search-result-label{font-size:12px}
.search-result-sub{font-size:11px;color:var(--text-secondary);margin-left:auto}
.topbar-actions{display:flex;align-items:center;gap:6px;margin-left:auto}
.topbar-btn{background:none;border:1px solid transparent;border-radius:var(--radius);padding:5px 8px;cursor:pointer;color:var(--text-secondary);display:flex;align-items:center;gap:4px;transition:all .12s;text-decoration:none}
.topbar-btn:hover{background:var(--bg-tertiary);color:var(--text-primary);border-color:var(--border)}
.topbar-notif{position:relative}
.topbar-user{display:flex;align-items:center;gap:8px;padding-left:8px;border-left:1px solid var(--border)}
.user-name{font-size:12px;color:var(--text-secondary)}
.avatar{width:28px;height:28px;border-radius:50%;background:var(--accent-bg);border:1.5px solid var(--accent);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--accent);flex-shrink:0}
.app-layout{display:flex;margin-top:var(--topbar-h);height:calc(100vh - var(--topbar-h))}
.sidebar{width:var(--sidebar-w);background:var(--bg-secondary);border-right:1px solid var(--border);overflow-y:auto;flex-shrink:0}
.sidebar::-webkit-scrollbar{width:4px}
.sidebar::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
.sidebar-section{padding:4px 0;border-bottom:1px solid var(--border)}
.sidebar-label{font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-tertiary);padding:8px 16px 4px}
.nav-item{display:flex;align-items:center;gap:10px;padding:7px 16px;cursor:pointer;color:var(--text-secondary);text-decoration:none;border-left:2px solid transparent;transition:all .1s}
.nav-item:hover{background:var(--bg-tertiary);color:var(--text-primary)}
.nav-item.active{background:var(--accent-bg);color:var(--accent);border-left-color:var(--accent)}
.nav-icon{display:flex;align-items:center;flex-shrink:0}
.nav-label{font-size:12px}
.main-content{flex:1;overflow-y:auto;background:var(--bg-primary)}
.main-content::-webkit-scrollbar{width:6px}
.main-content::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}
.page-header{display:flex;align-items:flex-start;justify-content:space-between;padding:14px 24px 10px;border-bottom:1px solid var(--border);background:var(--bg-secondary);position:sticky;top:0;z-index:50}
.page-title{font-size:15px;font-weight:600}
.page-sub{font-size:12px;color:var(--text-tertiary);margin-top:2px}
.page-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}
.page-body{padding:20px 24px}
.breadcrumb{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-tertiary)}
.bc-link{color:var(--text-secondary);text-decoration:none}.bc-link:hover{color:var(--accent)}
.bc-sep{color:var(--text-tertiary)}
.btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:var(--radius);font-size:12px;font-weight:500;cursor:pointer;transition:all .12s;border:1px solid var(--border);background:transparent;color:var(--text-secondary);font-family:var(--font-sans);text-decoration:none}
.btn:hover{background:var(--bg-tertiary);color:var(--text-primary)}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:#fff}
.btn-ghost{background:transparent}
.btn-block{width:100%;justify-content:center}
.btn-danger{background:var(--red-bg);color:var(--red);border-color:rgba(248,81,73,.3)}
.form-group{margin-bottom:14px}
.form-label{display:block;font-size:11px;color:var(--text-secondary);margin-bottom:5px;font-weight:500}
.form-input,.form-select{width:100%;background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius);padding:7px 10px;color:var(--text-primary);font-size:12px;outline:none;font-family:var(--font-sans);transition:border-color .12s}
.form-input:focus,.form-select:focus{border-color:var(--accent)}
.form-input::placeholder{color:var(--text-tertiary)}
.form-input-sm{padding:4px 8px;font-size:11px}
.form-hint{font-size:10px;color:var(--text-tertiary);margin-top:3px}
.form-row{display:flex;gap:12px}
.flex1{flex:1}.flex2{flex:2}
.form-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}
.inline-form{display:flex;gap:8px;align-items:center}
.search-box-page{display:flex;align-items:center;gap:6px;background:var(--bg-tertiary);border:1px solid var(--border);border-radius:var(--radius);padding:5px 10px}
.search-box-page:focus-within{border-color:var(--accent)}
.search-box-page input{background:none;border:none;outline:none;color:var(--text-primary);font-size:12px;width:200px;font-family:var(--font-sans)}
.card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px;margin-bottom:16px}
.card.p0{padding:0;overflow:hidden}
.card-header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid var(--border)}
.card-title{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px}
.stat-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px 16px;text-decoration:none;color:inherit;display:block;transition:border-color .12s}
.stat-card:hover{border-color:var(--border-hover)}
.stat-card.accent .stat-val{color:var(--accent)}
.stat-card.danger .stat-val{color:var(--red)}
.stat-card.warning .stat-val{color:var(--amber)}
.stat-label{font-size:11px;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}
.stat-val{font-size:28px;font-weight:700;font-family:var(--font-mono);line-height:1}
.stat-sub{font-size:11px;color:var(--text-tertiary);margin-top:4px}
.widget-link{cursor:pointer}
.data-table{width:100%;border-collapse:collapse}
.data-table th{font-size:11px;font-weight:600;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.06em;text-align:left;padding:8px 16px;border-bottom:1px solid var(--border);background:var(--bg-tertiary);white-space:nowrap}
.data-table td{padding:10px 16px;border-bottom:1px solid var(--border);font-size:12px;vertical-align:middle}
.data-table tbody tr:last-child td{border-bottom:none}
.data-table tbody tr:hover td{background:var(--bg-tertiary)}
.data-table td.empty-cell{text-align:center;color:var(--text-tertiary);padding:32px}
.font-medium{font-weight:500}
.badge{display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:600;border-radius:4px;padding:2px 7px;font-family:var(--font-mono);white-space:nowrap}
.badge-accent{background:var(--accent-bg);color:var(--accent)}
.badge-success{background:var(--green-bg);color:var(--green)}
.badge-danger{background:var(--red-bg);color:var(--red)}
.badge-warning{background:var(--amber-bg);color:var(--amber)}
.badge-info{background:var(--blue-bg);color:var(--blue)}
.badge-muted{background:var(--bg-tertiary);color:var(--text-tertiary)}
.alert{padding:10px 14px;border-radius:var(--radius);font-size:12px;margin-bottom:14px}
.alert-danger{background:var(--red-bg);color:var(--red);border:1px solid rgba(248,81,73,.25)}
.alert-success{background:var(--green-bg);color:var(--green);border:1px solid rgba(63,185,80,.25)}
.pagination{display:flex;gap:4px;align-items:center;padding:10px 16px;border-top:1px solid var(--border)}
.page-btn{padding:4px 10px;border-radius:var(--radius);font-size:12px;font-family:var(--font-mono);color:var(--text-secondary);text-decoration:none;border:1px solid var(--border);background:var(--bg-tertiary);transition:all .1s}
.page-btn:hover{background:var(--bg-primary);color:var(--text-primary)}
.page-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}
.action-row{display:flex;gap:4px;align-items:center}
.icon-btn{background:none;border:1px solid var(--border);border-radius:var(--radius);padding:3px 8px;cursor:pointer;color:var(--text-secondary);font-size:11px;text-decoration:none;display:inline-flex;align-items:center;gap:3px;transition:all .1s}
.icon-btn:hover{background:var(--bg-tertiary);color:var(--text-primary);border-color:var(--border-hover)}
.link-btn{color:var(--accent);text-decoration:none;font-size:12px;cursor:pointer}
.link-btn:hover{text-decoration:underline}
.dashboard-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.audit-item{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;border-bottom:1px solid var(--border)}
.audit-item:last-child{border-bottom:none}
.login-body{background:var(--bg-primary);display:flex;align-items:center;justify-content:center;height:100vh;overflow:auto}
.login-wrap{width:420px;padding:20px}
.login-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:32px}
.login-logo{display:flex;align-items:center;gap:14px;margin-bottom:28px}
.logo-icon-lg{width:48px;height:48px;background:var(--accent-bg);border:1.5px solid var(--accent);border-radius:10px;display:flex;align-items:center;justify-content:center;color:var(--accent);flex-shrink:0}
.login-appname{font-size:22px;font-weight:700;font-family:var(--font-mono);color:var(--accent)}
.login-appsub{font-size:11px;color:var(--text-tertiary);margin-top:2px}
.login-footer{font-size:10px;color:var(--text-tertiary);text-align:center;margin-top:20px}
.template-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
.tpl-option{background:var(--bg-tertiary);border:1.5px solid var(--border);border-radius:var(--radius);padding:10px 12px;cursor:pointer}
.tpl-option input[type="radio"]{display:none}
.tpl-option:has(input:checked){border-color:var(--accent);background:var(--accent-bg)}
.tpl-option-name{font-size:12px;font-weight:500}
.tpl-option-sub{font-size:10px;color:var(--text-tertiary);margin-top:2px}
.editor-wrap{display:flex;flex-direction:column;height:100%;overflow:hidden}
.editor-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;border-bottom:1px solid var(--border);background:var(--bg-secondary);flex-shrink:0}
.editor-header-actions{display:flex;align-items:center;gap:6px}
.editor-main{display:flex;flex:1;overflow:hidden}
.stencils-panel{width:170px;background:var(--bg-secondary);border-right:1px solid var(--border);overflow-y:auto;flex-shrink:0}
.stencils-panel::-webkit-scrollbar{width:4px}
.stencils-panel::-webkit-scrollbar-thumb{background:var(--border)}
.stencils-search{padding:8px}
.stencil-section{padding:4px 0;border-bottom:1px solid var(--border)}
.stencil-section-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-tertiary);padding:4px 10px}
.stencil-grid{display:grid;grid-template-columns:1fr 1fr;gap:3px;padding:0 6px 6px}
.stencil-item{background:var(--bg-tertiary);border:1px solid var(--border);border-radius:4px;padding:5px 3px;cursor:grab;display:flex;flex-direction:column;align-items:center;gap:2px;transition:border-color .1s}
.stencil-item:hover{border-color:var(--accent)}
.stencil-item span{font-size:9px;font-family:var(--font-mono);color:var(--text-tertiary);text-align:center}
.stencil-icon{display:flex;align-items:center}
.editor-toolbar{width:42px;background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:center;padding:6px 0;gap:2px;flex-shrink:0}
.tool-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius);cursor:pointer;color:var(--text-secondary);background:none;border:none;transition:all .1s}
.tool-btn:hover{background:var(--bg-tertiary);color:var(--text-primary)}
.tool-btn.active{background:var(--accent-bg);color:var(--accent)}
.tool-sep{width:22px;height:1px;background:var(--border);margin:2px 0}
.canvas-wrap{flex:1;position:relative;background:var(--bg-primary);overflow:hidden}
#mxgraph-container{background-image:radial-gradient(circle,var(--border) 1px,transparent 1px);background-size:24px 24px;width:100%;height:100%;overflow:hidden}
.canvas-zoom-indicator{position:absolute;left:12px;bottom:12px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:4px;padding:3px 8px;font-size:11px;font-family:var(--font-mono);color:var(--text-tertiary)}
.canvas-readonly-badge{position:absolute;top:12px;right:12px;background:var(--amber-bg);border:1px solid var(--amber);border-radius:4px;padding:3px 10px;font-size:11px;font-family:var(--font-mono);color:var(--amber)}
.props-panel{width:250px;background:var(--bg-secondary);border-left:1px solid var(--border);overflow-y:auto;flex-shrink:0}
.props-panel::-webkit-scrollbar{width:4px}
.props-panel::-webkit-scrollbar-thumb{background:var(--border)}
.props-header{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid var(--border)}
.props-title{font-size:12px;font-weight:600}
.props-empty{padding:20px 14px;font-size:11px;color:var(--text-tertiary);text-align:center}
.props-section{padding:10px 12px;border-bottom:1px solid var(--border)}
.props-section-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-tertiary);margin-bottom:8px}
.field-label{font-size:10px;color:var(--text-tertiary);margin-bottom:3px}
.field-row{margin-bottom:7px}
.versions-layout{display:flex;gap:16px}
.versions-list{width:280px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;flex-shrink:0}
.versions-detail{flex:1}
.version-item{padding:12px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .1s}
.version-item:hover{background:var(--bg-tertiary)}
.version-item.active{background:var(--accent-bg);border-left:2px solid var(--accent)}
.version-header{display:flex;align-items:center;justify-content:space-between}
.version-num{font-family:var(--font-mono);font-size:13px;font-weight:600;color:var(--accent)}
.version-meta{font-size:11px;color:var(--text-tertiary);margin-top:3px}
.version-note{font-size:11px;color:var(--text-secondary);margin-top:4px;font-style:italic}
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.65);display:flex;align-items:center;justify-content:center;z-index:1000}
.modal-overlay[hidden]{display:none}
.modal{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);width:460px;padding:24px}
.modal-title{font-size:15px;font-weight:600;margin-bottom:4px}
.modal-sub{font-size:12px;color:var(--text-tertiary);margin-bottom:18px}
.modal-footer{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
.error-page,.error-wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}
.error-body{overflow:auto}
.error-code{font-size:80px;font-weight:700;font-family:var(--font-mono);color:var(--accent);line-height:1}
.error-msg{font-size:22px;font-weight:500;margin-top:8px}
.inline-editable{cursor:pointer}
.inline-editable:hover{background:var(--accent-bg);border-radius:3px}
.inline-edit-input{background:var(--bg-input);border:1px solid var(--accent);border-radius:3px;color:var(--text-primary);font-size:12px;padding:2px 6px;outline:none;font-family:var(--font-sans);min-width:80px}
@media(max-width:900px){.stats-grid{grid-template-columns:repeat(2,1fr)}.dashboard-grid{grid-template-columns:1fr}:root{--sidebar-w:0px}.sidebar{display:none}}
