-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstyles.css
More file actions
188 lines (170 loc) · 17.1 KB
/
styles.css
File metadata and controls
188 lines (170 loc) · 17.1 KB
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
/* ═══════════════ Design Tokens ═══════════════════════════════════════════ */
:root {
--accent-blue: #0A84FF; --accent-green: #30D158; --accent-orange: #FF9F0A;
--accent-red: #FF453A; --accent-purple: #BF5AF2; --accent-yellow: #FFD60A;
--glass-bg: rgba(28,28,30,.85); --glass-bg-hover: rgba(44,44,46,.9);
--glass-border: rgba(255,255,255,.1); --glass-border-hover: rgba(255,255,255,.18);
--text-primary: rgba(255,255,255,.95); --text-secondary: rgba(255,255,255,.60);
--text-tertiary: rgba(255,255,255,.40);
--shadow-menu: 0 20px 60px rgba(0,0,0,.5), 0 0 1px rgba(0,0,0,.4);
--radius-sm: 6px; --radius-md: 10px; --radius-lg: 14px;
}
/* ═══════════════ Reset ══════════════════════════════════════════════════ */
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','SF Pro Text',sans-serif;
font-size:13px;color:var(--text-primary);background:transparent;overflow:hidden;-webkit-font-smoothing:antialiased}
/* ═══════════════ App ═══════════════════════════════════════════════════ */
.app{background:var(--glass-bg);backdrop-filter:blur(30px) saturate(180%);-webkit-backdrop-filter:blur(30px) saturate(180%);
border-radius:var(--radius-lg);border:1px solid var(--glass-border);box-shadow:var(--shadow-menu);
width:100%;height:100vh;display:flex;flex-direction:column;animation:fadeIn .2s ease}
@keyframes fadeIn{from{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}
/* ═══════════════ Title Bar ════════════════════════════════════════════ */
.titlebar{-webkit-app-region:drag;height:40px;display:flex;align-items:center;justify-content:space-between;padding:0 14px;border-bottom:1px solid var(--glass-border);flex-shrink:0}
.title{font-weight:600;font-size:13px;letter-spacing:-.01em}
.titlebar-buttons{display:flex;gap:4px;-webkit-app-region:no-drag}
.titlebar-button{width:28px;height:28px;border-radius:var(--radius-sm);background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:all .15s ease}
.titlebar-button:hover{background:var(--glass-bg-hover);color:var(--text-primary)}
/* ═══════════════ Content ═════════════════════════════════════════════ */
.content{flex:1;display:flex;flex-direction:column;padding:14px;overflow-y:auto;overflow-x:hidden}
/* ═══════════════ Provider Badge ══════════════════════════════════════ */
.provider-badge{font-size:11px;font-weight:500;padding:5px 10px;border-radius:var(--radius-sm);text-align:center;margin-bottom:10px;flex-shrink:0;transition:all .2s ease}
.provider-badge.ready{background:rgba(48,209,88,.15);color:var(--accent-green)}
.provider-badge.not-ready{background:rgba(255,159,10,.15);color:var(--accent-orange)}
/* ═══════════════ Drop Zone ══════════════════════════════════════════ */
.drop-zone{flex:1;display:flex;align-items:center;justify-content:center;border:2px dashed var(--glass-border);border-radius:var(--radius-md);background:rgba(255,255,255,.02);transition:all .2s ease;cursor:pointer;min-height:160px}
.drop-zone:hover{border-color:var(--accent-blue);background:rgba(10,132,255,.05)}
.drop-zone.drag-over{border-color:var(--accent-blue);background:rgba(10,132,255,.1);border-style:solid;transform:scale(1.02)}
.drop-zone-content{text-align:center;color:var(--text-secondary)}
.drop-icon{margin-bottom:10px;color:var(--text-tertiary);transition:all .2s ease}
.drop-zone:hover .drop-icon{color:var(--accent-blue);transform:translateY(-2px)}
.drop-text{font-size:14px;font-weight:500;margin-bottom:4px;color:var(--text-primary)}
.drop-subtext{font-size:11px;color:var(--text-tertiary)}
/* ═══════════════ Paste Button ═══════════════════════════════════════ */
.paste-btn{margin-top:8px;flex-shrink:0}
/* ═══════════════ Preview ════════════════════════════════════════════ */
.preview-area{flex:1;display:flex;flex-direction:column;gap:8px}
.preview-image-container{position:relative;flex:1;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.2);border-radius:var(--radius-md);overflow:hidden}
.preview-image{max-width:100%;max-height:100%;object-fit:contain;border-radius:var(--radius-sm)}
.remove-btn{position:absolute;top:8px;right:8px;width:24px;height:24px;border-radius:50%;background:rgba(0,0,0,.6);border:none;color:var(--text-primary);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s ease;backdrop-filter:blur(10px)}
.remove-btn:hover{background:var(--accent-red);transform:scale(1.1)}
.preview-info{display:flex;justify-content:space-between;font-size:11px;color:var(--text-tertiary);padding:0 4px}
/* ═══════════════ Buttons ════════════════════════════════════════════ */
.actions{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.btn{display:flex;align-items:center;justify-content:center;gap:7px;padding:10px 14px;border-radius:var(--radius-md);border:none;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease;font-family:inherit}
.btn-sm{padding:7px 12px;font-size:12px}
.btn-icon{padding:7px;width:34px;flex-shrink:0}
.btn-primary{background:var(--accent-blue);color:#fff}
.btn-primary:hover:not(:disabled){background:#0066d6;transform:translateY(-1px)}
.btn-primary:active:not(:disabled){transform:translateY(0)}
.btn-primary:disabled{background:rgba(10,132,255,.3);cursor:not-allowed}
.btn-secondary{background:rgba(255,255,255,.1);color:var(--text-primary);border:1px solid var(--glass-border)}
.btn-secondary:hover{background:rgba(255,255,255,.15);border-color:var(--glass-border-hover)}
.btn-ghost{background:transparent;color:var(--text-secondary);border:1px solid rgba(255,255,255,.08)}
.btn-ghost:hover{background:rgba(255,255,255,.06);color:var(--text-primary)}
.btn-danger{background:rgba(255,69,58,.12);color:#ff8b84;border:1px solid rgba(255,69,58,.22)}
.btn-danger:hover{background:rgba(255,69,58,.18);border-color:rgba(255,69,58,.32)}
.spinner{animation:spin 1s linear infinite}
@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
/* ═══════════════ Status ═════════════════════════════════════════════ */
.status{padding:8px 12px;border-radius:var(--radius-sm);font-size:12px;margin-top:8px;text-align:center}
.status.error{background:rgba(255,69,58,.2);color:#ff6b6b}
.status.success{background:rgba(48,209,88,.2);color:#69db7c}
/* ═══════════════ Settings ═══════════════════════════════════════════ */
.settings-modal{position:absolute;inset:40px 0 0 0;display:flex;justify-content:flex-end;align-items:flex-start;padding:12px;opacity:0;pointer-events:none;transition:opacity .16s ease;z-index:20}
.settings-modal.is-open{opacity:1;pointer-events:auto}
.settings-scrim{position:absolute;inset:0;background:rgba(8,10,14,.45)}
.settings-panel{position:relative;z-index:1;width:min(320px,100%);max-height:100%;display:flex;flex-direction:column;background:#16181b;border:1px solid rgba(255,255,255,.08);border-radius:14px;box-shadow:0 20px 40px rgba(0,0,0,.42);overflow:hidden}
.settings-panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px;border-bottom:1px solid rgba(255,255,255,.08);background:#1b1e22}
.settings-header-copy{display:flex;flex-direction:column;gap:3px;min-width:0}
.settings-kicker{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.38)}
.settings-subtitle{font-size:10px;line-height:1.4;color:rgba(255,255,255,.58);max-width:30ch}
.settings-close-btn,.back-btn{width:28px;height:28px;border-radius:8px;background:#23262b;border:1px solid rgba(255,255,255,.07);cursor:pointer;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.62);transition:all .15s ease;flex-shrink:0}
.settings-close-btn:hover,.back-btn:hover{background:#2a2d33;color:var(--text-primary)}
.settings-content{display:flex;flex-direction:column;gap:10px;padding:12px;overflow:auto}
.settings-card{display:flex;flex-direction:column;gap:10px;padding:10px;border-radius:12px;background:#1f2227;border:1px solid rgba(255,255,255,.06)}
.settings-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.settings-card-kicker{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.36);margin-bottom:4px}
.settings-card-title{font-size:12px;font-weight:600;letter-spacing:-.01em;color:var(--text-primary)}
.settings-card-summary{margin-top:3px;font-size:10px;line-height:1.35;color:rgba(255,255,255,.66)}
.settings-section-toggle{width:24px;height:24px;border:none;border-radius:8px;background:#23262b;border:1px solid rgba(255,255,255,.07);cursor:pointer;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.62);transition:all .15s ease;flex-shrink:0}
.settings-section-toggle:hover{background:#2a2d33;color:var(--text-primary)}
.settings-section-toggle.is-open .settings-section-chevron{transform:rotate(180deg)}
.settings-section-chevron{transition:transform .15s ease}
.settings-section-body{display:flex;flex-direction:column;min-height:0;opacity:1;max-height:1200px;overflow:hidden;transition:opacity .15s ease,max-height .18s ease,margin-top .15s ease}
.settings-section-body.is-collapsed{opacity:0;max-height:0;pointer-events:none;margin-top:-4px}
.setting-group{display:flex;flex-direction:column;gap:6px}
.setting-stack{display:flex;flex-direction:column;gap:8px}
.settings-inline-actions{display:flex;justify-content:flex-start}
.settings-subcard{display:flex;flex-direction:column;gap:8px;padding:8px;border-radius:10px;background:#181a1e;border:1px solid rgba(255,255,255,.05)}
.setting-label{font-size:10px;font-weight:600;letter-spacing:.02em;color:rgba(255,255,255,.82)}
.setting-row{display:flex;align-items:center;gap:8px}
.setting-row-surface{padding:8px 10px;border-radius:10px;background:#181a1e;border:1px solid rgba(255,255,255,.06)}
.setting-row-toggle{justify-content:space-between;align-items:flex-start}
.setting-toggle-copy{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}
.setting-action-row{display:flex;align-items:stretch;gap:6px}
.setting-action-row .input{flex:1}
.setting-action-row .btn{align-self:stretch}
.setting-value{flex:1;font-size:11px;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.35}
.color-lock-grid{display:flex;flex-direction:column;gap:8px}
.color-lock-row{display:grid;grid-template-columns:84px 18px 34px 1fr;align-items:center;gap:8px}
.color-lock-label{font-size:10px;font-weight:600;color:rgba(255,255,255,.82)}
.color-lock-check{width:14px;height:14px}
.color-lock-picker{width:34px;height:28px;padding:0;border:none;border-radius:8px;background:transparent;cursor:pointer}
.color-lock-picker::-webkit-color-swatch-wrapper{padding:0}
.color-lock-picker::-webkit-color-swatch{border:none;border-radius:8px}
.color-lock-hex{padding:7px 9px;font-size:10px;font-family:'SF Mono','Menlo','Monaco',monospace;text-transform:uppercase}
/* Provider grid */
.provider-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.toggle-btn{display:flex;align-items:center;justify-content:center;gap:5px;padding:9px 8px;border-radius:10px;border:1px solid rgba(255,255,255,.06);background:#23262b;color:rgba(255,255,255,.7);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .15s ease}
.toggle-btn:hover{background:#292d33;color:var(--text-primary)}
.toggle-btn.active{background:#f3f5f7;border-color:#f3f5f7;color:#101217}
.provider-section{animation:fadeIn .15s ease}
/* Inputs */
.input{background:#121417;border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:9px 10px;color:var(--text-primary);font-size:11px;outline:none;transition:all .15s ease;font-family:inherit;width:100%}
.input:focus{border-color:rgba(10,132,255,.7);background:#101215;box-shadow:0 0 0 3px rgba(10,132,255,.14)}
.input::placeholder{color:rgba(255,255,255,.28)}
.select{-webkit-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='rgba(255,255,255,0.38)'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px;cursor:pointer}
.select option{background:#1c1c1e;color:#fff}
.hint{font-weight:400;color:rgba(255,255,255,.42)}
.hint-block{font-size:9px;color:rgba(255,255,255,.46);line-height:1.25}
.hint-block b{color:rgba(255,255,255,.7);font-weight:500}
/* Status badges */
.api-status,.ollama-status{display:flex;align-items:center;gap:8px;padding:9px 10px;background:#181a1e;border:1px solid rgba(255,255,255,.06);border-radius:10px}
.status-dot{width:8px;height:8px;border-radius:50%;background:var(--accent-red);flex-shrink:0}
.api-status.connected .status-dot,.ollama-status.connected .status-dot{background:var(--accent-green)}
.ollama-status.loading .status-dot{background:var(--accent-orange);animation:pulse 1s ease infinite}
.ollama-status.err .status-dot{background:var(--accent-red)}
.status-text{font-size:10px;color:rgba(255,255,255,.7);line-height:1.35}
.settings-panel-footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 14px;border-top:1px solid rgba(255,255,255,.08);background:#1b1e22}
.switch{position:relative;display:inline-flex;align-items:center;cursor:pointer;flex-shrink:0}
.switch input{position:absolute;opacity:0;pointer-events:none}
.switch-ui{width:36px;height:22px;border-radius:999px;background:#2a2d33;border:1px solid rgba(255,255,255,.08);position:relative;transition:all .15s ease}
.switch-ui::after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#f3f5f7;transition:transform .15s ease}
.switch input:checked + .switch-ui{background:rgba(10,132,255,.85);border-color:rgba(10,132,255,.85)}
.switch input:checked + .switch-ui::after{transform:translateX(14px)}
@media (max-width: 420px){
.settings-modal{padding:10px}
.settings-panel{width:100%}
.provider-grid{grid-template-columns:1fr}
.setting-action-row{flex-direction:column}
.setting-action-row .btn{width:100%}
.setting-row-surface{align-items:flex-start;flex-direction:column}
.setting-row-toggle{flex-direction:row}
.color-lock-row{grid-template-columns:1fr 18px 34px 96px}
}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
/* ═══════════════ Result ═════════════════════════════════════════════ */
.result-tabs{display:flex;gap:4px;margin-bottom:10px;flex-shrink:0}
.result-tab{flex:1;display:flex;align-items:center;justify-content:center;gap:5px;padding:7px 0;border-radius:var(--radius-sm);border:1px solid var(--glass-border);background:transparent;color:var(--text-tertiary);font-size:11px;font-weight:500;font-family:inherit;cursor:pointer;transition:all .15s ease}
.result-tab:hover{background:rgba(255,255,255,.05);color:var(--text-secondary)}
.result-tab.active{background:rgba(10,132,255,.15);border-color:var(--accent-blue);color:var(--accent-blue)}
.result-content{flex:1;display:flex;flex-direction:column;margin-bottom:10px;overflow:hidden}
.result-textarea{flex:1;background:rgba(0,0,0,.3);border:1px solid var(--glass-border);border-radius:var(--radius-md);padding:12px;color:var(--text-primary);font-size:11px;font-family:'SF Mono','Menlo','Monaco',monospace;line-height:1.5;resize:none;outline:none;white-space:pre-wrap;word-wrap:break-word}
.result-textarea:focus{border-color:var(--accent-blue)}
.result-actions{display:flex;gap:6px;flex-wrap:wrap}
.result-actions .btn{flex:1;min-width:70px}
/* ═══════════════ Scrollbar ═════════════════════════════════════════ */
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:rgba(255,255,255,.2);border-radius:3px}
::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.3)}