.admin-shell{min-height:100vh;background:var(--ground);color:var(--ink);font-family:Public Sans,-apple-system,sans-serif}.admin-topbar{position:-webkit-sticky;position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;padding:14px 24px;background:var(--surface);border-bottom:1px solid var(--hairline)}.admin-topbar h1{font-family:Newsreader,serif;font-size:1.15rem;font-weight:500}.admin-topbar .status{font-family:IBM Plex Mono,monospace;font-size:.72rem;color:var(--ink-faint)}.admin-topbar .actions{display:flex;gap:10px;align-items:center}.admin-btn{font:inherit;font-size:.86rem;padding:8px 16px;border-radius:99px;cursor:pointer;border:1px solid var(--hairline-strong);background:var(--surface);color:var(--ink)}.admin-btn:hover{background:var(--surface-alt)}.admin-btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.admin-btn.primary:hover{filter:brightness(1.08)}.admin-btn:disabled{opacity:.5;cursor:default}.admin-body{display:grid;grid-template-columns:200px 1fr;min-height:calc(100vh - 57px)}.admin-tabs{border-right:1px solid var(--hairline);padding:20px 0}.admin-tabs button{display:block;width:100%;text-align:left;font:inherit;font-size:.9rem;padding:10px 22px;background:none;cursor:pointer;color:var(--ink-soft);border:none;border-left:3px solid transparent}.admin-tabs button.active,.admin-tabs button:hover{color:var(--ink);background:var(--surface-alt)}.admin-tabs button.active{border-left-color:var(--brand);font-weight:600}.admin-main{padding:32px 40px 80px;max-width:760px}.admin-main h2{font-family:Newsreader,serif;font-weight:500;font-size:1.4rem;margin-bottom:6px}.admin-main .hint{color:var(--ink-soft);font-size:.88rem;margin-bottom:22px}.field{margin-bottom:20px}.field label{display:block;font-family:IBM Plex Mono,monospace;font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);margin-bottom:6px}.field input[type=password],.field input[type=text],.field textarea{width:100%;padding:10px 12px;border:1px solid var(--hairline-strong);border-radius:6px;background:var(--surface);color:var(--ink);font:inherit;font-size:.94rem}.field textarea{min-height:100px;resize:vertical;line-height:1.5}.field textarea.code{font-family:IBM Plex Mono,monospace;font-size:.82rem;min-height:260px}.field .err{color:#c0392b;font-size:.8rem;margin-top:6px}.repeat-item{border:1px solid var(--hairline);border-radius:8px;padding:16px;margin-bottom:12px;background:var(--surface)}.repeat-item-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.repeat-item-head span{font-family:IBM Plex Mono,monospace;font-size:.72rem;color:var(--ink-faint)}.remove-btn{border:none;color:#c0392b;font-size:.8rem}.add-btn,.remove-btn{background:none;cursor:pointer}.add-btn{border:1px dashed var(--hairline-strong);border-radius:8px;padding:10px;width:100%;color:var(--ink-soft);font:inherit;font-size:.86rem}.add-btn:hover{border-color:var(--brand);color:var(--brand-ink)}.login-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--ground);padding:20px}.login-card{background:var(--surface);border:1px solid var(--hairline);border-radius:10px;padding:32px;width:100%;max-width:340px;box-shadow:var(--shadow-lift)}.login-card h1{font-family:Newsreader,serif;font-size:1.3rem;margin-bottom:6px;font-weight:500}.login-card p{color:var(--ink-soft);font-size:.88rem;margin:0 0 18px}.stat-card{border:1px solid var(--hairline);border-radius:10px;padding:22px;background:var(--surface);display:inline-block;min-width:180px}.stat-card .num{font-family:IBM Plex Mono,monospace;font-size:2.2rem;color:var(--brand-ink)}.stat-card .label{color:var(--ink-soft);font-size:.82rem;margin-top:4px}.db-warning{background:var(--general-soft);border-left:3px solid var(--general);padding:14px 16px;border-radius:0 6px 6px 0;font-size:.88rem;color:var(--ink-soft);margin-bottom:22px}.save-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--ground);padding:10px 20px;border-radius:99px;font-size:.86rem;opacity:0;pointer-events:none;transition:opacity .2s;z-index:50}.save-toast.show{opacity:1}