newtil-css 0.2.95 → 0.2.96

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.
Files changed (3) hide show
  1. package/dist/style.css +62 -1358
  2. package/dist/utils.css +821 -2439
  3. package/package.json +1 -1
package/dist/style.css CHANGED
@@ -12022,406 +12022,6 @@ Variables 커스터마이징:
12022
12022
  }
12023
12023
  }
12024
12024
  /* ===== ACCESSIBILITY (접근성) ===== */
12025
- /* ===== SCREEN READER UTILITIES ===== */
12026
- /* CSS 속성명과 값을 그대로 유지하는 NewTil CSS 철학 */
12027
- /* 스크린 리더 접근성: 시각적으로 숨기기, 스크린 리더 전용 텍스트 등 */
12028
- /* ===== VISUALLY HIDDEN (시각적으로 숨기기) ===== */
12029
- /* 스크린 리더에서는 읽히지만 시각적으로는 숨김 */
12030
- .visually-hidden,
12031
- .sr-only {
12032
- position: absolute !important;
12033
- width: 1px !important;
12034
- height: 1px !important;
12035
- padding: 0 !important;
12036
- margin: -1px !important;
12037
- overflow: hidden !important;
12038
- clip: rect(0, 0, 0, 0) !important;
12039
- white-space: nowrap !important;
12040
- border: 0 !important;
12041
- }
12042
- /* 포커스될 때만 보이는 숨김 요소 */
12043
- .visually-hidden-focusable,
12044
- .sr-only-focusable {
12045
- position: absolute !important;
12046
- width: 1px !important;
12047
- height: 1px !important;
12048
- padding: 0 !important;
12049
- margin: -1px !important;
12050
- overflow: hidden !important;
12051
- clip: rect(0, 0, 0, 0) !important;
12052
- white-space: nowrap !important;
12053
- border: 0 !important;
12054
- }
12055
- .visually-hidden-focusable:focus,
12056
- .sr-only-focusable:focus {
12057
- position: static !important;
12058
- width: auto !important;
12059
- height: auto !important;
12060
- padding: var(--space-2) var(--space-4) !important;
12061
- margin: 0 !important;
12062
- overflow: visible !important;
12063
- clip: auto !important;
12064
- white-space: normal !important;
12065
- background-color: var(--color-main-1) !important;
12066
- color: var(--color-white) !important;
12067
- border-radius: var(--radius-sm) !important;
12068
- box-shadow: var(--shadow-lg) !important;
12069
- z-index: var(--z-index-tooltip) !important;
12070
- }
12071
- /* ===== SCREEN READER ONLY TEXT (스크린 리더 전용 텍스트) ===== */
12072
- /* 아이콘에 대한 설명 텍스트 */
12073
- .icon-description,
12074
- .sr-description {
12075
- position: absolute !important;
12076
- width: 1px !important;
12077
- height: 1px !important;
12078
- padding: 0 !important;
12079
- margin: -1px !important;
12080
- overflow: hidden !important;
12081
- clip: rect(0, 0, 0, 0) !important;
12082
- white-space: nowrap !important;
12083
- border: 0 !important;
12084
- }
12085
- /* 링크에 대한 추가 설명 */
12086
- .link-description,
12087
- .sr-link-text {
12088
- position: absolute !important;
12089
- width: 1px !important;
12090
- height: 1px !important;
12091
- padding: 0 !important;
12092
- margin: -1px !important;
12093
- overflow: hidden !important;
12094
- clip: rect(0, 0, 0, 0) !important;
12095
- white-space: nowrap !important;
12096
- border: 0 !important;
12097
- }
12098
- /* ===== ARIA ATTRIBUTES SUPPORT (ARIA 속성 지원) ===== */
12099
- /* aria-hidden="true" 요소 스타일링 */
12100
- [aria-hidden="true"] {
12101
- display: none !important;
12102
- }
12103
- /* aria-expanded 상태 표시 */
12104
- [aria-expanded="false"] .collapse-icon {
12105
- transform: rotate(0deg) !important;
12106
- transition: transform var(--duration-fast) var(--ease-out) !important;
12107
- }
12108
- [aria-expanded="true"] .collapse-icon {
12109
- transform: rotate(180deg) !important;
12110
- transition: transform var(--duration-fast) var(--ease-out) !important;
12111
- }
12112
- /* aria-disabled 상태 스타일링 */
12113
- [aria-disabled="true"] {
12114
- opacity: var(--opacity-50) !important;
12115
- cursor: not-allowed !important;
12116
- pointer-events: none !important;
12117
- }
12118
- /* aria-selected 상태 스타일링 */
12119
- [aria-selected="true"] {
12120
- background-color: var(--color-main-1) !important;
12121
- color: var(--color-white) !important;
12122
- }
12123
- [aria-selected="false"] {
12124
- background-color: transparent !important;
12125
- color: var(--color-base-7) !important;
12126
- }
12127
- /* aria-current 상태 스타일링 */
12128
- [aria-current="page"],
12129
- [aria-current="step"],
12130
- [aria-current="location"] {
12131
- background-color: var(--color-accent-1) !important;
12132
- color: var(--color-white) !important;
12133
- font-weight: var(--font-weight-semibold) !important;
12134
- }
12135
- /* ===== SKIP LINKS (스킵 링크) ===== */
12136
- /* 메인 컨텐츠로 건너뛰기 링크 */
12137
- .skip-link {
12138
- position: absolute !important;
12139
- top: -40px !important;
12140
- left: var(--space-4) !important;
12141
- background: var(--color-base-9) !important;
12142
- color: var(--color-white) !important;
12143
- padding: var(--space-2) var(--space-4) !important;
12144
- text-decoration: none !important;
12145
- border-radius: var(--radius-sm) !important;
12146
- z-index: var(--z-index-tooltip) !important;
12147
- transition: top var(--duration-fast) var(--ease-out) !important;
12148
- }
12149
- .skip-link:focus {
12150
- top: var(--space-4) !important;
12151
- }
12152
- /* 네비게이션 스킵 링크들 */
12153
- .skip-links {
12154
- position: absolute !important;
12155
- top: 0 !important;
12156
- left: 0 !important;
12157
- z-index: var(--z-index-modal) !important;
12158
- }
12159
- .skip-links a {
12160
- position: absolute !important;
12161
- top: -40px !important;
12162
- left: var(--space-4) !important;
12163
- background: var(--color-base-9) !important;
12164
- color: var(--color-white) !important;
12165
- padding: var(--space-2) var(--space-4) !important;
12166
- text-decoration: none !important;
12167
- border-radius: var(--radius-sm) !important;
12168
- transition: top var(--duration-fast) var(--ease-out) !important;
12169
- margin-right: var(--space-2) !important;
12170
- }
12171
- .skip-links a:focus {
12172
- top: var(--space-4) !important;
12173
- }
12174
- /* ===== LANDMARK REGIONS (랜드마크 영역) ===== */
12175
- /* 메인 컨텐츠 영역 표시 */
12176
- main[role="main"],
12177
- [role="main"],
12178
- .main-content {
12179
- scroll-margin-top: var(
12180
- --space-20
12181
- ) !important; /* 고정 헤더를 위한 스크롤 마진 */
12182
- }
12183
- /* 네비게이션 영역 */
12184
- nav[role="navigation"],
12185
- [role="navigation"],
12186
- .navigation {
12187
- position: relative !important;
12188
- }
12189
- /* 배너 영역 (헤더) */
12190
- header[role="banner"],
12191
- [role="banner"],
12192
- .site-header {
12193
- position: relative !important;
12194
- }
12195
- /* 콘텐츠 정보 영역 (푸터) */
12196
- footer[role="contentinfo"],
12197
- [role="contentinfo"],
12198
- .site-footer {
12199
- position: relative !important;
12200
- }
12201
- /* 보완 영역 (사이드바) */
12202
- aside[role="complementary"],
12203
- [role="complementary"],
12204
- .sidebar {
12205
- position: relative !important;
12206
- }
12207
- /* ===== FORM ACCESSIBILITY (폼 접근성) ===== */
12208
- /* 필수 입력 필드 표시 */
12209
- [aria-required="true"],
12210
- [required] {
12211
- position: relative !important;
12212
- }
12213
- [aria-required="true"]::after,
12214
- [required]::after {
12215
- content: " *" !important;
12216
- color: var(--color-danger-1) !important;
12217
- font-weight: var(--font-weight-bold) !important;
12218
- }
12219
- /* 에러 상태 표시 */
12220
- [aria-invalid="true"] {
12221
- border-color: var(--color-danger-1) !important;
12222
- box-shadow: 0 0 0 2px rgba(var(--rgb-danger-1), 0.2) !important;
12223
- }
12224
- /* 에러 메시지 스타일링 */
12225
- .error-message,
12226
- [role="alert"],
12227
- .alert-error {
12228
- color: var(--color-danger-1) !important;
12229
- background-color: rgba(var(--rgb-danger-1), 0.1) !important;
12230
- border: 1px solid var(--color-danger-1) !important;
12231
- border-radius: var(--radius-sm) !important;
12232
- padding: var(--space-2) var(--space-3) !important;
12233
- margin-top: var(--space-1) !important;
12234
- font-size: var(--font-size-sm) !important;
12235
- }
12236
- /* 성공 메시지 스타일링 */
12237
- .success-message,
12238
- .alert-success {
12239
- color: var(--color-success-1) !important;
12240
- background-color: rgba(var(--rgb-success-1), 0.1) !important;
12241
- border: 1px solid var(--color-success-1) !important;
12242
- border-radius: var(--radius-sm) !important;
12243
- padding: var(--space-2) var(--space-3) !important;
12244
- margin-top: var(--space-1) !important;
12245
- font-size: var(--font-size-sm) !important;
12246
- }
12247
- /* 경고 메시지 스타일링 */
12248
- .warning-message,
12249
- .alert-warning {
12250
- color: var(--color-warning-1) !important;
12251
- background-color: rgba(var(--rgb-warning-1), 0.1) !important;
12252
- border: 1px solid var(--color-warning-1) !important;
12253
- border-radius: var(--radius-sm) !important;
12254
- padding: var(--space-2) var(--space-3) !important;
12255
- margin-top: var(--space-1) !important;
12256
- font-size: var(--font-size-sm) !important;
12257
- }
12258
- /* ===== KEYBOARD NAVIGATION (키보드 네비게이션) ===== */
12259
- /* 키보드 포커스 표시자 */
12260
- .keyboard-focusable {
12261
- outline: 2px solid transparent !important;
12262
- outline-offset: 2px !important;
12263
- transition: outline-color var(--duration-fast) var(--ease-out) !important;
12264
- }
12265
- .keyboard-focusable:focus-visible {
12266
- outline-color: var(--color-main-1) !important;
12267
- }
12268
- /* 탭 순서 건너뛰기 */
12269
- .skip-tab-order {
12270
- position: absolute !important;
12271
- left: -10000px !important;
12272
- top: auto !important;
12273
- width: 1px !important;
12274
- height: 1px !important;
12275
- overflow: hidden !important;
12276
- }
12277
- /* ===== READING ORDER (읽기 순서) ===== */
12278
- /* 스크린 리더 읽기 순서 조정 */
12279
- .reading-order-1 {
12280
- order: 1 !important;
12281
- }
12282
- .reading-order-2 {
12283
- order: 2 !important;
12284
- }
12285
- .reading-order-3 {
12286
- order: 3 !important;
12287
- }
12288
- .reading-order-4 {
12289
- order: 4 !important;
12290
- }
12291
- .reading-order-5 {
12292
- order: 5 !important;
12293
- }
12294
- /* ===== SCREEN READER ANNOUNCEMENTS (스크린 리더 안내) ===== */
12295
- /* 라이브 영역 설정 */
12296
- .live-region-polite,
12297
- [aria-live="polite"] {
12298
- position: relative !important;
12299
- }
12300
- .live-region-assertive,
12301
- [aria-live="assertive"] {
12302
- position: relative !important;
12303
- }
12304
- .live-region-off,
12305
- [aria-live="off"] {
12306
- position: relative !important;
12307
- }
12308
- /* 상태 안내 메시지 */
12309
- .status-message {
12310
- position: absolute !important;
12311
- width: 1px !important;
12312
- height: 1px !important;
12313
- padding: 0 !important;
12314
- margin: -1px !important;
12315
- overflow: hidden !important;
12316
- clip: rect(0, 0, 0, 0) !important;
12317
- white-space: nowrap !important;
12318
- border: 0 !important;
12319
- }
12320
- /* ===== TABLE ACCESSIBILITY (테이블 접근성) ===== */
12321
- /* 테이블 캡션 스타일링 */
12322
- .table-caption,
12323
- caption {
12324
- text-align: left !important;
12325
- padding: var(--space-2) var(--space-4) !important;
12326
- font-weight: var(--font-weight-semibold) !important;
12327
- background-color: var(--color-base-1) !important;
12328
- border-bottom: 1px solid var(--color-base-3) !important;
12329
- }
12330
- /* 테이블 헤더 강조 */
12331
- .table-header,
12332
- th {
12333
- background-color: var(--color-base-2) !important;
12334
- font-weight: var(--font-weight-semibold) !important;
12335
- text-align: left !important;
12336
- padding: var(--space-3) var(--space-4) !important;
12337
- border-bottom: 2px solid var(--color-base-4) !important;
12338
- }
12339
- /* 데이터 셀 스타일링 */
12340
- .table-cell,
12341
- td {
12342
- padding: var(--space-3) var(--space-4) !important;
12343
- border-bottom: 1px solid var(--color-base-3) !important;
12344
- vertical-align: top !important;
12345
- }
12346
- /* ===== RESPONSIVE ACCESSIBILITY ===== */
12347
- /* 모바일에서 스크린 리더 최적화 */
12348
- @media (max-width: 767px) {
12349
- .skip-link {
12350
- left: var(--space-2) !important;
12351
- padding: var(--space-3) var(--space-4) !important;
12352
- font-size: var(--font-size-base) !important;
12353
- }
12354
-
12355
- .visually-hidden-focusable:focus {
12356
- padding: var(--space-3) var(--space-4) !important;
12357
- font-size: var(--font-size-base) !important;
12358
- }
12359
- }
12360
- /* 큰 화면에서 스킵 링크 위치 조정 */
12361
- @media (min-width: 1024px) {
12362
- .skip-link {
12363
- left: var(--space-8) !important;
12364
- }
12365
-
12366
- .skip-links a {
12367
- left: var(--space-8) !important;
12368
- }
12369
- }
12370
- /* ===== MOTION SENSITIVITY (모션 민감도) ===== */
12371
- /* 모션 감소 선호도 존중 */
12372
- @media (prefers-reduced-motion: reduce) {
12373
- .visually-hidden-focusable,
12374
- .skip-link,
12375
- .skip-links a,
12376
- [aria-expanded] .collapse-icon {
12377
- transition: none !important;
12378
- animation: none !important;
12379
- }
12380
- }
12381
- /* ===== UTILITY COMBINATIONS ===== */
12382
- /* 접근 가능한 버튼 */
12383
- .accessible-button {
12384
- position: relative !important;
12385
- display: inline-flex !important;
12386
- align-items: center !important;
12387
- justify-content: center !important;
12388
- padding: var(--space-2) var(--space-4) !important;
12389
- background-color: var(--color-main-1) !important;
12390
- color: var(--color-white) !important;
12391
- border: none !important;
12392
- border-radius: var(--radius-sm) !important;
12393
- cursor: pointer !important;
12394
- outline: 2px solid transparent !important;
12395
- outline-offset: 2px !important;
12396
- transition: all var(--duration-fast) var(--ease-out) !important;
12397
- }
12398
- .accessible-button:focus-visible {
12399
- outline-color: var(--color-accent-1) !important;
12400
- }
12401
- .accessible-button:disabled {
12402
- opacity: var(--opacity-50) !important;
12403
- cursor: not-allowed !important;
12404
- pointer-events: none !important;
12405
- }
12406
- /* 접근 가능한 링크 */
12407
- .accessible-link {
12408
- color: var(--color-main-1) !important;
12409
- text-decoration: underline !important;
12410
- outline: 2px solid transparent !important;
12411
- outline-offset: 2px !important;
12412
- border-radius: var(--radius-xs) !important;
12413
- transition: all var(--duration-fast) var(--ease-out) !important;
12414
- }
12415
- .accessible-link:hover {
12416
- color: var(--color-main-2) !important;
12417
- text-decoration-thickness: 2px !important;
12418
- }
12419
- .accessible-link:focus-visible {
12420
- outline-color: var(--color-main-1) !important;
12421
- background-color: rgba(var(--rgb-main-1), 0.1) !important;
12422
- padding: 2px 4px !important;
12423
- margin: -2px -4px !important;
12424
- }
12425
12025
  /* ===== FOCUS UTILITIES ===== */
