openfree commited on
Commit
55741fe
·
verified ·
1 Parent(s): dc94023

Update app.css

Browse files
Files changed (1) hide show
  1. app.css +172 -421
app.css CHANGED
@@ -1,38 +1,25 @@
1
  /* Modern color scheme */
2
  :root {
3
- /* 주요 브랜드 컬러 */
4
- --primary: #0066cc; /* 메인 브랜드 컬러 */
5
- --secondary: #3385ff; /* 밝은 액센트 */
6
- --accent: #66a3ff; /* 부드러운 포인트 컬러 */
7
- --tertiary: #5d2e8c; /* 포인트 컬러 */
8
-
9
- /* 배경 컬러 */
10
- --background: #f7f9fc; /* 메인 배경 */
11
- --surface: #ffffff; /* 카드 배경 */
12
-
13
- /* 텍스트 컬러 */
14
- --text-primary: #2c3e50; /* 주요 텍스트 */
15
- --text-secondary: #546e7a; /* 부가 텍스트 */
16
- --text-tertiary: #78909c; /* 덜 중요한 텍스트 */
17
-
18
- /* 기능성 컬러 */
19
- --success: #34c759; /* 성공/확인 */
20
- --warning: #ff9500; /* 경고/주의 */
21
- --error: #ff3b30; /* 오류/삭제 */
22
-
23
- /* 중립 컬러 */
24
  --neutral-100: #f8f9fa;
25
  --neutral-200: #e9ecef;
26
  --neutral-300: #dee2e6;
27
  --neutral-400: #ced4da;
28
-
29
- /* 그림자 및 효과 */
30
  --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.05);
31
  --shadow-md: 0 4px 8px rgba(0, 0, 0, 0.08);
32
  --shadow-lg: 0 8px 16px rgba(0, 0, 0, 0.1);
33
  --shadow-xl: 0 12px 24px rgba(0, 0, 0, 0.12);
34
-
35
- /* 둥근 모서리 */
36
  --radius-sm: 6px;
37
  --radius-md: 8px;
38
  --radius-lg: 12px;
@@ -46,14 +33,11 @@ body {
46
  line-height: 1.5;
47
  }
48
 
49
- /* 헤더 및 레이아웃 */
50
  .left_header {
51
  display: flex;
52
  flex-direction: column;
53
- justify-content: center;
54
  align-items: center;
55
  background: linear-gradient(135deg, var(--surface), var(--neutral-100));
56
- backdrop-filter: blur(10px);
57
  border-radius: 24px;
58
  padding: 2rem;
59
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
@@ -62,489 +46,256 @@ body {
62
  margin-bottom: 2rem;
63
  }
64
 
65
- .left_header img {
66
- width: 180px;
67
- margin-bottom: 1rem;
68
- border-radius: 12px;
69
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
70
- }
71
-
72
- .left_header h1 {
73
- margin: 0.5rem 0;
74
- font-weight: 600;
75
- color: var(--text-primary);
76
- }
77
-
78
- /* 패널 레이아웃 및 높이 */
79
- .equal-height-container {
80
- display: flex;
81
- min-height: 900px;
82
- }
83
-
84
- .equal-height-col {
85
- display: flex;
86
- flex-direction: column;
87
- height: 100%;
88
- }
89
 
90
- .fixed-height {
91
- height: 900px !important;
 
 
 
 
 
 
 
 
92
  }
93
-
94
- .fixed-content-height {
95
- height: 870px !important; /* 헤더(30px)를 제외한 높이 */
96
  }
 
97
 
98
- .fixed-input-height {
99
- height: 730px !important;
100
- max-height: 730px !important;
 
 
 
 
 
 
 
 
101
  }
102
-
103
- /* 좌측 패널 상단 헤더 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  .render_header {
105
- height: 30px;
106
- width: 100%;
107
- padding: 5px 16px;
108
  background: linear-gradient(to right, var(--neutral-100), var(--neutral-200));
109
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
110
- margin-top: 0;
111
  box-shadow: var(--shadow-sm);
112
  border-bottom: 1px solid var(--neutral-300);
113
  }
114
-
115
- .header_btn {
116
- display: inline-block;
117
- height: 10px;
118
- width: 10px;
119
- border-radius: 50%;
120
- margin-right: 4px;
121
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
122
- }
123
-
124
- .render_header > .header_btn:nth-child(1) {
125
- background-color: var(--error);
126
- }
127
-
128
- .render_header > .header_btn:nth-child(2) {
129
- background-color: var(--warning);
130
- }
131
-
132
- .render_header > .header_btn:nth-child(3) {
133
- background-color: var(--success);
134
- }
135
-
136
- .right_content {
137
- height: 870px; /* 헤더(30px)를 제외한 높이 */
138
- display: flex;
139
- flex-direction: column;
140
- justify-content: center;
141
- align-items: center;
142
- background: var(--surface);
143
- border-radius: 0 0 var(--radius-lg) var(--radius-lg);
144
  }
 
 
 
