*{box-sizing:border-box}body{margin:0;font-family:Arial,Microsoft YaHei,sans-serif;background-color:#f0f0f0;color:#161616}button,input,textarea{font:inherit}a{color:inherit}.page{min-height:100vh;padding:0 24px 56px;background-image:radial-gradient(circle,rgba(0,0,0,.07) 1px,transparent 1px),linear-gradient(rgba(0,0,0,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(0,0,0,.03) 1px,transparent 1px);background-size:32px 32px,32px 32px,32px 32px;background-position:16px 16px,0 0,0 0}.topbar{position:sticky;top:0;z-index:2;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;min-height:72px;max-width:1120px;margin:0 auto;color:#151515}.brand{justify-self:start;font-size:18px;font-weight:700;letter-spacing:0}.welcome{grid-column:2;justify-self:center;font-size:18px;font-weight:600;letter-spacing:0}.topbar a.welcome{grid-column:1;justify-self:start;text-decoration:none}.github-link{grid-column:3;justify-self:end;display:inline-grid;place-items:center;width:40px;height:40px;color:#151515;text-decoration:none}.github-link svg{width:24px;height:24px;fill:currentColor}.back-link{grid-column:2;justify-self:center;padding:0;border:0;background:transparent;color:#151515;font:inherit;font-size:18px;font-weight:600;letter-spacing:0;cursor:pointer}.article-list{display:grid;gap:18px;width:min(720px,100%);margin:72px auto 0}.post-card{display:grid;gap:10px;padding:20px 22px;border:1px solid #e8e8e8;border-radius:8px;background:#fff;box-shadow:0 10px 28px #0000000a}.post-card-link{margin:0;padding:0;border:0;background:transparent;color:#151515;cursor:pointer;font-size:20px;font-weight:700;line-height:1.35;text-align:left}.post-card time{color:#666;font-size:14px;line-height:1.4}.status-text{margin:0;padding:20px 22px;border:1px solid #e8e8e8;border-radius:8px;background:#fff;color:#555}.article-detail-shell{width:min(760px,100%);margin:56px auto 0}.article-detail{border:1px solid #e8e8e8;border-radius:8px;background:#fff;box-shadow:0 16px 36px #0000000d}.article-detail-header{display:grid;gap:14px;padding:38px 42px 24px;border-bottom:1px solid #eeeeee}.article-detail-header h1{margin:0;color:#111;font-size:34px;font-weight:760;line-height:1.22}.article-detail-header time{color:#777;font-size:14px}.article-summary{margin:0;padding:24px 42px 0;color:#555;font-size:16px;line-height:1.75}.article-content{padding:26px 42px 42px;color:#222;font-size:17px;line-height:1.85}.article-content p,.article-content ul,.article-content ol,.article-content blockquote,.article-content table,.article-content .code-block{margin:0 0 18px}.article-content blockquote,.markdown-preview blockquote{margin:18px 0;padding:12px 16px;border-left:4px solid #d92d20;border-radius:0 6px 6px 0;background:#fff5f5;color:#5f2323;font-style:italic}.article-content img,.markdown-preview img{max-width:100%;border-radius:6px}.article-content table{width:100%;border-collapse:collapse}.article-content th,.article-content td{padding:8px;border:1px solid #d9e0ea}.admin-login-page{display:grid;min-height:100vh;place-items:center;padding:24px;background:#f3f5f7}.login-panel{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:40px;width:min(860px,100%);padding:36px;border:1px solid #d9dee5;border-radius:8px;background:#fff;box-shadow:0 18px 48px #1a243414}.login-copy{align-self:center}.eyebrow{margin:0 0 14px;color:#2962a3;font-size:13px;font-weight:700;letter-spacing:0;text-transform:uppercase}.login-copy h1{margin:0 0 14px;font-size:32px;line-height:1.2}.login-copy p:last-child{margin:0;color:#5e6875;line-height:1.7}.login-form,.form-grid,.article-form{display:grid;gap:18px}.login-form label,.form-grid label{display:grid;gap:8px;color:#394454;font-size:14px;font-weight:700}.login-form input,.form-grid input,.form-grid textarea,.markdown-input{width:100%;border:1px solid #cfd6df;border-radius:6px;background:#fff;color:#18212f;outline:none}.login-form input,.form-grid input{height:42px;padding:0 12px}.form-grid textarea,.markdown-input{resize:vertical;padding:12px;line-height:1.65}.login-form input:focus,.form-grid input:focus,.form-grid textarea:focus,.markdown-input:focus{border-color:#2f6fae;box-shadow:0 0 0 3px #2f6fae24}.primary-button,.secondary-button,.danger-button,.icon-button{display:inline-grid;place-items:center;min-height:36px;border-radius:6px;border:1px solid transparent;cursor:pointer;text-decoration:none;white-space:nowrap}.primary-button{padding:0 14px;background:#2f6fae;color:#fff;font-weight:700}.secondary-button{padding:0 14px;border-color:#cfd6df;background:#fff;color:#2c3747;font-weight:700}.danger-button{padding:0 14px;background:#b42318;color:#fff;font-weight:700}.icon-text-button{grid-auto-flow:column;gap:8px}.primary-button:disabled,.secondary-button:disabled,.danger-button:disabled{cursor:not-allowed;opacity:.64}.form-error{margin:0;padding:10px 12px;border:1px solid #f0b4ad;border-radius:6px;background:#fff4f2;color:#9f1d15;font-size:14px}.admin-shell{display:grid;grid-template-columns:232px minmax(0,1fr);min-height:100vh;background:#f4f6f8}.admin-sidebar{position:sticky;top:0;display:grid;grid-template-rows:auto 1fr auto;height:100vh;border-right:1px solid #dce2ea;background:#fff}.admin-brand{display:grid;grid-auto-flow:column;justify-content:start;align-items:center;gap:10px;height:64px;padding:0 20px;border-bottom:1px solid #edf0f4;color:#172033;font-weight:800;text-decoration:none}.admin-nav{padding:16px 12px}.admin-nav a{display:block;padding:10px 12px;border-radius:6px;color:#4c596a;font-size:14px;font-weight:700;text-decoration:none}.admin-nav a.active,.admin-nav a:hover{background:#eaf2fb;color:#235d96}.admin-logout{justify-self:stretch;margin:12px;border:1px solid #d7dee8;background:#fff;color:#4c596a}.admin-main{min-width:0;padding:28px}.admin-page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:18px}.admin-page-header h1{margin:0;color:#172033;font-size:24px;line-height:1.25}.admin-page-header p{margin:8px 0 0;color:#657184;font-size:14px}.admin-header-actions{display:flex;flex-wrap:wrap;gap:10px}.admin-panel{border:1px solid #dce2ea;border-radius:8px;background:#fff}.admin-status{margin:0;padding:22px;color:#5d6878}.admin-status.error{color:#a32018}.admin-table-wrap{overflow-x:auto}.admin-table{width:100%;border-collapse:collapse;font-size:14px}.admin-table th,.admin-table td{padding:13px 14px;border-bottom:1px solid #edf0f4;text-align:left;vertical-align:middle}.admin-table th{background:#f8fafc;color:#4d596a;font-size:13px;font-weight:800}.admin-table td{color:#394454}.admin-table tr:last-child td{border-bottom:0}.table-title{min-width:180px;color:#172033;font-weight:800}.table-actions{display:flex;gap:8px}.icon-button{width:34px;height:34px;border-color:#d5dce6;background:#fff;color:#415063}.icon-button:hover{border-color:#aeb9c7;background:#f6f8fa}.icon-button.danger{color:#b42318}.article-form{padding:22px}.field-label{color:#394454;font-size:14px;font-weight:800}.markdown-editor{display:grid;gap:8px}.markdown-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);min-height:420px;border:1px solid #d5dce6;border-radius:8px;overflow:hidden}.markdown-input{min-height:420px;border:0;border-radius:0;border-right:1px solid #d5dce6;font-family:Consolas,Courier New,monospace;font-size:14px}.markdown-upload-message{margin:0;color:#5d6878;font-size:13px}.markdown-preview{min-width:0;padding:18px 20px;overflow:auto;background:#fbfcfd;color:#202b3a;line-height:1.75}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3{margin:0 0 14px;line-height:1.3}.markdown-preview p,.markdown-preview ul,.markdown-preview ol,.markdown-preview pre,.markdown-preview table{margin:0 0 14px}.markdown-preview code{padding:2px 5px;border-radius:4px;background:#edf1f5;font-family:Consolas,Courier New,monospace}.markdown-preview table{width:100%;border-collapse:collapse}.markdown-preview th,.markdown-preview td{padding:8px;border:1px solid #d9e0ea}.preview-placeholder{color:#7a8494}.code-block{margin:0 0 16px;overflow:hidden;border:1px solid #263447;border-radius:7px;background:#111827}.code-block-header{display:flex;align-items:center;justify-content:space-between;min-height:34px;padding:0 10px 0 14px;border-bottom:1px solid #263447;background:#172033;color:#cbd5e1;font-size:12px;font-weight:800}.code-block-header button{height:24px;padding:0 9px;border:1px solid #334155;border-radius:5px;background:#0f172a;color:#e5e7eb;cursor:pointer;font-size:12px}.code-block pre{margin:0;overflow:auto;background:#111827;color:#f8fafc}.code-block code{display:grid;padding:10px 0;background:transparent;font-family:Consolas,Courier New,monospace;font-size:13px}.code-line{display:grid;grid-template-columns:44px minmax(0,1fr);min-height:22px;white-space:pre}.code-line-number{padding:0 12px 0 10px;color:#64748b;text-align:right;-webkit-user-select:none;user-select:none}.code-line-content{padding-right:14px}.form-actions{display:flex;justify-content:flex-end;gap:10px}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:grid;place-items:center;padding:20px;background:#0f172a52}.confirm-dialog{display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px;width:min(440px,100%);padding:20px;border-radius:8px;background:#fff;box-shadow:0 24px 70px #0f172a38}.dialog-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:50%;background:#fff0ed;color:#b42318}.dialog-content h2{margin:0 0 8px;font-size:18px}.dialog-content p{margin:0;color:#5d6878;line-height:1.6}.dialog-actions{grid-column:1 / -1;display:flex;justify-content:flex-end;gap:10px;margin-top:6px}@media (max-width: 640px){.page{padding:0 16px 40px;background-size:32px 32px,32px 32px,32px 32px;background-position:16px 16px,0 0,0 0}.topbar{min-height:64px}.brand,.welcome,.back-link{font-size:16px}.article-list{margin-top:40px}.post-card{padding:18px}.article-detail-shell{margin-top:36px}.article-detail-header{padding:28px 22px 20px}.article-detail-header h1{font-size:26px}.article-summary{padding:20px 22px 0}.article-content{padding:22px;font-size:16px}.login-panel,.admin-shell,.markdown-grid{grid-template-columns:1fr}.login-panel{padding:24px}.admin-sidebar{position:static;height:auto;grid-template-rows:auto auto auto}.admin-main{padding:18px}.admin-page-header{display:grid}.markdown-input{border-right:0;border-bottom:1px solid #d5dce6}}
