:root{--bg:#f5f6f7;--surface:#fff;--border:#e5e7eb;--fg:#1f2937;--muted:#6b7280;--accent:#0f766e;--accent-strong:#115e59;--accent-soft:#f0fdfa;--draft:#6b7280;--published:#15803d;--offline:#c2410c;--danger:#dc2626;--radius:6px;--sidebar-w:224px;--topbar-h:56px;--font:"PingFang SC", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--fg);font-family:var(--font);letter-spacing:0;-webkit-font-smoothing:antialiased;min-width:1280px;margin:0;font-size:14px;line-height:1.5}a{color:var(--accent);text-decoration:none}button,input,select,textarea{letter-spacing:0;font-family:inherit}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:6px}::-webkit-scrollbar-track{background:0 0}.app-shell{grid-template-columns:var(--sidebar-w) 1fr;min-height:100vh;display:grid}.sidebar{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;height:100vh;display:flex;position:sticky;top:0}.sidebar__brand{height:var(--topbar-h);border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:0 16px;font-size:15px;font-weight:600;display:flex}.sidebar__brand-mark{background:var(--accent);color:#fff;border-radius:5px;place-items:center;width:24px;height:24px;font-size:13px;font-weight:700;display:grid}.sidebar__nav{flex:1;padding:8px;overflow-y:auto}.nav-item{border-radius:var(--radius);width:100%;color:var(--fg);cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:10px;margin-bottom:2px;padding:9px 12px;font-size:14px;display:flex}.nav-item:hover{background:var(--bg)}.nav-item--active{background:var(--accent-soft);color:var(--accent);font-weight:500}.nav-item svg{flex:none}.main{flex-direction:column;min-width:0;display:flex}.topbar{z-index:20;height:var(--topbar-h);background:var(--surface);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:0 20px;display:flex;position:sticky;top:0}.topbar__title{font-size:15px;font-weight:600}.topbar__user{color:var(--muted);align-items:center;gap:12px;display:flex}.content{flex:1;padding:20px}.content--center{place-items:center;display:grid}.page-head{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.page-title{margin:0;font-size:20px;font-weight:600}.page-desc{color:var(--muted);margin:4px 0 0;font-size:13px}.page-head__actions{flex:none;gap:8px;display:flex}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.panel__pad{padding:16px}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.toolbar__spacer{flex:1}.btn{border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);height:32px;color:var(--fg);cursor:pointer;white-space:nowrap;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-size:14px;transition:background .15s,border-color .15s;display:inline-flex}.btn:hover{background:var(--bg)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn--primary:hover:not(:disabled){background:var(--accent-strong)}.btn--danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn--danger:hover:not(:disabled){background:#b91c1c}.btn--ghost{background:0 0;border-color:#0000}.btn--ghost:hover:not(:disabled){background:var(--bg)}.btn--sm{height:28px;padding:0 8px;font-size:13px}.btn--icon{flex:none;width:28px;padding:0}.btn--block{width:100%}.field{flex-direction:column;gap:6px;display:flex}.field__label{color:var(--fg);font-size:13px;font-weight:500}.field__label--req:after{content:" *";color:var(--danger)}.field__hint{color:var(--muted);font-size:12px}.field__error{color:var(--danger);font-size:12px}.input,.select,.textarea{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);height:32px;color:var(--fg);width:100%;padding:0 10px;font-size:14px}.textarea{resize:vertical;height:auto;min-height:72px;padding:8px 10px}.input:focus,.select:focus,.textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.input:disabled,.select:disabled,.textarea:disabled{background:var(--bg);color:var(--muted);cursor:not-allowed}.input--err,.select--err,.textarea--err{border-color:var(--danger)}.form-grid{grid-template-columns:1fr 1fr;gap:12px 16px;display:grid}.form-grid--1{grid-template-columns:1fr}.form-span-2{grid-column:span 2}.table-wrap{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:14px}.table th,.table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:middle;padding:10px 12px}.table th{background:var(--bg);color:var(--muted);white-space:nowrap;font-size:13px;font-weight:500}.table tbody tr:last-child td{border-bottom:0}.table tbody tr:hover{background:#fafafa}.table .cell-ellipsis{text-overflow:ellipsis;white-space:nowrap;max-width:220px;overflow:hidden}.table__actions{align-items:center;gap:4px;display:flex}.row-cover{border-radius:4px;flex:none;width:48px;height:48px;overflow:hidden}.badge{white-space:nowrap;border-radius:4px;align-items:center;height:22px;padding:0 8px;font-size:12px;font-weight:500;display:inline-flex}.badge--draft{color:var(--draft);background:#f3f4f6}.badge--published{color:var(--published);background:#f0fdf4}.badge--offline{color:var(--offline);background:#fff7ed}.badge--active{color:var(--published);background:#f0fdf4}.badge--disabled{color:var(--draft);background:#f3f4f6}.badge--role{background:var(--accent-soft);color:var(--accent)}.pagination{justify-content:flex-end;align-items:center;gap:4px;padding:12px;display:flex}.pagination__btn{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);min-width:28px;height:28px;color:var(--fg);cursor:pointer;padding:0 6px;font-size:13px}.pagination__btn:hover:not(:disabled){background:var(--bg)}.pagination__btn:disabled{opacity:.4;cursor:not-allowed}.pagination__btn--active{background:var(--accent);border-color:var(--accent);color:#fff}.mask{z-index:0;background:#11182773;position:fixed;inset:0}.drawer{z-index:50;justify-content:flex-end;display:flex;position:fixed;inset:0}.drawer__panel{background:var(--surface);z-index:1;flex-direction:column;width:520px;max-width:92vw;height:100%;display:flex;position:relative;box-shadow:-8px 0 24px #1118271f}.drawer--lg .drawer__panel{width:720px}.drawer__head{border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;padding:14px 20px;display:flex}.drawer__title{margin:0;font-size:16px;font-weight:600}.drawer__body{flex:1;padding:20px;overflow-y:auto}.drawer__foot{border-top:1px solid var(--border);flex:none;justify-content:flex-end;gap:8px;padding:12px 20px;display:flex}.section{margin-bottom:24px}.section__title{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;margin:0 0 12px;padding-bottom:8px;font-size:14px;font-weight:600;display:flex}.section__note{color:var(--muted);font-size:12px;font-weight:400}.modal{z-index:60;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.modal__panel{z-index:1;background:var(--surface);border-radius:var(--radius);flex-direction:column;width:420px;max-width:100%;max-height:90vh;display:flex;position:relative;box-shadow:0 16px 40px #11182733}.modal__panel--lg{width:720px}.modal__head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:14px 20px;display:flex}.modal__title{margin:0;font-size:15px;font-weight:600}.modal__body{padding:20px;overflow-y:auto}.modal__foot{border-top:1px solid var(--border);justify-content:flex-end;gap:8px;padding:12px 20px;display:flex}.media-grid{grid-template-columns:repeat(4,1fr);gap:12px;display:grid}.media-item{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);aspect-ratio:1;position:relative;overflow:hidden}.media-item img{object-fit:cover;width:100%;height:100%;display:block}.media-item--cover{outline:2px solid var(--accent)}.media-item__tag{background:var(--accent);color:#fff;border-radius:3px;padding:1px 6px;font-size:11px;position:absolute;top:6px;left:6px}.media-item__actions{opacity:0;background:linear-gradient(#0000,#1118278c);justify-content:center;gap:4px;padding:6px;transition:opacity .15s;display:flex;position:absolute;inset:auto 0 0}.media-item:hover .media-item__actions{opacity:1}.media-item__actions .btn--icon{background:#ffffffeb;border-color:#0000}.media-item--dragging{opacity:.5}.media-upload{border:1px dashed var(--border);border-radius:var(--radius);background:var(--surface);color:var(--muted);cursor:pointer;aspect-ratio:1;place-items:center;gap:4px;font-size:12px;display:grid}.media-upload:hover{border-color:var(--accent);color:var(--accent)}.preview-stage{border-radius:var(--radius);background:#111827;place-items:center;min-height:320px;display:grid;position:relative;overflow:hidden}.preview-stage img{object-fit:contain;max-width:100%;max-height:60vh;display:block}.preview-nav{z-index:2;position:absolute;top:50%;transform:translateY(-50%)}.preview-nav--prev{left:12px}.preview-nav--next{right:12px}.skeleton{background:#edeff1;border-radius:4px;position:relative;overflow:hidden}.skeleton:after{content:"";background:linear-gradient(90deg,#0000,#fff9,#0000);animation:1.4s infinite shimmer;position:absolute;inset:0;transform:translate(-100%)}@keyframes shimmer{to{transform:translate(100%)}}.skeleton--text{height:14px}.skeleton--row{border-radius:0;height:56px;margin-bottom:1px}.state{text-align:center;color:var(--muted);flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:48px 24px;display:flex}.state__icon{color:#d1d5db}.state__title{color:var(--fg);margin:0;font-size:14px;font-weight:500}.state__desc{margin:0;font-size:13px}.spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;flex:none;width:16px;height:16px;animation:.7s linear infinite spin}.spinner--lg{border-width:3px;width:24px;height:24px}@keyframes spin{to{transform:rotate(360deg)}}.img-slot{color:#9ca3af;background:#edeff1;place-items:center;width:100%;height:100%;display:grid}.img-slot svg{display:block}.tooltip{display:inline-flex;position:relative}.tooltip__bubble{color:#fff;white-space:nowrap;opacity:0;pointer-events:none;z-index:70;background:#111827;border-radius:4px;padding:4px 8px;font-size:12px;transition:opacity .12s;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.tooltip:hover .tooltip__bubble,.tooltip:focus-within .tooltip__bubble{opacity:1}.toast-wrap{z-index:100;flex-direction:column;gap:8px;display:flex;position:fixed;top:16px;left:50%;transform:translate(-50%)}.toast{color:#fff;border-radius:var(--radius);background:#111827;align-items:center;gap:8px;padding:8px 14px;font-size:13px;display:flex;box-shadow:0 8px 20px #1118273d}.toast--success{background:var(--published)}.toast--error{background:var(--danger)}.auth-page{background:var(--bg);place-items:center;min-height:100vh;padding:24px;display:grid}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:360px;padding:28px}.auth-card__brand{align-items:center;gap:8px;margin-bottom:4px;font-size:16px;font-weight:600;display:flex}.auth-card__sub{color:var(--muted);margin:0 0 20px;font-size:13px}.auth-form{flex-direction:column;gap:14px;display:flex}.secret-box{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);word-break:break-all;align-items:center;gap:8px;padding:8px 10px;font-family:ui-monospace,monospace;font-size:13px;display:flex}.check-list{border:1px solid var(--border);border-radius:var(--radius);max-height:220px;overflow-y:auto}.check-list__item{border-bottom:1px solid var(--border);cursor:pointer;align-items:center;gap:8px;padding:8px 12px;font-size:14px;display:flex}.check-list__item:last-child{border-bottom:0}.check-list__item:hover{background:var(--bg)}.result-line{flex-wrap:wrap;gap:16px;display:flex}.kv{grid-template-columns:96px 1fr;gap:4px 12px;font-size:13px;display:grid}.kv dt{color:var(--muted)}.kv dd{word-break:break-all;margin:0}.diff-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}.diff-col{border:1px solid var(--border);border-radius:var(--radius)}.diff-col__head{background:var(--bg);color:var(--muted);border-bottom:1px solid var(--border);padding:8px 12px;font-size:12px}.diff-col__body{white-space:pre-wrap;word-break:break-all;padding:12px;font-size:13px}.muted{color:var(--muted)}.mono{font-family:ui-monospace,monospace}.flex{align-items:center;gap:8px;display:flex}.flex-between{justify-content:space-between;align-items:center;gap:8px;display:flex}