145
 
146
- /* 패널 스타일 */
 
147
  .right_panel {
148
- position: relative;
149
- height: 900px;
150
- display: flex;
151
- flex-direction: column;
152
- padding-top: 0;
153
  }
154
-
155
  .panel {
156
- display: flex;
157
- flex-direction: column;
158
- height: 900px;
159
- background: var(--surface);
160
- border-radius: var(--radius-lg);
161
- box-shadow: var(--shadow-lg);
162
- border: 1px solid var(--neutral-300);
163
  overflow: hidden;
164
  }
165
-
166
- .input-panel {
167
- display: flex;
168
- flex-direction: column;
169
- margin-top: 0;
170
- background: var(--surface);
171
- border-radius: var(--radius-lg);
172
- border: 1px solid var(--neutral-300);
173
- box-shadow: var(--shadow-lg);
174
- padding: 15px;
175
- height: 870px !important; /* 버튼 영역 제외한 높이 */
176
- max-height: 870px !important;
177
- overflow: hidden;
178
  }
179
-
180
  .html_content {
181
- flex: 1;
182
- height: 870px; /* 헤더(30px)를 제외한 높이 */
183
- border-radius: 0 0 var(--radius-lg) var(--radius-lg);
184
- overflow: hidden;
185
- box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05);
186
  background: var(--surface);
187
  }
188
 
189
- /* 버튼 영역 스타일 */
 
190
  .right-top-buttons {
191
  margin-bottom: 15px;
192
  background: linear-gradient(to right, var(--neutral-100), var(--neutral-200));
193
- padding: 15px;
194
- border-radius: var(--radius-lg);
195
  box-shadow: var(--shadow-md);
196
  border: 1px solid var(--neutral-300);
197
  }
198
-
199
- /* 상단 메뉴 버튼과 하단 액션 버튼 구분 */
200
  .setting-buttons {
201
- display: flex;
202
- gap: 8px;
203
- padding: 8px 0;
204
- justify-content: space-between;
205
  border-bottom: 2px dashed var(--neutral-300);
206
- padding-bottom: 12px;
207
  margin-bottom: 12px;
208
  }
209
-
210
  .setting-buttons .ant-btn {
211
  background: linear-gradient(135deg, var(--surface), var(--neutral-100));
212
  border: 1px solid var(--neutral-300);
213
- color: var(--text-primary);
214
- font-weight: 600;
215
- box-shadow: var(--shadow-sm);
216
- min-width: 100px;
217
- height: 38px;
218
- border-radius: var(--radius-lg);
219
  }
220
-
221
  .setting-buttons .ant-btn:hover {
222
  background: linear-gradient(135deg, var(--neutral-100), var(--neutral-200));
223
- transform: translateY(-2px);
224
- box-shadow: var(--shadow-md);
225
  }
226
-
227
- .action-buttons {
228
- margin-top: 5px;
229
- margin-bottom: 8px;
230
- display: flex;
231
- flex-wrap: wrap;
232
- gap: 8px;
233
- }
234
-
235
  .action-buttons .ant-btn {
236
- min-width: 80px;
237
- height: 40px;
238
- font-weight: 600;
239
- border-radius: var(--radius-md);
240
- box-shadow: var(--shadow-sm);
241
- text-transform: uppercase;
242
- letter-spacing: 0.5px;
243
- font-size: 0.85em;
244
  }
