@designbasekorea/theme 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,629 @@
1
+ /**
2
+ * 기본 시맨틱 HTML 태그 테마별 스타일
3
+ *
4
+ * 목적: 기본 HTML 요소들에 대한 테마별 일관된 스타일 제공
5
+ * 기능: 라이트/다크/브랜드 테마에 따른 자동 색상 적용
6
+ * 사용법: 자동으로 적용되며, data-theme 속성에 따라 색상 변경
7
+ */
8
+
9
+ // ============================================================================
10
+ // 기본 시맨틱 태그 스타일
11
+ // ============================================================================
12
+
13
+ // 제목 태그들 (h1 ~ h6)
14
+ h1,
15
+ h2,
16
+ h3,
17
+ h4,
18
+ h5,
19
+ h6 {
20
+ margin: 0;
21
+ padding: 0;
22
+ font-weight: 600;
23
+ line-height: 1.2;
24
+ color: var(--db-text-primary);
25
+ transition: color 0.3s ease;
26
+ }
27
+
28
+ h1 {
29
+ font-size: 2.5rem;
30
+ font-weight: 700;
31
+ margin-bottom: var(--db-margin-l);
32
+ }
33
+
34
+ h2 {
35
+ font-size: 2rem;
36
+ font-weight: 600;
37
+ margin-bottom: var(--db-margin-m);
38
+ }
39
+
40
+ h3 {
41
+ font-size: 1.75rem;
42
+ font-weight: 600;
43
+ margin-bottom: var(--db-margin-m);
44
+ }
45
+
46
+ h4 {
47
+ font-size: 1.5rem;
48
+ font-weight: 600;
49
+ margin-bottom: var(--db-margin-s);
50
+ }
51
+
52
+ h5 {
53
+ font-size: 1.25rem;
54
+ font-weight: 600;
55
+ margin-bottom: var(--db-margin-s);
56
+ }
57
+
58
+ h6 {
59
+ font-size: 1rem;
60
+ font-weight: 600;
61
+ margin-bottom: var(--db-margin-xs);
62
+ }
63
+
64
+ // 단락 태그
65
+ p {
66
+ margin: 0 0 var(--db-margin-m) 0;
67
+ line-height: 1.6;
68
+ color: var(--db-text-primary);
69
+ transition: color 0.3s ease;
70
+ }
71
+
72
+ // 링크 태그
73
+ a {
74
+ color: var(--db-text-link);
75
+ text-decoration: none;
76
+ transition: all 0.3s ease;
77
+ cursor: pointer;
78
+
79
+ &:hover {
80
+ color: var(--db-text-link-hover);
81
+ text-decoration: underline;
82
+ }
83
+
84
+ &:active {
85
+ color: var(--db-text-link);
86
+ }
87
+
88
+ &:focus {
89
+ outline: 2px solid var(--db-border-focus);
90
+ outline-offset: 2px;
91
+ }
92
+ }
93
+
94
+ // 강조 태그
95
+ strong,
96
+ b {
97
+ font-weight: 600;
98
+ color: var(--db-text-primary);
99
+ }
100
+
101
+ em,
102
+ i {
103
+ font-style: italic;
104
+ color: var(--db-text-primary);
105
+ }
106
+
107
+ // 인용 태그
108
+ blockquote {
109
+ margin: var(--db-margin-m) 0;
110
+ padding: var(--db-padding-m) var(--db-padding-l);
111
+ border-left: 4px solid var(--db-border-primary);
112
+ background-color: var(--db-bg-secondary);
113
+ color: var(--db-text-secondary);
114
+ font-style: italic;
115
+ border-radius: 0 8px 8px 0;
116
+ }
117
+
118
+ // 코드 태그
119
+ code {
120
+ background-color: var(--db-bg-tertiary);
121
+ color: var(--db-text-primary);
122
+ padding: 0.125rem 0.25rem;
123
+ border-radius: 4px;
124
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
125
+ font-size: 0.875em;
126
+ border: 1px solid var(--db-border-muted);
127
+ }
128
+
129
+ pre {
130
+ background-color: var(--db-bg-tertiary);
131
+ color: var(--db-text-primary);
132
+ padding: var(--db-padding-m);
133
+ border-radius: 8px;
134
+ overflow-x: auto;
135
+ border: 1px solid var(--db-border-muted);
136
+ margin: var(--db-margin-m) 0;
137
+
138
+ code {
139
+ background: none;
140
+ border: none;
141
+ padding: 0;
142
+ color: inherit;
143
+ }
144
+ }
145
+
146
+ // 목록 태그
147
+ ul,
148
+ ol {
149
+ margin: 0 0 var(--db-margin-m) 0;
150
+ padding-left: var(--db-padding-l);
151
+ color: var(--db-text-primary);
152
+ }
153
+
154
+ li {
155
+ margin-bottom: var(--db-margin-s);
156
+ line-height: 1.6;
157
+ color: var(--db-text-primary);
158
+ }
159
+
160
+ // 정의 목록
161
+ dl {
162
+ margin: 0 0 var(--db-margin-m) 0;
163
+ }
164
+
165
+ dt {
166
+ font-weight: 600;
167
+ color: var(--db-text-primary);
168
+ margin-bottom: var(--db-margin-xs);
169
+ }
170
+
171
+ dd {
172
+ margin: 0 0 var(--db-margin-s) var(--db-padding-l);
173
+ color: var(--db-text-secondary);
174
+ }
175
+
176
+ // 구분선
177
+ hr {
178
+ border: none;
179
+ height: 1px;
180
+ background-color: var(--db-border-muted);
181
+ margin: var(--db-margin-xl) 0;
182
+ }
183
+
184
+ // 테이블 태그
185
+ table {
186
+ width: 100%;
187
+ border-collapse: collapse;
188
+ margin: var(--db-margin-m) 0;
189
+ color: var(--db-text-primary);
190
+ }
191
+
192
+ th,
193
+ td {
194
+ padding: var(--db-padding-s);
195
+ text-align: left;
196
+ border-bottom: 1px solid var(--db-border-muted);
197
+ }
198
+
199
+ th {
200
+ background-color: var(--db-bg-secondary);
201
+ font-weight: 600;
202
+ color: var(--db-text-primary);
203
+ }
204
+
205
+ tr:hover {
206
+ background-color: var(--db-bg-secondary);
207
+ }
208
+
209
+ // 폼 요소들
210
+ input,
211
+ textarea,
212
+ select {
213
+ font-family: inherit;
214
+ font-size: inherit;
215
+ color: var(--db-text-primary);
216
+ background-color: var(--db-bg-primary);
217
+ border: 1px solid var(--db-border-primary);
218
+ border-radius: 6px;
219
+ padding: var(--db-padding-s) var(--db-padding-s);
220
+ transition: all 0.3s ease;
221
+
222
+ &:focus {
223
+ outline: none;
224
+ border-color: var(--db-border-focus);
225
+ box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.1);
226
+ }
227
+
228
+ &:disabled {
229
+ background-color: var(--db-bg-tertiary);
230
+ color: var(--db-text-disabled);
231
+ cursor: not-allowed;
232
+ }
233
+
234
+ &::placeholder {
235
+ color: var(--db-text-muted);
236
+ }
237
+ }
238
+
239
+ // 버튼 태그
240
+ button {
241
+ font-family: inherit;
242
+ font-size: inherit;
243
+ color: var(--db-text-primary);
244
+ background-color: var(--db-bg-primary);
245
+ border: 1px solid var(--db-border-primary);
246
+ border-radius: 6px;
247
+ padding: var(--db-padding-s) var(--db-padding-m);
248
+ cursor: pointer;
249
+ transition: all 0.3s ease;
250
+
251
+ &:hover {
252
+ background-color: var(--db-bg-secondary);
253
+ border-color: var(--db-border-focus);
254
+ }
255
+
256
+ &:active {
257
+ transform: translateY(1px);
258
+ }
259
+
260
+ &:focus {
261
+ outline: none;
262
+ border-color: var(--db-border-focus);
263
+ box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.1);
264
+ }
265
+
266
+ &:disabled {
267
+ background-color: var(--db-bg-tertiary);
268
+ color: var(--db-text-disabled);
269
+ cursor: not-allowed;
270
+ }
271
+ }
272
+
273
+ // 라벨 태그
274
+ label {
275
+ display: inline-block;
276
+ margin-bottom: var(--db-margin-s);
277
+ font-weight: 500;
278
+ color: var(--db-text-primary);
279
+ }
280
+
281
+ // 필드셋과 레전드
282
+ fieldset {
283
+ border: 1px solid var(--db-border-muted);
284
+ border-radius: 8px;
285
+ padding: var(--db-padding-m);
286
+ margin: var(--db-margin-m) 0;
287
+ }
288
+
289
+ legend {
290
+ padding: 0 var(--db-padding-s);
291
+ font-weight: 600;
292
+ color: var(--color-text-primary);
293
+ }
294
+
295
+ // 체크박스와 라디오 버튼
296
+ input[type="checkbox"],
297
+ input[type="radio"] {
298
+ margin-right: var(--db-margin-s);
299
+ width: auto;
300
+ height: auto;
301
+ }
302
+
303
+ // 범위 슬라이더
304
+ input[type="range"] {
305
+ background: transparent;
306
+ border: none;
307
+ padding: 0;
308
+ height: 6px;
309
+ border-radius: 3px;
310
+ background: var(--color-border-muted);
311
+
312
+ &::-webkit-slider-thumb {
313
+ appearance: none;
314
+ width: 18px;
315
+ height: 18px;
316
+ border-radius: 50%;
317
+ background: var(--color-action-primary-bg);
318
+ cursor: pointer;
319
+ border: 2px solid var(--color-bg-primary);
320
+ }
321
+
322
+ &::-moz-range-thumb {
323
+ width: 18px;
324
+ height: 18px;
325
+ border-radius: 50%;
326
+ background: var(--color-action-primary-bg);
327
+ cursor: pointer;
328
+ border: 2px solid var(--color-bg-primary);
329
+ }
330
+ }
331
+
332
+ // 진행바
333
+ progress {
334
+ width: 100%;
335
+ height: 8px;
336
+ border-radius: 4px;
337
+ background-color: var(--color-bg-tertiary);
338
+ border: none;
339
+
340
+ &::-webkit-progress-bar {
341
+ background-color: var(--color-bg-tertiary);
342
+ border-radius: 4px;
343
+ }
344
+
345
+ &::-webkit-progress-value {
346
+ background-color: var(--color-action-primary-bg);
347
+ border-radius: 4px;
348
+ }
349
+
350
+ &::-moz-progress-bar {
351
+ background-color: var(--color-action-primary-bg);
352
+ border-radius: 4px;
353
+ }
354
+ }
355
+
356
+ // 미터
357
+ meter {
358
+ width: 100%;
359
+ height: 8px;
360
+ border-radius: 4px;
361
+ background-color: var(--color-bg-tertiary);
362
+ border: none;
363
+
364
+ &::-webkit-meter-bar {
365
+ background-color: var(--color-bg-tertiary);
366
+ border-radius: 4px;
367
+ }
368
+
369
+ &::-webkit-meter-optimum-value {
370
+ background-color: var(--color-green-500);
371
+ border-radius: 4px;
372
+ }
373
+
374
+ &::-webkit-meter-suboptimum-value {
375
+ background-color: var(--color-yellow-500);
376
+ border-radius: 4px;
377
+ }
378
+
379
+ &::-webkit-meter-even-less-good-value {
380
+ background-color: var(--color-red-500);
381
+ border-radius: 4px;
382
+ }
383
+ }
384
+
385
+ // 상세 정보
386
+ details {
387
+ margin: var(--db-margin-m) 0;
388
+ border: 1px solid var(--color-border-muted);
389
+ border-radius: 8px;
390
+ overflow: hidden;
391
+ }
392
+
393
+ summary {
394
+ padding: var(--db-padding-m);
395
+ background-color: var(--db-bg-secondary);
396
+ color: var(--db-text-primary);
397
+ font-weight: 600;
398
+ cursor: pointer;
399
+ transition: background-color 0.3s ease;
400
+
401
+ &:hover {
402
+ background-color: var(--db-bg-tertiary);
403
+ }
404
+
405
+ &::-webkit-details-marker {
406
+ color: var(--db-text-muted);
407
+ }
408
+ }
409
+
410
+ details[open] summary {
411
+ border-bottom: 1px solid var(--db-border-muted);
412
+ }
413
+
414
+ details>div {
415
+ padding: var(--db-padding-m);
416
+ color: var(--db-text-primary);
417
+ }
418
+
419
+ // 마크 태그
420
+ mark {
421
+ background-color: var(--db-yellow-200);
422
+ color: var(--db-yellow-900);
423
+ padding: var(--db-padding-xxs) var(--db-padding-xs);
424
+ border-radius: 3px;
425
+ }
426
+
427
+ // 삭제된 텍스트
428
+ del,
429
+ s {
430
+ color: var(--db-text-muted);
431
+ text-decoration: line-through;
432
+ }
433
+
434
+ // 삽입된 텍스트
435
+ ins,
436
+ u {
437
+ color: var(--db-text-primary);
438
+ text-decoration: underline;
439
+ }
440
+
441
+ // 작은 텍스트
442
+ small {
443
+ font-size: 0.875em;
444
+ color: var(--db-text-muted);
445
+ }
446
+
447
+ // 큰 텍스트
448
+ big {
449
+ font-size: 1.125em;
450
+ color: var(--db-text-primary);
451
+ }
452
+
453
+ // 인용
454
+ cite {
455
+ font-style: italic;
456
+ color: var(--db-text-secondary);
457
+ }
458
+
459
+ // 시간
460
+ time {
461
+ color: var(--color-text-muted);
462
+ font-size: 0.875em;
463
+ }
464
+
465
+ // 주소
466
+ address {
467
+ font-style: normal;
468
+ color: var(--color-text-secondary);
469
+ margin: var(--db-margin-m) 0;
470
+ }
471
+
472
+ // 아티클과 섹션
473
+ article,
474
+ section {
475
+ margin: var(--db-margin-xl) 0;
476
+ }
477
+
478
+ // 헤더와 푸터
479
+ header,
480
+ footer {
481
+ padding: var(--db-padding-m) 0;
482
+ color: var(--db-text-primary);
483
+ }
484
+
485
+ // 네비게이션
486
+ nav {
487
+ ul {
488
+ list-style: none;
489
+ padding: 0;
490
+ margin: 0;
491
+ display: flex;
492
+ gap: var(--db-gap-m);
493
+ }
494
+
495
+ a {
496
+ color: var(--db-text-primary);
497
+ text-decoration: none;
498
+ padding: var(--db-padding-s);
499
+ border-radius: 4px;
500
+ transition: all 0.3s ease;
501
+
502
+ &:hover {
503
+ background-color: var(--db-bg-secondary);
504
+ color: var(--db-text-primary);
505
+ }
506
+
507
+ &.active {
508
+ background-color: var(--db-color-primary);
509
+ color: var(--db-text-inverse);
510
+ }
511
+ }
512
+ }
513
+
514
+ // 메인 콘텐츠
515
+ main {
516
+ min-height: 100vh;
517
+ color: var(--db-text-primary);
518
+ }
519
+
520
+ // 사이드바
521
+ aside {
522
+ background-color: var(--db-bg-secondary);
523
+ padding: var(--db-padding-m);
524
+ border-radius: 8px;
525
+ color: var(--db-text-primary);
526
+ }
527
+
528
+ // 그림
529
+ figure {
530
+ margin: var(--db-margin-xl) 0;
531
+ text-align: center;
532
+ }
533
+
534
+ figcaption {
535
+ margin-top: var(--db-margin-s);
536
+ color: var(--db-text-secondary);
537
+ font-size: 0.875em;
538
+ }
539
+
540
+ // 비디오와 오디오
541
+ video,
542
+ audio {
543
+ max-width: 100%;
544
+ border-radius: 8px;
545
+ }
546
+
547
+ // 캔버스
548
+ canvas {
549
+ border: 1px solid var(--db-border-muted);
550
+ border-radius: 8px;
551
+ }
552
+
553
+ // 선택된 텍스트
554
+ ::selection {
555
+ background-color: var(--db-color-primary);
556
+ color: var(--db-text-inverse);
557
+ }
558
+
559
+ ::-moz-selection {
560
+ background-color: var(--db-color-primary);
561
+ color: var(--db-text-inverse);
562
+ }
563
+
564
+ // 포커스 표시
565
+ :focus-visible {
566
+ outline: 2px solid var(--db-border-focus);
567
+ outline-offset: 2px;
568
+ }
569
+
570
+ // 스크롤바 스타일링
571
+ ::-webkit-scrollbar {
572
+ width: 8px;
573
+ height: 8px;
574
+ }
575
+
576
+ ::-webkit-scrollbar-track {
577
+ background: var(--db-bg-tertiary);
578
+ border-radius: 4px;
579
+ }
580
+
581
+ ::-webkit-scrollbar-thumb {
582
+ background: var(--db-border-muted);
583
+ border-radius: 4px;
584
+
585
+ &:hover {
586
+ background: var(--db-border-primary);
587
+ }
588
+ }
589
+
590
+ // 다크 모드 지원
591
+ [data-theme="dark"] {
592
+
593
+ // 다크 모드에서 추가적인 스타일 조정
594
+ code,
595
+ pre {
596
+ background-color: var(--db-bg-tertiary);
597
+ border-color: var(--db-border-primary);
598
+ }
599
+
600
+ blockquote {
601
+ background-color: var(--db-bg-tertiary);
602
+ border-left-color: var(--db-border-primary);
603
+ }
604
+
605
+ input,
606
+ textarea,
607
+ select {
608
+ background-color: var(--db-bg-primary);
609
+ border-color: var(--db-border-primary);
610
+ }
611
+ }
612
+
613
+ // 브랜드 테마 지원
614
+ [data-theme="brand"] {
615
+
616
+ // 브랜드 테마에서 추가적인 스타일 조정
617
+ h1,
618
+ h2,
619
+ h3,
620
+ h4,
621
+ h5,
622
+ h6 {
623
+ color: var(--db-text-primary);
624
+ }
625
+
626
+ a {
627
+ color: var(--db-text-link);
628
+ }
629
+ }