12426
12026
  /* CSS 속성명과 값을 그대로 유지하는 NewTil CSS 철학 */
12427
12027
  /* 포커스 관리: outline, focus-visible, focus-within 등 */
@@ -12755,511 +12355,81 @@ td {
12755
12355
  outline-width: 2px;
12756
12356
  }
12757
12357
  50% {
12758
- outline-color: var(--color-main-2);
12759
- outline-width: 3px;
12760
- }
12761
- }
12762
- /* ===== FOCUS MANAGEMENT (포커스 관리) ===== */
12763
- /* 자동 포커스 */
12764
- .auto-focus {
12765
- outline: 2px solid var(--color-main-1) !important;
12766
- outline-offset: 2px !important;
12767
- }
12768
- /* 포커스 방지 */
12769
- .no-focus {
12770
- outline: none !important;
12771
- -webkit-tap-highlight-color: transparent !important;
12772
- }
12773
- .no-focus:focus,
12774
- .no-focus:focus-visible {
12775
- outline: none !important;
12776
- box-shadow: none !important;
12777
- }
12778
- /* 키보드 전용 포커스 */
12779
- .keyboard-only-focus {
12780
- outline: none !important;
12781
- }
12782
- .keyboard-only-focus:focus:not(:focus-visible) {
12783
- outline: none !important;
12784
- box-shadow: none !important;
12785
- }
12786
- .keyboard-only-focus:focus-visible {
12787
- outline: 2px solid var(--color-main-1) !important;
12788
- outline-offset: 2px !important;
12789
- }
12790
- /* ===== RESPONSIVE FOCUS ===== */
12791
- /* 모바일 포커스 최적화 */
12792
- @media (max-width: 767px) {
12793
- .focus-indicator,
12794
- .btn-focus,
12795
- .link-focus,
12796
- .input-focus {
12797
- outline-width: 3px !important;
12798
- outline-offset: 3px !important;
12799
- }
12800
- }
12801
- /* 터치 디바이스 포커스 */
12802
- @media (hover: none) and (pointer: coarse) {
12803
- .focus-indicator:focus-visible,
12804
- .btn-focus:focus-visible,
12805
- .link-focus:focus-visible {
12806
- outline-width: 3px !important;
12807
- outline-offset: 3px !important;
12808
- }
12809
- }
12810
- /* ===== MOTION SENSITIVITY (모션 민감도) ===== */
12811
- @media (prefers-reduced-motion: reduce) {
12812
- .focus-indicator,
12813
- .btn-focus,
12814
- .link-focus,
12815
- .input-focus,
12816
- .focus-glow,
12817
- .focus-pulse {
12818
- transition: none !important;
12819
- animation: none !important;
12820
- }
12821
- }
12822
- /* ===== HIGH CONTRAST MODE (고대비 모드) ===== */
12823
- @media (prefers-contrast: high) {
12824
- .focus-indicator:focus-visible,
12825
- .btn-focus:focus-visible,
12826
- .link-focus:focus-visible,
12827
- .input-focus:focus {
12828
- outline-width: 3px !important;
12829
- outline-color: var(--color-base-10) !important;
12830
- background-color: var(--color-yellow) !important;
12831
- color: var(--color-base-10) !important;
12832
- }
12833
- }
12834
- /* ===== HIGH CONTRAST UTILITIES ===== */
12835
- /* CSS 속성명과 값을 그대로 유지하는 NewTil CSS 철학 */
12836
- /* 고대비 접근성: 시각 장애인, 저시력자를 위한 고대비 스타일 */
12837
- /* ===== HIGH CONTRAST DETECTION (고대비 모드 감지) ===== */
12838
- /* 고대비 모드가 활성화된 경우에만 적용되는 스타일 */
12839
- @media (prefers-contrast: high) {
12840
- /* 기본 텍스트 대비 강화 */
12841
- .text-high-contrast,
12842
- .high-contrast-text {
12843
- color: var(--color-black) !important;
12844
- background-color: var(--color-white) !important;
12845
- border: 2px solid var(--color-black) !important;
12846
- }
12847
-
12848
- /* 링크 대비 강화 */
12849
- .link-high-contrast,
12850
- .high-contrast-link {
12851
- color: var(--color-blue) !important;
12852
- text-decoration: underline !important;
12853
- text-decoration-thickness: 2px !important;
12854
- background-color: var(--color-white) !important;
12855
- }
12856
-
12857
- .link-high-contrast:hover,
12858
- .high-contrast-link:hover {
12859
- color: var(--color-white) !important;
12860
- background-color: var(--color-blue) !important;
12861
- outline: 2px solid var(--color-black) !important;
12862
- }
12863
-
12864
- /* 버튼 대비 강화 */
12865
- .btn-high-contrast,
12866
- .high-contrast-btn {
12867
- color: var(--color-white) !important;
12868
- background-color: var(--color-black) !important;
12869
- border: 3px solid var(--color-black) !important;
12870
- }
12871
-
12872
- .btn-high-contrast:hover,
12873
- .high-contrast-btn:hover {
12874
- color: var(--color-black) !important;
12875
- background-color: var(--color-yellow) !important;
12876
- border-color: var(--color-black) !important;
12877
- }
12878
- }
12879
- /* ===== MANUAL HIGH CONTRAST CLASSES (수동 고대비 클래스) ===== */
12880
- /* 고대비 모드와 관계없이 항상 적용되는 고대비 스타일 */
12881
- /* 흑백 고대비 */
12882
- .contrast-black-white {
12883
- color: var(--color-black) !important;
12884
- background-color: var(--color-white) !important;
12885
- border: 2px solid var(--color-black) !important;
12886
- }
12887
- .contrast-white-black {
12888
- color: var(--color-white) !important;
12889
- background-color: var(--color-black) !important;
12890
- border: 2px solid var(--color-white) !important;
12891
- }
12892
- /* 황색 강조 고대비 */
12893
- .contrast-black-yellow {
12894
- color: var(--color-black) !important;
12895
- background-color: var(--color-yellow) !important;
12896
- border: 2px solid var(--color-black) !important;
12897
- }
12898
- .contrast-yellow-black {
12899
- color: var(--color-yellow) !important;
12900
- background-color: var(--color-black) !important;
12901
- border: 2px solid var(--color-yellow) !important;
12902
- }
12903
- /* 파란색 강조 고대비 */
12904
- .contrast-white-blue {
12905
- color: var(--color-white) !important;
12906
- background-color: var(--color-blue) !important;
12907
- border: 2px solid var(--color-white) !important;
12908
- }
12909
- .contrast-blue-white {
12910
- color: var(--color-blue) !important;
12911
- background-color: var(--color-white) !important;
12912
- border: 2px solid var(--color-blue) !important;
12913
- }
12914
- /* ===== TEXT CONTRAST (텍스트 대비) ===== */
12915
- /* 텍스트 크기 확대 + 고대비 */
12916
- .text-large-contrast {
12917
- font-size: 1.25rem !important;
12918
- font-weight: var(--font-weight-bold) !important;
12919
- color: var(--color-black) !important;
12920
- background-color: var(--color-white) !important;
12921
- padding: var(--space-1) var(--space-2) !important;
12922
- border-radius: var(--radius-xs) !important;
12923
- }
12924
- /* 헤딩 고대비 */
12925
- .heading-high-contrast {
12926
- color: var(--color-black) !important;
12927
- background-color: var(--color-yellow) !important;
12928
- padding: var(--space-2) var(--space-4) !important;
12929
- border: 3px solid var(--color-black) !important;
12930
- border-radius: var(--radius-sm) !important;
12931
- font-weight: var(--font-weight-black) !important;
12932
- }
12933
- /* 중요 텍스트 강조 */
12934
- .text-emphasis-high {
12935
- color: var(--color-white) !important;
12936
- background-color: var(--color-red) !important;
12937
- padding: var(--space-1) var(--space-2) !important;
12938
- border: 2px solid var(--color-black) !important;
12939
- border-radius: var(--radius-xs) !important;
12940
- font-weight: var(--font-weight-bold) !important;
12941
- }
12942
- /* ===== BUTTON CONTRAST (버튼 대비) ===== */
12943
- /* 주요 버튼 고대비 */
12944
- .btn-primary-contrast {
12945
- color: var(--color-white) !important;
12946
- background-color: var(--color-black) !important;
12947
- border: 3px solid var(--color-black) !important;
12948
- padding: var(--space-3) var(--space-6) !important;
12949
- font-weight: var(--font-weight-bold) !important;
12950
- font-size: 1.125rem !important;
12951
- border-radius: var(--radius-sm) !important;
12952
- transition: all var(--duration-fast) var(--ease-out) !important;
12953
- }
12954
- .btn-primary-contrast:hover {
12955
- color: var(--color-black) !important;
12956
- background-color: var(--color-yellow) !important;
12957
- border-color: var(--color-black) !important;
12958
- transform: scale(1.05) !important;
12959
- }
12960
- .btn-primary-contrast:focus-visible {
12961
- outline: 4px solid var(--color-blue) !important;
12962
- outline-offset: 2px !important;
12963
- }
12964
- /* 보조 버튼 고대비 */
12965
- .btn-secondary-contrast {
12966
- color: var(--color-black) !important;
12967
- background-color: var(--color-white) !important;
12968
- border: 3px solid var(--color-black) !important;
12969
- padding: var(--space-3) var(--space-6) !important;
12970
- font-weight: var(--font-weight-bold) !important;
12971
- font-size: 1.125rem !important;
12972
- border-radius: var(--radius-sm) !important;
12973
- transition: all var(--duration-fast) var(--ease-out) !important;
12974
- }
12975
- .btn-secondary-contrast:hover {
12976
- color: var(--color-white) !important;
12977
- background-color: var(--color-black) !important;
12978
- border-color: var(--color-black) !important;
12979
- }
12980
- .btn-secondary-contrast:focus-visible {
12981
- outline: 4px solid var(--color-blue) !important;
12982
- outline-offset: 2px !important;
12983
- }
12984
- /* 위험 버튼 고대비 */
12985
- .btn-danger-contrast {
12986
- color: var(--color-white) !important;
12987
- background-color: var(--color-red) !important;
12988
- border: 3px solid var(--color-black) !important;
12989
- padding: var(--space-3) var(--space-6) !important;
12990
- font-weight: var(--font-weight-bold) !important;
12991
- font-size: 1.125rem !important;
12992
- border-radius: var(--radius-sm) !important;
12993
- transition: all var(--duration-fast) var(--ease-out) !important;
12994
- }
12995
- .btn-danger-contrast:hover {
12996
- color: var(--color-red) !important;
12997
- background-color: var(--color-white) !important;
12998
- border-color: var(--color-red) !important;
12999
- }
13000
- .btn-danger-contrast:focus-visible {
13001
- outline: 4px solid var(--color-yellow) !important;
13002
- outline-offset: 2px !important;
13003
- }
13004
- /* ===== LINK CONTRAST (링크 대비) ===== */
13005
- /* 기본 링크 고대비 */
13006
- .link-contrast {
13007
- color: var(--color-blue) !important;
13008
- text-decoration: underline !important;
13009
- text-decoration-thickness: 2px !important;
13010
- text-underline-offset: 4px !important;
13011
- font-weight: var(--font-weight-semibold) !important;
13012
- background-color: transparent !important;
13013
- border-radius: var(--radius-xs) !important;
13014
- transition: all var(--duration-fast) var(--ease-out) !important;
13015
- }
13016
- .link-contrast:hover {
13017
- color: var(--color-white) !important;
13018
- background-color: var(--color-blue) !important;
13019
- padding: 2px 4px !important;
13020
- margin: -2px -4px !important;
13021
- text-decoration: none !important;
13022
- }
13023
- .link-contrast:focus-visible {
13024
- outline: 3px solid var(--color-yellow) !important;
13025
- outline-offset: 2px !important;
13026
- background-color: var(--color-blue) !important;
13027
- color: var(--color-white) !important;
13028
- }
13029
- /* 방문한 링크 고대비 */
13030
- .link-contrast:visited {
13031
- color: var(--color-purple) !important;
13032
- }
13033
- .link-contrast:visited:hover {
13034
- color: var(--color-white) !important;
13035
- background-color: var(--color-purple) !important;
13036
- }
13037
- /* ===== FORM CONTRAST (폼 대비) ===== */
13038
- /* 입력 필드 고대비 */
13039
- .input-contrast {
13040
- color: var(--color-black) !important;
13041
- background-color: var(--color-white) !important;
13042
- border: 3px solid var(--color-black) !important;
13043
- padding: var(--space-3) var(--space-4) !important;
13044
- font-size: 1.125rem !important;
13045
- font-weight: var(--font-weight-medium) !important;
13046
- border-radius: var(--radius-sm) !important;
13047
- transition: all var(--duration-fast) var(--ease-out) !important;
13048
- }
13049
- .input-contrast:focus {
13050
- outline: 3px solid var(--color-blue) !important;
13051
- outline-offset: 2px !important;
13052
- border-color: var(--color-blue) !important;
13053
- background-color: var(--color-yellow) !important;
13054
- }
13055
- .input-contrast::placeholder {
13056
- color: var(--color-base-6) !important;
13057
- font-weight: var(--font-weight-normal) !important;
13058
- }
13059
- /* 라벨 고대비 */
13060
- .label-contrast {
13061
- color: var(--color-black) !important;
13062
- font-weight: var(--font-weight-bold) !important;
13063
- font-size: 1.125rem !important;
13064
- background-color: var(--color-yellow) !important;
13065
- padding: var(--space-1) var(--space-2) !important;
13066
- border-radius: var(--radius-xs) !important;
13067
- border: 2px solid var(--color-black) !important;
13068
- }
13069
- /* 체크박스/라디오 고대비 */
13070
- .checkbox-contrast,
13071
- .radio-contrast {
13072
- width: 1.5rem !important;
13073
- height: 1.5rem !important;
13074
- border: 3px solid var(--color-black) !important;
13075
- background-color: var(--color-white) !important;
13076
- cursor: pointer !important;
13077
- }
13078
- .checkbox-contrast:checked,
13079
- .radio-contrast:checked {
13080
- background-color: var(--color-black) !important;
13081
- border-color: var(--color-black) !important;
13082
- }
13083
- .checkbox-contrast:focus-visible,
13084
- .radio-contrast:focus-visible {
13085
- outline: 3px solid var(--color-blue) !important;
13086
- outline-offset: 2px !important;
13087
- }
13088
- /* ===== TABLE CONTRAST (테이블 대비) ===== */
13089
- /* 테이블 헤더 고대비 */
13090
- .table-header-contrast {
13091
- color: var(--color-white) !important;
13092
- background-color: var(--color-black) !important;
13093
- border: 2px solid var(--color-black) !important;
13094
- padding: var(--space-3) var(--space-4) !important;
13095
- font-weight: var(--font-weight-bold) !important;
13096
- font-size: 1.125rem !important;
13097
- }
13098
- /* 테이블 셀 고대비 */
13099
- .table-cell-contrast {
13100
- color: var(--color-black) !important;
13101
- background-color: var(--color-white) !important;
13102
- border: 2px solid var(--color-black) !important;
13103
- padding: var(--space-3) var(--space-4) !important;
13104
- font-size: 1rem !important;
13105
- }
13106
- /* 교대로 나타나는 행 고대비 */
13107
- .table-row-contrast:nth-child(even) {
13108
- background-color: var(--color-base-1) !important;
13109
- }
13110
- .table-row-contrast:nth-child(odd) {
13111
- background-color: var(--color-white) !important;
13112
- }
13113
- /* ===== NAVIGATION CONTRAST (네비게이션 대비) ===== */
13114
- /* 네비게이션 메뉴 고대비 */
13115
- .nav-contrast {
13116
- background-color: var(--color-black) !important;
13117
- border: 3px solid var(--color-white) !important;
13118
- padding: var(--space-4) !important;
13119
- }
13120
- .nav-contrast a {
13121
- color: var(--color-white) !important;
13122
- text-decoration: none !important;
13123
- font-weight: var(--font-weight-bold) !important;
13124
- font-size: 1.125rem !important;
13125
- padding: var(--space-2) var(--space-4) !important;
13126
- border-radius: var(--radius-sm) !important;
13127
- border: 2px solid transparent !important;
13128
- transition: all var(--duration-fast) var(--ease-out) !important;
13129
- }
13130
- .nav-contrast a:hover {
13131
- color: var(--color-black) !important;
13132
- background-color: var(--color-yellow) !important;
13133
- border-color: var(--color-black) !important;
13134
- }
13135
- .nav-contrast a:focus-visible {
13136
- outline: 3px solid var(--color-blue) !important;
13137
- outline-offset: 2px !important;
13138
- }
13139
- .nav-contrast a[aria-current="page"] {
13140
- color: var(--color-black) !important;
13141
- background-color: var(--color-white) !important;
13142
- border-color: var(--color-black) !important;
13143
- }
13144
- /* ===== CARD CONTRAST (카드 대비) ===== */
13145
- /* 카드 고대비 */
13146
- .card-contrast {
13147
- color: var(--color-black) !important;
13148
- background-color: var(--color-white) !important;
13149
- border: 4px solid var(--color-black) !important;
13150
- border-radius: var(--radius-md) !important;
13151
- padding: var(--space-6) !important;
13152
- box-shadow: 4px 4px 0 var(--color-black) !important;
12358
+ outline-color: var(--color-main-2);
12359
+ outline-width: 3px;
12360
+ }
13153
12361
  }