245
-
246
  .action-buttons .ant-btn-primary {
247
- background: linear-gradient(to right, var(--primary), var(--secondary));
248
- border: none;
249
- color: white;
250
  }
251
-
252
  .action-buttons .ant-btn-primary:hover {
253
  background: linear-gradient(to right, var(--secondary), var(--primary));
254
  transform: translateY(-2px);
255
- box-shadow: 0 4px 12px rgba(0, 102, 204, 0.3);
256
  }
257
-
258
  .action-buttons .ant-btn-default {
259
- background: var(--surface);
260
- border: 1px solid var(--neutral-300);
261
- color: var(--text-primary);
262
  }
263
-
264
  .action-buttons .ant-btn-default:hover {
265
- border-color: var(--secondary);
266
- color: var(--secondary);
267
- transform: translateY(-2px);
268
- box-shadow: var(--shadow-md);
269
  }
270
-
271
- /* 각 버튼 스타일 커스텀 - 클래스 기반 */
272
  .send-btn {
273
- background: linear-gradient(to right, var(--primary), var(--secondary)) !important;
274
- border: none !important;
275
- color: white !important;
276
  }
277
-
278
  .boost-btn {
279
- background: linear-gradient(to right, var(--tertiary), #9966cc) !important;
280
- border: none !important;
281
- color: white !important;
282
  }
283
-
284
  .execute-btn {
285
- background: linear-gradient(to right, var(--success), #66d9a8) !important;
286
- border: none !important;
287
- color: white !important;
288
  }
289
-
290
  .deploy-btn {
291
- background: linear-gradient(to right, var(--warning), #ffcc66) !important;
292
- border: none !important;
293
- color: white !important;
294
  }
295
-
296
  .clear-btn {
297
- background: linear-gradient(to right, #f44336, #ff7961) !important;
298
- border: none !important;
299
- color: white !important;
300
  }
301
 
302
- /* 메뉴 버튼 추가 스타일 */
303
- .code-btn, .history-btn, .template-btn {
304
- transition: all 0.3s ease;
305
- }
306
-
307
- .code-btn:hover, .history-btn:hover, .template-btn:hover {
308
- transform: translateY(-2px);
309
- box-shadow: var(--shadow-md);
310
  }
311
-
312
- /* 텍스트 영역 스타일링 */
313
  #component-0 textarea,
314
  .gradio-container textarea,
315
  .ant-input-textarea-large textarea {
316
- height: 730px !important;
317
- min-height: 300px !important;
318
- resize: vertical !important;
319
- border: 2px solid var(--neutral-200);
320
- border-radius: var(--radius-lg);
321
- transition: all 0.3s;
322
- background: var(--surface);
323
- color: var(--text-primary);
324
- padding: 1rem;
325
- flex-grow: 1;
326
- box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.03);
327
  }
328
-
329
  #component-0 textarea:focus,
330
  .gradio-container textarea:focus,
331
  .ant-input-textarea-large textarea:focus {
332
- border-color: var(--accent);
333
- box-shadow: 0 0 0 3px rgba(102, 163, 255, 0.2);
334
- }
335
-
336
- /* 우측 박스 텍스트 폰트 크기 20% 감소 */
337
- .input-panel textarea,
338
- .input-panel .ant-input-textarea-large textarea,
339
- .input-panel .help-text {
340
- font-size: 0.8em; /* 기본 폰트 크기에서 20% 감소 */
341
- }
342
-
343
- .ant-input-textarea {
344
- display: flex;
345
- flex-direction: column;
346
- flex: 1;
347
- }
348
-
349
- .input-panel .ant-input-textarea {
350
- flex: 1;
351
- display: flex;
352
- flex-direction: column;
353
- }
354
-
355
- .input-panel .ant-input-textarea-large {
356
- flex: 1;
357
- }
358
-
359
- .input-panel textarea {
360
- flex-grow: 1;
361
- height: calc(100% - 120px) !important; /* 도움말 텍스트와 배포 결과 공간 확보 */
362
- min-height: 300px !important;
363
  }
364
-
365
- /* 도움말 텍스트 스타일 */
366
  .help-text {
367
- padding: 8px 12px;
368
  background-color: var(--neutral-100);
369
- border-radius: var(--radius-md);
370
- color: var(--text-secondary);
371
- font-style: italic;
372
- margin-top: 8px;
373
  border-left: 3px solid var(--accent);
 
 
374
  }
375
 
376
- /* 배포 결과 스타일링 */
377
- .deploy-result {
 
378
  margin-top: 10px;
379
- height: 90px;
380
- max-height: 90px;
381
- overflow-y: auto;
382
- background-color: var(--neutral-100);
383
- padding: 10px;
384
- border-radius: var(--radius-md);
385
- border-left: 3px solid var(--primary);
386
- }
387
-
388
- #deploy-result a {
389
- color: var(--primary);
390
- font-weight: bold;
391
- text-decoration: underline;
392
- }
393
-
394
- [label="배포 결과"] {
395
- margin-top: 15px;
396
- padding: 12px;
397
- background-color: var(--neutral-100);
398
- border-radius: var(--radius-md);
399
- border-left: 3px solid var(--primary);
400
  }
401
-
402
- .deploy-success {
403
- color: var(--success);
404
- padding: 10px;
405
- background-color: rgba(52, 199, 89, 0.1);
406
- border-radius: var(--radius-md);
407
  }
408
-
409
- .deploy-error {
410
- color: var(--error);
411
- padding: 10px;
412
- background-color: rgba(255, 59, 48, 0.1);
413
- border-radius: var(--radius-md);
414
- }
415
-
416
- /* Drawer customization */
417
- .ant-drawer-content-wrapper {
418
- border-radius: 16px 0 0 16px;
419
  }
 
 
 
 
420
 
 
 
 
421
  .ant-drawer-header {
422
- background: linear-gradient(to right, var(--primary), var(--tertiary));
423
- color: white;
424
- border-radius: 16px 0 0 0;
425
- }
426
-
427
- .ant-drawer-title {
428
- color: white;
429
- font-weight: 600;
430
- letter-spacing: 0.5px;
431
- }
432
-
433
- .ant-drawer-close {
434
- color: white;
435
- }
436
-
437
- .ant-drawer-body {
438
- background: var(--surface);
439
- }
440
-
441
- /* 탭 컨텐츠 높이 조정 */
442
- .ant-tabs-content {
443
- height: 100%;
444
  }
 
 
 
445
 
 
446
  .ant-tabs-tabpane {
447
- height: 100%;
448
- display: flex;
449
- flex-direction: column;
450
- }
451
-
452
- /* 히스토리와 템플릿 스타일링 */
453
- .history_chatbot button {
454
- background: none;
455
- border: none;
456
- }
457
-
458
- .session-drawer .chatbot {
459
- height: calc(100vh - 200px);
460
- overflow-y: auto;
461
- }
462
-
463
- .session-history {
464
- height: 700px;
465
- overflow-y: auto;
466
- padding: 1rem;
467
  }
 
 
 
468
 
 
 
469
  .prompt-grid {
470
- display: grid;
471
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
472
- gap: 1.5rem;
473
- padding: 1.5rem;
474
  }
475
-
476
  .prompt-card {
477
- background: var(--surface);
478
- border-radius: var(--radius-lg);
479
- padding: 1.25rem;
480
- cursor: pointer;
481
- transition: all 0.3s;
482
- box-shadow: var(--shadow-sm);
483
- min-height: 300px;
484
- border: 1px solid var(--neutral-200);
485
- }
486
-
487
- .prompt-card:hover {
488
- transform: translateY(-4px);
489
- box-shadow: var(--shadow-lg);
490
- }
491
-
492
- /* 스크롤바 스타일링 */
493
- ::-webkit-scrollbar {
494
- width: 8px;
495
- height: 8px;
496
- }
497
-
498
- ::-webkit-scrollbar-track {
499
- background: var(--neutral-100);
500
- border-radius: 4px;
501
- }
502
-
503
- ::-webkit-scrollbar-thumb {
504
- background: var(--neutral-300);
505
- border-radius: 4px;
506
- }
507
-
508
- ::-webkit-scrollbar-thumb:hover {
509
- background: var(--neutral-400);
510
- }
511
-
512
- /* 애니메이션 */
513
- @keyframes fadeIn {
514
- from { opacity: 0; transform: translateY(10px); }
515
- to { opacity: 1; transform: translateY(0); }
516
- }
517
-
518
- .fade-in {
519
- animation: fadeIn 0.5s ease-out;
520
- }
521
-
522
- @keyframes spin {
523
- to { transform: rotate(360deg); }
524
- }
525
-
526
- /* 푸터 숨기기 */
527
- footer, .footer, div[class*="footer"], #footer {
528
- display: none !important;
529
- }
530
-
531
- /* 반응형 조정 */
532
  @media (max-width: 768px) {
533
- .left_header {
534
- padding: 1rem;
535
- }
536
-
537
- .prompt-grid {
538
- grid-template-columns: 1fr;
539
- }
540
-
541
- .setting-buttons, .action-buttons {
542
- flex-wrap: wrap;
543
- }
544
-
545
  .setting-buttons .ant-btn,
546
- .action-buttons .ant-btn {
547
- min-width: calc(50% - 8px);
548
- margin: 4px;
549
- }
550
- }
 
1
  /* Modern color scheme */
2
  :root {
3
+ --primary: #0066cc;
4
+ --secondary: #3385ff;
5
+ --accent: #66a3ff;
6
+ --tertiary: #5d2e8c;
7
+ --background: #f7f9fc;
8
+ --surface: #ffffff;
9
+ --text-primary: #2c3e50;
10
+ --text-secondary: #546e7a;
11
+ --text-tertiary: #78909c;
12
+ --success: #34c759;
13
+ --warning: #ff9500;
14
+ --error: #ff3b30;
 
 
 
 
 
 
 
 
 
15
  --neutral-100: #f8f9fa;
16
  --neutral-200: #e9ecef;
17
  --neutral-300: #dee2e6;
18
  --neutral-400: #ced4da;
 
 
19
  --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.05);
20
  --shadow-md: 0 4px 8px rgba(0, 0, 0, 0.08);
21
  --shadow-lg: 0 8px 16px rgba(0, 0, 0, 0.1);
22
  --shadow-xl: 0 12px 24px rgba(0, 0, 0, 0.12);
 
 
23
  --radius-sm: 6px;
24
  --radius-md: 8px;
25
  --radius-lg: 12px;
 
33
  line-height: 1.5;
34
  }
