:root{--primary:#4f46e5;--primary-hover:#4338ca;--primary-soft:#eef2ff;--primary-border:#c7d2fe;--dark:#1e1b4b;--dark-hover:#312e81;--ink:#111827;--ink-2:#374151;--muted:#6b7280;--muted-2:#9ca3af;--line:#e5e7eb;--line-soft:#f3f4f6;--surface:#fff;--surface-2:#f9fafb;--page:#f4f5fa;--danger:#dc2626;--danger-soft:#fef2f2;--radius:10px;--sk-base:#e8eaf2;--sk-shine:#f4f6fb;--warn:#b45309;--warn-soft:#fffbeb;--warn-border:#fde68a}*{box-sizing:border-box}body{color:var(--ink);background:var(--page);margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.6}h1,h2,h3,h4{color:var(--ink);line-height:1.3}.app-header{background:var(--dark);color:#fff;justify-content:space-between;align-items:center;gap:12px;height:56px;padding:0 24px;display:flex}.brand{color:#fff;letter-spacing:.5px;align-items:center;gap:10px;font-size:17px;font-weight:700;display:flex}.brand .brand-badge{background:var(--primary);color:#fff;border-radius:8px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}.header-actions{align-items:center;gap:10px;display:flex}.header-user{color:#c7d2fe;align-items:center;gap:6px;font-size:13px;display:inline-flex}.admin-entry{color:#fff;background:var(--primary);border-radius:8px;align-items:center;gap:6px;padding:6px 12px;font-size:13px;font-weight:500;text-decoration:none;transition:background .15s;display:inline-flex}.admin-entry:hover{background:var(--primary-hover);color:#fff}.layout{grid-template-columns:224px 1fr;gap:20px;max-width:1280px;margin:0 auto;padding:20px 24px;display:grid}.layout.h5-layout{grid-template-columns:1fr 300px;align-items:start}.h5-main{flex-direction:column;gap:20px;min-width:0;display:flex}.sidebar{flex-direction:column;gap:20px;display:flex;position:sticky;top:20px}.content{flex-direction:column;gap:20px;min-width:0;display:flex}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:20px}.card-title{align-items:center;gap:8px;margin:0 0 16px;font-size:16px;font-weight:700;display:flex}.card-title svg{color:var(--primary)}.side-nav{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;gap:4px;padding:12px;display:flex}.side-nav h2{color:var(--muted-2);text-transform:uppercase;letter-spacing:1px;margin:4px 8px 10px;font-size:12px;font-weight:600}.nav-item{text-align:left;width:100%;color:var(--ink-2);cursor:pointer;background:0 0;border:0;border-radius:8px;align-items:center;gap:10px;padding:9px 10px;font-size:14px;transition:background .15s,color .15s;display:flex}.nav-item:hover:not(:disabled){background:var(--line-soft);color:var(--ink)}.nav-item.active{background:var(--primary-soft);color:var(--primary);font-weight:600}.nav-item:disabled{opacity:.45;cursor:not-allowed}.nav-item svg{flex:none}button{font:inherit;cursor:pointer;background:var(--primary);color:#fff;border:0;border-radius:8px;padding:8px 16px;font-weight:500;transition:background .15s}button:hover{background:var(--primary-hover)}button.secondary{background:var(--surface);color:var(--ink-2);border:1px solid var(--line)}button.secondary:hover{background:var(--line-soft)}button.ghost-dark{color:#c7d2fe;border:1px solid var(--dark-hover);background:0 0}button.ghost-dark:hover{background:var(--dark-hover);color:#fff}button.danger{background:var(--danger-soft);color:var(--danger);border:1px solid #fecaca;padding:5px 12px;font-size:13px}button.danger:hover{background:var(--danger);color:#fff}button.active{background:var(--primary);color:#fff}button.sm{padding:5px 12px;font-size:13px}input,textarea{font:inherit;border:1px solid var(--line);background:var(--surface);width:100%;color:var(--ink);border-radius:8px;padding:8px 12px;transition:border-color .15s,box-shadow .15s}input:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);outline:none}textarea{resize:vertical}label{color:var(--ink-2);gap:6px;font-size:13px;font-weight:500;display:grid}.form-grid{gap:14px;margin-bottom:14px;display:grid}.form-footer{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.check-field{grid-column:1/-1;gap:8px;display:grid}.check-label{color:var(--ink-2);font-size:13px;font-weight:500}.check-group{flex-wrap:wrap;gap:8px;display:flex}.check-item{border:1px solid var(--line);background:var(--surface);cursor:pointer;border-radius:8px;align-items:center;gap:6px;padding:6px 10px;font-weight:400;display:inline-flex}.check-item:hover{border-color:var(--primary-border);background:var(--primary-soft)}.check-item:has(input:checked){border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}.check-item input{width:auto;margin:0}.check-item input:focus{box-shadow:none}.check-item:has(input:disabled){cursor:not-allowed;opacity:.65}.hint{background:var(--primary-soft);border:1px solid var(--primary-border);color:var(--primary);border-radius:8px;margin:12px 0 0;padding:8px 12px;font-size:13px}.muted{color:var(--muted)}.msg{background:var(--primary-soft);color:var(--primary);border-radius:6px;margin:0 0 12px;padding:4px 10px;font-size:13px;display:inline-block}.table-wrap{border:1px solid var(--line);border-radius:8px;overflow-x:auto}table{border-collapse:collapse;width:100%}th{background:var(--surface-2);color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-size:12px;font-weight:600}th,td{text-align:left;vertical-align:top;border-bottom:1px solid var(--line);padding:10px 12px;font-size:13px}tbody tr:last-child td{border-bottom:0}tbody tr{transition:background .1s}tbody tr:hover{background:var(--primary-soft)}.empty-row{text-align:center;color:var(--muted-2);padding:28px 0!important}.article-item{border:1px solid var(--line);border-radius:var(--radius);margin-bottom:12px;padding:16px;transition:border-color .15s,background .15s}.article-item:hover{border-color:var(--primary-border);background:var(--primary-soft)}.article-item h4{margin:0 0 6px;font-size:15px}.article-item:last-child{margin-bottom:0}.article-meta{color:var(--muted);align-items:center;gap:14px;margin-bottom:8px;font-size:12px;display:flex}.article-meta span{align-items:center;gap:4px;display:inline-flex}.pre-content{white-space:pre-wrap;background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2);border-radius:8px;margin:0 0 20px;padding:16px;font-family:inherit}.comment-editor{border-top:1px solid var(--line);padding-top:16px}.comment-list{margin-top:8px}.comment-item{border-bottom:1px solid var(--line-soft);padding:12px 0}.comment-item:last-child{border-bottom:0}.comment-item strong{color:var(--ink);font-size:13px}.comment-item p{color:var(--ink-2);margin:4px 0}.list-row{border-bottom:1px solid var(--line-soft);color:var(--ink-2);justify-content:space-between;align-items:baseline;gap:10px;padding:9px 0;font-size:13px;display:flex}.list-row:last-child{border-bottom:0}.list-row .rank{background:var(--line-soft);width:20px;height:20px;color:var(--muted);border-radius:6px;flex:none;justify-content:center;align-items:center;margin-right:8px;font-size:12px;font-weight:600;display:inline-flex}.list-row:first-child .rank,.list-row:nth-child(2) .rank,.list-row:nth-child(3) .rank{background:var(--primary-soft);color:var(--primary)}.list-row .views{color:var(--muted-2);flex:none;font-size:12px}.weather-box{background:var(--primary-soft);border:1px solid var(--primary-border);border-radius:8px;padding:14px}.weather-box p{color:var(--primary);margin:2px 0}.modal-mask{z-index:50;background:#1118278c;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--line);border-radius:14px;width:100%;max-width:400px;max-height:90vh;padding:24px;overflow-y:auto}.modal-head{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.modal-head h3{margin:0;font-size:17px}.modal-close{color:var(--muted);background:0 0;border:0;padding:4px;display:inline-flex}.modal-close:hover{background:var(--line-soft);color:var(--ink)}.tabs{background:var(--line-soft);border-radius:8px;grid-template-columns:1fr 1fr;gap:4px;margin-bottom:16px;padding:4px;display:grid}.tabs button{color:var(--muted);background:0 0;border-radius:6px;padding:7px 0;font-size:13px}.tabs button.on{background:var(--surface);color:var(--primary);font-weight:600}.grid{gap:12px;display:grid}.grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.page-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;display:flex}.page-head h3{margin:0}.inline-form{align-items:center;gap:8px;display:flex}.inline-form label{white-space:nowrap;align-items:center;gap:6px;font-size:13px;display:flex}.inline-form input{width:auto}@media (width<=960px){.layout,.layout.h5-layout{grid-template-columns:1fr}.sidebar{position:static}.grid.two{grid-template-columns:1fr}}.top-progress{z-index:100;pointer-events:none;position:fixed;top:0;left:0;right:0}.top-progress-bar{background:linear-gradient(90deg, transparent, var(--primary), transparent);transform-origin:0;opacity:0;width:100%;height:3px;transition:opacity .2s;transform:scaleX(0)}.top-progress.on .top-progress-bar{opacity:1;animation:1.1s ease-in-out infinite progress-sweep}@keyframes progress-sweep{0%{transform:translate(-100%)scaleX(.45)}50%{transform:translate(38%)scaleX(.75)}to{transform:translate(100%)scaleX(.45)}}.top-progress-tip{background:var(--warn-soft);border:1px solid var(--warn-border);color:var(--warn);white-space:nowrap;border-radius:999px;margin:0;padding:6px 14px;font-size:12px;font-weight:500;position:absolute;top:8px;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #1118271f}.tip-enter-active,.tip-leave-active{transition:opacity .2s,transform .2s}.tip-enter-from,.tip-leave-to{opacity:0;transform:translate(-50%,-6px)}.spinner{border:2px solid #ffffff59;border-top-color:currentColor;border-radius:50%;flex:none;width:16px;height:16px;animation:.7s linear infinite spin;display:inline-block}.spinner-sm{border-width:2px;width:13px;height:13px}.btn-loading{align-items:center;gap:6px;display:inline-flex}.overlay-host{position:relative}.overlay{-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);color:var(--primary);z-index:5;background:#f9fafbb8;border-radius:8px;justify-content:center;align-items:center;gap:8px;font-size:13px;font-weight:500;display:flex;position:absolute;inset:0}.overlay .spinner{border-color:var(--primary-border);border-top-color:var(--primary)}.fade-enter-active,.fade-leave-active{transition:opacity .18s}.fade-enter-from,.fade-leave-to{opacity:0}.skeleton{gap:10px;display:grid}.skeleton span{background:var(--sk-base);background-image:linear-gradient(90deg, var(--sk-base) 0%, var(--sk-shine) 45%, var(--sk-base) 90%);background-size:240% 100%;border-radius:6px;animation:1.4s ease-in-out infinite shimmer;display:block}@keyframes shimmer{0%{background-position:130% 0}to{background-position:-20% 0}}@keyframes spin{to{transform:rotate(360deg)}}.sk-title{width:52%;height:18px}.sk-line{width:100%;height:12px}.sk-line.short{width:68%}.sk-block{height:88px;margin-top:4px}.sk-row{height:34px}.sk-head{height:30px;border-radius:6px 6px 0 0!important}.sk-tr{border-bottom:1px solid var(--surface);height:40px;border-radius:0!important}.sk-tr:last-child{border-bottom:0;border-radius:0 0 6px 6px!important}.state-block{text-align:center;background:var(--surface-2);border:1px dashed var(--line);border-radius:8px;justify-items:center;gap:8px;padding:26px 16px;display:grid}.state-block.tone-error{background:var(--danger-soft);border-color:#fecaca}.state-title{color:var(--ink-2);margin:0;font-size:14px;font-weight:600}.tone-error .state-title{color:var(--danger)}.state-desc{color:var(--muted);max-width:42ch;margin:0;font-size:13px}.state-retry{margin-top:4px}.stack>*+*{margin-top:12px}.nav-item{position:relative}.nav-label{flex:1;min-width:0}.nav-spinner,.article-spinner,.list-spinner{border-color:var(--primary-border);border-top-color:var(--primary)}.article-item.is-active{border-color:var(--primary-border);background:var(--primary-soft)}.is-busy td{opacity:.45}button:disabled{cursor:not-allowed;opacity:.6}button:disabled:hover{background:var(--primary)}button.secondary:disabled:hover,button.ghost-dark:disabled:hover{background:var(--surface)}@media (prefers-reduced-motion:reduce){.skeleton span,.spinner,.top-progress.on .top-progress-bar{animation:none}.top-progress.on .top-progress-bar{opacity:1;background:var(--primary);transform:scaleX(1)}.spinner{opacity:.7;border-top-color:currentColor}.fade-enter-active,.fade-leave-active,.tip-enter-active,.tip-leave-active{transition:none}}@media (width<=720px){button{min-height:40px}button.sm{min-height:34px;padding:8px 14px}.nav-item{min-height:44px}.top-progress-tip{white-space:normal;text-align:center;max-width:calc(100vw - 32px);font-size:12px}}.editor-field{gap:6px;display:grid}.editor-field-label{color:var(--ink-2);font-size:13px;font-weight:500}.rich-editor{--w-e-toolbar-bg-color:var(--surface-2);--w-e-toolbar-color:var(--ink-2);--w-e-toolbar-active-color:var(--primary);--w-e-toolbar-active-bg-color:var(--primary-soft);--w-e-toolbar-border-color:var(--line);--w-e-textarea-bg-color:var(--surface);--w-e-textarea-color:var(--ink);--w-e-textarea-border-color:var(--line);--w-e-textarea-slight-bg-color:var(--surface-2);--w-e-textarea-slight-color:var(--muted);--w-e-textarea-selected-border-color:var(--primary);--w-e-textarea-handler-bg-color:var(--primary)}.rich-editor .w-e-bar{flex-wrap:wrap;row-gap:2px}.rich-editor .w-e-text-container{min-height:320px}.rich-editor .w-e-text-container [data-slate-editor]{min-height:320px;padding:12px 16px;font-size:15px;line-height:1.8}.rich-editor .w-e-text-container [data-slate-editor] p{margin:0 0 .6em}.article-body{margin:0 0 20px}.rich-text{color:var(--ink-2);word-break:break-word;overflow-wrap:anywhere;font-size:17px;line-height:1.85}.rich-text>:first-child{margin-top:0}.rich-text>:last-child{margin-bottom:0}.rich-text p{margin:0 0 1.05em}.rich-text h1,.rich-text h2,.rich-text h3,.rich-text h4{color:var(--ink);margin:1.6em 0 .7em;font-weight:600;line-height:1.35}.rich-text h1{font-size:1.6em}.rich-text h2{font-size:1.4em}.rich-text h3{font-size:1.22em}.rich-text h4{font-size:1.08em}.rich-text a{color:var(--primary);border-bottom:1px solid var(--primary-border);text-decoration:none}.rich-text a:hover{color:var(--primary-hover);border-bottom-color:var(--primary)}.rich-text strong{color:var(--ink);font-weight:600}.rich-text ul,.rich-text ol{margin:0 0 1.05em;padding-left:1.4em}.rich-text li{margin:.3em 0}.rich-text blockquote{border-left:3px solid var(--primary-border);color:var(--muted);margin:1.2em 0;padding:4px 0 4px 16px;font-style:normal}.rich-text hr{border:none;border-top:1px solid var(--line);margin:1.8em 0}.rich-text img{border-radius:8px;max-width:100%;height:auto;margin:.6em 0;display:block}.rich-text code{background:var(--surface-2);border:1px solid var(--line-soft);color:var(--ink);border-radius:5px;padding:1px 5px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.88em}.rich-text pre{color:#e5e7eb;background:#1e1b4b;border-radius:10px;margin:1.2em 0;padding:14px 16px;font-size:14px;line-height:1.7;overflow-x:auto}.rich-text pre code{font-size:inherit;color:inherit;background:0 0;border:none;padding:0}.rich-text table{border-collapse:collapse;width:100%;margin:1.2em 0;font-size:.94em;display:block;overflow-x:auto}.rich-text th,.rich-text td{border:1px solid var(--line);text-align:left;padding:8px 12px}.rich-text th{background:var(--surface-2);color:var(--ink);font-weight:600}.rich-text .token.comment,.rich-text .token.prolog,.rich-text .token.doctype,.rich-text .token.cdata{color:#94a3b8}.rich-text .token.punctuation{color:#cbd5e1}.rich-text .token.property,.rich-text .token.tag,.rich-text .token.symbol,.rich-text .token.deleted{color:#f9a8d4}.rich-text .token.function,.rich-text .token.class-name{color:#93c5fd}.rich-text .token.keyword,.rich-text .token.operator,.rich-text .token.boolean,.rich-text .token.number{color:#c4b5fd}.rich-text .token.string,.rich-text .token.attr-value,.rich-text .token.char{color:#86efac}.rich-text .token.attr-name,.rich-text .token.selector,.rich-text .token.regex,.rich-text .token.important,.rich-text .token.variable{color:#fcd34d}@media (width<=640px){.rich-text{font-size:16px}.rich-editor .w-e-text-container,.rich-editor .w-e-text-container [data-slate-editor]{min-height:240px}}
