.btn{display:inline-flex;align-items:center;gap:var(--space-2);border:none;border-radius:var(--radius-md);font-family:var(--font-sans);font-weight:var(--weight-semibold);cursor:pointer;text-decoration:none;white-space:nowrap;transition:background .12s,opacity .12s,box-shadow .12s}.btn:disabled{opacity:.55;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.btn--sm{font-size:var(--text-sm);padding:5px 12px}.btn--md{font-size:var(--text-base);padding:10px 20px}.btn--primary{background:#238636;color:#fff}.btn--primary:hover:not(:disabled){background:#2ea043}.btn--secondary{background:var(--color-overlay);color:var(--color-text);border:1px solid var(--color-border)}.btn--secondary:hover:not(:disabled){background:var(--color-border)}.btn--danger{background:#da3633;color:#fff}.btn--danger:hover:not(:disabled){background:#f85149}.btn--ghost{background:none;border:1px solid var(--color-border);color:var(--color-text-muted);font-size:var(--text-sm);padding:4px 10px;border-radius:var(--radius-sm)}.btn--ghost:hover:not(:disabled){background:var(--color-overlay);color:var(--color-text)}.badge{display:inline-block;padding:2px 10px;border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:var(--weight-semibold)}.badge--creating{background:var(--badge-creating-bg);color:var(--badge-creating-text)}.badge--running{background:var(--badge-running-bg);color:var(--badge-running-text)}.badge--failed{background:var(--badge-failed-bg);color:var(--badge-failed-text)}.badge--deleted,.badge--repo_deleted{background:var(--badge-deleted-bg);color:var(--badge-deleted-text)}.error-message{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);background:#3d0014;border:1px solid #6d1020;border-radius:var(--radius-md);color:#ffa8b0;font-size:var(--text-sm);margin-top:var(--space-3)}.error-message__text{flex:1}.error-message__dismiss{background:none;border:none;color:inherit;cursor:pointer;opacity:.7;padding:0;line-height:1;flex-shrink:0}.error-message__dismiss:hover{opacity:1}.progress-stages{display:flex;gap:var(--space-4);align-items:center;padding:var(--space-2) 0}.progress-stage{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);color:var(--color-text-muted)}.progress-stage__dot{width:8px;height:8px;border-radius:50%;background:var(--color-border);flex-shrink:0}.progress-stage--active{color:var(--badge-creating-text)}.progress-stage--active .progress-stage__dot{background:var(--badge-creating-text);animation:pulse 1.2s ease-in-out infinite}.progress-stage--done{color:var(--color-success)}.progress-stage--done .progress-stage__dot{background:var(--color-success)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.tabbar{display:flex;gap:var(--space-2);margin-bottom:var(--space-4)}.tabbar__tab{display:flex;flex-direction:column;align-items:flex-start;background:none;border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text-muted);cursor:pointer;padding:var(--space-2) var(--space-4);transition:background .12s,border-color .12s}.tabbar__tab:hover:not(.tabbar__tab--active){background:var(--color-surface)}.tabbar__tab--active{background:var(--color-overlay);border-color:var(--color-accent);color:var(--color-text)}.tabbar__label{font-size:var(--text-sm);font-weight:var(--weight-semibold);line-height:1.2}.tabbar__desc{font-size:.72rem;color:var(--color-text-muted);margin-top:2px;line-height:1.2}.tabbar__tab--active .tabbar__desc{color:#8b949e}.style-guide{max-width:860px;margin:0 auto;padding:var(--space-8) var(--space-6) 80px}.sg-header{margin-bottom:var(--space-10);border-bottom:1px solid var(--color-border);padding-bottom:var(--space-6)}.sg-header h1{font-size:1.6rem;font-weight:var(--weight-bold);margin-bottom:var(--space-2)}.sg-header p{color:var(--color-text-muted)}.sg-content{display:flex;flex-direction:column;gap:var(--space-10)}.sg-section__title{font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.07em;margin-bottom:var(--space-4);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border-subtle)}.sg-section__body{display:flex;flex-direction:column;gap:var(--space-4)}.sg-row{display:flex;align-items:center;gap:var(--space-4)}.sg-row__label{font-size:var(--text-sm);color:var(--color-text-muted);width:100px;flex-shrink:0}.sg-row__content{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}.sg-colors{display:flex;flex-wrap:wrap;gap:var(--space-4)}.sg-color-swatch{display:flex;flex-direction:column;gap:var(--space-1);width:120px}.sg-color-swatch__block{height:40px;border-radius:var(--radius-sm)}.sg-color-swatch__token{font-size:.68rem;font-family:var(--font-mono);color:var(--color-text-muted)}.sg-color-swatch__label{font-size:var(--text-xs);color:var(--color-text-muted)}.sg-type-stack{display:flex;flex-direction:column;gap:var(--space-4)}.sg-type-stack>div{display:flex;align-items:baseline;gap:var(--space-4)}.sg-type-label{font-size:.68rem;font-family:var(--font-mono);color:var(--color-text-muted);width:200px;flex-shrink:0}.login-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:var(--space-5);text-align:center;padding:0 var(--space-6)}.login-screen__logo{width:48px;height:48px;border-radius:var(--radius-md);background:linear-gradient(135deg,#238636,#2ea043);display:flex;align-items:center;justify-content:center;font-size:1.5rem;margin-bottom:var(--space-2);box-shadow:0 0 0 1px #23863666,0 4px 16px #23863640}.login-screen h1{font-size:var(--text-xl);font-weight:var(--weight-bold);letter-spacing:-.02em}.login-screen__tagline{color:var(--color-text-muted);font-size:var(--text-base);max-width:280px}.login-screen__hint{font-size:var(--text-sm);color:var(--color-text-muted)}.not-invited-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:var(--space-4);text-align:center;padding:0 var(--space-6)}.not-invited-screen__logo{width:48px;height:48px;border-radius:var(--radius-md);background:linear-gradient(135deg,#238636,#2ea043);display:flex;align-items:center;justify-content:center;font-size:1.5rem;margin-bottom:var(--space-2);box-shadow:0 0 0 1px #23863666,0 4px 16px #23863640}.not-invited-screen h1{font-size:var(--text-xl);font-weight:var(--weight-bold);letter-spacing:-.02em}.not-invited-screen p{color:var(--color-text-muted)}.not-invited-screen__divider{width:40px;height:1px;background:var(--color-border)}.not-invited-screen__hint{font-size:var(--text-sm)}.deploy-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-6);margin-bottom:var(--space-8)}.deploy-card__heading{font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-4)}.template-picker{display:flex;gap:var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-4)}.template-card{flex:1;min-width:140px;background:var(--color-bg);border:2px solid var(--color-border);border-radius:var(--radius-md);padding:14px var(--space-4);cursor:pointer;text-align:left;transition:border-color .15s}.template-card:hover{border-color:var(--color-accent)}.template-card--selected{border-color:var(--color-accent);background:#0d1f38}.template-card h4{font-size:var(--text-base);font-weight:var(--weight-semibold);margin-bottom:var(--space-1)}.template-card p{font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.4}.repo-fields{display:flex;gap:var(--space-3);margin-bottom:var(--space-3)}.repo-fields input{flex:1}.deploy-form-row{display:flex;gap:var(--space-3);align-items:flex-end;margin-top:var(--space-3)}.deploy-form-row input{flex:1}.port-field{display:flex;flex-direction:column;gap:3px;width:130px;flex-shrink:0}.port-hint{font-size:.7rem;color:var(--color-text-muted);padding-left:2px}input[type=text],input[type=url],input[type=number]{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:10px 14px;color:var(--color-text);font-size:var(--text-base);font-family:var(--font-sans);width:100%;box-sizing:border-box}input:focus{outline:none;border-color:var(--color-accent)}.project-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-5) var(--space-6);display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4);transition:border-color .4s,box-shadow .15s}.project-card:hover{box-shadow:0 2px 8px #00000040}.project-card--flash{border-color:var(--color-success);box-shadow:0 0 0 1px var(--color-success),0 2px 12px #3fb95033}.project-card__info{flex:1;min-width:0}.project-card__name{font-size:1rem;font-weight:var(--weight-semibold);margin-bottom:var(--space-1);display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.project-card__meta{font-size:var(--text-sm);color:var(--color-text-muted);display:flex;gap:var(--space-3);flex-wrap:wrap}.project-card__meta a{color:var(--color-accent);text-decoration:none}.project-card__meta a:hover{text-decoration:underline}.project-card__actions{display:flex;gap:var(--space-2);flex-shrink:0}.project-card__extras{margin-top:var(--space-3);display:flex;flex-direction:column;gap:var(--space-2)}.webhook-panel{display:flex;align-items:center;gap:var(--space-2);margin-top:var(--space-2);flex-wrap:wrap}.webhook-url{font-size:var(--text-xs);font-family:var(--font-mono);background:var(--color-bg);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);padding:6px 10px;color:var(--color-text-muted);word-break:break-all;flex:1}.env-panel{margin-top:var(--space-2);display:flex;flex-direction:column;gap:var(--space-2)}.env-list{display:flex;flex-direction:column;gap:var(--space-1)}.env-empty{font-size:var(--text-sm);color:var(--color-text-muted)}.env-row{display:flex;align-items:center;gap:var(--space-2);background:var(--color-bg);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);padding:5px 10px;font-size:var(--text-sm);font-family:var(--font-mono)}.env-row__key{color:#79c0ff;flex-shrink:0}.env-row__val{color:var(--color-text-muted);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.env-row__del{margin-left:auto;flex-shrink:0}.env-form{display:flex;gap:var(--space-2);flex-wrap:wrap}.env-key{font-family:var(--font-mono);font-size:var(--text-sm);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);padding:5px 8px;width:140px}.env-val{font-family:var(--font-mono);font-size:var(--text-sm);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);padding:5px 8px;flex:1;min-width:120px}.env-key:focus,.env-val:focus{outline:none;border-color:var(--color-accent)}.build-log-panel{margin-top:var(--space-3);border-top:1px solid var(--color-border-subtle);padding-top:var(--space-3);width:100%}.build-log-panel summary{font-size:var(--text-sm);color:var(--color-text-muted);cursor:pointer;-webkit-user-select:none;user-select:none}.build-log-output{margin-top:var(--space-2);background:var(--color-bg);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);padding:var(--space-3);font-size:var(--text-xs);font-family:var(--font-mono);color:var(--color-text-muted);max-height:200px;overflow-y:auto;white-space:pre-wrap;word-break:break-all}.projects-list{display:flex;flex-direction:column;gap:var(--space-3)}.empty{color:var(--color-text-muted);text-align:center;padding:48px 0}.app-banner{display:flex;align-items:center;justify-content:center;gap:var(--space-3);padding:10px var(--space-6);font-size:var(--text-sm);font-weight:var(--weight-semibold)}.app-banner--warn{background:#2d1a00;color:var(--color-warning);border-bottom:1px solid #4a3000}.app-banner--info{background:#0a2140;color:var(--color-accent);border-bottom:1px solid #1a3a5c}.banner-btn{background:none;border:1px solid currentColor;border-radius:var(--radius-sm);color:inherit;font-size:var(--text-xs);font-weight:var(--weight-semibold);padding:3px 10px;cursor:pointer;white-space:nowrap}.banner-btn:hover{opacity:.8}.app-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4) var(--space-8);border-bottom:1px solid var(--color-border-subtle);background:var(--color-surface);position:sticky;top:0;z-index:10}.app-header__brand{font-weight:var(--weight-bold);font-size:var(--text-base);color:var(--color-text);display:flex;align-items:center;gap:var(--space-2)}.app-header__brand:before{content:"⚡";font-size:1rem}.app-header__user{display:flex;align-items:center;gap:10px;font-size:var(--text-sm);color:var(--color-text-muted)}.app-header__user img{border-radius:50%;border:1px solid var(--color-border)}.app-main{max-width:900px;margin:var(--space-10) auto;padding:0 var(--space-6)}.projects-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-4)}.projects-header h2{font-size:var(--text-lg);font-weight:var(--weight-semibold)}:root{--color-bg: #0d1117;--color-surface: #161b22;--color-overlay: #21262d;--color-border: #30363d;--color-border-subtle: #21262d;--color-text: #e6edf3;--color-text-muted: #8b949e;--color-accent: #58a6ff;--color-success: #3fb950;--color-warning: #e3b341;--color-danger: #f85149;--badge-creating-bg: #4a3000;--badge-creating-text: #e3b341;--badge-running-bg: #0a3622;--badge-running-text: #3fb950;--badge-failed-bg: #3d0014;--badge-failed-text: #f85149;--badge-deleted-bg: #21262d;--badge-deleted-text: #8b949e;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-full: 20px;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "SFMono-Regular", Consolas, monospace;--text-xs: .75rem;--text-sm: .8rem;--text-base: .95rem;--text-lg: 1.1rem;--text-xl: 2rem;--weight-normal: 400;--weight-semibold: 600;--weight-bold: 700}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--font-sans);background:var(--color-bg);color:var(--color-text);min-height:100vh;-webkit-font-smoothing:antialiased}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}a{color:var(--color-accent);text-decoration:none}a:hover{text-decoration:underline}#loading-screen{display:flex;align-items:center;justify-content:center;height:100vh;color:var(--color-text-muted);font-size:var(--text-base)}