35
 
 
36
  .left_header {
37
  display: flex;
38
  flex-direction: column;
 
39
  align-items: center;
40
  background: linear-gradient(135deg, var(--surface), var(--neutral-100));
 
41
  border-radius: 24px;
42
  padding: 2rem;
43
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
 
46
  margin-bottom: 2rem;
47
  }
48
 
49
+ .equal-height-container {display: flex; min-height: 900px;}
50
+ .equal-height-col {display: flex; flex-direction: column; height: 100%;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
+ /* ------------------------- */
53
+ /* 상단 헤더 */
54
+ .app-header {
55
+ text-align: center;
56
+ padding: 1.5rem 1rem;
57
+ margin-bottom: 0.5rem;
58
+ background: linear-gradient(to right, var(--primary), var(--secondary));
59
+ border-radius: var(--radius-lg);
60
+ box-shadow: var(--shadow-md);
61
+ color: white;
62
  }
63
+ .app-header h1 {
64
+ font-size: 2rem;
65
+ margin: 0 0 0.5rem;
66
  }
67
+ .app-header p {font-size: 1rem; margin: 0;}
68
 
69
+ /* ------------------------- */
70
+ /* 배포 결과 배너 */
71
+ .deploy-banner {
72
+ background: #fff;
73
+ border-radius: var(--radius-md);
74
+ margin: 0.5rem auto 1.5rem auto;
75
+ box-shadow: var(--shadow-md);
76
+ max-width: 1200px;
77
+ border: 1px solid #ddd;
78
+ overflow: hidden;
79
+ transition: all 0.3s ease;
80
  }
81
+ .deploy-banner.success {border-left: 5px solid var(--success);}
82
+ .deploy-banner.error {border-left: 5px solid var(--error);}
83
+ .deploy-banner.loading {border-left: 5px solid var(--secondary);}
84
+ .deploy-banner-content {
85
+ display: flex; align-items: center;
86
+ padding: 15px 20px;
87
+ }
88
+ .deploy-banner-icon {font-size: 24px; margin-right: 15px;}
89
+ .deploy-banner-info {flex: 1;}
90
+ .deploy-banner-title {font-weight: bold; font-size: 16px; margin-bottom: 5px;}
91
+ .deploy-banner-message {color: #666;}
92
+ .deploy-banner-url-container {
93
+ background: #f5f8ff; padding: 10px 15px; border-radius: 8px;
94
+ display: flex; align-items: center; max-width: 400px; margin-top: 8px;
95
+ }
96
+ .deploy-banner-url {
97
+ color: #0066cc; text-decoration: none; font-weight: 500;
98
+ word-break: break-all; flex: 1;
99
+ }
100
+ .deploy-banner-copy-btn {
101
+ background: #0066cc; color: #fff; border: none; border-radius: 4px;
102
+ padding: 5px 10px; margin-left: 10px; cursor: pointer; font-size: 12px;
103
+ }
104
+ .deploy-banner-copy-btn:hover {background: #0052a3;}
105
+
106
+ /* ------------------------- */
107
+ /* 렌더 헤더 */
108
  .render_header {
109
+ height: 30px; width: 100%; padding: 5px 16px;
 
 
110
  background: linear-gradient(to right, var(--neutral-100), var(--neutral-200));
111
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
 
112
  box-shadow: var(--shadow-sm);
113
  border-bottom: 1px solid var(--neutral-300);
114
  }
115
+ .render_header > .header_btn {
116
+ display: inline-block; height: 10px; width: 10px;
117
+ border-radius: 50%; margin-right: 4px;
118
+ box-shadow: 0 1px 2px rgba(0,0,0,0.1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  }
120
+ .render_header > .header_btn:nth-child(1) { background-color: var(--error);}
121
+ .render_header > .header_btn:nth-child(2) { background-color: var(--warning);}
122
+ .render_header > .header_btn:nth-child(3) { background-color: var(--success);}
123
 
124
+ /* ------------------------- */
125
+ /* 탭 영역 */
126
  .right_panel {
127
+ position: relative; height: 900px;
128
+ display: flex; flex-direction: column; padding-top: 0;
 
 
 
129
  }
 
130
  .panel {
131
+ display: flex; flex-direction: column; height: 900px;
132
+ background: var(--surface); border-radius: var(--radius-lg);
133
+ box-shadow: var(--shadow-lg); border: 1px solid var(--neutral-300);
 
 
 
 
134
  overflow: hidden;
135
  }
136
+ .right_content {
137
+ flex: 1; height: 870px;
138
+ display: flex; flex-direction: column; align-items: center; justify-content: center;
139
+ background: var(--surface); border-radius: 0 0 var(--radius-lg) var(--radius-lg);
 
 
 
 
 
 
 
 
 
140
  }
 
141
  .html_content {
142
+ flex: 1; height: 870px; overflow: hidden;
143
+ box-shadow: inset 0 2px 4px rgba(0,0,0,0.05);
 
 
 
144
  background: var(--surface);
145
  }
146
 
147
+ /* ------------------------- */
148
+ /* 우측 패널의 버튼들 */
149
  .right-top-buttons {
150
  margin-bottom: 15px;
151
  background: linear-gradient(to right, var(--neutral-100), var(--neutral-200));
152
+ padding: 15px; border-radius: var(--radius-lg);
 
153
  box-shadow: var(--shadow-md);
154
  border: 1px solid var(--neutral-300);
155
  }
 
 
156
  .setting-buttons {
157
+ display: flex; gap: 8px; padding: 8px 0; justify-content: space-between;
 
 
 
158
  border-bottom: 2px dashed var(--neutral-300);
 
159
  margin-bottom: 12px;
160
  }
 
161
  .setting-buttons .ant-btn {
162
  background: linear-gradient(135deg, var(--surface), var(--neutral-100));
163
  border: 1px solid var(--neutral-300);
164
+ color: var(--text-primary); font-weight: 600; box-shadow: var(--shadow-sm);
165
+ min-width: 100px; height: 38px; border-radius: var(--radius-lg);
 
 
 
 
166
  }
 
167
  .setting-buttons .ant-btn:hover {
168
  background: linear-gradient(135deg, var(--neutral-100), var(--neutral-200));
169
+ transform: translateY(-2px); box-shadow: var(--shadow-md);
 
170
  }
171
+ .action-buttons {margin-top:5px; margin-bottom:8px; display:flex; flex-wrap:wrap; gap:8px;}
 
 
 
 
 
 
 
 
172
  .action-buttons .ant-btn {
173
+ min-width:80px; height:40px; font-weight:600; border-radius:var(--radius-md);
174
+ box-shadow: var(--shadow-sm); text-transform:uppercase; letter-spacing:0.5px; font-size:0.85em;
 
 
 
 
 
 
175
  }
 
176
  .action-buttons .ant-btn-primary {
177
+ background: linear-gradient(to right,var(--primary),var(--secondary));
178
+ border:none; color:white;
 
179
  }
 
180
  .action-buttons .ant-btn-primary:hover {
181
  background: linear-gradient(to right, var(--secondary), var(--primary));
182
  transform: translateY(-2px);
183
+ box-shadow:0 4px 12px rgba(0,102,204,0.3);
184
  }
 
185
  .action-buttons .ant-btn-default {
186
+ background: var(--surface); border:1px solid var(--neutral-300); color: var(--text-primary);
 
 
187
  }
 
188
  .action-buttons .ant-btn-default:hover {
189
+ border-color: var(--secondary); color: var(--secondary);
190
+ transform: translateY(-2px); box-shadow: var(--shadow-md);
 
 
191
  }
192
+ /* 각 버튼별 커스텀 */
 
193
  .send-btn {
194
+ background: linear-gradient(to right, var(--primary), var(--secondary))!important;
195
+ border:none!important; color:white!important;
 
196
  }
 
197
  .boost-btn {
198
+ background: linear-gradient(to right, var(--tertiary), #9966cc)!important;
199
+ border:none!important; color:white!important;
 
200
  }
 
201
  .execute-btn {
202
+ background: linear-gradient(to right, var(--success), #66d9a8)!important;
203
+ border:none!important; color:white!important;
 
204
  }
 
205
  .deploy-btn {
206
+ background: linear-gradient(to right, var(--warning), #ffcc66)!important;
207
+ border:none!important; color:white!important;
 
208
  }
 
209
  .clear-btn {
210
+ background: linear-gradient(to right, #f44336, #ff7961)!important;
211
+ border:none!important; color:white!important;
 
212
  }
213
 
214
+ /* ------------------------- */
215
+ /* 입력 영역 (textarea 등) */
216
+ .input-panel {
217
+ display: flex; flex-direction: column;
218
+ background: var(--surface); border-radius: var(--radius-lg);
219
+ border: 1px solid var(--neutral-300); box-shadow: var(--shadow-lg);
220
+ padding: 15px; height: 870px!important; max-height:870px!important; overflow:hidden;
 
221
  }
 
 
222
  #component-0 textarea,
223
  .gradio-container textarea,
224
  .ant-input-textarea-large textarea {
225
+ height: 730px!important; min-height:300px!important; resize:vertical!important;
226
+ border: 2px solid var(--neutral-200); border-radius: var(--radius-lg);
227
+ background: var(--surface); color: var(--text-primary);
228
+ padding: 1rem; flex-grow:1; box-shadow: inset 0 2px 4px rgba(0,0,0,0.03);
 
 
 
 
 
 
 
229
  }
 
230
  #component-0 textarea:focus,
231
  .gradio-container textarea:focus,
232
  .ant-input-textarea-large textarea:focus {
233
+ border-color: var(--accent); box-shadow:0 0 0 3px rgba(102,163,255,0.2);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  }
 
 
235
  .help-text {
 
236
  background-color: var(--neutral-100);
 
 
 
 
237
  border-left: 3px solid var(--accent);
238
+ padding: 8px 12px; border-radius: var(--radius-md);
239
+ color: var(--text-secondary); font-style: italic; margin-top: 8px;
240
  }
241
 
242
+ /* ------------------------- */
243
+ /* 배포 결과 박스 */
244
+ .deploy-section {
245
  margin-top: 10px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
  }
247
+ .deploy-header {
248
+ font-weight: bold; margin-bottom: 5px; font-size: 14px;
 
 
 
 
249
  }
250
+ .deploy-result-box {
251
+ background: var(--neutral-100); padding:10px; border-radius:var(--radius-md);
252
+ border-left:3px solid var(--primary); min-height:60px; box-shadow: var(--shadow-sm);
 
 
 
 
 
 
 
 
253
  }
254
+ .no-deploy {color:#999; font-style:italic;}
255
+ .deploy-success {color: var(--success); padding:10px; background:rgba(52,199,89,0.1); border-radius: var(--radius-md);}
256
+ .deploy-error {color: var(--error); padding:10px; background:rgba(255,59,48,0.1); border-radius: var(--radius-md);}
257
+ .success-icon, .error-icon {font-size:20px; margin-right:6px;}
258
 
259
+ /* ------------------------- */
260
+ /* Drawer / Template */
261
+ .ant-drawer-content-wrapper {border-radius:16px 0 0 16px;}
262
  .ant-drawer-header {
263
+ background: linear-gradient(to right,var(--primary),var(--tertiary));
264
+ color:#fff; border-radius:16px 0 0 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  }
266
+ .ant-drawer-title {color:#fff; font-weight:600;}
267
+ .ant-drawer-close {color:#fff;}
268
+ .ant-drawer-body {background: var(--surface);}
269
 
270
+ .ant-tabs-content {height:100%;}
271
  .ant-tabs-tabpane {
272
+ height:100%; display:flex; flex-direction:column;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  }
274
+ .history_chatbot button {background:none; border:none;}
275
+ .session-drawer .chatbot {height:calc(100vh-200px); overflow:auto;}
276
+ .session-history {height:700px; overflow:auto; padding:1rem;}
277
 
278
+ /* ------------------------- */
279
+ /* 템플릿 카드 */
280
  .prompt-grid {
281
+ display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
282
+ gap:1.5rem; padding:1.5rem;
 
 
283
  }
 
284
  .prompt-card {
285
+ background: var(--surface); border-radius: var(--radius-lg);
286
+ padding:1.25rem; cursor:pointer; transition:all 0.3s; box-shadow: var(--shadow-sm);
287
+ min-height:300px; border:1px solid var(--neutral-200);
288
+ }
289
+ .prompt-card:hover {transform: translateY(-4px); box-shadow: var(--shadow-lg);}
290
+ ::-webkit-scrollbar {width:8px; height:8px;}
291
+ ::-webkit-scrollbar-track {background: var(--neutral-100); border-radius:4px;}
292
+ ::-webkit-scrollbar-thumb {background: var(--neutral-300); border-radius:4px;}
293
+ ::-webkit-scrollbar-thumb:hover {background: var(--neutral-400);}
294
+
295
+ /* ------------------------- */
296
+ /* 반응형 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297
  @media (max-width: 768px) {
 
 
 
 
 
 
 
 
 
 
 
 
298
  .setting-buttons .ant-btn,
299
+ .action-buttons .ant-btn {min-width: calc(50% - 8px); margin:4px;}
300
+ }
301
+ footer, .footer, div[class*="footer"], #footer {display:none!important;}