:root{--bg:#0d0e10;--panel:#14161a;--panel2:#191c21;--line:#2a2e35;--text:#f1efe9;--muted:#989da7;--accent:#9da6b7;--danger:#d36f72;--radius:16px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}button,input,textarea,select{font:inherit}button{cursor:pointer}.topbar{height:72px;display:flex;align-items:center;justify-content:space-between;padding:0 24px;border-bottom:1px solid var(--line);background:rgba(13,14,16,.95);position:sticky;top:0;z-index:20}.brand{display:flex;align-items:center;gap:14px}.brand span{font-size:12px;letter-spacing:.18em;color:var(--muted)}.brand strong{font-size:16px}.top-actions,.editor-actions,.dialog-actions{display:flex;gap:9px}.app-shell{display:grid;grid-template-columns:280px minmax(0,1fr);min-height:calc(100vh - 72px)}.sidebar{border-right:1px solid var(--line);padding:20px;display:flex;flex-direction:column;gap:16px;min-height:calc(100vh - 72px)}.sidebar-head{display:flex;align-items:center;justify-content:space-between}.sidebar-head small,.eyebrow{font-size:11px;letter-spacing:.16em;color:var(--muted)}.sidebar-head b{margin-left:8px}.project-list{display:flex;flex-direction:column;gap:7px;flex:1}.project-item{width:100%;border:1px solid transparent;background:transparent;color:inherit;border-radius:12px;padding:10px;display:grid;grid-template-columns:44px 1fr;gap:10px;text-align:left}.project-item:hover,.project-item.active{background:var(--panel2);border-color:var(--line)}.project-thumb{width:44px;height:44px;border-radius:9px;background:#252932 center/cover}.project-item strong,.project-item small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-item small{color:var(--muted);margin-top:4px}.workspace{padding:28px;min-width:0}.empty-state{min-height:70vh;display:grid;place-content:center;text-align:center;color:var(--muted)}.empty-state h1{color:var(--text);margin-bottom:0}.editor-header{display:flex;justify-content:space-between;align-items:flex-start;gap:24px}.editor-header h1{font-size:clamp(30px,4vw,54px);margin:6px 0}.editor-header p:last-child{color:var(--muted);font-size:13px}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-top:24px}.tabs button{border:0;background:none;color:var(--muted);padding:14px 16px;border-bottom:2px solid transparent}.tabs button.active{color:var(--text);border-color:var(--accent)}.tab-panel{display:none;padding-top:28px}.tab-panel.active{display:block}.settings-grid,.dialog-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.settings-grid{max-width:960px}.span-2{grid-column:span 2}label{display:flex;flex-direction:column;gap:7px;color:#cfd2d9;font-size:13px}input,textarea,select{width:100%;border:1px solid var(--line);border-radius:10px;background:#101216;color:var(--text);padding:12px 13px;outline:none}input:focus,textarea:focus,select:focus{border-color:#626b7a;box-shadow:0 0 0 3px rgba(157,166,183,.1)}textarea{resize:vertical}label small{color:var(--muted);line-height:1.45}.check{flex-direction:row;align-items:center}.check input{width:auto}.primary,.ghost,.danger,.text-danger,.icon-button{border-radius:10px;padding:10px 14px;border:1px solid var(--line);color:var(--text);background:var(--panel2)}.primary{background:var(--text);color:#111216;border-color:var(--text);font-weight:700}.danger{border-color:rgba(211,111,114,.45);color:#f0a3a5}.text-danger{border:0;background:none;color:#d88b8e;text-align:left;padding:8px}.builder-toolbar{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:18px}.builder-toolbar h2{margin:5px 0 0}.block-list{display:flex;flex-direction:column;gap:10px;max-width:980px}.block-card{display:grid;grid-template-columns:34px 54px minmax(0,1fr) auto;align-items:center;gap:12px;border:1px solid var(--line);border-radius:14px;background:var(--panel);padding:12px}.block-card.dragging{opacity:.35}.drag-handle{color:var(--muted);font-size:20px;cursor:grab}.block-index{width:44px;height:44px;border-radius:10px;background:var(--panel2);display:grid;place-items:center;color:var(--muted)}.block-info strong,.block-info small{display:block}.block-info small{color:var(--muted);margin-top:4px}.block-actions{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}.block-actions button{border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:8px;padding:7px 9px}.block-actions button:hover{color:var(--text);background:var(--panel2)}.is-hidden{opacity:.48}.preview-canvas{max-width:1080px;margin:auto;background:#0b0c0e;border:1px solid var(--line);border-radius:20px;overflow:hidden}.preview-hero{min-height:420px;padding:60px;display:flex;flex-direction:column;justify-content:flex-end;background:#15181d center/cover;position:relative}.preview-hero:before{content:"";position:absolute;inset:0;background:linear-gradient(transparent,rgba(7,8,10,.94))}.preview-hero>*{position:relative}.preview-hero h1{font-size:clamp(42px,7vw,80px);margin:6px 0}.preview-hero p{max-width:700px;color:#c8cbd2}.preview-section{padding:64px clamp(22px,7vw,80px);border-top:1px solid #202329}.preview-section h2{font-size:clamp(27px,4vw,48px);margin:7px 0 16px}.preview-section p{color:#b8bdc7;line-height:1.7;white-space:pre-line}.preview-media{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-top:28px}.preview-media figure{margin:0}.preview-media img{display:block;width:100%;aspect-ratio:16/10;object-fit:cover;border-radius:12px;background:#1b1e24}.preview-media figcaption{color:#8f96a2;font-size:12px;margin-top:8px}.takeaway{margin-top:28px;padding:18px;border-left:2px solid var(--block-accent,var(--accent));background:#13161a}.timeline-items{margin-top:24px;display:grid;gap:16px}.timeline-item{border-left:1px solid #373b44;padding-left:18px}.timeline-item strong{display:block;margin-bottom:5px}dialog{width:min(840px,calc(100% - 28px));max-height:92vh;border:1px solid var(--line);border-radius:18px;padding:0;background:var(--panel);color:var(--text)}dialog::backdrop{background:rgba(0,0,0,.72);backdrop-filter:blur(4px)}.dialog-card{padding:22px;overflow:auto;max-height:92vh}.dialog-head{display:flex;align-items:flex-start;justify-content:space-between}.dialog-head h2{margin:6px 0 22px}.icon-button{font-size:24px;padding:4px 10px}.dialog-actions{justify-content:flex-end;margin-top:20px}.empty-blocks{border:1px dashed var(--line);border-radius:14px;padding:55px;text-align:center;color:var(--muted)}@media(max-width:820px){.topbar{height:auto;padding:14px;align-items:flex-start;gap:12px}.top-actions{flex-wrap:wrap;justify-content:flex-end}.app-shell{display:block}.sidebar{min-height:0;border-right:0;border-bottom:1px solid var(--line)}.project-list{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(210px,75vw);overflow:auto}.workspace{padding:18px}.editor-header{display:block}.editor-actions{margin-top:18px;flex-wrap:wrap}.settings-grid,.dialog-grid{grid-template-columns:1fr}.span-2{grid-column:auto}.block-card{grid-template-columns:28px 42px 1fr}.block-actions{grid-column:2/-1;justify-content:flex-start}.preview-hero{min-height:350px;padding:28px}.brand{display:block}.brand span,.brand strong{display:block}.top-actions button{font-size:12px;padding:8px}}


/* Private password gate */
body.admin-locked > :not(#passwordDialog) {
  visibility: hidden !important;
}

.password-dialog {
  width: min(92vw, 430px);
  padding: 0;
  border: 0;
  border-radius: 22px;
  color: #f4f1eb;
  background: #15171b;
  box-shadow: 0 28px 90px rgba(0,0,0,.62);
}

.password-dialog::backdrop {
  background: rgba(7,8,10,.94);
  backdrop-filter: blur(12px);
}

.password-card {
  display: grid;
  gap: 16px;
  padding: 34px;
}

.password-card h1 {
  margin: 0;
  font-size: clamp(2rem, 7vw, 3rem);
  line-height: .95;
}

.password-copy {
  margin: 0 0 4px;
  color: #a7abb4;
}

.password-card label {
  font-size: .78rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: #c8cbd2;
}

.password-card input {
  width: 100%;
  min-height: 50px;
  box-sizing: border-box;
  border: 1px solid rgba(255,255,255,.14);
  border-radius: 12px;
  padding: 0 14px;
  color: #fff;
  background: #0e1013;
  font: inherit;
  outline: none;
}

.password-card input:focus {
  border-color: #aeb5c3;
  box-shadow: 0 0 0 3px rgba(174,181,195,.12);
}

.password-error {
  margin: -6px 0 0;
  color: #ff8989;
  font-size: .86rem;
}

.password-dialog.is-wrong .password-card {
  animation: passwordShake .28s ease;
}

@keyframes passwordShake {
  25% { transform: translateX(-7px); }
  50% { transform: translateX(7px); }
  75% { transform: translateX(-4px); }
}
