:root{--bg:#f4f6fa;--panel:#fff;--ink:#182131;--muted:#758096;--line:#e4e8f0;--primary:#5755d9;--primary-dark:#4543c4;--lav:#efefff;--teal:#0d9488;--green:#16865c;--amber:#b7791f;--red:#d14343;--shadow:0 6px 24px rgba(34,44,77,.045);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-size:14px}.hidden{display:none!important}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;width:248px;background:#fff;border-right:1px solid var(--line);padding:23px 15px 16px;display:flex;flex-direction:column;z-index:4}.brand{display:flex;align-items:center;gap:11px;padding:0 10px 32px}.brand strong{display:block;font-size:15px;letter-spacing:-.2px}.brand span{display:block;font-size:11px;color:var(--muted);margin-top:3px}.brand-mark{height:45px;width:45px;border-radius:15px;background:linear-gradient(135deg,#716df0,#4945c7);color:white;font-size:24px;font-weight:800;display:grid;place-items:center;box-shadow:0 8px 18px #635ee533}.brand-mark.small{width:36px;height:36px;border-radius:12px;font-size:19px}.nav-label,.eyebrow{font-size:10px;font-weight:800;letter-spacing:1.35px;color:#9aa2b3}.nav-label{padding:0 12px 10px}nav{display:grid;gap:5px}.nav-item{display:flex;align-items:center;gap:12px;border:0;background:transparent;color:#637087;padding:12px 13px;border-radius:10px;text-align:left;font-weight:600;transition:.16s}.nav-item span{width:18px;color:#939bb0;font-size:18px;text-align:center}.nav-item:hover{background:#f5f6fb;color:var(--ink)}.nav-item.active{background:var(--lav);color:var(--primary)}.nav-item.active span{color:var(--primary)}.sidebar-bottom{margin-top:auto;padding:14px 8px 4px;border-top:1px solid var(--line);display:flex;align-items:center;gap:8px}.sidebar-bottom strong{font-size:11px;display:block}.sidebar-bottom span{display:block;font-size:10px;color:var(--muted);margin-top:3px}.status-dot{height:8px;width:8px;border-radius:100%;background:#e1a43b;box-shadow:0 0 0 3px #e1a43b22}.icon-btn{margin-left:auto;border:0;background:transparent;color:var(--muted);font-size:18px}.main-area{margin-left:248px;min-height:100vh;padding:0 32px 28px;max-width:1800px}.topbar{min-height:95px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:24px}.breadcrumb{font-size:11px;color:#9aa2b3;margin-bottom:6px}.breadcrumb span{color:#606b80}.topbar h1{margin:0;font-size:24px;letter-spacing:-.7px}.top-actions{display:flex;align-items:center;gap:9px}.small-text{font-size:11px}.btn{border:1px solid transparent;border-radius:9px;min-height:37px;padding:9px 13px;display:inline-flex;align-items:center;justify-content:center;gap:7px;font-weight:700;font-size:12px;white-space:nowrap;transition:.15s}.btn.primary{background:var(--primary);color:white;box-shadow:0 4px 12px #5755d922}.btn.primary:hover{background:var(--primary-dark);transform:translateY(-1px)}.btn.secondary{background:#fff;border-color:var(--line);color:#4c576b}.btn.secondary:hover{border-color:#c8cce1;background:#fafaff}.btn.danger{background:#fff4f4;border-color:#f6d7d7;color:var(--red)}.btn.tiny{padding:6px 9px;min-height:28px;font-size:11px}.wide{width:100%}.muted{color:var(--muted);line-height:1.55}.page{display:none}.page.active{display:block}.hero-row{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:6px 0 22px}.hero-row h2{font-size:22px;margin:7px 0 5px;letter-spacing:-.6px}.hero-row p{margin:0}.hero-chip{background:#e8f8f2;color:#18734f;border:1px solid #cfeee2;border-radius:99px;padding:9px 13px;font-size:11px;font-weight:700;display:flex;align-items:center;gap:8px}.pulse{width:7px;height:7px;border-radius:50%;background:#20a878;box-shadow:0 0 0 4px #20a87820}.kpi-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:13px;margin-bottom:18px}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:16px;box-shadow:var(--shadow);min-width:0}.kpi-top{display:flex;align-items:center;justify-content:space-between;color:var(--muted);font-size:11px;font-weight:600;gap:6px}.kpi-icon{width:30px;height:30px;background:var(--lav);color:var(--primary);display:grid;place-items:center;border-radius:9px;font-size:15px}.kpi-value{font-size:27px;font-weight:800;letter-spacing:-.8px;margin-top:12px}.kpi-foot{font-size:10px;color:var(--muted);margin-top:4px}.dashboard-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:18px;min-width:0;box-shadow:var(--shadow);margin-bottom:15px}.panel.span-2{grid-column:span 2}.panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:18px}.panel h3,.panel-head h3{margin:0;font-size:14px;letter-spacing:-.15px}.panel-head p{margin:5px 0 0;font-size:11px}.chip{font-size:10px;font-weight:700;color:var(--primary);background:var(--lav);padding:5px 8px;border-radius:6px}.link-btn{border:0;background:transparent;color:var(--primary);font-weight:700;font-size:11px;padding:4px}.chart-bars{height:170px;display:flex;align-items:flex-end;gap:8px;padding:10px 3px 0;border-bottom:1px solid var(--line)}.chart-bar-item{height:100%;flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:7px;min-width:0}.chart-bar{width:min(26px,75%);min-height:3px;border-radius:5px 5px 1px 1px;background:linear-gradient(180deg,#8f8df5,#5755d9);position:relative}.chart-bar:hover{filter:brightness(.96)}.chart-bar-value{position:absolute;top:-17px;font-size:9px;color:#81899a;text-align:center;width:100%}.chart-bar-label{font-size:9px;color:#939bad;white-space:nowrap;transform:rotate(-25deg);transform-origin:top center;margin-top:1px}.rank-list{display:grid;gap:14px}.rank-item{display:grid;grid-template-columns:minmax(0,1fr) 45px;gap:10px;align-items:center}.rank-name{font-size:11px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rank-meta{font-size:10px;color:var(--muted);margin-top:4px}.rank-count{text-align:right;font-size:12px;font-weight:800}.rank-track{height:4px;background:#f0f1f7;border-radius:5px;margin-top:7px;overflow:hidden}.rank-fill{height:100%;background:#817ff0;border-radius:5px}.section-intro{display:flex;align-items:center;justify-content:space-between;gap:15px;margin:6px 0 18px}.section-intro h2{font-size:19px;margin:0 0 5px;letter-spacing:-.4px}.section-intro p{margin:0;font-size:12px}.table-wrap{overflow-x:auto;width:100%}table{width:100%;border-collapse:collapse;min-width:600px}th{background:#f9fafe;color:#8892a4;text-align:left;font-size:10px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;white-space:nowrap}th,td{padding:12px 11px;border-bottom:1px solid #edf0f5;vertical-align:top}td{font-size:11px;color:#455065;line-height:1.5}tr:last-child td{border-bottom:0}td strong{color:#202a3c;font-weight:700}td .subline{color:#959cad;font-size:10px;margin-top:4px;max-width:300px;overflow-wrap:anywhere}.status{display:inline-flex;align-items:center;gap:5px;padding:4px 7px;border-radius:6px;font-size:10px;font-weight:750;white-space:nowrap}.status.success{background:#e7f8f0;color:#17794e}.status.error{background:#fff0f0;color:#c43c3c}.status.warning{background:#fff7e5;color:#9b6b12}.status.neutral{background:#f0f2f7;color:#677186}.status.pending{background:#efefff;color:#5956cd}.form-panel{margin-top:16px}.form-panel h3{margin-bottom:4px}.form-panel>p{font-size:11px;margin:0 0 18px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.form-grid label,.stack label{display:flex;flex-direction:column;gap:7px;font-size:11px;font-weight:700;color:#515c71}.form-grid input,.form-grid select,.form-grid textarea,.stack input,.filter-row input,.filter-row select{border:1px solid #dde2ec;background:#fff;border-radius:8px;padding:10px 11px;outline:0;min-width:0;color:var(--ink);font-size:12px}.form-grid textarea{resize:vertical;font-family:ui-monospace,monospace}.form-grid input:focus,.form-grid select:focus,.form-grid textarea:focus,.stack input:focus,.filter-row input:focus{border-color:#9492ed;box-shadow:0 0 0 3px #7773ed16}.form-grid .span-2{grid-column:span 2}.form-grid .check-label,.inline-check{display:flex;flex-direction:row;align-items:center;gap:8px;font-weight:600}.check-label input,.inline-check input{accent-color:var(--primary)}.form-actions{display:flex;align-items:center;gap:8px;grid-column:1/-1}.filter-row{display:flex;align-items:center;gap:9px;margin-bottom:15px}.filter-row input{flex:1}.filter-row select{min-width:150px}.two-col{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.candidate-list{display:grid;gap:10px}.candidate-card{border:1px solid var(--line);border-radius:10px;padding:13px}.candidate-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.candidate-card strong{font-size:12px}.candidate-card p{font-size:10px;color:var(--muted);margin:6px 0;line-height:1.5}.keyword-row{display:flex;flex-wrap:wrap;gap:5px;margin:9px 0}.keyword{padding:3px 6px;background:#f1f3f9;color:#677186;border-radius:5px;font-size:9px}.candidate-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.grain-list{display:grid;gap:11px;margin-top:14px}.grain-list div{display:flex;gap:12px;align-items:center;font-size:11px}.grain-list code{background:#f3f4fb;color:#5755b8;padding:5px 8px;border-radius:6px;min-width:190px}.grain-list span{color:var(--muted)}.notice{padding:12px 15px;border:1px solid #f0dca8;background:#fffaeb;color:#825d16;border-radius:9px;margin-bottom:18px;font-size:12px}.notice.error{border-color:#f4d0d0;background:#fff3f3;color:#b93f3f}.notice.success{border-color:#ccebdc;background:#edfbf4;color:#16724b}.footer{display:flex;justify-content:center;gap:7px;padding:28px 0 10px;color:#9aa2b3;font-size:10px}.footer span{color:#c5cad4}.login-shell{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 20% 0%,#ecebff 0,#f5f6fb 42%,#f5f6fb 100%)}.login-card{width:min(410px,100%);background:white;border:1px solid var(--line);border-radius:18px;padding:34px;box-shadow:0 20px 70px #30355b16}.login-card .brand-mark{margin-bottom:20px}.login-card h1{font-size:27px;letter-spacing:-.8px;margin:5px 0}.login-card>p:not(.eyebrow){font-size:12px;margin:0 0 25px}.stack{display:grid;gap:15px}.error-text{color:var(--red);font-size:11px;line-height:1.5}.busy-overlay{position:fixed;inset:0;background:#f8f9fcbf;backdrop-filter:blur(2px);z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:13px;color:#566076;font-size:12px;font-weight:700}.spinner{height:30px;width:30px;border:3px solid #dfdffb;border-top-color:var(--primary);border-radius:100%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.toast-stack{position:fixed;right:20px;bottom:20px;z-index:50;display:grid;gap:8px}.toast{background:#20283a;color:white;box-shadow:0 8px 30px #10172922;border-radius:10px;padding:12px 15px;font-size:12px;max-width:360px;animation:fadein .2s ease}.toast.error{background:#a93232}.toast.success{background:#16734f}@keyframes fadein{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.empty{color:#9aa2b3;text-align:center;padding:24px 10px;font-size:11px}.pill-label{background:#f1f3f9;border:1px solid #e5e8f1;color:#69758a;border-radius:5px;padding:3px 6px;font-size:9px}.field-category-badge{display:inline-flex;align-items:center;padding:4px 7px;border-radius:6px;background:#eef3ff;color:#3f5ea8;font-size:10px;font-weight:750;line-height:1.45;max-width:150px;white-space:normal}.content-title{max-width:330px;min-width:160px}.content-title a{color:#4c49c7;text-decoration:none;font-weight:700}.content-title a:hover{text-decoration:underline}.tiny-actions{display:flex;flex-wrap:wrap;gap:5px}.progress{height:5px;background:#eff0f7;border-radius:9px;overflow:hidden;margin-top:8px}.progress span{display:block;height:100%;background:#7471e6}
@media(max-width:1250px){.kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.top-actions .small-text{display:none}.dashboard-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.panel.span-2{grid-column:span 2}}@media(max-width:950px){.sidebar{width:70px;padding:20px 8px}.brand{padding:0 8px 27px}.brand>div:not(.brand-mark){display:none}.brand-mark.small{width:38px;height:38px}.nav-label{display:none}.nav-item{justify-content:center;padding:12px 0;font-size:0}.nav-item span{font-size:20px}.sidebar-bottom{justify-content:center;padding:14px 0}.sidebar-bottom>div:not(.status-dot),.icon-btn{display:none}.main-area{margin-left:70px;padding:0 18px 24px}.topbar{align-items:flex-start;padding:20px 0;flex-direction:column;gap:14px}.top-actions{flex-wrap:wrap}.two-col{grid-template-columns:1fr}}@media(max-width:620px){.main-area{padding:0 12px 20px}.topbar h1{font-size:21px}.kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.kpi{padding:12px}.kpi-value{font-size:24px}.dashboard-grid{grid-template-columns:1fr}.panel.span-2{grid-column:span 1}.hero-row{align-items:flex-start;flex-direction:column}.hero-chip{font-size:10px}.form-grid{grid-template-columns:1fr}.form-grid .span-2{grid-column:span 1}.filter-row{flex-wrap:wrap}.filter-row input{flex-basis:100%}.filter-row select{flex:1;min-width:115px}.section-intro{align-items:flex-start}.top-actions{gap:6px}.top-actions .btn{flex:1}.panel{padding:13px}.grain-list code{min-width:140px}}

/* Topic hotness dashboard */
.hot-topic-panel{margin-bottom:16px}
.hot-topic-periods{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.hot-topic-period{border:1px solid var(--line);border-radius:11px;padding:13px;background:#fcfcff;min-width:0}
.period-title{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
.period-title h4{margin:0;font-size:13px}
.hot-topic-row{padding:9px 0;border-bottom:1px solid #edf0f5}
.hot-topic-row:last-child{border-bottom:0}
.hot-topic-top{display:flex;align-items:flex-start;gap:8px}
.hot-topic-rank{display:grid;place-items:center;width:22px;height:22px;flex:0 0 22px;border-radius:7px;background:#eeedff;color:#5752c4;font-size:10px;font-weight:800}
.hot-topic-info{flex:1;min-width:0}
.hot-topic-info .rank-name{white-space:normal;line-height:1.35;margin-bottom:7px}
.hot-topic-meta{font-size:10px;color:var(--muted);margin-top:5px}
.hot-topic-growth{font-size:10px;font-weight:750;color:#69758a;white-space:nowrap}
.hot-topic-growth.up{color:#168052}.hot-topic-growth.down{color:#bc4545}
@media(max-width:950px){.hot-topic-periods{grid-template-columns:1fr}}


/* v0.4.0: topic timeline and article classification editor */
.topic-timeline{display:grid;gap:0;margin-top:18px}
.timeline-item{display:grid;grid-template-columns:20px minmax(0,1fr);gap:12px;min-width:0}
.timeline-rail{display:flex;flex-direction:column;align-items:center;min-height:100%;position:relative}
.timeline-dot{width:10px;height:10px;flex:0 0 10px;border-radius:50%;background:var(--primary);border:2px solid #e8e7ff;box-shadow:0 0 0 3px #f2f1ff;margin-top:5px;z-index:1}
.timeline-line{width:2px;flex:1;min-height:35px;background:#e0e2f4;margin-top:5px}
.timeline-content{border:1px solid var(--line);border-radius:11px;padding:13px 15px;margin-bottom:12px;min-width:0;background:#fff}
.timeline-date{font-size:10px;color:var(--muted);font-weight:700;margin-bottom:7px}
.timeline-content h3{font-size:13px;line-height:1.5;margin:0 0 7px;letter-spacing:0}
.timeline-content h3 a{color:#373a84;text-decoration:none}
.timeline-content h3 a:hover{text-decoration:underline}
.timeline-content p{font-size:11px;color:#586379;line-height:1.65;margin:6px 0 10px;overflow-wrap:anywhere}
.timeline-entities{font-size:10px;color:#747d90;margin-top:7px;overflow-wrap:anywhere}
.timeline-actions{display:flex;justify-content:flex-end;margin-top:10px}
.classification-dialog{width:min(680px,calc(100vw - 28px));max-height:min(88vh,760px);border:1px solid var(--line);border-radius:16px;padding:0;box-shadow:0 22px 70px #1d27422c;color:var(--ink)}
.classification-dialog::backdrop{background:#1d253d66;backdrop-filter:blur(2px)}
.classification-dialog form{padding:22px;max-height:calc(88vh - 4px);overflow:auto}
.dialog-header{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}
.dialog-header h2{font-size:20px;margin:0 0 6px}
.dialog-header p{margin:0 0 8px}
.classification-dialog label{display:flex;flex-direction:column;gap:7px;font-size:12px;font-weight:750;color:#515c71}
.classification-dialog textarea{width:100%;resize:vertical;border:1px solid #dde2ec;background:#fff;border-radius:8px;padding:10px 11px;outline:0;min-width:0;color:var(--ink);font:12px/1.6 ui-monospace,Consolas,monospace}
.classification-dialog textarea:focus{border-color:#9492ed;box-shadow:0 0 0 3px #7773ed16}
.classification-dialog .form-actions{display:flex;justify-content:flex-end;grid-column:auto;margin-top:4px}
@media(max-width:620px){.classification-dialog form{padding:16px}.timeline-content{padding:11px}.timeline-item{gap:8px}}

/* Server-side pagination shared by article, topic and entity catalogs. */
.pagination-controls{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:12px 2px 2px;color:var(--muted);font-size:11px}.pagination-buttons{display:flex;align-items:center;gap:7px}.pagination-buttons button:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.pagination-summary{line-height:1.5}


/* v0.7.24: user plan and payment review */
.nav-count-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;margin-left:auto;border-radius:999px;background:#d92d20;color:#fff;font-size:10px;font-weight:900;line-height:20px;box-shadow:0 0 0 2px #fff}
.payment-pending-row{background:#fffaf0}.user-plan-select{min-width:90px;padding:7px 8px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink);font:inherit;font-size:11px}
.payment-proof-dialog{width:min(820px,calc(100vw - 24px));max-height:90vh;padding:0;border:1px solid var(--line);border-radius:15px;background:#fff;color:var(--ink);box-shadow:0 25px 80px #17243a44}
.payment-proof-dialog::backdrop{background:#18223588;backdrop-filter:blur(3px)}.proof-dialog-inner{padding:20px;max-height:90vh;overflow:auto}.proof-dialog-inner .dialog-header{margin-bottom:12px}.proof-dialog-inner h2{margin:0;font-size:18px}.proof-dialog-inner img{display:block;max-width:100%;max-height:68vh;object-fit:contain;margin:0 auto;border:1px solid var(--line);border-radius:9px;background:#f8fafc}.proof-dialog-inner .error-text{color:#c0392b}


/* v0.7.25+: admin form for Pro plan QR configuration */
.plan-config-panel{margin-bottom:16px}.plan-config-panel .form-grid{align-items:start}.plan-config-panel .form-grid>label{display:flex;flex-direction:column;gap:7px;font-size:11px;font-weight:750;color:#515c71}.plan-config-panel input[type=file]{font:inherit;font-size:11px;padding:10px;border:1px solid var(--line);border-radius:8px;background:#fff}.plan-config-panel textarea{font:inherit;font-size:12px;line-height:1.55}.plan-config-preview-wrap .inline-check{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--muted)}.plan-config-preview-wrap .small-text{margin:0}.plan-config-panel .form-actions{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
