*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg: #1a1815;--bg2: #201d19;--bg3: #2a261f;--surface: #211e19;--border: #35312a;--ink: #ece7de;--ink-muted: #9c9488;--accent: #4f8f6b;--accent-h: #6bae87;--accent-soft: rgba(79,143,107,.16);--danger: #c1614f;--radius: 8px;--font: "Noto Sans TC", system-ui, sans-serif;--serif: "Noto Serif TC", serif;--mono: "JetBrains Mono", "Courier New", monospace}html{scroll-behavior:smooth}body{font-family:var(--font);background:var(--bg);color:var(--ink);line-height:1.7;min-height:100vh}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-h)}img{max-width:100%;border-radius:var(--radius)}.app-shell{display:flex;flex-direction:column;min-height:100vh}.app-wrapper{flex:1;min-width:0;display:flex;flex-direction:column}.main-content{flex:1;padding:2rem 1.5rem}.container{max-width:860px;margin:0 auto}.container-wide{max-width:1100px;margin:0 auto}.sidebar{width:100%;background:var(--surface);border-bottom:1px solid var(--border);padding:.85rem 1.5rem;display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;gap:.3rem 1rem;position:sticky;top:0;z-index:100;overscroll-behavior:contain}.sidebar-brand{font-family:var(--serif);font-size:1.25rem;font-weight:700;color:var(--ink);margin-right:.5rem}.sidebar-brand span{color:var(--accent)}.sidebar-section-title{display:none}.sidebar-link{color:var(--ink-muted);font-size:.95rem;padding:.5rem .7rem;border-radius:6px;transition:background .2s,color .2s}.sidebar-link:hover{background:var(--bg3);color:var(--ink)}.sidebar-link.active{background:var(--accent-soft);color:var(--accent-h)}.sidebar-actions{display:flex;align-items:center;gap:.5rem;margin-left:auto}.sidebar-logout{background:none;border:none;text-align:left;font-family:var(--font);cursor:pointer;color:var(--ink-muted);font-size:.95rem;padding:.5rem .7rem;border-radius:6px;transition:background .2s,color .2s}.sidebar-logout:hover{background:var(--bg3);color:var(--ink)}.sidebar-new{text-align:center;border:1px solid var(--accent);color:var(--accent);padding:.5rem 1rem;border-radius:6px;font-size:.9rem;transition:background .2s,color .2s}.sidebar-new:hover{background:var(--accent-soft);color:var(--accent-h)}.sidebar-backdrop,.mobile-topbar{display:none}.hamburger-btn{display:flex;flex-direction:column;justify-content:center;gap:4px;width:40px;height:40px;background:none;border:none;cursor:pointer;padding:0}.hamburger-btn span{display:block;width:20px;height:2px;background:var(--ink);margin:0 auto}.navbar-brand{font-family:var(--serif);font-size:1.15rem;font-weight:700;color:var(--ink)}.navbar-brand span{color:var(--accent)}@media (max-width: 900px){.sidebar{width:260px;flex-direction:column;align-items:stretch;flex-wrap:nowrap;gap:.2rem;padding:1.75rem 1.25rem;border-bottom:none;border-right:1px solid var(--border);position:fixed;top:0;left:0;height:100vh;z-index:200;overflow-y:auto;transform:translate(-100%);transition:transform .25s ease}.sidebar-brand{margin-right:0;margin-bottom:1.5rem}.sidebar-section-title{display:block;color:var(--ink-muted);font-size:.82rem;font-weight:500;margin:1.25rem 0 .4rem}.sidebar-actions{flex-direction:column;align-items:stretch;margin-left:0;margin-top:auto;gap:.2rem}.sidebar-logout{width:100%}.sidebar.open{transform:translate(0);box-shadow:4px 0 24px #00000059}@media (prefers-reduced-motion: reduce){.sidebar{transition:none}}.sidebar-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:199}.mobile-topbar{display:flex;align-items:center;gap:.75rem;height:56px;padding:0 1rem;background:#1a1815e6;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100}}.hero{padding:2.5rem 0 2rem;border-bottom:1px solid var(--border);margin-bottom:2.5rem}.hero h1{font-family:var(--serif);font-size:2.1rem;font-weight:700;margin-bottom:.5rem;text-wrap:balance}.hero h1 span{color:var(--accent)}.hero p{color:var(--ink-muted);font-size:1.05rem}.search-bar{display:flex;gap:.75rem;flex-wrap:wrap;margin-bottom:2rem;align-items:center}.search-input{flex:1;min-width:200px;background:var(--surface);border:1px solid var(--border);color:var(--ink);padding:.6rem 1rem;border-radius:24px;font-size:.95rem;outline:none;transition:border-color .2s}.search-input::placeholder{color:var(--ink-muted)}.search-input:focus{border-color:var(--accent)}.post-grid{display:grid;grid-template-columns:1fr;gap:1.5rem}.post-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;transition:border-color .2s,background .2s;cursor:pointer;display:flex;flex-direction:column;gap:.75rem}.post-card:hover{border-color:var(--accent);background:var(--bg3)}.card-category{font-size:.78rem;font-weight:600;color:var(--accent)}.card-title{font-size:1.1rem;font-weight:600;color:var(--ink);line-height:1.4;text-wrap:balance;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.card-summary{font-size:.875rem;color:var(--ink-muted);flex:1;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.card-meta{display:flex;align-items:center;justify-content:space-between;font-size:.8rem;color:var(--ink-muted);margin-top:auto}.card-tags{display:flex;gap:.35rem;flex-wrap:wrap}.tag{background:var(--bg3);color:var(--ink-muted);padding:.15rem .55rem;border-radius:10px;font-size:.75rem}.pagination{display:flex;align-items:center;justify-content:center;gap:1.25rem;margin-top:2.5rem}.pagination-status{color:var(--ink-muted);font-size:.875rem}.post-detail{max-width:720px;margin:0 auto}.post-header{margin-bottom:2rem}.post-header-category{color:var(--accent);font-size:.85rem;font-weight:600;margin-bottom:.5rem}.post-header h1{font-family:var(--serif);font-size:2rem;line-height:1.3;margin-bottom:1rem;text-wrap:balance}.post-header-meta{color:var(--ink-muted);font-size:.875rem;display:flex;gap:1rem;flex-wrap:wrap;align-items:center}.post-actions{display:flex;gap:.75rem;margin-bottom:2rem}.markdown-body{line-height:1.8}.markdown-body h2{font-family:var(--serif);font-size:1.5rem;margin:2rem 0 1rem;color:var(--ink);border-bottom:1px solid var(--border);padding-bottom:.4rem}.markdown-body h3{font-size:1.2rem;margin:1.5rem 0 .75rem;color:var(--ink)}.markdown-body p{margin-bottom:1rem}.markdown-body ul,.markdown-body ol{padding-left:1.5rem;margin-bottom:1rem}.markdown-body li{margin-bottom:.4rem}.markdown-body blockquote{border-left:3px solid var(--accent);padding:.75rem 1rem;background:var(--bg2);border-radius:0 var(--radius) var(--radius) 0;color:var(--ink-muted);margin:1.5rem 0}.markdown-body code{font-family:var(--mono);font-size:.875em;background:var(--bg3);padding:.15em .4em;border-radius:4px}.markdown-body pre{margin:1.5rem 0;border-radius:var(--radius);overflow-x:auto}.markdown-body pre code{background:none;padding:0;font-size:.85rem}.markdown-body hr{border:none;border-top:1px solid var(--border);margin:2rem 0}.markdown-body strong{color:var(--ink)}.editor-page{max-width:800px;margin:0 auto}.editor-page h2{font-family:var(--serif);font-size:1.6rem;margin-bottom:1.5rem}.form-group{margin-bottom:1.25rem}.form-group label{display:block;font-size:.875rem;color:var(--ink-muted);margin-bottom:.4rem}.form-control{width:100%;background:var(--surface);border:1px solid var(--border);color:var(--ink);padding:.65rem .9rem;border-radius:6px;font-size:.95rem;outline:none;transition:border-color .2s;font-family:var(--font)}.form-control:focus{border-color:var(--accent)}textarea.form-control{resize:vertical;font-family:var(--mono);font-size:.875rem}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.editor-toolbar{margin-bottom:.75rem}.editor-toolbar .btn-upload{display:inline-flex;margin-bottom:0;font-size:.9rem;color:var(--ink-muted);cursor:pointer}.checkbox-group{display:flex;align-items:center;gap:.5rem}.checkbox-group input{width:16px;height:16px;accent-color:var(--accent)}.btn{padding:.6rem 1.4rem;border-radius:6px;font-size:.9rem;font-family:var(--font);font-weight:500;cursor:pointer;border:none;transition:background .2s,border-color .2s,color .2s;display:inline-flex;align-items:center;gap:.4rem}.btn-primary{background:var(--accent);color:#14120d}.btn-primary:hover{background:var(--accent-h)}.btn-outline{background:transparent;color:var(--ink-muted);border:1px solid var(--border)}.btn-outline:hover{border-color:var(--ink);color:var(--ink)}.btn-danger{background:transparent;color:var(--danger);border:1px solid var(--danger)}.btn-danger:hover{background:var(--danger);color:#14120d}.btn:disabled{opacity:.4;cursor:not-allowed}.btn:disabled:hover{background:transparent;border-color:var(--border);color:var(--ink-muted)}.about-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:2.5rem;max-width:640px;margin:0 auto;text-align:center}.about-avatar{width:120px;height:120px;border-radius:50%;border:2px solid var(--accent);margin:0 auto 1.5rem;display:block}.about-name{font-family:var(--serif);font-size:1.8rem;font-weight:700;margin-bottom:.5rem}.about-bio{color:var(--ink-muted);margin-bottom:1.5rem;font-size:1rem}.about-links{display:flex;justify-content:center;gap:1rem;flex-wrap:wrap}.about-link{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem 1.2rem;border-radius:6px;border:1px solid var(--border);color:var(--ink-muted);transition:border-color .2s,color .2s;font-size:.875rem}.about-link:hover{border-color:var(--accent);color:var(--accent)}.footer{text-align:center;padding:1.5rem;border-top:1px solid var(--border);color:var(--ink-muted);font-size:.82rem;margin-top:3rem}.loading{text-align:center;padding:4rem;color:var(--ink-muted)}.empty{text-align:center;padding:3rem;color:var(--ink-muted)}.back-link{color:var(--ink-muted);font-size:.875rem;display:inline-flex;align-items:center;gap:.3rem;margin-bottom:1.5rem}.back-link:hover{color:var(--ink)}.alert{padding:.75rem 1rem;border-radius:6px;margin-bottom:1rem;font-size:.875rem}.alert-danger{background:#c1614f1f;border:1px solid var(--danger);color:var(--danger)}.alert-success{background:var(--accent-soft);border:1px solid var(--accent);color:var(--accent-h)}@media (max-width: 640px){.hero h1{font-size:1.6rem}.post-grid,.form-row{grid-template-columns:1fr}.post-header h1{font-size:1.5rem}}