13154
- .card-contrast:hover {
13155
- transform: translate(-2px, -2px) !important;
13156
- box-shadow: 6px 6px 0 var(--color-black) !important;
12362
+ /* ===== FOCUS MANAGEMENT (포커스 관리) ===== */
12363
+ /* 자동 포커스 */
12364
+ .auto-focus {
12365
+ outline: 2px solid var(--color-main-1) !important;
12366
+ outline-offset: 2px !important;
13157
12367
  }
13158
- /* 카드 헤더 고대비 */
13159
- .card-header-contrast {
13160
- color: var(--color-white) !important;
13161
- background-color: var(--color-black) !important;
13162
- padding: var(--space-4) var(--space-6) !important;
13163
- margin: calc(-1 * var(--space-6)) calc(-1 * var(--space-6))
13164
- var(--space-4) calc(-1 * var(--space-6)) !important;
13165
- border-radius: var(--radius-md) var(--radius-md) 0 0 !important;
13166
- font-weight: var(--font-weight-bold) !important;
13167
- font-size: 1.25rem !important;
12368
+ /* 포커스 방지 */
12369
+ .no-focus {
12370
+ outline: none !important;
12371
+ -webkit-tap-highlight-color: transparent !important;
13168
12372
  }
13169
- /* ===== ALERT CONTRAST (알림 대비) ===== */
13170
- /* 성공 알림 고대비 */
13171
- .alert-success-contrast {
13172
- color: var(--color-black) !important;
13173
- background-color: var(--color-green) !important;
13174
- border: 3px solid var(--color-black) !important;
13175
- padding: var(--space-4) var(--space-6) !important;
13176
- border-radius: var(--radius-md) !important;
13177
- font-weight: var(--font-weight-bold) !important;
13178
- font-size: 1.125rem !important;
12373
+ .no-focus:focus,
12374
+ .no-focus:focus-visible {
12375
+ outline: none !important;
12376
+ box-shadow: none !important;
13179
12377
  }
13180
- /* 경고 알림 고대비 */
13181
- .alert-warning-contrast {
13182
- color: var(--color-black) !important;
13183
- background-color: var(--color-yellow) !important;
13184
- border: 3px solid var(--color-black) !important;
13185
- padding: var(--space-4) var(--space-6) !important;
13186
- border-radius: var(--radius-md) !important;
13187
- font-weight: var(--font-weight-bold) !important;
13188
- font-size: 1.125rem !important;
12378
+ /* 키보드 전용 포커스 */
12379
+ .keyboard-only-focus {
12380
+ outline: none !important;
13189
12381
  }
13190
- /* 오류 알림 고대비 */
13191
- .alert-error-contrast {
13192
- color: var(--color-white) !important;
13193
- background-color: var(--color-red) !important;
13194
- border: 3px solid var(--color-black) !important;
13195
- padding: var(--space-4) var(--space-6) !important;
13196
- border-radius: var(--radius-md) !important;
13197
- font-weight: var(--font-weight-bold) !important;
13198
- font-size: 1.125rem !important;
12382
+ .keyboard-only-focus:focus:not(:focus-visible) {
12383
+ outline: none !important;
12384
+ box-shadow: none !important;
13199
12385
  }
13200
- /* 정보 알림 고대비 */
13201
- .alert-info-contrast {
13202
- color: var(--color-white) !important;
13203
- background-color: var(--color-blue) !important;
13204
- border: 3px solid var(--color-black) !important;
13205
- padding: var(--space-4) var(--space-6) !important;
13206
- border-radius: var(--radius-md) !important;
13207
- font-weight: var(--font-weight-bold) !important;
13208
- font-size: 1.125rem !important;
12386
+ .keyboard-only-focus:focus-visible {
12387
+ outline: 2px solid var(--color-main-1) !important;
12388
+ outline-offset: 2px !important;
13209
12389
  }
13210
- /* ===== RESPONSIVE HIGH CONTRAST ===== */
13211
- /* 모바일에서 고대비 최적화 */
12390
+ /* ===== RESPONSIVE FOCUS ===== */
12391
+ /* 모바일 포커스 최적화 */
13212
12392
  @media (max-width: 767px) {
13213
- .btn-primary-contrast,
13214
- .btn-secondary-contrast,
13215
- .btn-danger-contrast {
13216
- font-size: 1.25rem !important;
13217
- padding: var(--space-4) var(--space-8) !important;
13218
- border-width: 4px !important;
13219
- }
13220
-
13221
- .input-contrast {
13222
- font-size: 1.25rem !important;
13223
- padding: var(--space-4) var(--space-5) !important;
13224
- border-width: 4px !important;
13225
- }
13226
-
13227
- .text-large-contrast {
13228
- font-size: 1.5rem !important;
12393
+ .focus-indicator,
12394
+ .btn-focus,
12395
+ .link-focus,
12396
+ .input-focus {
12397
+ outline-width: 3px !important;
12398
+ outline-offset: 3px !important;
13229
12399
  }
13230
12400
  }
13231
- /* 화면에서 고대비 최적화 */
13232
- @media (min-width: 1024px) {
13233
- .heading-high-contrast {
13234
- font-size: 2rem !important;
13235
- padding: var(--space-4) var(--space-8) !important;
13236
- }
13237
-
13238
- .card-contrast {
13239
- padding: var(--space-8) !important;
13240
- border-width: 5px !important;
13241
- box-shadow: 6px 6px 0 var(--color-black) !important;
12401
+ /* 터치 디바이스 포커스 */
12402
+ @media (hover: none) and (pointer: coarse) {
12403
+ .focus-indicator:focus-visible,
12404
+ .btn-focus:focus-visible,
12405
+ .link-focus:focus-visible {
12406
+ outline-width: 3px !important;
12407
+ outline-offset: 3px !important;
13242
12408
  }
13243
12409
  }
13244
- /* ===== UTILITY COMBINATIONS ===== */
13245
- /* 완전한 고대비 페이지 래퍼 */
13246
- .high-contrast-page {
13247
- color: var(--color-black) !important;
13248
- background-color: var(--color-white) !important;
13249
- font-weight: var(--font-weight-medium) !important;
13250
- line-height: 1.6 !important;
13251
- }
13252
- .high-contrast-page * {
13253
- border-color: var(--color-black) !important;
12410
+ /* ===== MOTION SENSITIVITY (모션 민감도) ===== */
12411
+ @media (prefers-reduced-motion: reduce) {
12412
+ .focus-indicator,
12413
+ .btn-focus,
12414
+ .link-focus,
12415
+ .input-focus,
12416
+ .focus-glow,
12417
+ .focus-pulse {
12418
+ transition: none !important;
12419
+ animation: none !important;
12420
+ }
13254
12421
  }
13255
- /* 고대비 컨테이너 */
13256
- .high-contrast-container {
13257
- color: var(--color-black) !important;
13258
- background-color: var(--color-white) !important;
13259
- border: 3px solid var(--color-black) !important;
13260
- padding: var(--space-6) !important;
13261
- border-radius: var(--radius-lg) !important;
13262
- margin: var(--space-4) !important;
12422
+ /* ===== HIGH CONTRAST MODE (고대비 모드) ===== */
12423
+ @media (prefers-contrast: high) {
12424
+ .focus-indicator:focus-visible,
12425
+ .btn-focus:focus-visible,
12426
+ .link-focus:focus-visible,
12427
+ .input-focus:focus {
12428
+ outline-width: 3px !important;
12429
+ outline-color: var(--color-base-10) !important;
12430
+ background-color: var(--color-yellow) !important;
12431
+ color: var(--color-base-10) !important;
12432
+ }
13263
12433
  }
13264
12434
  /* ===== PRINT SUPPORT (프린트 지원) ===== */
13265
12435
  /* ===== PRINT UTILITIES ===== */
@@ -13883,472 +13053,6 @@ td {
13883
13053
  margin-bottom: 2pt !important;
13884
13054
  }
13885
13055
  }
13886
- /* ===== BROWSER COMPATIBILITY (브라우저 호환성) ===== */
13887
- /* ===== BROWSER COMPATIBILITY UTILITIES ===== */
13888
- /* CSS 속성명과 값을 그대로 유지하는 NewTil CSS 철학 */
13889
- /* 브라우저 호환성: vendor prefixes, feature detection, fallbacks 등 */
13890
- /* ===== VENDOR PREFIXES (벤더 프리픽스) ===== */
13891
- /* Transform 호환성 */
13892
- .transform-compat {
13893
- -webkit-transform: var(--transform, none) !important;
13894
- -moz-transform: var(--transform, none) !important;
13895
- -ms-transform: var(--transform, none) !important;
13896
- -o-transform: var(--transform, none) !important;
13897
- transform: var(--transform, none) !important;
13898
- }
13899
- /* Transition 호환성 */
13900
- .transition-compat {
13901
- -webkit-transition: var(--transition, all 0.3s ease) !important;
13902
- -moz-transition: var(--transition, all 0.3s ease) !important;
13903
- -ms-transition: var(--transition, all 0.3s ease) !important;
13904
- -o-transition: var(--transition, all 0.3s ease) !important;
13905
- transition: var(--transition, all 0.3s ease) !important;
13906
- }
13907
- /* Animation 호환성 */
13908
- .animation-compat {
13909
- -webkit-animation: var(--animation, none) !important;
13910
- -moz-animation: var(--animation, none) !important;
13911
- -ms-animation: var(--animation, none) !important;
13912
- -o-animation: var(--animation, none) !important;
13913
- animation: var(--animation, none) !important;
13914
- }
13915
- /* Box Shadow 호환성 */
13916
- .box-shadow-compat {
13917
- -webkit-box-shadow: var(--shadow, none) !important;
13918
- -moz-box-shadow: var(--shadow, none) !important;
13919
- box-shadow: var(--shadow, none) !important;
13920
- }
13921
- /* Border Radius 호환성 */
13922
- .border-radius-compat {
13923
- -webkit-border-radius: var(--radius, 0) !important;
13924
- -moz-border-radius: var(--radius, 0) !important;
13925
- border-radius: var(--radius, 0) !important;
13926
- }
13927
- /* Linear Gradient 호환성 */
13928
- .linear-gradient-compat {
13929
- background: var(--gradient-fallback, #ffffff) !important; /* 폴백 색상 */
13930
- background: -webkit-linear-gradient(
13931
- var(--gradient-direction, top),
13932
- var(--gradient-stops)
13933
- ) !important;
13934
- background: -moz-linear-gradient(
13935
- var(--gradient-direction, top),
13936
- var(--gradient-stops)
13937
- ) !important;
13938
- background: -ms-linear-gradient(
13939
- var(--gradient-direction, top),
13940
- var(--gradient-stops)
13941
- ) !important;
13942
- background: -o-linear-gradient(
13943
- var(--gradient-direction, top),
13944
- var(--gradient-stops)
13945
- ) !important;
13946
- background: linear-gradient(
13947
- var(--gradient-direction, to bottom),
13948
- var(--gradient-stops)
13949
- ) !important;
13950
- }
13951
- /* ===== FLEXBOX COMPATIBILITY (플렉스박스 호환성) ===== */
13952
- /* 구 버전 Flexbox 지원 */
13953
- .flex-compat {
13954
- display: -webkit-box !important; /* iOS 6-, Safari 3.1-6 */
13955
- display: -moz-box !important; /* Firefox 19- */
13956
- display: -ms-flexbox !important; /* IE 10 */
13957
- display: -webkit-flex !important; /* Chrome */
13958
- display: flex !important; /* 표준 */
13959
- }
13960
- .flex-direction-row-compat {
13961
- -webkit-box-orient: horizontal !important;
13962
- -webkit-box-direction: normal !important;
13963
- -webkit-flex-direction: row !important;
13964
- -ms-flex-direction: row !important;
13965
- flex-direction: row !important;
13966
- }
13967
- .flex-direction-column-compat {
13968
- -webkit-box-orient: vertical !important;
13969
- -webkit-box-direction: normal !important;
13970
- -webkit-flex-direction: column !important;
13971
- -ms-flex-direction: column !important;
13972
- flex-direction: column !important;
13973
- }
13974
- .justify-content-center-compat {
13975
- -webkit-box-pack: center !important;
13976
- -webkit-justify-content: center !important;
13977
- -ms-flex-pack: center !important;
13978
- justify-content: center !important;
13979
- }
13980
- .align-items-center-compat {
13981
- -webkit-box-align: center !important;
13982
- -webkit-align-items: center !important;
13983
- -ms-flex-align: center !important;
13984
- align-items: center !important;
13985
- }
13986
- .flex-1-compat {
13987
- -webkit-box-flex: 1 !important;
13988
- -webkit-flex: 1 !important;
13989
- -ms-flex: 1 !important;
13990
- flex: 1 !important;
13991
- }
13992
- /* ===== GRID COMPATIBILITY (그리드 호환성) ===== */
13993
- /* CSS Grid 호환성 */
13994
- .grid-compat {
13995
- display: -ms-grid !important; /* IE 10-11 */
13996
- display: grid !important; /* 표준 */
13997
- }
13998
- /* IE Grid 폴백 */
13999
- @supports not (display: grid) {
14000
- .grid-compat {
14001
- display: flex !important;
14002
- flex-wrap: wrap !important;
14003
- }
14004
-
14005
- .grid-compat > * {
14006
- flex: 1 !important;
14007
- min-width: 0 !important;
14008
- }
14009
- }
14010
- /* ===== USER SELECT COMPATIBILITY (사용자 선택 호환성) ===== */
14011
- .user-select-none-compat {
14012
- -webkit-user-select: none !important;
14013
- -moz-user-select: none !important;
14014
- -ms-user-select: none !important;
14015
- user-select: none !important;
14016
- }
14017
- .user-select-all-compat {
14018
- -webkit-user-select: all !important;
14019
- -moz-user-select: all !important;
14020
- -ms-user-select: all !important;
14021
- user-select: all !important;
14022
- }
14023
- .user-select-text-compat {
14024
- -webkit-user-select: text !important;
14025
- -moz-user-select: text !important;
14026
- -ms-user-select: text !important;
14027
- user-select: text !important;
14028
- }
14029
- /* ===== APPEARANCE COMPATIBILITY (외형 호환성) ===== */
14030
- .appearance-none-compat {
14031
- -webkit-appearance: none !important;
14032
- -moz-appearance: none !important;
14033
- -ms-appearance: none !important;
14034
- appearance: none !important;
14035
- }
14036
- /* ===== BACKDROP FILTER COMPATIBILITY (백드롭 필터 호환성) ===== */
14037
- .backdrop-filter-compat {
14038
- -webkit-backdrop-filter: var(--backdrop-filter, none) !important;
14039
- backdrop-filter: var(--backdrop-filter, none) !important;
14040
- }
14041
- /* 백드롭 필터 미지원 시 폴백 */
14042
- @supports not (backdrop-filter: blur(1px)) and not
14043
- (-webkit-backdrop-filter: blur(1px)) {
14044
- .backdrop-filter-fallback {
14045
- background-color: rgba(255, 255, 255, 0.8) !important;
14046
- }
14047
-
14048
- .backdrop-filter-fallback.dark {
14049
- background-color: rgba(0, 0, 0, 0.8) !important;
14050
- }
14051
- }
14052
- /* ===== STICKY POSITION COMPATIBILITY (스티키 포지션 호환성) ===== */
14053
- .sticky-compat {
14054
- position: -webkit-sticky !important;
14055
- position: sticky !important;
14056
- }
14057
- /* Sticky 미지원 시 폴백 */
14058
- @supports not (position: sticky) {
14059
- .sticky-fallback {
14060
- position: fixed !important;
14061
- top: 0 !important;
14062
- z-index: var(--z-index-fixed, 1000) !important;
14063
- }
14064
- }
14065
- /* ===== OBJECT FIT COMPATIBILITY (오브젝트 핏 호환성) ===== */
14066
- .object-fit-cover-compat {
14067
- object-fit: cover !important;
14068
- object-position: center !important;
14069
- }
14070
- /* Object-fit 미지원 시 폴백 */
14071
- @supports not (object-fit: cover) {
14072
- .object-fit-cover-fallback {
14073
- position: relative !important;
14074
- overflow: hidden !important;
14075
- }
14076
-
14077
- .object-fit-cover-fallback img {
14078
- position: absolute !important;
14079
- top: 50% !important;
14080
- left: 50% !important;
14081
- transform: translate(-50%, -50%) !important;
14082
- min-width: 100% !important;
14083
- min-height: 100% !important;
14084
- width: auto !important;
14085
- height: auto !important;
14086
- }
14087
- }
14088
- /* ===== ASPECT RATIO COMPATIBILITY (종횡비 호환성) ===== */
14089
- /* Aspect Ratio 호환성 (padding-top hack) */
14090
- @supports not (aspect-ratio: 1 / 1) {
14091
- .aspect-ratio-fallback {
14092
- position: relative !important;
14093
- overflow: hidden !important;
14094
- }
14095
-
14096
- .aspect-ratio-fallback::before {
14097
- content: "" !important;
14098
- display: block !important;
14099
- padding-top: var(--aspect-ratio-percent, 100%) !important;
14100
- }
14101
-
14102
- .aspect-ratio-fallback > * {
14103
- position: absolute !important;
14104
- top: 0 !important;
14105
- left: 0 !important;
14106
- width: 100% !important;
14107
- height: 100% !important;
14108
- }
14109
- }
14110
- /* ===== SCROLL BEHAVIOR COMPATIBILITY (스크롤 동작 호환성) ===== */
14111
- .scroll-smooth-compat {
14112
- scroll-behavior: smooth !important;
14113
- }
14114
- /* Smooth scroll 미지원 시 폴백 */
14115
- @supports not (scroll-behavior: smooth) {
14116
- .scroll-smooth-js {
14117
- /* JavaScript로 부드러운 스크롤 구현 필요 */
14118
- scroll-behavior: auto !important;
14119
- }
14120
- }
14121
- /* ===== CONTAINER QUERIES COMPATIBILITY (컨테이너 쿼리 호환성) ===== */
14122
- /* Container Queries 미지원 시 폴백 */
14123
- @supports not (container-type: inline-size) {
14124
- .container-fallback {
14125
- /* 미디어 쿼리로 대체 */
14126
- width: 100% !important;
14127
- }
14128
-
14129
- @media (min-width: 400px) {
14130
- .container-fallback {
14131
- /* 컨테이너 쿼리 대신 미디어 쿼리 사용 */
14132
- }
14133
- }
14134
- }
14135
- /* ===== CLAMP FUNCTION COMPATIBILITY (clamp 함수 호환성) ===== */
14136
- /* clamp() 미지원 시 폴백 */
14137
- @supports not (font-size: clamp(1rem, 4vw, 2rem)) {
14138
- .clamp-fallback {
14139
- font-size: 1.25rem !important; /* 중간값으로 폴백 */
14140
- }
14141
-
14142
- @media (min-width: 768px) {
14143
- .clamp-fallback {
14144
- font-size: 1.5rem !important;
14145
- }
14146
- }
14147
-
14148
- @media (min-width: 1200px) {
14149
- .clamp-fallback {
14150
- font-size: 2rem !important;
14151
- }
14152
- }
14153
- }
14154
- /* ===== CUSTOM PROPERTIES COMPATIBILITY (CSS 변수 호환성) ===== */
14155
- /* CSS Variables 미지원 시 폴백 */
14156
- @supports not (color: var(--primary-color)) {
14157
- .css-variables-fallback {
14158
- /* 하드코딩된 값으로 폴백 */
14159
- color: #007bff !important;
14160
- background-color: #ffffff !important;
14161
- border-color: #dee2e6 !important;
14162
- }
14163
- }
14164
- /* ===== INTERNET EXPLORER SPECIFIC (Internet Explorer 전용) ===== */
14165
- /* IE 조건부 클래스 */
14166
- .ie-only {
14167
- display: none !important;
14168
- }
14169
- /* IE에서만 표시 */
14170
- @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
14171
- .ie-only {
14172
- display: block !important;
14173
- }
14174
-
14175
- .ie-hide {
14176
- display: none !important;
14177
- }
14178
- }
14179
- /* IE 그리드 레이아웃 수정 */
14180
- @supports (-ms-grid-columns: 1fr) {
14181
- .ie-grid-fix {
14182
- -ms-grid-columns: 1fr !important;
14183
- -ms-grid-rows: auto !important;
14184
- }
14185
- }
14186
- /* ===== SAFARI SPECIFIC (Safari 전용) ===== */
14187
- /* Safari 버그 수정 */
14188
- @supports (-webkit-touch-callout: none) {
14189
- .safari-fix {
14190
- -webkit-transform: translateZ(0) !important; /* 하드웨어 가속 */
14191
- }
14192
- }
14193
- /* iOS Safari 뷰포트 높이 수정 */
14194
- @supports (-webkit-touch-callout: none) {
14195
- .ios-viewport-fix {
14196
- height: -webkit-fill-available !important;
14197
- }
14198
- }
14199
- /* ===== FIREFOX SPECIFIC (Firefox 전용) ===== */
14200
- /* Firefox 스크롤바 스타일링 */
14201
- @-moz-document url-prefix() {
14202
- .firefox-scrollbar {
14203
- scrollbar-width: thin !important;
14204
- scrollbar-color: var(--color-base-4) var(--color-base-1) !important;
14205
- }
14206
- }
14207
- /* ===== FEATURE DETECTION (기능 감지) ===== */
14208
- /* Hover 지원 감지 */
14209
- @media (hover: hover) {
14210
- .hover-supported:hover {
14211
- background-color: var(--color-base-2) !important;
14212
- transform: translateY(-2px) !important;
14213
- }
14214
- }
14215
- @media (hover: none) {
14216
- .hover-not-supported {
14217
- /* 터치 디바이스용 스타일 */
14218
- padding: var(--space-4) !important;
14219
- font-size: 1.125rem !important;
14220
- }
14221
- }
14222
- /* Pointer 정밀도 감지 */
14223
- @media (pointer: fine) {
14224
- .fine-pointer {
14225
- /* 마우스/트랙패드용 */
14226
- cursor: pointer !important;
14227
- }
14228
- }
14229
- @media (pointer: coarse) {
14230
- .coarse-pointer {
14231
- /* 터치용 */
14232
- min-height: 44px !important; /* 터치 최소 크기 */
14233
- min-width: 44px !important;
14234
- }
14235
- }
14236
- /* ===== REDUCED MOTION COMPATIBILITY (모션 감소 호환성) ===== */
14237
- /* 모션 감소 미지원 시 폴백 */
14238
- .motion-safe {
14239
- animation: var(--animation, none) !important;
14240
- transition: var(--transition, all 0.3s ease) !important;
14241
- }
14242
- @media (prefers-reduced-motion: reduce) {
14243
- .motion-safe {
14244
- animation: none !important;
14245
- transition: none !important;
14246
- }
14247
- }
14248
- /* ===== HIGH CONTRAST MODE COMPATIBILITY (고대비 모드 호환성) ===== */
14249
- /* Windows 고대비 모드 감지 */
14250
- @media (-ms-high-contrast: active) {
14251
- .high-contrast-mode {
14252
- border: 1px solid !important;
14253
- background: ButtonFace !important;
14254
- color: ButtonText !important;
14255
- }
14256
- }
14257
- /* ===== COLOR SCHEME COMPATIBILITY (색상 스킴 호환성) ===== */
14258
- /* 다크 모드 미지원 시 폴백 */
14259
- @media (prefers-color-scheme: dark) {
14260
- .dark-mode-supported {
14261
- background-color: var(--color-base-9) !important;
14262
- color: var(--color-white) !important;
14263
- }
14264
- }
14265
- /* 다크 모드 감지 불가능한 경우 */
14266
- @supports not (color-scheme: dark) {
14267
- .dark-mode-fallback {
14268
- /* JavaScript로 다크 모드 토글 구현 필요 */
14269
- }
14270
- }
14271
- /* ===== PRINT COMPATIBILITY (프린트 호환성) ===== */
14272
- /* 프린트 시 웹폰트 폴백 */
14273
- @media print {
14274
- .print-font-fallback {
14275
- font-family: "Times New Roman", serif !important;
14276
- }
14277
-
14278
- .print-safe {
14279
- color: black !important;
14280
- background: white !important;
14281
- text-shadow: none !important;
14282
- box-shadow: none !important;
14283
- }
14284
- }
14285
- /* ===== BROWSER DETECTION UTILITIES (브라우저 감지 유틸리티) ===== */
14286
- /* Chromium 기반 브라우저 감지 */
14287
- @supports (-webkit-appearance: none) and (not (-moz-appearance: none)) {
14288
- .chromium-only {
14289
- display: block !important;
14290
- }
14291
- }
14292
- /* WebKit 기반 브라우저 감지 */
14293
- @supports (-webkit-appearance: none) {
14294
- .webkit-only {
14295
- display: block !important;
14296
- }
14297
- }
14298
- /* Gecko 기반 브라우저 감지 */
14299
- @supports (-moz-appearance: none) {
14300
- .gecko-only {
14301
- display: block !important;
14302
- }
14303
- }
14304
- /* ===== PERFORMANCE OPTIMIZATION (성능 최적화) ===== */
14305
- /* GPU 가속 활성화 */
14306
- .gpu-accelerated {
14307
- -webkit-transform: translateZ(0) !important;
14308
- -moz-transform: translateZ(0) !important;
14309
- -ms-transform: translateZ(0) !important;
14310
- -o-transform: translateZ(0) !important;
14311
- transform: translateZ(0) !important;
14312
-
14313
- /* will-change 최적화 */
14314
- will-change: var(--will-change, auto) !important;
14315
- }
14316
- /* 하드웨어 가속 비활성화 */
14317
- .no-gpu-acceleration {
14318
- transform: none !important;
14319
- will-change: auto !important;
14320
- }
14321
- /* ===== POLYFILL HINTS (폴리필 힌트) ===== */
14322
- /* JavaScript 폴리필이 필요한 기능들 */
14323
- .needs-polyfill {
14324
- /*
14325
- 필요한 폴리필들:
14326
- - IntersectionObserver
14327
- - ResizeObserver
14328
- - CustomEvent
14329
- - Object.assign
14330
- - Array.from
14331
- - Promise
14332
- - fetch
14333
- */
14334
- }
14335
- /* 폴리필 로드 완료 후 활성화되는 클래스 */
14336
- .polyfill-loaded .feature-enhanced {
14337
- /* 폴리필 의존 기능들 */
14338
- }
14339
- /* ===== CRITICAL CSS OPTIMIZATION (중요 CSS 최적화) ===== */
14340
- /* Above the fold 콘텐츠 */
14341
- .critical-css {
14342
- /* 중요한 스타일만 포함 */
14343
- display: block !important;
14344
- position: relative !important;
14345
- margin: 0 !important;
14346
- padding: 0 !important;
14347
- }
14348
- /* 지연 로드 콘텐츠 */
14349
- .non-critical {
14350
- /* 나중에 로드될 스타일들 */
14351
- }
14352
13056
  /* ===== RESPONSIVE BREAKPOINTS ===== */
14353
13057
  /*
14354
13058
  미디어쿼리 브레이크포인트: