:root{--bg:#0b0c10;--bg-elev:#13151a;--bg-elev-2:#1a1d24;--bg-hover:#20242d;--border:#262a34;--border-strong:#343a48;--text:#e8eaf0;--text-dim:#a4aab9;--text-faint:#767d8f;--accent:#6558f5;--accent-hover:#7668f7;--accent-press:#574ae0;--accent-text:#a9a2ff;--danger:#f0616d;--danger-text:#ff8f98;--success:#46c288;--radius:10px;--radius-sm:7px;--shadow-lg:0 24px 64px rgba(0,0,0,0.55),0 4px 16px rgba(0,0,0,0.35);--shadow-md:0 10px 30px rgba(0,0,0,0.4);--ease:cubic-bezier(0.2,0.8,0.25,1);--font:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;color-scheme:dark}*{box-sizing:border-box}body,html{margin:0;padding:0;min-height:100%}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,p{margin:0}a{color:var(--accent-text);text-decoration:none}a:hover{text-decoration:underline}code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.92em;background:var(--bg-elev-2);border:1px solid var(--border);border-radius:5px;padding:1px 6px}:focus-visible{outline:2px solid var(--accent-text);outline-offset:2px;border-radius:4px}::selection{background:rgba(101,88,245,.4)}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.button{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:36px;padding:0 16px;border-radius:var(--radius-sm);border:1px solid transparent;background:var(--accent);color:#ffffff;font:inherit;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .16s var(--ease),border-color .16s var(--ease),transform .16s var(--ease),opacity .16s var(--ease)}.button:hover:not(:disabled){background:var(--accent-hover)}.button:active:not(:disabled){background:var(--accent-press);transform:translateY(1px)}.button:disabled{opacity:.55;cursor:not-allowed}.button--ghost{background:transparent;border-color:var(--border-strong);color:var(--text);font-weight:500}.button--ghost:hover:not(:disabled){background:var(--bg-hover);border-color:var(--border-strong)}.button--ghost:active:not(:disabled){background:var(--bg-elev-2)}.button--danger{background:var(--danger);color:#14060a}.button--danger:hover:not(:disabled){background:#f4757f}.button--danger:active:not(:disabled){background:#db4a56}.button--large{height:42px;padding:0 22px;font-size:15px}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-dim);cursor:pointer;transition:background .16s var(--ease),color .16s var(--ease)}.icon-button:hover{background:var(--bg-hover);color:var(--text)}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.field label{font-size:13px;font-weight:600;color:var(--text-dim)}.field input[type=email],.field input[type=password],.field input[type=text]{height:40px;padding:0 12px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--bg-elev-2);color:var(--text);font:inherit;transition:border-color .16s var(--ease),box-shadow .16s var(--ease)}.field input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(101,88,245,.28)}.field input::placeholder{color:var(--text-faint)}.field__hint{font-size:12px;color:var(--text-faint)}.spinner{width:16px;height:16px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#ffffff;animation:spin .7s linear infinite;flex:none}@keyframes spin{to{transform:rotate(1turn)}}.auth-shell{min-height:100vh;display:grid;place-items:center;padding:32px 16px;background:radial-gradient(900px 500px at 15% -10%,rgba(101,88,245,.16),transparent 60%),radial-gradient(800px 500px at 95% 110%,rgba(70,194,136,.08),transparent 60%),var(--bg)}.auth-card{width:100%;max-width:400px;background:var(--bg-elev);border:1px solid var(--border);border-radius:14px;padding:36px 32px 28px;box-shadow:var(--shadow-lg);animation:rise-in .32s var(--ease)}@keyframes rise-in{0%{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}.auth-card__brand{display:flex;align-items:center;gap:10px;color:var(--accent-text);font-weight:700;font-size:15px;margin-bottom:22px}.auth-card h1{font-size:22px;font-weight:700;letter-spacing:-.02em;margin-bottom:6px}.auth-card__sub{color:var(--text-dim);margin-bottom:24px}.auth-card .button{width:100%;margin-top:4px}.auth-card__footer{margin-top:20px;padding-top:18px;border-top:1px solid var(--border);text-align:center;color:var(--text-dim);font-size:13px}.auth-link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0;color:var(--accent,#7c5cff);font:inherit;font-size:13px;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.auth-link:hover{opacity:.85}.auth-alert{border-radius:var(--radius-sm);border:1px solid rgba(240,97,109,.4);background:rgba(240,97,109,.1);color:var(--danger-text)}.auth-alert,.auth-notice{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;margin-bottom:16px;font-size:13px;animation:rise-in .22s var(--ease)}.auth-notice{border-radius:var(--radius-sm);border:1px solid rgba(70,194,136,.4);background:rgba(70,194,136,.1);color:#7ddcae}.pw-rules{list-style:none;margin:2px 0 0;padding:0;display:grid;grid-template-columns:1fr 1fr;grid-gap:3px 12px;gap:3px 12px;font-size:12px;color:var(--text-faint)}.pw-rules li{display:flex;align-items:center;gap:6px;transition:color .2s var(--ease)}.pw-rules li:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}.pw-rules li.ok{color:var(--success)}.code-input{letter-spacing:.4em;font-size:18px!important;text-align:center;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.link-button{background:none;border:none;padding:0;font:inherit;color:var(--accent-text);cursor:pointer}.link-button:hover:not(:disabled){text-decoration:underline}.link-button:disabled{color:var(--text-faint);cursor:default}.topnav{position:-webkit-sticky;position:sticky;top:0;z-index:20;justify-content:space-between;height:56px;padding:0 24px;background:rgba(11,12,16,.82);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}.topnav,.topnav__brand{display:flex;align-items:center}.topnav__brand{gap:9px;color:var(--text);font-weight:700;font-size:15px;letter-spacing:-.01em}.topnav__brand:hover{text-decoration:none}.topnav__brand .brand-mark{color:var(--accent-text)}.topnav__brand-sub{color:var(--text-faint);font-weight:500}.topnav__right{display:flex;align-items:center;gap:14px}.topnav__email{color:var(--text-dim);font-size:13px}.projects-page{max-width:1120px;margin:0 auto;padding:32px 24px 64px}.projects-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:26px}.projects-head h1{font-size:24px;font-weight:700;letter-spacing:-.02em}.projects-head p{color:var(--text-dim);margin-top:4px}.projects-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));grid-gap:18px;gap:18px}.project-card{position:relative;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elev);overflow:hidden;transition:border-color .18s var(--ease),transform .18s var(--ease),box-shadow .18s var(--ease);animation:rise-in .28s var(--ease) backwards}.project-card:focus-within,.project-card:hover{border-color:var(--border-strong);transform:translateY(-2px);box-shadow:var(--shadow-md)}.project-card__thumb{aspect-ratio:16/9;position:relative;display:grid;place-items:center}.project-card__thumb .brand-mark{color:rgba(255,255,255,.55)}.project-card__meta{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 10px 12px 14px}.project-card__name{font-weight:600;font-size:14px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-card__time{display:block;font-size:12px;color:var(--text-faint);margin-top:1px}.project-card__link{position:absolute;inset:0;z-index:1;border-radius:inherit}.project-card__menu-anchor{position:relative;z-index:2;flex:none}.menu{position:absolute;right:0;top:calc(100% + 6px);z-index:30;min-width:160px;padding:5px;background:var(--bg-elev-2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);box-shadow:var(--shadow-lg);animation:menu-in .16s var(--ease)}@keyframes menu-in{0%{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:none}}.menu button{display:block;width:100%;text-align:left;padding:8px 10px;border:none;border-radius:5px;background:none;color:var(--text);font:inherit;cursor:pointer;transition:background .12s var(--ease)}.menu button:focus-visible,.menu button:hover{background:var(--bg-hover);outline:none}.menu button.menu__danger{color:var(--danger-text)}.menu-overlay{position:fixed;inset:0;z-index:25}.skeleton{position:relative;overflow:hidden;background:var(--bg-elev-2);border-radius:var(--radius-sm)}.skeleton:after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.06),transparent);animation:shimmer 1.4s infinite}@keyframes shimmer{to{transform:translateX(100%)}}.project-card--skeleton{pointer-events:none}.project-card--skeleton .project-card__thumb{border-radius:0}.skeleton-line{height:12px}.empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;padding:72px 24px;border:1px dashed var(--border-strong);border-radius:14px;animation:rise-in .32s var(--ease)}.empty-state__art{color:var(--accent-text);margin-bottom:20px;opacity:.9}.empty-state h2{font-size:19px;font-weight:700;letter-spacing:-.01em;margin-bottom:6px}.empty-state p{color:var(--text-dim);max-width:380px;margin-bottom:22px}.error-state{display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;padding:56px 24px;border:1px solid rgba(240,97,109,.35);background:rgba(240,97,109,.06);border-radius:14px;color:var(--text-dim)}.projects-more{display:flex;justify-content:center;margin-top:26px}.aspect-grid{display:grid;grid-template-columns:repeat(5,1fr);grid-gap:8px;gap:8px}.aspect-option{display:flex;flex-direction:column;align-items:center;gap:7px;padding:12px 4px 10px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-elev-2);color:var(--text-dim);font:inherit;font-size:12px;cursor:pointer;transition:border-color .16s var(--ease),background .16s var(--ease),color .16s var(--ease)}.aspect-option:hover{border-color:var(--text-faint)}.aspect-option[aria-pressed=true]{border-color:var(--accent);background:rgba(101,88,245,.14);color:var(--text);box-shadow:0 0 0 1px var(--accent)}.aspect-option__shape{height:34px;display:grid;place-items:center}.aspect-option__shape>span{display:block;border:1.6px solid;border-radius:3px}.aspect-option__shape>span.dashed{border-style:dashed}.aspect-option__hint{font-size:10.5px;color:var(--text-faint)}.dialog-backdrop{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:24px;background:rgba(4,5,8,.66);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);animation:fade-in .2s var(--ease)}.dialog-backdrop--closing{animation:fade-out .2s var(--ease) forwards}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}.dialog{width:100%;max-width:440px;background:var(--bg-elev);border:1px solid var(--border-strong);border-radius:14px;box-shadow:var(--shadow-lg);animation:dialog-in .22s var(--ease)}.dialog--closing{animation:dialog-out .2s var(--ease) forwards}@keyframes dialog-in{0%{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:none}}@keyframes dialog-out{0%{opacity:1;transform:none}to{opacity:0;transform:translateY(8px) scale(.98)}}.dialog__header{display:flex;align-items:center;justify-content:space-between;padding:18px 20px 0}.dialog__header h2{font-size:16px;font-weight:700;letter-spacing:-.01em}.dialog__body{padding:16px 20px 4px;color:var(--text-dim)}.dialog__body .field{margin-bottom:14px}.dialog__footer{display:flex;justify-content:flex-end;gap:10px;padding:14px 20px 18px}.toast-stack{position:fixed;bottom:20px;right:20px;z-index:100;flex-direction:column;width:min(360px,calc(100vw - 40px));pointer-events:none}.toast,.toast-stack{display:flex;gap:10px}.toast{align-items:flex-start;padding:12px 12px 12px 14px;border-radius:var(--radius);border:1px solid var(--border-strong);background:var(--bg-elev-2);box-shadow:var(--shadow-lg);pointer-events:auto;animation:toast-in .24s var(--ease)}.toast--leaving{animation:toast-out .24s var(--ease) forwards}@keyframes toast-in{0%{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}@keyframes toast-out{0%{opacity:1;transform:none}to{opacity:0;transform:translateY(6px) scale(.98)}}.toast__icon{flex:none;display:grid;place-items:center;width:24px;height:24px;border-radius:50%;margin-top:1px}.toast--success .toast__icon{color:var(--success);background:rgba(70,194,136,.14)}.toast--error .toast__icon{color:var(--danger-text);background:rgba(240,97,109,.14)}.toast--info .toast__icon{color:var(--accent-text);background:rgba(101,88,245,.16)}.toast__body{flex:1 1;min-width:0}.toast__title{font-weight:600;font-size:13.5px}.toast__message{color:var(--text-dim);font-size:12.5px;margin-top:2px;overflow-wrap:break-word}.toast__close{flex:none;display:grid;place-items:center;width:24px;height:24px;border:none;border-radius:6px;background:none;color:var(--text-faint);cursor:pointer;transition:background .14s var(--ease),color .14s var(--ease)}.toast__close:hover{background:var(--bg-hover);color:var(--text)}.envgate{min-height:100vh;display:grid;place-items:center;padding:24px}.envgate__card{max-width:460px;padding:32px;background:var(--bg-elev);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-lg);animation:rise-in .3s var(--ease)}.envgate__badge{display:grid;place-items:center;width:44px;height:44px;border-radius:12px;background:rgba(240,176,82,.14);color:#f0b052;margin-bottom:18px}.envgate__card h1{font-size:19px;font-weight:700;margin-bottom:8px}.envgate__card p{color:var(--text-dim);margin-bottom:14px}.envgate__list{margin:0 0 14px;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}.envgate__hint{font-size:12.5px;color:var(--text-faint)}.viewport-guard{flex:1 1;min-height:0;display:grid;place-items:center;padding:24px}.viewport-guard__inner{max-width:420px;text-align:center;display:flex;flex-direction:column;align-items:center;animation:rise-in .3s var(--ease)}.viewport-guard__art{color:var(--accent-text);margin-bottom:18px}.viewport-guard__inner h1{font-size:20px;font-weight:700;margin-bottom:8px}.viewport-guard__inner p{color:var(--text-dim)}.viewport-guard__size{margin-top:12px;font-size:12.5px;color:var(--text-faint);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.fullscreen-loading{min-height:100vh;display:grid;place-items:center}.fullscreen-loading__inner{display:flex;flex-direction:column;align-items:center;gap:14px;color:var(--text-dim)}.fullscreen-loading__mark{color:var(--accent-text);animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.55;transform:scale(.97)}50%{opacity:1;transform:scale(1)}}.editor-shell{display:flex;flex-direction:column;height:100vh;height:100dvh;overflow:hidden}.editor-topstrip{flex:none;display:flex;align-items:center;justify-content:space-between;height:44px;padding:0 12px 0 8px;background:var(--bg-elev);border-bottom:1px solid var(--border)}.editor-topstrip__back{display:inline-flex;align-items:center;gap:7px;padding:6px 10px;border-radius:var(--radius-sm);color:var(--text-dim);font-weight:500;transition:background .14s var(--ease),color .14s var(--ease)}.editor-topstrip__back:hover{background:var(--bg-hover);color:var(--text);text-decoration:none}.editor-topstrip__right{display:flex;align-items:center;gap:10px;color:var(--text-faint);font-size:12.5px}.editor-stage{flex:1 1;min-height:0;position:relative;display:flex;flex-direction:column}.editor-skeleton,.editor-stage>*{flex:1 1;min-height:0}.editor-skeleton{display:grid;grid-template-columns:300px 1fr 280px;grid-template-rows:1fr 220px;grid-gap:10px;gap:10px;padding:10px;animation:fade-in .24s var(--ease)}.editor-skeleton__panel,.editor-skeleton__timeline{border-radius:var(--radius)}.editor-skeleton__timeline{grid-column:1/-1}