File size: 10,506 Bytes
902f43a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/* ╔══════════════════════════════════════════════════════╗
   β•‘  WIZARD-VIBE β€” Liquid Glass Design System           β•‘
   β•‘  Minimalist. Experimental. Cool.                     β•‘
   β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• */

:root {
  --glass-bg: rgba(255,255,255,.03);
  --glass-border: rgba(255,255,255,.06);
  --purple: #8B5CF6; --cyan: #06B6D4; --green: #10B981; --gold: #F59E0B; --red: #EF4444;
  --text-primary: #e0e0ff; --text-secondary: #9090b0; --text-muted: #606080;
  --bg-deep: #0a0a1a; --bg-mid: #1a0a2e;
  --radius-lg: 20px; --radius-md: 12px; --radius-sm: 8px;
  --font-mono: 'SF Mono','Fira Code','JetBrains Mono',monospace;
  --font-sans: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  --transition-fast: 150ms cubic-bezier(.4,0,.2,1);
  --transition-smooth: 300ms cubic-bezier(.4,0,.2,1);
}

*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%;overflow:hidden}
body{font-family:var(--font-sans);background:linear-gradient(135deg,var(--bg-deep) 0%,var(--bg-mid) 50%,#0a1a2e 100%);color:var(--text-primary);-webkit-font-smoothing:antialiased}
::selection{background:rgba(139,92,246,.5);color:#fff}

.app-shell{display:flex;flex-direction:column;height:100vh;padding:1rem;gap:.75rem;max-width:1600px;margin:0 auto}

/* ─── Logo ───────────────── */
.logo-container{display:flex;align-items:center;gap:.75rem;padding:.25rem 0}
.wizard-hat{width:48px;height:48px;filter:drop-shadow(0 0 20px rgba(139,92,246,.6));transition:filter var(--transition-smooth)}
.wizard-hat.stable{filter:drop-shadow(0 0 24px rgba(16,185,129,.8))!important}
.wizard-hat.error{filter:drop-shadow(0 0 24px rgba(239,68,68,.8))!important}
.wizard-hat.published{filter:drop-shadow(0 0 30px rgba(245,158,11,.9))!important}
.wizard-hat.building{animation:hat-pulse 1.5s ease-in-out infinite}
@keyframes hat-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
#status-ring{transition:stroke var(--transition-smooth),opacity var(--transition-smooth)}
#status-ring.stable{stroke:var(--green);opacity:.8}
#status-ring.error{stroke:var(--red);opacity:.8}
#status-ring.published{stroke:var(--gold);opacity:1}
.logo-label{font-size:1.1rem;font-weight:700;letter-spacing:.15em;background:linear-gradient(135deg,var(--purple),var(--cyan),var(--green));-webkit-background-clip:text;-webkit-text-fill-color:transparent}

/* ─── Input ──────────────── */
.prompt-section{flex-shrink:0}
.input-glass{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:1rem;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}
.input-glass:focus-within{border-color:rgba(139,92,246,.4);box-shadow:0 0 30px rgba(139,92,246,.1)}
#prompt-input{width:100%;background:transparent;border:none;color:var(--text-primary);font-family:var(--font-sans);font-size:.95rem;line-height:1.6;resize:none;outline:none}
#prompt-input::placeholder{color:var(--text-muted)}
.input-actions{display:flex;align-items:center;gap:.75rem;margin-top:.75rem}

/* ─── Buttons ────────────── */
.btn-primary{display:flex;align-items:center;gap:.5rem;padding:.625rem 1.5rem;background:linear-gradient(135deg,var(--purple),var(--cyan));border:none;border-radius:var(--radius-md);color:#fff;font-family:var(--font-sans);font-size:.9rem;font-weight:600;cursor:pointer;transition:transform var(--transition-fast),box-shadow var(--transition-fast),opacity var(--transition-fast)}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 20px rgba(139,92,246,.4)}
.btn-primary:active{transform:translateY(0)}
.btn-primary:disabled{opacity:.5;cursor:not-allowed;transform:none}
.btn-publish{display:flex;align-items:center;gap:.5rem;padding:.75rem 2rem;background:linear-gradient(135deg,var(--green),var(--cyan));border:none;border-radius:var(--radius-md);color:#fff;font-family:var(--font-sans);font-size:.95rem;font-weight:700;cursor:pointer;transition:all var(--transition-smooth)}
.btn-publish:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 30px rgba(16,185,129,.4)}
.btn-publish:disabled{background:rgba(255,255,255,.05);color:var(--text-muted);cursor:not-allowed;transform:none;box-shadow:none}
.btn-publish.gold{background:linear-gradient(135deg,var(--gold),#FCD34D)!important;box-shadow:0 0 30px rgba(245,158,11,.5);animation:gold-pulse 2s ease-in-out infinite}
@keyframes gold-pulse{0%,100%{box-shadow:0 0 20px rgba(245,158,11,.3)}50%{box-shadow:0 0 40px rgba(245,158,11,.6)}}

/* ─── Badges ─────────────── */
.model-badges{display:flex;gap:.5rem;flex-wrap:wrap}
.model-badge{font-size:.7rem;padding:.2rem .5rem;border-radius:20px;background:rgba(139,92,246,.15);color:var(--purple);border:1px solid rgba(139,92,246,.2);white-space:nowrap}
.model-badge.vision{background:rgba(6,182,212,.15);color:var(--cyan);border-color:rgba(6,182,212,.2)}
.model-badge.logic{background:rgba(245,158,11,.15);color:var(--gold);border-color:rgba(245,158,11,.2)}
.model-badge.code{background:rgba(16,185,129,.15);color:var(--green);border-color:rgba(16,185,129,.2)}

/* ─── Status ─────────────── */
.status-bar{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:var(--glass-bg);backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-sm);font-size:.8rem;flex-shrink:0}
.status-indicator{width:8px;height:8px;border-radius:50%;background:var(--text-muted);transition:background var(--transition-fast)}
.status-indicator.building{background:var(--purple);animation:blink 1s infinite}
.status-indicator.streaming{background:var(--cyan);animation:blink .5s infinite}
.status-indicator.stable{background:var(--green)}
.status-indicator.error{background:var(--red)}
.status-indicator.published{background:var(--gold)}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.3}}
.status-text{color:var(--text-secondary);font-weight:500}
.status-phase{color:var(--text-muted);margin-left:auto}

/* ─── Main Split ─────────── */
.main-split{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;flex:1;min-height:0}
@media(max-width:900px){.main-split{grid-template-columns:1fr;grid-template-rows:1fr 1fr}}

/* ─── Panels ─────────────── */
.panel{display:flex;flex-direction:column;background:var(--glass-bg);backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-lg);overflow:hidden}
.panel-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;border-bottom:1px solid var(--glass-border);flex-shrink:0}
.panel-title{font-size:.8rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em}
.panel-action{background:none;border:1px solid var(--glass-border);border-radius:var(--radius-sm);padding:.25rem .5rem;color:var(--text-secondary);cursor:pointer;font-size:.85rem;transition:background var(--transition-fast)}
.panel-action:hover{background:var(--glass-bg)}
.sandbox-badge{font-size:.85rem}

/* ─── Code View ──────────── */
.code-view{flex:1;overflow:auto;padding:1rem;margin:0;font-family:var(--font-mono);font-size:.8rem;line-height:1.6;color:var(--text-secondary);white-space:pre-wrap;word-break:break-all}
.code-view .placeholder{color:var(--text-muted);font-style:italic}

/* ─── Preview ────────────── */
.preview-container{flex:1;position:relative;background:#fff}
.preview-iframe{width:100%;height:100%;border:none;display:block}
.preview-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(10,10,26,.8);backdrop-filter:blur(4px);transition:opacity var(--transition-smooth);pointer-events:none}
.preview-overlay.hidden{opacity:0}
.overlay-content{text-align:center;color:var(--text-secondary)}
.wizard-loader{width:40px;height:40px;margin:0 auto 1rem;border:2px solid var(--glass-border);border-top-color:var(--purple);border-radius:50%;animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* ─── Publish ────────────── */
.publish-section{flex-shrink:0}
.publish-gate{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:var(--glass-bg);backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-lg)}
.publish-gate.unlocked{border-color:rgba(16,185,129,.3);box-shadow:0 0 20px rgba(16,185,129,.1)}
.gate-status{display:flex;align-items:center;gap:.5rem}
.gate-icon{font-size:1.1rem}
.gate-text{font-size:.85rem;color:var(--text-secondary)}
.publish-gate.unlocked .gate-text{color:var(--green)}

.result-card{display:flex;align-items:flex-start;gap:1rem;padding:1.25rem;border-radius:var(--radius-lg);margin-top:.5rem}
.glass-card{background:rgba(16,185,129,.08);border:1px solid rgba(16,185,129,.2);backdrop-filter:blur(20px)}
.result-icon{font-size:2rem;flex-shrink:0}
.result-body h3{font-size:1.1rem;margin-bottom:.25rem}
.result-body p{color:var(--text-secondary);font-size:.85rem;margin-bottom:.75rem;word-break:break-all}
.result-links{display:flex;gap:1rem}
.result-links a{color:var(--cyan);text-decoration:none;font-size:.85rem;font-weight:500;transition:color var(--transition-fast)}
.result-links a:hover{color:var(--purple)}

/* ─── Toast ──────────────── */
.toast-container{position:fixed;bottom:1rem;right:1rem;display:flex;flex-direction:column;gap:.5rem;z-index:1000}
.toast{padding:.75rem 1.25rem;border-radius:var(--radius-md);background:var(--glass-bg);backdrop-filter:blur(20px);border:1px solid var(--glass-border);color:var(--text-primary);font-size:.85rem;animation:toast-in .3s ease-out;max-width:360px}
.toast.error{border-color:rgba(239,68,68,.3)}
.toast.success{border-color:rgba(16,185,129,.3)}
@keyframes toast-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
.code-chunk-new{animation:fade-in .15s ease-out}
@keyframes fade-in{from{opacity:0}to{opacity:1}}