@import "https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&family=Space+Grotesk:wght@400;500;600;700&display=swap";:root{--font-display:"Space Grotesk", system-ui, sans-serif;--font-body:"DM Sans", system-ui, sans-serif;--ink:#171717;--ink-soft:#404040;--muted:#737373;--accent:#0ea5e9;--accent-strong:#0284c7;--accent-glow:#0ea5e938;--surface:#fff;--surface-soft:#f5f5f5;--line:#1717171a;--bg-grad-a:#f8fafc;--bg-grad-b:#eef6ff;--bg-grad-c:#f5f5f5;color:var(--ink);font-family:var(--font-body);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,:before,:after{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:var(--surface-soft);min-width:320px}h1,h2,h3,h4{font-family:var(--font-display)}code{font-family:ui-monospace,Cascadia Code,Segoe UI Mono,monospace;font-size:.92em}@keyframes fade-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.brand-mark{align-items:center;gap:.7rem;min-width:0;display:inline-flex}.brand-mark__logo{object-fit:contain;background:#000;border-radius:8px;flex-shrink:0;display:block}.brand-mark--sm .brand-mark__logo{border-radius:6px;width:28px;height:28px}.brand-mark--md .brand-mark__logo{width:36px;height:36px}.brand-mark--lg .brand-mark__logo{border-radius:10px;width:48px;height:48px}.brand-mark__text{flex-direction:column;gap:.05rem;min-width:0;line-height:1.15;display:flex}.brand-mark__name{font-family:var(--font-display);letter-spacing:-.03em;color:var(--ink);font-size:1.05rem;font-weight:700}.brand-mark--sm .brand-mark__name{font-size:.95rem}.brand-mark--lg .brand-mark__name{font-size:1.35rem}.brand-mark__by{letter-spacing:.02em;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:.68rem;font-weight:500;overflow:hidden}.brand-mark--inverted .brand-mark__name{color:#fff}.brand-mark--inverted .brand-mark__by{color:#ffffffa6}.auth-shell{place-items:center;min-height:100svh;padding:2rem 1.25rem;display:grid;position:relative;overflow:hidden}.auth-atmosphere{z-index:0;background:radial-gradient(80% 55% at 12% 18%,#0ea5e933,#0000 55%),radial-gradient(65% 45% at 88% 82%,#6366f11f,#0000 50%),linear-gradient(160deg,#f8fafc 0%,#eef6ff 48%,#f5f5f5 100%);position:absolute;inset:0}.auth-panel{z-index:1;flex-direction:column;gap:1.25rem;width:min(100%,420px);display:flex;position:relative}.auth-brand{flex-direction:column;gap:.85rem;display:flex}.auth-brand h1{font-family:var(--font-display);letter-spacing:-.03em;color:var(--ink);margin:0;font-size:clamp(1.75rem,4vw,2.15rem);font-weight:700}.auth-lead{color:var(--muted);margin:0;font-size:.95rem;line-height:1.5}.auth-divider{color:var(--muted);align-items:center;gap:.75rem;font-size:.8rem;display:flex}.auth-divider:before,.auth-divider:after{content:"";background:var(--line);flex:1;height:1px}.auth-form{flex-direction:column;gap:.85rem;display:flex}.auth-form label{letter-spacing:.02em;color:var(--ink-soft);flex-direction:column;gap:.35rem;font-size:.8rem;font-weight:600;display:flex}.auth-form input{font:inherit;border:1px solid var(--line);color:var(--ink);background:#ffffffd9;border-radius:10px;outline:none;padding:.75rem .9rem;font-weight:400;transition:border-color .15s,box-shadow .15s}.auth-form input:focus{border-color:#0ea5e98c;box-shadow:0 10px 28px -18px #0ea5e98c}.auth-error{color:#dc2626;margin:0;font-size:.875rem}.auth-status{color:#059669;margin:0;font-size:.875rem;line-height:1.45}.auth-forgot{text-align:right;margin:-.25rem 0 0}.auth-banner{color:#0369a1;background:#0ea5e91a;border-radius:10px;margin:0;padding:.75rem .9rem;font-size:.85rem;line-height:1.45}.auth-banner code{font-size:.8em}.auth-switch{color:var(--muted);margin:0;font-size:.9rem}.linkish{color:var(--accent);font:inherit;cursor:pointer;text-underline-offset:3px;background:0 0;border:none;padding:0;font-weight:600;text-decoration:underline}.verify-shell{place-items:center;min-height:100svh;padding:2rem 1.25rem;display:grid;position:relative;overflow:hidden}.verify-atmosphere{z-index:0;background:radial-gradient(80% 55% at 12% 18%,#0ea5e933,#0000 55%),radial-gradient(65% 45% at 88% 82%,#6366f11f,#0000 50%),linear-gradient(160deg,#f8fafc 0%,#eef6ff 48%,#f5f5f5 100%);position:absolute;inset:0}.verify-panel{z-index:1;flex-direction:column;gap:.85rem;width:min(100%,440px);display:flex;position:relative}.verify-panel h1{font-family:var(--font-display);letter-spacing:-.03em;color:var(--ink);margin:0;font-size:clamp(1.6rem,4vw,2rem)}.verify-lead{color:var(--muted);margin:0;font-size:.95rem;line-height:1.55}.verify-actions{flex-direction:column;gap:.5rem;margin-top:.5rem;display:flex}.verify-status{color:#059669;margin:0;font-size:.9rem}.verify-error{color:#dc2626;margin:0;font-size:.9rem}.admin{max-width:1100px;padding:clamp(1.25rem,3vw,2.5rem);animation:.35s both fade-up}.admin-header h1{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);margin:0;font-size:clamp(1.6rem,3vw,2rem)}.admin-header p{color:var(--muted);margin:.45rem 0 0;font-size:.92rem;line-height:1.5}.admin-banner{color:#6b4510;background:#b46e281f;border-radius:10px;margin:1rem 0 0;padding:.75rem .9rem;font-size:.85rem}.admin-error-top{margin:1rem 0 0}.admin-grid{grid-template-columns:minmax(240px,1fr) minmax(280px,1.2fr);gap:1rem;margin-top:1.5rem;display:grid}.admin-side{flex-direction:column;gap:1rem;min-width:0;display:flex}.admin-list,.admin-form,.admin-repos{border:1px solid var(--line);background:#ffffffb3;border-radius:14px;padding:1rem}.admin-list-head{justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:.75rem;display:flex}.admin-list-head h2,.admin-form h2,.admin-repos h2{color:var(--ink);margin:0;font-size:1.05rem}.admin-repo-chips{flex-wrap:wrap;gap:.4rem;max-height:none;margin:0;padding:0;list-style:none;display:flex;overflow:visible}.admin-repo-groups{flex-direction:column;gap:.85rem;max-height:14rem;display:flex;overflow:auto}.admin-repo-group{flex-direction:column;gap:.4rem;display:flex}.admin-repo-label{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0;font-size:.7rem;font-weight:700}.admin-repo-chips button{font:inherit;border:1px solid var(--line);color:var(--ink-soft);cursor:pointer;background:#fff;border-radius:999px;padding:.35rem .6rem;font-size:.8rem}.admin-repo-chips button.linked{color:#5a6570;background:#e8ecf0;border-color:#1320281a}.admin-repo-chips button:hover:not(:disabled){color:var(--ink);border-color:#0ea5e959}.admin-repo-chips button.linked:hover:not(:disabled){color:var(--ink-soft);background:#dde3e8}.admin-repo-chips button.active,.admin-repo-chips button.linked.active{background:var(--ink);border-color:var(--ink);color:#f7f5f1}.admin-repo-chips button:disabled{opacity:.45;cursor:not-allowed}.admin-list input[type=search]{width:100%;font:inherit;border:1px solid var(--line);border-radius:8px;outline:none;margin-bottom:.75rem;padding:.65rem .75rem}.admin-list ul{flex-direction:column;gap:.3rem;max-height:28rem;margin:0;padding:0;list-style:none;display:flex;overflow:auto}.admin-list button{text-align:left;cursor:pointer;width:100%;font:inherit;background:0 0;border:1px solid #0000;border-radius:8px;flex-direction:column;gap:.15rem;padding:.6rem .7rem;display:flex}.admin-list button:hover{background:#0ea5e90f}.admin-list button.active{background:#0ea5e91a;border-color:#0ea5e940}.admin-email{color:var(--ink);font-size:.9rem;font-weight:600}.admin-meta{color:var(--muted);font-size:.78rem}.admin-form{flex-direction:column;gap:.85rem;display:flex}.admin-form h2{color:var(--ink);margin:0;font-size:1.05rem}.admin-form label{color:var(--ink-soft);flex-direction:column;gap:.35rem;font-size:.8rem;font-weight:600;display:flex}.admin-form input{font:inherit;border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:10px;outline:none;padding:.7rem .85rem;font-weight:400}.admin-form input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.admin-actions{flex-wrap:wrap;gap:.5rem;display:flex}.admin-error{color:#9b2c2c;margin:0;font-size:.875rem}.admin-ok{color:#1a6b45;margin:0;font-size:.875rem}.admin-summary{color:var(--ink-soft);margin:0;font-size:.92rem;line-height:1.45}.admin-muted{color:var(--muted);margin:0;font-size:.9rem}@media (width<=860px){.admin-grid{grid-template-columns:1fr}}.sub-plan{border:1px solid var(--line);background:#ffffffb3;border-radius:14px;flex-direction:column;gap:1rem;margin-top:0;padding:1.5rem;display:flex}.sub-plan-top{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.sub-plan-top h2{color:var(--ink);margin:0;font-size:1.15rem}.sub-price{font-family:var(--font-display);color:var(--accent);margin:0;font-size:1.35rem}.sub-billing{background:#1717170d;border-radius:12px;grid-template-columns:1fr 1fr;gap:.4rem;padding:.3rem;display:grid}.sub-billing button{font:inherit;color:var(--ink-soft);cursor:pointer;background:0 0;border:none;border-radius:9px;padding:.55rem .75rem;font-size:.9rem;font-weight:600;transition:background .15s,color .15s,box-shadow .15s}.sub-billing button:hover{color:var(--ink)}.sub-billing button.active{color:var(--ink);background:#fff;box-shadow:0 4px 14px -8px #17171759}.sub-plan ul{color:var(--ink-soft);margin:0;padding-left:1.1rem;line-height:1.6}.sub-status{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.pill{letter-spacing:.04em;text-transform:uppercase;border-radius:999px;align-items:center;padding:.25rem .65rem;font-size:.75rem;font-weight:700;display:inline-flex}.pill.ok{color:#1a6b45;background:#1e78501f}.pill.off{color:#555;background:#7878781f}.sub-period{color:var(--muted);font-size:.875rem}.sub-error{color:#9b2c2c;margin:0;font-size:.9rem}.sub-note{color:var(--muted);margin:0;font-size:.875rem;line-height:1.5}.settings{flex-direction:column;gap:1.75rem;max-width:720px;padding:clamp(1.25rem,3vw,2.5rem);animation:.35s both fade-up;display:flex}.settings-header h1{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);margin:0;font-size:clamp(1.6rem,3vw,2rem)}.settings-header p{color:var(--muted);margin:.4rem 0 0}.settings-block h2{color:var(--ink);margin:0;font-size:1.1rem}.settings-lead{color:var(--muted);margin:.35rem 0 1rem;font-size:.92rem;line-height:1.5}.settings-danger{background:#9b2c2c0a;border:1px solid #9b2c2c47;border-radius:14px;padding:1.25rem 1.35rem}.settings-delete{flex-direction:column;gap:.85rem;display:flex}.settings-delete label{color:var(--ink-soft);flex-direction:column;gap:.35rem;font-size:.8rem;font-weight:600;display:flex}.settings-delete input{font:inherit;border:1px solid var(--line);color:var(--ink);background:#ffffffd9;border-radius:10px;outline:none;padding:.7rem .85rem;font-weight:400}.settings-delete input:focus{border-color:#9b2c2c;box-shadow:0 0 0 3px #9b2c2c26}.settings-form{flex-direction:column;gap:.85rem;display:flex}.settings-form label{color:var(--ink-soft);flex-direction:column;gap:.35rem;font-size:.8rem;font-weight:600;display:flex}.settings-form input{font:inherit;border:1px solid var(--line);color:var(--ink);background:#ffffffd9;border-radius:10px;outline:none;padding:.7rem .85rem;font-weight:400}.settings-form input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.settings-form .btn-primary,.settings-form .btn-danger{align-self:flex-start}.settings-ok{color:#1a6b45;margin:0;font-size:.875rem}.settings-hint{color:var(--muted);margin:0;font-size:.85rem}.settings-error{color:#9b2c2c;margin:0;font-size:.875rem}.btn-danger{color:#fdf8f7;background:#9b2c2c;align-self:flex-start}.sub-plan{margin-top:0}.cfg{border:1px solid var(--line);background:#ffffffbf;border-radius:12px;flex-direction:column;flex-shrink:0;gap:1rem;width:min(100%,340px);min-height:0;padding:1rem;display:flex;position:relative}.cfg-head h2{color:var(--ink);margin:0;font-size:1.05rem}.cfg-lang{background:#1717170d;border-radius:12px;grid-template-columns:1fr 1fr;gap:.4rem;margin-top:.65rem;padding:.3rem;display:grid}.cfg-lang button{font:inherit;color:var(--ink-soft);cursor:pointer;background:0 0;border:none;border-radius:9px;padding:.5rem .75rem;font-size:.85rem;font-weight:600;transition:background .15s,color .15s,box-shadow .15s}.cfg-lang button:hover{color:var(--ink)}.cfg-lang button.active{color:var(--ink);background:#fff;box-shadow:0 4px 14px -8px #17171759}.cfg-head p{color:var(--muted);margin:.35rem 0 0;font-size:.82rem;line-height:1.4}.cfg-head .cfg-warn{color:#6b4510;background:#b46e281a;border-radius:8px;margin-top:.55rem;padding:.55rem .65rem;font-size:.78rem;font-weight:500}.cfg-list{flex-direction:column;flex:1;gap:.35rem;min-height:120px;display:flex;overflow:auto}.cfg-group{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:.6rem 0 .15rem;font-size:.7rem;font-weight:700}.cfg-empty{color:var(--muted);margin:0;font-size:.85rem}.cfg-list>button{text-align:left;cursor:pointer;font:inherit;color:var(--ink);background:0 0;border:1px solid #0000;border-radius:8px;flex-direction:column;gap:.15rem;padding:.55rem .65rem;transition:background .12s,border-color .12s;display:flex}.cfg-list>button:hover{background:#0ea5e90f}.cfg-list>button.active{background:#0ea5e91a;border-color:#0ea5e940}.cfg-preview{color:var(--ink-soft);text-overflow:ellipsis;white-space:nowrap;font-size:.85rem;overflow:hidden}.cfg-list>button.active .cfg-preview{color:var(--ink);font-weight:500}.cfg-editor label{color:var(--ink-soft);flex-direction:column;gap:.4rem;font-size:.8rem;font-weight:600;display:flex}.cfg-editor textarea,.cfg-editor input{font:inherit;border:1px solid var(--line);color:var(--ink);resize:vertical;background:#fff;border-radius:8px;outline:none;padding:.65rem .75rem;font-weight:400}.cfg-editor textarea:focus,.cfg-editor input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.cfg-actions{flex-direction:column;gap:.4rem;display:flex}.cfg-confirm{z-index:10;border-radius:12px;justify-content:center;align-items:center;padding:1rem;display:flex;position:absolute;inset:0}.cfg-confirm-backdrop{border-radius:inherit;background:#17171759;position:absolute;inset:0}.cfg-confirm-panel{z-index:1;border:1px solid var(--line);background:#fff;border-radius:10px;width:min(100%,280px);padding:1.1rem;position:relative;box-shadow:0 16px 40px -24px #17171773}.cfg-confirm-panel h3{color:var(--ink);margin:0;font-size:.95rem}.cfg-confirm-panel p{color:var(--muted);margin:.55rem 0 0;font-size:.82rem;line-height:1.45}.cfg-confirm-actions{justify-content:flex-end;gap:.45rem;margin-top:1rem;display:flex}.cfg-confirm-actions .btn{padding:.55rem .85rem;font-size:.85rem}.canvas{border:1px solid var(--line);background:#d5dde3;border-radius:12px;flex:auto;min-width:0;height:100%;min-height:480px;position:relative;overflow:hidden}.canvas-frame{background:#fff;border:0;width:100%;height:100%;display:block;position:absolute;inset:0}.canvas-loading,.canvas-error{text-align:center;color:var(--muted);z-index:1;background:#e8eef2eb;place-content:center;place-items:center;padding:1.5rem;font-size:.95rem;display:grid;position:absolute;inset:0}.canvas-loading{pointer-events:none;animation:1.4s ease-in-out infinite pulse}.canvas-error{color:var(--ink-soft);gap:.75rem;line-height:1.5}.canvas-error a{color:var(--accent);font-weight:600}@keyframes pulse{0%,to{opacity:.7}50%{opacity:1}}.editor{flex-direction:column;flex:1;gap:.85rem;min-height:0;padding:1rem 1.25rem 1.25rem;animation:.35s both fade-up;display:flex;position:relative;overflow:hidden}.editor-bar{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:.75rem;display:flex}.editor-bar h1{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);margin:0;font-size:1.45rem}.editor-bar p{color:var(--muted);margin:.2rem 0 0;font-size:.85rem}.editor-bar a{color:var(--accent);text-decoration:none}.editor-bar a:hover{text-underline-offset:3px;text-decoration:underline}.editor-meta{flex-wrap:wrap;gap:.5rem;display:flex}.editor-status{border-radius:999px;padding:.3rem .65rem;font-size:.75rem;font-weight:600}.editor-status.ok{color:#1a6b45;background:#1e78501f}.editor-status.err{color:#9b2c2c;background:#9b2c2c1f}.editor-status.dirty{color:#6b4510;background:#b46e2824}.editor-status.warn{color:#444;background:#78787824}.editor-loading{color:var(--muted);margin:0}.editor-empty{max-width:560px;padding:clamp(1.25rem,3vw,2.5rem)}.editor-empty h1{font-family:var(--font-display);color:var(--ink);margin:0;font-size:clamp(1.6rem,3vw,2rem)}.editor-empty p{color:var(--muted);margin:.75rem 0 0;line-height:1.55}.editor-workspace{flex:1;gap:.85rem;min-height:0;display:flex}@media (width<=960px){.dash-main{height:auto;max-height:none;overflow:visible}.editor{overflow:visible}.editor-workspace{flex-direction:column;min-height:70svh}.editor-workspace .canvas{min-height:55svh}}.editor-sub-modal{z-index:20;justify-content:center;align-items:center;padding:1.25rem;display:flex;position:absolute;inset:0}.editor-sub-backdrop{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#17171766;position:absolute;inset:0}.editor-sub-panel{z-index:1;border:1px solid var(--line);background:#fff;border-radius:14px;flex-direction:column;gap:.75rem;width:min(100%,420px);padding:1.35rem 1.25rem;display:flex;position:relative;box-shadow:0 22px 50px -28px #1717178c}.editor-sub-panel h2{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);margin:0;font-size:1.25rem}.editor-sub-panel p{color:var(--muted);margin:0;font-size:.92rem;line-height:1.5}.editor-sub-actions{flex-wrap:wrap;gap:.5rem;margin-top:.35rem;display:flex}.editor-sub-actions .btn{flex:1;min-width:140px}.dash{background:radial-gradient(60% 40% at 100% 0,#0ea5e914,#0000 50%),linear-gradient(#f8fafc 0%,#f5f5f5 100%);grid-template-columns:248px 1fr;min-height:100svh;display:grid}.dash-side{border-right:1px solid var(--line);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#ffffffc7;flex-direction:column;gap:1.5rem;padding:1.35rem 1.1rem;display:flex}.dash-brand{flex-direction:column;gap:.55rem;padding:0 .25rem;display:flex}.dash-user{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;padding-left:.15rem;font-size:.8rem;overflow:hidden}.dash-nav{flex-direction:column;flex:1;gap:.35rem;display:flex}.dash-nav button{text-align:left;font:inherit;color:var(--ink-soft);cursor:pointer;background:0 0;border:none;border-radius:10px;padding:.7rem .85rem;font-size:.92rem;font-weight:500;transition:background .15s,color .15s}.dash-nav button:hover{color:var(--ink);background:#0ea5e914}.dash-nav button.active{background:var(--ink);color:#fafafa}.dash-logout{margin-top:auto}.dash-main{flex-direction:column;min-width:0;height:100svh;max-height:100svh;display:flex;overflow:hidden}@media (width<=860px){.dash{grid-template-rows:auto 1fr;grid-template-columns:1fr}.dash-side{border-right:none;border-bottom:1px solid var(--line);gap:1rem}.dash-nav{flex-direction:row;flex:0}.dash-nav button{text-align:center;flex:1}.dash-logout{margin-top:0}.dash-main{height:auto;max-height:none;overflow:visible}}.boot{text-align:center;background:radial-gradient(ellipse 70% 50% at 15% 10%, #0ea5e929, transparent 55%), radial-gradient(ellipse 60% 45% at 90% 85%, #6366f11a, transparent 50%), linear-gradient(160deg, var(--bg-grad-a), var(--bg-grad-b) 45%, var(--bg-grad-c));min-height:100svh;color:var(--muted);place-content:center;justify-items:center;gap:.75rem;display:grid}.boot-mark{margin:0;animation:.4s both fade-up}.btn{font:inherit;cursor:pointer;border:1px solid #0000;border-radius:10px;padding:.75rem 1rem;font-weight:600;transition:transform .12s,background .15s,opacity .15s,box-shadow .2s}.btn:disabled{opacity:.55;cursor:not-allowed}.btn:not(:disabled):active{transform:translateY(1px)}.btn-primary{background:var(--accent);color:#fff;box-shadow:0 8px 20px -12px #0ea5e9b3}.btn-primary:not(:disabled):hover{background:var(--accent-strong);box-shadow:0 14px 28px -14px #0ea5e9bf}.btn-ghost{border-color:var(--line);color:var(--ink-soft);background:0 0}.btn-ghost:not(:disabled):hover{color:var(--ink);background:#fffc}.btn-google{border:1px solid var(--line);width:100%;color:var(--ink);background:#ffffffe6;justify-content:center;align-items:center;gap:.65rem;display:inline-flex}.btn-google:not(:disabled):hover{background:#fff;box-shadow:0 8px 20px -16px #17171759}.btn-danger{color:#fff;background:#dc2626}.btn-danger:not(:disabled):hover{background:#b91c1c}
