返回 ppt-master
style.css
1 :root {
2 --bg: #12121f;
3 --card: #ffffff;
4 --ink: #1d2430;
5 --muted: #6b7280;
6 --line: #e3e6ea;
7 --accent: #4a9eff;
8 --accent-soft: #eaf4ff;
9 --shell: #16162a;
10 --shell-2: #12121f;
11 --shell-line: #2a2a4a;
12 --shell-ink: #e0e0e0;
13 --shell-muted: #8a8aaa;
14 --shell-hover: #2a2a4a;
15 --warning: #f5c542;
16 --radius: 10px;
17 --shadow: 0 4px 24px rgba(0, 0, 0, 0.22);
18 --ui-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
19 }
20
21 * { box-sizing: border-box; }
22
23 html { height: 100%; }
24
25 html:lang(ja) {
26 --ui-font-family: "Hiragino Sans", "Hiragino Kaku Gothic ProN", "Yu Gothic UI",
27 "Yu Gothic", "Meiryo UI", Meiryo, "Noto Sans CJK JP", "Noto Sans JP", sans-serif;
28 }
29
30 html:lang(zh) {
31 --ui-font-family: "PingFang SC", "Microsoft YaHei UI", "Microsoft YaHei",
32 "Noto Sans CJK SC", "Noto Sans SC", "Hiragino Sans GB", sans-serif;
33 }
34
35 body {
36 margin: 0;
37 height: 100%;
38 background: #1a1a2e;
39 color: var(--ink);
40 font-family: var(--ui-font-family);
41 line-height: 1.5;
42 overflow: hidden;
43 }
44
45 button,
46 input,
47 select,
48 textarea {
49 font-family: inherit;
50 }
51
52 /* ---- fullscreen shell ---- */
53 #app {
54 display: flex;
55 width: 100vw;
56 height: 100vh;
57 min-width: 0;
58 }
59 #preview-panel {
60 flex: 0 0 clamp(360px, 38vw, 560px);
61 min-width: 0;
62 background: var(--shell);
63 color: var(--shell-ink);
64 border-right: 1px solid var(--shell-line);
65 display: flex;
66 flex-direction: column;
67 gap: 18px;
68 padding: 0;
69 overflow: hidden;
70 }
71 #control-panel {
72 flex: 1;
73 min-width: 0;
74 height: 100vh;
75 display: flex;
76 flex-direction: column;
77 background: var(--shell-2);
78 }
79 .brand-block {
80 display: flex;
81 align-items: center;
82 gap: 12px;
83 padding: 14px 16px;
84 border-bottom: 1px solid var(--shell-line);
85 flex: none;
86 }
87 .brand-mark {
88 flex: none;
89 width: 38px;
90 height: 38px;
91 border-radius: 9px;
92 display: grid;
93 place-items: center;
94 background: #1e3a5f;
95 color: #fff;
96 font-weight: 760;
97 letter-spacing: .03em;
98 }
99 .panel-kicker {
100 font-size: 11px;
101 letter-spacing: .08em;
102 text-transform: uppercase;
103 color: var(--shell-muted);
104 }
105 .panel-title {
106 margin-top: 2px;
107 font-size: 14px;
108 font-weight: 650;
109 line-height: 1.35;
110 }
111
112 /* ---- top bar ---- */
113 #topbar {
114 flex: none;
115 z-index: 10;
116 background: var(--shell);
117 border-bottom: 1px solid var(--shell-line);
118 }
119 #topbar-inner {
120 max-width: none;
121 margin: 0;
122 padding: 16px 24px;
123 display: flex;
124 align-items: center;
125 justify-content: space-between;
126 gap: 16px;
127 }
128 .topbar-titles h1 { margin: 0; font-size: 18px; font-weight: 650; }
129 .topbar-titles h1 { color: var(--shell-ink); }
130 .topbar-titles p { margin: 2px 0 0; font-size: 13px; color: var(--shell-muted); }
131 #topbar-preview:empty { display: none; }
132 #topbar-preview {
133 flex: 1;
134 min-height: 0;
135 overflow-y: auto;
136 padding: 0 16px 16px;
137 }
138 #topbar-preview .style-preview {
139 position: static;
140 background: transparent;
141 padding: 0;
142 margin: 0;
143 color: var(--ink);
144 }
145 #topbar-preview .style-preview + .style-preview {
146 margin-top: 18px;
147 padding-top: 18px;
148 border-top: 1px solid var(--shell-line);
149 }
150 #topbar-preview .style-preview-label {
151 margin-bottom: 10px;
152 }
153 #topbar-preview .style-preview-card {
154 box-shadow: none;
155 flex-direction: column;
156 align-items: stretch;
157 gap: 14px;
158 padding: 18px;
159 min-height: 260px;
160 background: #ffffff;
161 }
162 #topbar-preview .spl-title {
163 color: var(--shell-ink);
164 }
165 #topbar-preview .spl-note {
166 color: var(--shell-muted);
167 }
168 #topbar-preview .sp-title,
169 #topbar-preview .sp-body-wrap {
170 white-space: normal;
171 }
172 #topbar-preview .sp-chip {
173 align-self: stretch;
174 justify-content: flex-start;
175 }
176 #topbar-preview .sp-icon-mark {
177 width: 34px;
178 height: 34px;
179 }
180 #topbar-preview .sp-icon-mark svg {
181 width: 30px;
182 height: 30px;
183 max-width: 30px;
184 max-height: 30px;
185 }
186
187 .lang-select {
188 position: relative;
189 flex: none;
190 }
191 .lang-select-btn {
192 display: flex;
193 align-items: center;
194 justify-content: space-between;
195 gap: 6px;
196 height: 38px;
197 min-width: 118px;
198 padding: 0 12px;
199 border-radius: 4px;
200 border: 1px solid #3a3a5a;
201 background: #1e1e3a;
202 color: #c0c0d8;
203 font-size: 14px;
204 cursor: pointer;
205 }
206 .lang-select-btn:hover { color: #ffffff; background: var(--shell-hover); border-color: #5a5a7a; }
207 .lang-caret { font-size: 10px; color: #8a8aa8; }
208 .lang-menu {
209 position: absolute;
210 right: 0;
211 top: calc(100% + 6px);
212 margin: 0;
213 padding: 4px;
214 list-style: none;
215 min-width: 110px;
216 background: #1e1e3a;
217 border: 1px solid #3a3a5a;
218 border-radius: 6px;
219 box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
220 z-index: 60;
221 }
222 .lang-menu li {
223 padding: 8px 12px;
224 border-radius: 6px;
225 font-size: 14px;
226 color: #c0c0d8;
227 cursor: pointer;
228 }
229 .lang-menu li:hover,
230 .lang-menu li:focus { background: var(--shell-hover); color: #ffffff; }
231 .lang-menu li.selected { color: #ffffff; font-weight: 650; }
232
233 /* ---- form ---- */
234 #form {
235 flex: 1;
236 min-height: 0;
237 max-width: none;
238 margin: 0;
239 padding: 24px 32px;
240 overflow-y: auto;
241 }
242 #sections {
243 max-width: 1220px;
244 margin: 0 auto;
245 }
246 #loading, #error { padding: 40px 0; text-align: center; color: var(--shell-muted); }
247 #error { color: #b42318; }
248
249 .section {
250 background: var(--card);
251 border: 1px solid var(--line);
252 border-radius: var(--radius);
253 box-shadow: var(--shadow);
254 padding: 18px 20px;
255 margin-bottom: 16px;
256 }
257 .section-head {
258 display: flex;
259 align-items: baseline;
260 gap: 10px;
261 flex-wrap: wrap;
262 margin-bottom: 14px;
263 }
264 .section-num {
265 flex: none;
266 width: 22px; height: 22px;
267 border-radius: 50%;
268 background: var(--accent-soft);
269 color: #1e4fa3;
270 font-size: 12px; font-weight: 700;
271 display: grid; place-items: center;
272 }
273 .section-title { font-size: 15px; font-weight: 620; }
274 .section-note { font-size: 12.5px; color: var(--muted); }
275
276 /* ---- generic controls ---- */
277 .chips { display: flex; flex-wrap: wrap; gap: 8px; }
278 .chip {
279 border: 1px solid var(--line);
280 background: var(--card);
281 border-radius: 8px;
282 padding: 7px 14px;
283 font-size: 13.5px;
284 line-height: 1.35;
285 cursor: pointer;
286 transition: all .12s ease;
287 max-width: 100%;
288 overflow-wrap: anywhere;
289 }
290 .chip:hover { border-color: var(--accent); }
291 .chip.selected {
292 border-color: var(--accent);
293 background: var(--accent-soft);
294 color: var(--accent);
295 font-weight: 600;
296 }
297 .chip-text { min-width: 0; }
298 .chip-copy { min-width: 0; }
299 .chip-with-preview {
300 width: 230px;
301 padding: 9px;
302 display: flex;
303 flex-direction: column;
304 gap: 8px;
305 align-items: stretch;
306 text-align: left;
307 }
308 .chip-with-preview .chip-text {
309 display: block;
310 font-size: 12.8px;
311 }
312 .chip-with-preview .rec-badge {
313 display: inline-block;
314 margin: 4px 0 0;
315 }
316 .chip-preview-visual_style {
317 width: min(100%, 430px);
318 flex-direction: row;
319 align-items: center;
320 }
321 .chip-preview-visual_style .option-preview {
322 flex: 0 0 clamp(116px, 36%, 160px);
323 }
324 .chip-preview-visual_style .chip-copy {
325 flex: 1;
326 }
327 .visual-style-grid {
328 display: grid;
329 grid-template-columns: repeat(2, minmax(0, 1fr));
330 align-items: stretch;
331 }
332 .visual-style-grid .chip-preview-visual_style {
333 width: 100%;
334 }
335 .option-preview {
336 width: 100%;
337 aspect-ratio: 16 / 9;
338 border: 1px solid var(--line);
339 border-radius: 7px;
340 overflow: hidden;
341 background: #fff;
342 }
343 .option-preview svg {
344 display: block;
345 width: 100%;
346 height: 100%;
347 }
348 .option-preview img {
349 display: block;
350 width: 100%;
351 height: 100%;
352 object-fit: cover;
353 }
354 .option-preview-icons { aspect-ratio: 16 / 7; }
355 .real-icon-preview {
356 height: 100%;
357 display: flex;
358 align-items: center;
359 justify-content: center;
360 padding: 8px;
361 background: #fff;
362 color: #2563eb;
363 }
364 .real-icon-sample {
365 min-width: 0;
366 display: flex;
367 flex-direction: column;
368 align-items: center;
369 justify-content: center;
370 gap: 6px;
371 }
372 .real-icon-mark {
373 width: 38px;
374 height: 38px;
375 display: grid;
376 place-items: center;
377 color: currentColor;
378 }
379 .real-icon-mark svg {
380 display: block;
381 width: 34px;
382 height: 34px;
383 max-width: 34px;
384 max-height: 34px;
385 overflow: visible;
386 }
387 .real-icon-preview-chunk-filled .real-icon-mark svg {
388 shape-rendering: crispEdges;
389 }
390 .real-icon-label {
391 max-width: 100%;
392 color: #64748b;
393 font-size: 9px;
394 line-height: 1.1;
395 text-align: center;
396 white-space: nowrap;
397 overflow: hidden;
398 text-overflow: ellipsis;
399 }
400
401 .text-input, .num-input {
402 width: 100%;
403 border: 1px solid var(--line);
404 border-radius: 8px;
405 padding: 9px 12px;
406 font-size: 14px;
407 font-family: inherit;
408 color: var(--ink);
409 }
410 .text-input:focus, .num-input:focus { outline: none; border-color: var(--accent); }
411 textarea.text-input { resize: vertical; line-height: 1.5; }
412 .num-input { width: 140px; }
413 .text-input.locked-field {
414 background: #f1f5f9;
415 color: #475569;
416 cursor: not-allowed;
417 }
418 .locked-field-hint { margin-top: 6px; }
419
420 /* ---- color candidates ---- */
421 .color-grid { display: flex; flex-wrap: wrap; gap: 12px; }
422 .color-card {
423 border: 2px solid var(--line);
424 border-radius: 10px;
425 padding: 10px;
426 cursor: pointer;
427 min-width: 150px;
428 transition: border-color .12s ease;
429 }
430 .color-card:hover { border-color: var(--accent); }
431 .color-card.selected { border-color: var(--accent); }
432 .swatches { display: flex; gap: 6px; margin-bottom: 8px; }
433 .swatch {
434 width: 34px; height: 34px;
435 border-radius: 7px;
436 border: 1px solid rgba(0,0,0,.06);
437 }
438 .color-name { font-size: 13.5px; font-weight: 600; }
439 .color-hex { font-size: 11.5px; color: var(--muted); font-family: ui-monospace, monospace; }
440 .color-note { font-size: 12px; color: var(--muted); margin-top: 4px; }
441
442 .hex-override { margin-top: 12px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
443 .hex-override label { font-size: 12.5px; color: var(--muted); }
444 .hex-override input {
445 width: 96px;
446 border: 1px solid var(--line);
447 border-radius: 6px;
448 padding: 5px 8px;
449 font-family: ui-monospace, monospace;
450 font-size: 12.5px;
451 }
452
453 /* ---- typography candidates ---- */
454 .font-grid { display: flex; flex-direction: column; gap: 10px; }
455 .font-card {
456 border: 2px solid var(--line);
457 border-radius: 10px;
458 padding: 12px 14px;
459 cursor: pointer;
460 transition: border-color .12s ease;
461 }
462 .font-card:hover { border-color: var(--accent); }
463 .font-card.selected { border-color: var(--accent); }
464 .font-card-head {
465 display: flex; align-items: baseline; gap: 10px;
466 margin-bottom: 8px;
467 }
468 .font-card-name { font-size: 13.5px; font-weight: 600; }
469 .font-card-meta { font-size: 11.5px; color: var(--muted); }
470 .design-direction-grid {
471 flex-direction: row;
472 flex-wrap: nowrap;
473 align-items: stretch;
474 overflow-x: auto;
475 padding-bottom: 2px;
476 }
477 .design-direction-card {
478 flex: 1 0 calc((100% - 20px) / 3);
479 min-width: 200px;
480 }
481 .design-direction-preview {
482 width: 100%;
483 aspect-ratio: 16 / 9;
484 margin-bottom: 8px;
485 border: 1px solid var(--line);
486 border-radius: 8px;
487 overflow: hidden;
488 }
489 .design-direction-preview img { width: 100%; height: 100%; object-fit: cover; }
490 .design-direction-swatches { display: flex; gap: 5px; margin-top: 8px; }
491 .design-direction-swatches .swatch { width: 24px; height: 24px; }
492 .locked-summary-chip { cursor: default; }
493 .locked-summary-chip:hover { border-color: var(--accent); }
494 .image-strategy-previews {
495 display: grid;
496 grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
497 gap: 8px;
498 margin: 8px 0 10px;
499 }
500 .image-strategy-picker { margin-top: 10px; }
501 .image-strategy-preview {
502 position: relative;
503 aspect-ratio: 16 / 9;
504 border: 1px solid var(--line);
505 border-radius: 8px;
506 overflow: hidden;
507 background: #fff;
508 }
509 .image-strategy-preview img {
510 display: block;
511 width: 100%;
512 height: 100%;
513 object-fit: cover;
514 }
515 .image-strategy-preview-label {
516 position: absolute;
517 left: 6px;
518 bottom: 6px;
519 padding: 2px 6px;
520 border-radius: 999px;
521 background: rgba(17, 24, 39, 0.74);
522 color: #fff;
523 font-size: 10.5px;
524 line-height: 1.4;
525 }
526 .image-strategy-preview-card {
527 flex-direction: column;
528 align-items: stretch;
529 }
530 .image-strategy-preview-visual {
531 width: 100%;
532 }
533 .image-strategy-preview-visual .image-strategy-previews {
534 grid-template-columns: 1fr;
535 margin: 0 0 12px;
536 }
537 .image-strategy-preview-visual .image-strategy-preview {
538 min-height: 150px;
539 }
540 .image-strategy-preview-empty {
541 padding: 14px 0 4px;
542 }
543 .image-strategy-custom-card {
544 background: var(--card);
545 margin-top: 10px;
546 }
547 .font-sample-heading { font-size: 24px; font-weight: 700; line-height: 1.3; }
548 .font-sample-body { font-size: 14px; color: #333; margin-top: 4px; }
549 .custom-typography-fields {
550 display: grid;
551 grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
552 gap: 10px;
553 margin-top: 8px;
554 }
555 .font-picker-head {
556 grid-column: 1 / -1;
557 display: flex;
558 align-items: center;
559 justify-content: space-between;
560 gap: 10px;
561 }
562 .font-picker-head .subfield-label { margin-bottom: 0; }
563 .font-picker-hint { grid-column: 1 / -1; }
564 .font-custom-status {
565 display: none;
566 align-items: center;
567 border-radius: 999px;
568 padding: 2px 8px;
569 background: var(--accent-soft);
570 color: var(--accent);
571 font-size: 11.5px;
572 font-weight: 650;
573 }
574 .custom-typography-legacy { grid-column: 1 / -1; }
575 .custom-typography-field { display: flex; flex-direction: column; gap: 4px; }
576 .font-select {
577 width: 100%;
578 border: 1px solid var(--line);
579 border-radius: 8px;
580 padding: 9px 12px;
581 background: var(--card);
582 color: var(--ink);
583 font-size: 14px;
584 }
585 .font-select:focus { outline: none; border-color: var(--accent); }
586 .other-font-input { margin-top: 2px; }
587 .custom-color-input { margin-top: 8px; min-height: 58px; resize: vertical; }
588 .image-strategy-custom-input { margin-top: 8px; min-height: 72px; resize: vertical; }
589 .image-usage-notes-input { min-height: 64px; resize: vertical; }
590 .font-size-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
591 .font-size-input { width: 96px; }
592 .font-size-unit {
593 color: var(--muted);
594 font-size: 12.5px;
595 font-weight: 600;
596 }
597 .body-size-relation { margin-bottom: 6px; }
598 .body-size-pt { margin-top: 6px; }
599 .body-size-hint { margin-top: 3px; }
600
601 .subfield { margin-top: 14px; }
602 .subfield-label { font-size: 12.5px; color: var(--muted); margin-bottom: 7px; }
603
604 /* ---- Stage 1 template selection ---- */
605 .template-mode-choices {
606 display: grid;
607 grid-template-columns: repeat(2, minmax(0, 1fr));
608 gap: 12px;
609 }
610 .template-mode-choice {
611 width: 100%;
612 display: flex;
613 align-items: flex-start;
614 gap: 11px;
615 border: 1px solid var(--line);
616 border-radius: 9px;
617 background: var(--card);
618 color: var(--ink);
619 padding: 11px 13px;
620 text-align: left;
621 cursor: pointer;
622 transition: border-color .12s ease, background .12s ease, box-shadow .12s ease;
623 }
624 .template-mode-choice:hover {
625 border-color: var(--accent);
626 }
627 .template-mode-choice:focus-visible {
628 outline: 2px solid var(--accent);
629 outline-offset: 2px;
630 }
631 .template-mode-choice.selected {
632 border-color: var(--accent);
633 background: var(--accent-soft);
634 box-shadow: 0 0 0 1px var(--accent);
635 }
636 .template-choice-radio {
637 flex: none;
638 width: 17px;
639 height: 17px;
640 margin-top: 2px;
641 border: 2px solid #aeb5bf;
642 border-radius: 50%;
643 background: #fff;
644 box-shadow: inset 0 0 0 3px #fff;
645 }
646 .template-mode-choice.selected .template-choice-radio {
647 border-color: var(--accent);
648 background: var(--accent);
649 }
650 .template-choice-copy {
651 min-width: 0;
652 display: flex;
653 flex-direction: column;
654 gap: 2px;
655 }
656 .template-choice-title {
657 font-size: 13.5px;
658 font-weight: 700;
659 line-height: 1.4;
660 }
661 .template-choice-desc {
662 color: var(--muted);
663 font-size: 12.5px;
664 line-height: 1.45;
665 }
666 .template-selector-panel {
667 margin-top: 16px;
668 padding-top: 14px;
669 border-top: 1px solid var(--line);
670 }
671 .template-selector-panel[hidden] {
672 display: none;
673 }
674 .template-selector-hint {
675 margin-bottom: 11px;
676 color: var(--muted);
677 font-size: 12.5px;
678 }
679 .template-select-grid {
680 display: grid;
681 grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
682 gap: 13px 16px;
683 }
684 .template-select-field {
685 min-width: 0;
686 }
687 .template-select-label {
688 display: block;
689 margin-bottom: 6px;
690 color: var(--ink);
691 font-size: 12.5px;
692 font-weight: 700;
693 }
694 .template-select {
695 width: 100%;
696 min-width: 0;
697 height: 40px;
698 border: 1px solid var(--line);
699 border-radius: 8px;
700 padding: 0 34px 0 11px;
701 background: var(--card);
702 color: var(--ink);
703 font-size: 13.5px;
704 }
705 .template-select:hover:not(:disabled) {
706 border-color: var(--accent);
707 }
708 .template-select:focus {
709 outline: none;
710 border-color: var(--accent);
711 box-shadow: 0 0 0 2px var(--accent-soft);
712 }
713 .template-select:disabled {
714 background: #f4f6f8;
715 color: #9aa1aa;
716 cursor: not-allowed;
717 }
718 .template-select-help {
719 margin-top: 6px;
720 color: var(--muted);
721 font-size: 11.5px;
722 line-height: 1.45;
723 }
724 .template-selected-path {
725 margin-top: 7px;
726 min-width: 0;
727 }
728 .template-selected-path[hidden] {
729 display: none;
730 }
731 .template-selected-path-label {
732 display: block;
733 margin-bottom: 2px;
734 color: var(--muted);
735 font-size: 10.5px;
736 font-weight: 700;
737 }
738 .template-selected-path-value {
739 display: block;
740 color: #475569;
741 font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
742 font-size: 11px;
743 line-height: 1.4;
744 overflow-wrap: anywhere;
745 white-space: normal;
746 }
747
748 /* ---- toggles ---- */
749 .toggle-row { display: flex; align-items: center; gap: 12px; }
750 .toggle-desc { font-size: 12.5px; color: var(--muted); }
751
752 /* ---- action bar ---- */
753 #actionbar {
754 flex: none;
755 background: var(--shell);
756 border-top: 1px solid var(--shell-line);
757 padding: 14px 24px;
758 display: flex;
759 align-items: center;
760 justify-content: flex-end;
761 gap: 16px;
762 }
763 #confirm-status {
764 min-height: 20px;
765 font-size: 13px;
766 color: var(--shell-muted);
767 }
768 #confirm-status.done { color: #067647; font-weight: 600; }
769 #btn-confirm {
770 border: none;
771 background: var(--warning);
772 color: #1a1a2e;
773 font-size: 14.5px;
774 font-weight: 600;
775 min-width: 132px;
776 padding: 10px 26px;
777 border-radius: 9px;
778 cursor: pointer;
779 }
780 #btn-confirm:hover { background: #e5b532; }
781 #btn-confirm:disabled { background: #6d6450; color: #b8b0a0; cursor: default; }
782
783 /* ---- custom input ---- */
784 .custom-input { margin-top: 8px; }
785 .custom-chip-row,
786 .standalone-chip-row { margin-top: 8px; }
787 .custom-chip-row .ai-custom-candidate { width: 100%; }
788 .ai-custom-candidate {
789 display: block;
790 width: 100%;
791 padding: 12px 14px;
792 text-align: left;
793 color: inherit;
794 font-weight: 400;
795 }
796 .ai-custom-candidate-head {
797 display: flex;
798 align-items: baseline;
799 gap: 10px;
800 flex-wrap: wrap;
801 }
802 .ai-custom-candidate-head .chip-text { font-weight: 650; }
803 .ai-custom-candidate-hint { font-size: 11.5px; color: var(--muted); }
804 .ai-custom-candidate-copy {
805 margin-top: 8px;
806 color: var(--ink);
807 font-size: 12.5px;
808 line-height: 1.55;
809 white-space: pre-wrap;
810 }
811 .ai-custom-candidate.selected .ai-custom-candidate-copy { color: inherit; }
812 .ai-custom-candidate .custom-input,
813 .ai-custom-candidate .image-strategy-custom-input {
814 width: 100%;
815 min-height: 86px;
816 margin-top: 8px;
817 resize: vertical;
818 }
819
820 /* ---- recommended chip + group labels ---- */
821 .chip.recommended {
822 border-color: var(--line);
823 box-shadow: none;
824 }
825 .rec-badge {
826 margin-left: 6px;
827 font-size: 10.5px;
828 font-weight: 700;
829 color: var(--muted);
830 }
831 .chip.selected .rec-badge { color: var(--accent); }
832 .group-label {
833 font-size: 11.5px;
834 color: var(--muted);
835 margin: 10px 0 5px;
836 letter-spacing: .02em;
837 }
838 .chips + .group-label { margin-top: 12px; }
839
840 /* ---- palette swatches with role labels ---- */
841 .swatches { display: flex; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
842 .swatch-col { display: flex; flex-direction: column; align-items: center; gap: 3px; }
843 .swatch-role { font-size: 10px; color: var(--muted); }
844
845 /* ---- custom HEX grid ---- */
846 .hex-override { margin-top: 14px; }
847 .hex-row { display: flex; gap: 10px; flex-wrap: wrap; }
848 .hex-cell { display: flex; flex-direction: column; gap: 4px; }
849 .hex-cell-label { font-size: 11px; color: var(--muted); }
850 .hex-input-line { display: flex; align-items: center; gap: 6px; }
851 .role-size-line { display: flex; align-items: center; gap: 6px; }
852 .role-size-pt { min-height: 15px; font-size: 11px; color: var(--muted); }
853 .hex-cell input {
854 width: 92px;
855 border: 1px solid var(--line);
856 border-radius: 6px;
857 padding: 5px 8px;
858 font-family: ui-monospace, monospace;
859 font-size: 12.5px;
860 }
861 /* Live preview of the value typed into the HEX box. */
862 .hex-swatch {
863 flex: none;
864 width: 20px; height: 20px;
865 border-radius: 5px;
866 border: 1px solid var(--line);
867 }
868 .hex-swatch.hex-swatch-empty {
869 /* Subtle checker so an empty / invalid value reads as "no color" */
870 background:
871 linear-gradient(45deg, var(--line) 25%, transparent 25%, transparent 75%, var(--line) 75%) 0 0 / 10px 10px,
872 var(--card);
873 }
874
875 /* ---- typography primary-language / English previews ---- */
876 .font-sample-line { display: flex; align-items: baseline; gap: 16px; flex-wrap: wrap; }
877 .font-sample-heading-box .fs-primary { font-size: 24px; font-weight: 700; }
878 .font-sample-heading-box .fs-english { font-size: 22px; font-weight: 700; }
879 .font-sample-body-box { margin-top: 6px; }
880 .font-sample-body-box .fs-primary,
881 .font-sample-body-box .fs-english { font-size: 14px; color: #333; }
882 .font-card-meta { display: block; margin-top: 4px; }
883
884 /* ---- confirmed overlay ---- */
885 #confirmed-overlay {
886 position: fixed;
887 inset: 0;
888 background: rgba(17, 18, 29, 0.86);
889 display: flex;
890 align-items: center;
891 justify-content: center;
892 z-index: 50;
893 }
894 .cf-card {
895 background: var(--card);
896 border: 1px solid var(--line);
897 border-radius: 16px;
898 box-shadow: var(--shadow);
899 padding: 36px 44px;
900 text-align: center;
901 max-width: 420px;
902 }
903 .cf-title { font-size: 22px; font-weight: 700; color: #067647; }
904 .cf-hint { font-size: 14px; color: var(--muted); margin-top: 10px; line-height: 1.6; }
905
906 /* Combined color + typography "overall impression" preview — sticky strip
907 that rides along the color / icon / typography picking sections. */
908 .style-preview {
909 position: sticky;
910 z-index: 5;
911 background: var(--shell-2);
912 padding: 8px 0;
913 margin-bottom: 16px;
914 }
915 .style-preview-label {
916 display: flex;
917 flex-wrap: wrap;
918 align-items: baseline;
919 gap: 8px;
920 margin-bottom: 6px;
921 }
922 .spl-title { font-size: 12.5px; font-weight: 600; color: var(--muted); }
923 .spl-note { font-size: 11.5px; color: var(--muted); }
924 .style-preview-card {
925 border: 1px solid var(--line);
926 border-radius: var(--radius);
927 box-shadow: var(--shadow);
928 padding: 14px 18px;
929 display: flex;
930 align-items: center;
931 gap: 16px;
932 overflow: hidden;
933 }
934 .sp-textcol { flex: 1; min-width: 0; }
935 .sp-title {
936 font-weight: 700;
937 line-height: 1.25;
938 white-space: nowrap;
939 overflow: hidden;
940 text-overflow: ellipsis;
941 }
942 .sp-title-english { margin-left: 10px; opacity: 0.92; }
943 .sp-body { display: flex; align-items: stretch; gap: 10px; margin-top: 6px; }
944 .sp-accent-bar { flex: 0 0 4px; border-radius: 2px; }
945 .sp-body-wrap {
946 flex: 1;
947 min-width: 0;
948 line-height: 1.5;
949 white-space: nowrap;
950 overflow: hidden;
951 text-overflow: ellipsis;
952 }
953 .sp-body-english { margin-left: 10px; opacity: 0.92; }
954 .sp-content {
955 display: grid;
956 gap: 10px;
957 }
958 .sp-content-row {
959 display: flex;
960 align-items: flex-start;
961 gap: 10px;
962 padding: 10px;
963 border: 1px solid rgba(0, 0, 0, 0.07);
964 border-radius: 8px;
965 background: rgba(255, 255, 255, 0.68);
966 }
967 .sp-content-icon {
968 flex: none;
969 width: 32px;
970 height: 32px;
971 display: grid;
972 place-items: center;
973 color: currentColor;
974 }
975 .sp-content-copy {
976 min-width: 0;
977 display: flex;
978 flex-direction: column;
979 gap: 3px;
980 }
981 .sp-content-copy b {
982 font-size: 13px;
983 line-height: 1.3;
984 }
985 .sp-content-copy small {
986 color: #64748b;
987 font-size: 11.5px;
988 line-height: 1.45;
989 }
990 .sp-chip {
991 flex: none;
992 display: inline-flex;
993 align-items: center;
994 gap: 8px;
995 padding: 7px 12px;
996 border-radius: 8px;
997 border: 1px solid rgba(0, 0, 0, 0.06);
998 }
999 .sp-chip-dot { width: 12px; height: 12px; border-radius: 50%; }
1000 .sp-chip-label { font-size: 12.5px; }
1001 .sp-icon-mark {
1002 width: 24px;
1003 height: 24px;
1004 display: grid;
1005 place-items: center;
1006 color: currentColor;
1007 }
1008 .sp-icon-mark svg {
1009 display: block;
1010 width: 22px;
1011 height: 22px;
1012 max-width: 22px;
1013 max-height: 22px;
1014 overflow: visible;
1015 }
1016 .sp-icon-emoji {
1017 font-size: 20px;
1018 line-height: 1;
1019 }
1020 .sp-icon-none {
1021 color: #64748b;
1022 font-size: 11px;
1023 white-space: nowrap;
1024 }
1025 .sp-icon-none-dot {
1026 width: 8px;
1027 height: 8px;
1028 border-radius: 50%;
1029 background: currentColor;
1030 opacity: .55;
1031 }
1032 .direction-preview-card {
1033 gap: 14px;
1034 }
1035 .direction-preview-visual {
1036 overflow: hidden;
1037 border: 1px solid var(--line);
1038 border-radius: 9px;
1039 background: #fff;
1040 }
1041 .direction-preview-visual svg,
1042 .direction-preview-visual img {
1043 display: block;
1044 width: 100%;
1045 aspect-ratio: 16 / 9;
1046 object-fit: cover;
1047 }
1048 .direction-preview-title {
1049 color: var(--ink);
1050 font-size: 16px;
1051 font-weight: 700;
1052 }
1053 .direction-preview-desc {
1054 margin-top: 4px;
1055 color: var(--muted);
1056 font-size: 12.5px;
1057 line-height: 1.55;
1058 }
1059
1060 @media (max-width: 1040px) {
1061 body {
1062 height: auto;
1063 overflow: auto;
1064 background: var(--shell-2);
1065 }
1066 #app {
1067 display: block;
1068 width: auto;
1069 height: auto;
1070 min-height: 100vh;
1071 }
1072 #preview-panel {
1073 width: auto;
1074 border: 0;
1075 border-bottom: 1px solid var(--shell-line);
1076 overflow: visible;
1077 padding: 0;
1078 }
1079 #control-panel {
1080 height: auto;
1081 min-height: 0;
1082 }
1083 #form {
1084 overflow: visible;
1085 padding: 20px;
1086 }
1087 #actionbar {
1088 position: sticky;
1089 bottom: 0;
1090 padding: 14px 20px;
1091 }
1092 .chip-with-preview {
1093 width: min(100%, 230px);
1094 }
1095 .chip-preview-visual_style {
1096 width: 100%;
1097 }
1098 .style-preview-card {
1099 flex-wrap: wrap;
1100 }
1101 .template-mode-choices {
1102 grid-template-columns: 1fr;
1103 }
1104 }
1105
1105 lines CSS