newtil-css 0.2.95 → 0.2.98

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 +16 -5
package/dist/utils.css CHANGED
@@ -12690,2903 +12690,1285 @@ Variables 커스터마이징:
12690
12690
 
12691
12691
  /* ===== ACCESSIBILITY (접근성) ===== */
12692
12692
 
12693
- /* ===== SCREEN READER UTILITIES ===== */
12693
+ /* ===== FOCUS UTILITIES ===== */
12694
12694
 
12695
12695
  /* CSS 속성명과 값을 그대로 유지하는 NewTil CSS 철학 */
12696
12696
 
12697
- /* 스크린 리더 접근성: 시각적으로 숨기기, 스크린 리더 전용 텍스트 등 */
12697
+ /* 포커스 관리: outline, focus-visible, focus-within 등 */
12698
12698
 
12699
- /* ===== VISUALLY HIDDEN (시각적으로 숨기기) ===== */
12699
+ /* ===== OUTLINE STYLES (아웃라인 스타일) ===== */
12700
12700
 
12701
- /* 스크린 리더에서는 읽히지만 시각적으로는 숨김 */
12701
+ /* outline: none */
12702
12702
 
12703
- .visually-hidden,
12704
- .sr-only {
12705
- position: absolute !important;
12706
- width: 1px !important;
12707
- height: 1px !important;
12708
- padding: 0 !important;
12709
- margin: -1px !important;
12710
- overflow: hidden !important;
12711
- clip: rect(0, 0, 0, 0) !important;
12712
- white-space: nowrap !important;
12713
- border: 0 !important;
12703
+ .outline\:none {
12704
+ outline: none !important;
12714
12705
  }
12715
12706
 
12716
- /* 포커스될 때만 보이는 숨김 요소 */
12717
-
12718
- .visually-hidden-focusable,
12719
- .sr-only-focusable {
12720
- position: absolute !important;
12721
- width: 1px !important;
12722
- height: 1px !important;
12723
- padding: 0 !important;
12724
- margin: -1px !important;
12725
- overflow: hidden !important;
12726
- clip: rect(0, 0, 0, 0) !important;
12727
- white-space: nowrap !important;
12728
- border: 0 !important;
12729
- }
12707
+ /* outline: solid */
12730
12708
 
12731
- .visually-hidden-focusable:focus,
12732
- .sr-only-focusable:focus {
12733
- position: static !important;
12734
- width: auto !important;
12735
- height: auto !important;
12736
- padding: var(--space-2) var(--space-4) !important;
12737
- margin: 0 !important;
12738
- overflow: visible !important;
12739
- clip: auto !important;
12740
- white-space: normal !important;
12741
- background-color: var(--color-main-1) !important;
12742
- color: var(--color-white) !important;
12743
- border-radius: var(--radius-sm) !important;
12744
- box-shadow: var(--shadow-lg) !important;
12745
- z-index: var(--z-index-tooltip) !important;
12709
+ .outline\:solid {
12710
+ outline: 2px solid var(--color-main-1) !important;
12711
+ outline-offset: 2px !important;
12746
12712
  }
12747
12713
 
12748
- /* ===== SCREEN READER ONLY TEXT (스크린 리더 전용 텍스트) ===== */
12749
-
12750
- /* 아이콘에 대한 설명 텍스트 */
12714
+ /* outline: dashed */
12751
12715
 
12752
- .icon-description,
12753
- .sr-description {
12754
- position: absolute !important;
12755
- width: 1px !important;
12756
- height: 1px !important;
12757
- padding: 0 !important;
12758
- margin: -1px !important;
12759
- overflow: hidden !important;
12760
- clip: rect(0, 0, 0, 0) !important;
12761
- white-space: nowrap !important;
12762
- border: 0 !important;
12716
+ .outline\:dashed {
12717
+ outline: 2px dashed var(--color-main-1) !important;
12718
+ outline-offset: 2px !important;
12763
12719
  }
12764
12720
 
12765
- /* 링크에 대한 추가 설명 */
12721
+ /* outline: dotted */
12766
12722
 
12767
- .link-description,
12768
- .sr-link-text {
12769
- position: absolute !important;
12770
- width: 1px !important;
12771
- height: 1px !important;
12772
- padding: 0 !important;
12773
- margin: -1px !important;
12774
- overflow: hidden !important;
12775
- clip: rect(0, 0, 0, 0) !important;
12776
- white-space: nowrap !important;
12777
- border: 0 !important;
12723
+ .outline\:dotted {
12724
+ outline: 2px dotted var(--color-main-1) !important;
12725
+ outline-offset: 2px !important;
12778
12726
  }
12779
12727
 
12780
- /* ===== ARIA ATTRIBUTES SUPPORT (ARIA 속성 지원) ===== */
12781
-
12782
- /* aria-hidden="true" 요소 스타일링 */
12728
+ /* ===== OUTLINE WIDTH (아웃라인 두께) ===== */
12783
12729
 
12784
- [aria-hidden="true"] {
12785
- display: none !important;
12730
+ .outline-width\:1,
12731
+ .outline\:1 {
12732
+ outline-width: 1px !important;
12786
12733
  }
12787
12734
 
12788
- /* aria-expanded 상태 표시 */
12789
-
12790
- [aria-expanded="false"] .collapse-icon {
12791
- transform: rotate(0deg) !important;
12792
- transition: transform var(--duration-fast) var(--ease-out) !important;
12735
+ .outline-width\:2,
12736
+ .outline\:2 {
12737
+ outline-width: 2px !important;
12793
12738
  }
12794
12739
 
12795
- [aria-expanded="true"] .collapse-icon {
12796
- transform: rotate(180deg) !important;
12797
- transition: transform var(--duration-fast) var(--ease-out) !important;
12740
+ .outline-width\:3,
12741
+ .outline\:3 {
12742
+ outline-width: 3px !important;
12798
12743
  }
12799
12744
 
12800
- /* aria-disabled 상태 스타일링 */
12801
-
12802
- [aria-disabled="true"] {
12803
- opacity: var(--opacity-50) !important;
12804
- cursor: not-allowed !important;
12805
- pointer-events: none !important;
12745
+ .outline-width\:4,
12746
+ .outline\:4 {
12747
+ outline-width: 4px !important;
12806
12748
  }
12807
12749
 
12808
- /* aria-selected 상태 스타일링 */
12750
+ /* ===== OUTLINE COLOR (아웃라인 색상) ===== */
12809
12751
 
12810
- [aria-selected="true"] {
12811
- background-color: var(--color-main-1) !important;
12812
- color: var(--color-white) !important;
12752
+ .outline-color\:main-1,
12753
+ .outline\:main-1 {
12754
+ outline-color: var(--color-main-1) !important;
12813
12755
  }
12814
12756
 
12815
- [aria-selected="false"] {
12816
- background-color: transparent !important;
12817
- color: var(--color-base-7) !important;
12757
+ .outline-color\:sub-1,
12758
+ .outline\:sub-1 {
12759
+ outline-color: var(--color-sub-1) !important;
12818
12760
  }
12819
12761
 
12820
- /* aria-current 상태 스타일링 */
12821
-
12822
- [aria-current="page"],
12823
- [aria-current="step"],
12824
- [aria-current="location"] {
12825
- background-color: var(--color-accent-1) !important;
12826
- color: var(--color-white) !important;
12827
- font-weight: var(--font-weight-semibold) !important;
12762
+ .outline-color\:accent-1,
12763
+ .outline\:accent-1 {
12764
+ outline-color: var(--color-accent-1) !important;
12828
12765
  }
12829
12766
 
12830
- /* ===== SKIP LINKS (스킵 링크) ===== */
12831
-
12832
- /* 메인 컨텐츠로 건너뛰기 링크 */
12833
-
12834
- .skip-link {
12835
- position: absolute !important;
12836
- top: -40px !important;
12837
- left: var(--space-4) !important;
12838
- background: var(--color-base-9) !important;
12839
- color: var(--color-white) !important;
12840
- padding: var(--space-2) var(--space-4) !important;
12841
- text-decoration: none !important;
12842
- border-radius: var(--radius-sm) !important;
12843
- z-index: var(--z-index-tooltip) !important;
12844
- transition: top var(--duration-fast) var(--ease-out) !important;
12767
+ .outline-color\:base-1,
12768
+ .outline\:base-1 {
12769
+ outline-color: var(--color-base-1) !important;
12845
12770
  }
12846
12771
 
12847
- .skip-link:focus {
12848
- top: var(--space-4) !important;
12772
+ .outline-color\:base-10,
12773
+ .outline\:base-10 {
12774
+ outline-color: var(--color-base-10) !important;
12849
12775
  }
12850
12776
 
12851
- /* 네비게이션 스킵 링크들 */
12852
-
12853
- .skip-links {
12854
- position: absolute !important;
12855
- top: 0 !important;
12856
- left: 0 !important;
12857
- z-index: var(--z-index-modal) !important;
12777
+ .outline-color\:danger-1,
12778
+ .outline\:danger-1 {
12779
+ outline-color: var(--color-danger-1) !important;
12858
12780
  }
12859
12781
 
12860
- .skip-links a {
12861
- position: absolute !important;
12862
- top: -40px !important;
12863
- left: var(--space-4) !important;
12864
- background: var(--color-base-9) !important;
12865
- color: var(--color-white) !important;
12866
- padding: var(--space-2) var(--space-4) !important;
12867
- text-decoration: none !important;
12868
- border-radius: var(--radius-sm) !important;
12869
- transition: top var(--duration-fast) var(--ease-out) !important;
12870
- margin-right: var(--space-2) !important;
12782
+ .outline-color\:success-1,
12783
+ .outline\:success-1 {
12784
+ outline-color: var(--color-success-1) !important;
12871
12785
  }
12872
12786
 
12873
- .skip-links a:focus {
12874
- top: var(--space-4) !important;
12787
+ .outline-color\:warning-1,
12788
+ .outline\:warning-1 {
12789
+ outline-color: var(--color-warning-1) !important;
12875
12790
  }
12876
12791
 
12877
- /* ===== LANDMARK REGIONS (랜드마크 영역) ===== */
12878
-
12879
- /* 메인 컨텐츠 영역 표시 */
12792
+ /* ===== OUTLINE OFFSET (아웃라인 오프셋) ===== */
12880
12793
 
12881
- main[role="main"],
12882
- [role="main"],
12883
- .main-content {
12884
- scroll-margin-top: var(
12885
- --space-20
12886
- ) !important; /* 고정 헤더를 위한 스크롤 마진 */
12794
+ .outline-offset\:0 {
12795
+ outline-offset: 0 !important;
12887
12796
  }
12888
12797
 
12889
- /* 네비게이션 영역 */
12890
-
12891
- nav[role="navigation"],
12892
- [role="navigation"],
12893
- .navigation {
12894
- position: relative !important;
12798
+ .outline-offset\:1 {
12799
+ outline-offset: 1px !important;
12895
12800
  }
12896
12801
 
12897
- /* 배너 영역 (헤더) */
12898
-
12899
- header[role="banner"],
12900
- [role="banner"],
12901
- .site-header {
12902
- position: relative !important;
12802
+ .outline-offset\:2 {
12803
+ outline-offset: 2px !important;
12903
12804
  }
12904
12805
 
12905
- /* 콘텐츠 정보 영역 (푸터) */
12906
-
12907
- footer[role="contentinfo"],
12908
- [role="contentinfo"],
12909
- .site-footer {
12910
- position: relative !important;
12806
+ .outline-offset\:4 {
12807
+ outline-offset: 4px !important;
12911
12808
  }
12912
12809
 
12913
- /* 보완 영역 (사이드바) */
12914
-
12915
- aside[role="complementary"],
12916
- [role="complementary"],
12917
- .sidebar {
12918
- position: relative !important;
12810
+ .outline-offset\:8 {
12811
+ outline-offset: 8px !important;
12919
12812
  }
12920
12813
 
12921
- /* ===== FORM ACCESSIBILITY ( 접근성) ===== */
12814
+ /* ===== FOCUS VISIBLE (포커스 가시성) ===== */
12922
12815
 
12923
- /* 필수 입력 필드 표시 */
12816
+ /* 키보드 포커스만 표시 */
12924
12817
 
12925
- [aria-required="true"],
12926
- [required] {
12927
- position: relative !important;
12818
+ .focus-visible\:outline-main:focus-visible {
12819
+ outline: 2px solid var(--color-main-1) !important;
12820
+ outline-offset: 2px !important;
12928
12821
  }
12929
12822
 
12930
- [aria-required="true"]::after,
12931
- [required]::after {
12932
- content: " *" !important;
12933
- color: var(--color-danger-1) !important;
12934
- font-weight: var(--font-weight-bold) !important;
12823
+ .focus-visible\:outline-accent:focus-visible {
12824
+ outline: 2px solid var(--color-accent-1) !important;
12825
+ outline-offset: 2px !important;
12935
12826
  }
12936
12827
 
12937
- /* 에러 상태 표시 */
12938
-
12939
- [aria-invalid="true"] {
12940
- border-color: var(--color-danger-1) !important;
12941
- box-shadow: 0 0 0 2px rgba(var(--rgb-danger-1), 0.2) !important;
12828
+ .focus-visible\:outline-base-1:focus-visible {
12829
+ outline: 2px solid var(--color-base-1) !important;
12830
+ outline-offset: 2px !important;
12942
12831
  }
12943
12832
 
12944
- /* 에러 메시지 스타일링 */
12945
-
12946
- .error-message,
12947
- [role="alert"],
12948
- .alert-error {
12949
- color: var(--color-danger-1) !important;
12950
- background-color: rgba(var(--rgb-danger-1), 0.1) !important;
12951
- border: 1px solid var(--color-danger-1) !important;
12952
- border-radius: var(--radius-sm) !important;
12953
- padding: var(--space-2) var(--space-3) !important;
12954
- margin-top: var(--space-1) !important;
12955
- font-size: var(--font-size-sm) !important;
12833
+ .focus-visible\:outline-base-10:focus-visible {
12834
+ outline: 2px solid var(--color-base-10) !important;
12835
+ outline-offset: 2px !important;
12956
12836
  }
12957
12837
 
12958
- /* 성공 메시지 스타일링 */
12838
+ /* 포커스 배경색 변경 */
12959
12839
 
12960
- .success-message,
12961
- .alert-success {
12962
- color: var(--color-success-1) !important;
12963
- background-color: rgba(var(--rgb-success-1), 0.1) !important;
12964
- border: 1px solid var(--color-success-1) !important;
12965
- border-radius: var(--radius-sm) !important;
12966
- padding: var(--space-2) var(--space-3) !important;
12967
- margin-top: var(--space-1) !important;
12968
- font-size: var(--font-size-sm) !important;
12840
+ .focus-visible\:bg-main-1:focus-visible {
12841
+ background-color: var(--color-main-1) !important;
12842
+ color: var(--color-base-1) !important;
12969
12843
  }
12970
12844
 
12971
- /* 경고 메시지 스타일링 */
12972
-
12973
- .warning-message,
12974
- .alert-warning {
12975
- color: var(--color-warning-1) !important;
12976
- background-color: rgba(var(--rgb-warning-1), 0.1) !important;
12977
- border: 1px solid var(--color-warning-1) !important;
12978
- border-radius: var(--radius-sm) !important;
12979
- padding: var(--space-2) var(--space-3) !important;
12980
- margin-top: var(--space-1) !important;
12981
- font-size: var(--font-size-sm) !important;
12845
+ .focus-visible\:bg-accent-1:focus-visible {
12846
+ background-color: var(--color-accent-1) !important;
12847
+ color: var(--color-base-1) !important;
12982
12848
  }
12983
12849
 
12984
- /* ===== KEYBOARD NAVIGATION (키보드 네비게이션) ===== */
12850
+ .focus-visible\:bg-base-2:focus-visible {
12851
+ background-color: var(--color-base-2) !important;
12852
+ }
12985
12853
 
12986
- /* 키보드 포커스 표시자 */
12854
+ /* 포커스 그림자 효과 */
12987
12855
 
12988
- .keyboard-focusable {
12989
- outline: 2px solid transparent !important;
12990
- outline-offset: 2px !important;
12991
- transition: outline-color var(--duration-fast) var(--ease-out) !important;
12856
+ .focus-visible\:shadow-main:focus-visible {
12857
+ box-shadow: 0 0 0 3px rgba(var(--rgb-main-1), 0.3) !important;
12992
12858
  }
12993
12859
 
12994
- .keyboard-focusable:focus-visible {
12995
- outline-color: var(--color-main-1) !important;
12860
+ .focus-visible\:shadow-accent:focus-visible {
12861
+ box-shadow: 0 0 0 3px rgba(var(--rgb-accent-1), 0.3) !important;
12996
12862
  }
12997
12863
 
12998
- /* 탭 순서 건너뛰기 */
12999
-
13000
- .skip-tab-order {
13001
- position: absolute !important;
13002
- left: -10000px !important;
13003
- top: auto !important;
13004
- width: 1px !important;
13005
- height: 1px !important;
13006
- overflow: hidden !important;
12864
+ .focus-visible\:shadow-danger:focus-visible {
12865
+ box-shadow: 0 0 0 3px rgba(var(--rgb-danger-1), 0.3) !important;
13007
12866
  }
13008
12867
 
13009
- /* ===== READING ORDER (읽기 순서) ===== */
13010
-
13011
- /* 스크린 리더 읽기 순서 조정 */
12868
+ /* ===== FOCUS WITHIN (포커스 내부) ===== */
13012
12869
 
13013
- .reading-order-1 {
13014
- order: 1 !important;
13015
- }
12870
+ /* 자식 요소가 포커스될 때 부모 스타일 변경 */
13016
12871
 
13017
- .reading-order-2 {
13018
- order: 2 !important;
12872
+ .focus-within\:outline-main:focus-within {
12873
+ outline: 2px solid var(--color-main-1) !important;
12874
+ outline-offset: 2px !important;
13019
12875
  }
13020
12876
 
13021
- .reading-order-3 {
13022
- order: 3 !important;
12877
+ .focus-within\:bg-base-1:focus-within {
12878
+ background-color: var(--color-base-1) !important;
13023
12879
  }
13024
12880
 
13025
- .reading-order-4 {
13026
- order: 4 !important;
12881
+ .focus-within\:border-main-1:focus-within {
12882
+ border-color: var(--color-main-1) !important;
13027
12883
  }
13028
12884
 
13029
- .reading-order-5 {
13030
- order: 5 !important;
12885
+ .focus-within\:shadow-main:focus-within {
12886
+ box-shadow: 0 0 0 3px rgba(var(--rgb-main-1), 0.2) !important;
13031
12887
  }
13032
12888
 
13033
- /* ===== SCREEN READER ANNOUNCEMENTS (스크린 리더 안내) ===== */
13034
-
13035
- /* 라이브 영역 설정 */
13036
-
13037
- .live-region-polite,
13038
- [aria-live="polite"] {
13039
- position: relative !important;
13040
- }
12889
+ /* ===== FOCUS TRAP (포커스 트랩) ===== */
13041
12890
 
13042
- .live-region-assertive,
13043
- [aria-live="assertive"] {
13044
- position: relative !important;
13045
- }
12891
+ /* 모달/다이얼로그용 포커스 트랩 */
13046
12892
 
13047
- .live-region-off,
13048
- [aria-live="off"] {
12893
+ .focus-trap {
13049
12894
  position: relative !important;
13050
12895
  }
13051
12896
 
13052
- /* 상태 안내 메시지 */
13053
-
13054
- .status-message {
12897
+ .focus-trap::before,
12898
+ .focus-trap::after {
12899
+ content: "" !important;
13055
12900
  position: absolute !important;
13056
12901
  width: 1px !important;
13057
12902
  height: 1px !important;
13058
- padding: 0 !important;
13059
- margin: -1px !important;
13060
12903
  overflow: hidden !important;
13061
- clip: rect(0, 0, 0, 0) !important;
13062
- white-space: nowrap !important;
13063
- border: 0 !important;
12904
+ clip: rect(1px, 1px, 1px, 1px) !important;
13064
12905
  }
13065
12906
 
13066
- /* ===== TABLE ACCESSIBILITY (테이블 접근성) ===== */
13067
-
13068
- /* 테이블 캡션 스타일링 */
12907
+ .focus-trap::before {
12908
+ top: 0 !important;
12909
+ left: 0 !important;
12910
+ }
13069
12911
 
13070
- .table-caption,
13071
- caption {
13072
- text-align: left !important;
13073
- padding: var(--space-2) var(--space-4) !important;
13074
- font-weight: var(--font-weight-semibold) !important;
13075
- background-color: var(--color-base-1) !important;
13076
- border-bottom: 1px solid var(--color-base-3) !important;
12912
+ .focus-trap::after {
12913
+ bottom: 0 !important;
12914
+ right: 0 !important;
13077
12915
  }
13078
12916
 
13079
- /* 테이블 헤더 강조 */
12917
+ /* 포커스 가능한 번째/마지막 요소 */
13080
12918
 
13081
- .table-header,
13082
- th {
13083
- background-color: var(--color-base-2) !important;
13084
- font-weight: var(--font-weight-semibold) !important;
13085
- text-align: left !important;
13086
- padding: var(--space-3) var(--space-4) !important;
13087
- border-bottom: 2px solid var(--color-base-4) !important;
12919
+ .focus-first {
12920
+ position: relative !important;
13088
12921
  }
13089
12922
 
13090
- /* 데이터 셀 스타일링 */
13091
-
13092
- .table-cell,
13093
- td {
13094
- padding: var(--space-3) var(--space-4) !important;
13095
- border-bottom: 1px solid var(--color-base-3) !important;
13096
- vertical-align: top !important;
12923
+ .focus-last {
12924
+ position: relative !important;
13097
12925
  }
13098
12926
 
13099
- /* ===== RESPONSIVE ACCESSIBILITY ===== */
12927
+ /* ===== FOCUS INDICATOR STYLES (포커스 표시자 스타일) ===== */
13100
12928
 
13101
- /* 모바일에서 스크린 리더 최적화 */
13102
-
13103
- @media (max-width: 767px) {
13104
- .skip-link {
13105
- left: var(--space-2) !important;
13106
- padding: var(--space-3) var(--space-4) !important;
13107
- font-size: var(--font-size-base) !important;
13108
- }
12929
+ /* 기본 포커스 표시자 */
13109
12930
 
13110
- .visually-hidden-focusable:focus {
13111
- padding: var(--space-3) var(--space-4) !important;
13112
- font-size: var(--font-size-base) !important;
13113
- }
12931
+ .focus-indicator {
12932
+ outline: 2px solid transparent !important;
12933
+ outline-offset: 2px !important;
12934
+ border-radius: var(--radius-sm) !important;
12935
+ transition: outline-color var(--duration-fast) var(--ease-out) !important;
13114
12936
  }
13115
12937
 
13116
- /* 큰 화면에서 스킵 링크 위치 조정 */
12938
+ .focus-indicator:focus-visible {
12939
+ outline-color: var(--color-main-1) !important;
12940
+ }
13117
12941
 
13118
- @media (min-width: 1024px) {
13119
- .skip-link {
13120
- left: var(--space-8) !important;
13121
- }
12942
+ /* 고대비 포커스 표시자 */
13122
12943
 
13123
- .skip-links a {
13124
- left: var(--space-8) !important;
13125
- }
12944
+ .focus-indicator-high-contrast {
12945
+ outline: 3px solid transparent !important;
12946
+ outline-offset: 3px !important;
12947
+ transition: outline-color var(--duration-fast) var(--ease-out) !important;
13126
12948
  }
13127
12949
 
13128
- /* ===== MOTION SENSITIVITY (모션 민감도) ===== */
12950
+ .focus-indicator-high-contrast:focus-visible {
12951
+ outline-color: var(--color-base-10) !important;
12952
+ background-color: var(--color-yellow) !important;
12953
+ color: var(--color-base-10) !important;
12954
+ }
13129
12955
 
13130
- /* 모션 감소 선호도 존중 */
12956
+ /* 내부 포커스 표시자 (outline 대신 box-shadow 사용) */
13131
12957
 
13132
- @media (prefers-reduced-motion: reduce) {
13133
- .visually-hidden-focusable,
13134
- .skip-link,
13135
- .skip-links a,
13136
- [aria-expanded] .collapse-icon {
13137
- transition: none !important;
13138
- animation: none !important;
13139
- }
12958
+ .focus-indicator-inner {
12959
+ box-shadow: inset 0 0 0 0 var(--color-main-1) !important;
12960
+ transition: box-shadow var(--duration-fast) var(--ease-out) !important;
13140
12961
  }
13141
12962
 
13142
- /* ===== UTILITY COMBINATIONS ===== */
12963
+ .focus-indicator-inner:focus-visible {
12964
+ box-shadow: inset 0 0 0 3px var(--color-main-1) !important;
12965
+ }
13143
12966
 
13144
- /* 접근 가능한 버튼 */
12967
+ /* 둥근 포커스 표시자 */
13145
12968
 
13146
- .accessible-button {
13147
- position: relative !important;
13148
- display: inline-flex !important;
13149
- align-items: center !important;
13150
- justify-content: center !important;
13151
- padding: var(--space-2) var(--space-4) !important;
13152
- background-color: var(--color-main-1) !important;
13153
- color: var(--color-white) !important;
13154
- border: none !important;
13155
- border-radius: var(--radius-sm) !important;
13156
- cursor: pointer !important;
12969
+ .focus-indicator-rounded {
13157
12970
  outline: 2px solid transparent !important;
13158
12971
  outline-offset: 2px !important;
13159
- transition: all var(--duration-fast) var(--ease-out) !important;
12972
+ border-radius: var(--radius-full) !important;
12973
+ transition: outline-color var(--duration-fast) var(--ease-out) !important;
13160
12974
  }
13161
12975
 
13162
- .accessible-button:focus-visible {
13163
- outline-color: var(--color-accent-1) !important;
12976
+ .focus-indicator-rounded:focus-visible {
12977
+ outline-color: var(--color-main-1) !important;
13164
12978
  }
13165
12979
 
13166
- .accessible-button:disabled {
13167
- opacity: var(--opacity-50) !important;
13168
- cursor: not-allowed !important;
13169
- pointer-events: none !important;
13170
- }
12980
+ /* ===== BUTTON FOCUS STYLES (버튼 포커스 스타일) ===== */
13171
12981
 
13172
- /* 접근 가능한 링크 */
12982
+ /* 기본 버튼 포커스 */
13173
12983
 
13174
- .accessible-link {
13175
- color: var(--color-main-1) !important;
13176
- text-decoration: underline !important;
12984
+ .btn-focus {
12985
+ position: relative !important;
13177
12986
  outline: 2px solid transparent !important;
13178
12987
  outline-offset: 2px !important;
13179
- border-radius: var(--radius-xs) !important;
13180
12988
  transition: all var(--duration-fast) var(--ease-out) !important;
13181
12989
  }
13182
12990
 
13183
- .accessible-link:hover {
13184
- color: var(--color-main-2) !important;
13185
- text-decoration-thickness: 2px !important;
13186
- }
13187
-
13188
- .accessible-link:focus-visible {
13189
- outline-color: var(--color-main-1) !important;
13190
- background-color: rgba(var(--rgb-main-1), 0.1) !important;
13191
- padding: 2px 4px !important;
13192
- margin: -2px -4px !important;
12991
+ .btn-focus:focus-visible {
12992
+ outline-color: var(--color-accent-1) !important;
12993
+ transform: translateY(-1px) !important;
12994
+ box-shadow: var(--shadow-md) !important;
13193
12995
  }
13194
12996
 
13195
- /* ===== FOCUS UTILITIES ===== */
12997
+ /* 주요 버튼 포커스 */
13196
12998
 
13197
- /* CSS 속성명과 값을 그대로 유지하는 NewTil CSS 철학 */
12999
+ .btn-focus-primary {
13000
+ outline: 2px solid transparent !important;
13001
+ outline-offset: 2px !important;
13002
+ transition: all var(--duration-fast) var(--ease-out) !important;
13003
+ }
13198
13004
 
13199
- /* 포커스 관리: outline, focus-visible, focus-within 등 */
13005
+ .btn-focus-primary:focus-visible {
13006
+ outline-color: var(--color-base-1) !important;
13007
+ box-shadow: 0 0 0 3px rgba(var(--rgb-main-1), 0.5) !important;
13008
+ }
13200
13009
 
13201
- /* ===== OUTLINE STYLES (아웃라인 스타일) ===== */
13010
+ /* 보조 버튼 포커스 */
13202
13011
 
13203
- /* outline: none */
13012
+ .btn-focus-secondary {
13013
+ outline: 2px solid transparent !important;
13014
+ outline-offset: 2px !important;
13015
+ transition: all var(--duration-fast) var(--ease-out) !important;
13016
+ }
13204
13017
 
13205
- .outline\:none {
13206
- outline: none !important;
13018
+ .btn-focus-secondary:focus-visible {
13019
+ outline-color: var(--color-main-1) !important;
13020
+ background-color: var(--color-base-1) !important;
13207
13021
  }
13208
13022
 
13209
- /* outline: solid */
13023
+ /* ===== LINK FOCUS STYLES (링크 포커스 스타일) ===== */
13210
13024
 
13211
- .outline\:solid {
13212
- outline: 2px solid var(--color-main-1) !important;
13025
+ /* 기본 링크 포커스 */
13026
+
13027
+ .link-focus {
13028
+ position: relative !important;
13029
+ outline: 2px solid transparent !important;
13213
13030
  outline-offset: 2px !important;
13031
+ border-radius: var(--radius-xs) !important;
13032
+ transition: all var(--duration-fast) var(--ease-out) !important;
13214
13033
  }
13215
13034
 
13216
- /* outline: dashed */
13217
-
13218
- .outline\:dashed {
13219
- outline: 2px dashed var(--color-main-1) !important;
13220
- outline-offset: 2px !important;
13035
+ .link-focus:focus-visible {
13036
+ outline-color: var(--color-main-1) !important;
13037
+ background-color: rgba(var(--rgb-main-1), 0.1) !important;
13038
+ padding: 2px 4px !important;
13039
+ margin: -2px -4px !important;
13221
13040
  }
13222
13041
 
13223
- /* outline: dotted */
13042
+ /* 네비게이션 링크 포커스 */
13224
13043
 
13225
- .outline\:dotted {
13226
- outline: 2px dotted var(--color-main-1) !important;
13044
+ .nav-link-focus {
13045
+ outline: 2px solid transparent !important;
13227
13046
  outline-offset: 2px !important;
13047
+ border-radius: var(--radius-sm) !important;
13048
+ transition: all var(--duration-fast) var(--ease-out) !important;
13228
13049
  }
13229
13050
 
13230
- /* ===== OUTLINE WIDTH (아웃라인 두께) ===== */
13231
-
13232
- .outline-width\:1,
13233
- .outline\:1 {
13234
- outline-width: 1px !important;
13051
+ .nav-link-focus:focus-visible {
13052
+ outline-color: var(--color-accent-1) !important;
13053
+ background-color: var(--color-base-1) !important;
13235
13054
  }
13236
13055
 
13237
- .outline-width\:2,
13238
- .outline\:2 {
13239
- outline-width: 2px !important;
13240
- }
13056
+ /* ===== FORM FOCUS STYLES (폼 포커스 스타일) ===== */
13241
13057
 
13242
- .outline-width\:3,
13243
- .outline\:3 {
13244
- outline-width: 3px !important;
13245
- }
13058
+ /* 입력 필드 포커스 */
13246
13059
 
13247
- .outline-width\:4,
13248
- .outline\:4 {
13249
- outline-width: 4px !important;
13060
+ .input-focus {
13061
+ outline: 2px solid transparent !important;
13062
+ border: 1px solid var(--color-base-4) !important;
13063
+ transition: all var(--duration-fast) var(--ease-out) !important;
13250
13064
  }
13251
13065
 
13252
- /* ===== OUTLINE COLOR (아웃라인 색상) ===== */
13253
-
13254
- .outline-color\:main-1,
13255
- .outline\:main-1 {
13066
+ .input-focus:focus {
13256
13067
  outline-color: var(--color-main-1) !important;
13068
+ border-color: var(--color-main-1) !important;
13069
+ box-shadow: 0 0 0 1px var(--color-main-1) !important;
13257
13070
  }
13258
13071
 
13259
- .outline-color\:sub-1,
13260
- .outline\:sub-1 {
13261
- outline-color: var(--color-sub-1) !important;
13262
- }
13072
+ /* 체크박스/라디오 포커스 */
13263
13073
 
13264
- .outline-color\:accent-1,
13265
- .outline\:accent-1 {
13266
- outline-color: var(--color-accent-1) !important;
13074
+ .checkbox-focus,
13075
+ .radio-focus {
13076
+ outline: 2px solid transparent !important;
13077
+ outline-offset: 2px !important;
13267
13078
  }
13268
13079
 
13269
- .outline-color\:base-1,
13270
- .outline\:base-1 {
13271
- outline-color: var(--color-base-1) !important;
13080
+ .checkbox-focus:focus-visible,
13081
+ .radio-focus:focus-visible {
13082
+ outline-color: var(--color-main-1) !important;
13272
13083
  }
13273
13084
 
13274
- .outline-color\:base-10,
13275
- .outline\:base-10 {
13276
- outline-color: var(--color-base-10) !important;
13277
- }
13085
+ /* 셀렉트 박스 포커스 */
13278
13086
 
13279
- .outline-color\:danger-1,
13280
- .outline\:danger-1 {
13281
- outline-color: var(--color-danger-1) !important;
13087
+ .select-focus {
13088
+ outline: 2px solid transparent !important;
13089
+ border: 1px solid var(--color-base-4) !important;
13090
+ transition: all var(--duration-fast) var(--ease-out) !important;
13282
13091
  }
13283
13092
 
13284
- .outline-color\:success-1,
13285
- .outline\:success-1 {
13286
- outline-color: var(--color-success-1) !important;
13093
+ .select-focus:focus {
13094
+ outline-color: var(--color-main-1) !important;
13095
+ border-color: var(--color-main-1) !important;
13096
+ box-shadow: 0 0 0 1px var(--color-main-1) !important;
13287
13097
  }
13288
13098
 
13289
- .outline-color\:warning-1,
13290
- .outline\:warning-1 {
13291
- outline-color: var(--color-warning-1) !important;
13292
- }
13099
+ /* ===== CUSTOM FOCUS STYLES (커스텀 포커스 스타일) ===== */
13293
13100
 
13294
- /* ===== OUTLINE OFFSET (아웃라인 오프셋) ===== */
13101
+ /* 글로우 포커스 효과 */
13295
13102
 
13296
- .outline-offset\:0 {
13297
- outline-offset: 0 !important;
13103
+ .focus-glow {
13104
+ outline: none !important;
13105
+ box-shadow: 0 0 0 0 rgba(var(--rgb-main-1), 0) !important;
13106
+ transition: box-shadow var(--duration-fast) var(--ease-out) !important;
13298
13107
  }
13299
13108
 
13300
- .outline-offset\:1 {
13301
- outline-offset: 1px !important;
13109
+ .focus-glow:focus-visible {
13110
+ box-shadow: 0 0 0 4px rgba(var(--rgb-main-1), 0.3),
13111
+ 0 0 20px rgba(var(--rgb-main-1), 0.2) !important;
13302
13112
  }
13303
13113
 
13304
- .outline-offset\:2 {
13114
+ /* 펄스 포커스 효과 */
13115
+
13116
+ .focus-pulse {
13117
+ outline: 2px solid transparent !important;
13305
13118
  outline-offset: 2px !important;
13119
+ transition: outline-color var(--duration-fast) var(--ease-out) !important;
13306
13120
  }
13307
13121
 
13308
- .outline-offset\:4 {
13309
- outline-offset: 4px !important;
13122
+ .focus-pulse:focus-visible {
13123
+ outline-color: var(--color-main-1) !important;
13124
+ animation: focus-pulse-animation 1s ease-in-out infinite !important;
13310
13125
  }
13311
13126
 
13312
- .outline-offset\:8 {
13313
- outline-offset: 8px !important;
13127
+ @keyframes focus-pulse-animation {
13128
+ 0%,
13129
+ 100% {
13130
+ outline-color: var(--color-main-1);
13131
+ outline-width: 2px;
13132
+ }
13133
+ 50% {
13134
+ outline-color: var(--color-main-2);
13135
+ outline-width: 3px;
13136
+ }
13314
13137
  }
13315
13138
 
13316
- /* ===== FOCUS VISIBLE (포커스 가시성) ===== */
13139
+ /* ===== FOCUS MANAGEMENT (포커스 관리) ===== */
13317
13140
 
13318
- /* 키보드 포커스만 표시 */
13141
+ /* 자동 포커스 */
13319
13142
 
13320
- .focus-visible\:outline-main:focus-visible {
13143
+ .auto-focus {
13321
13144
  outline: 2px solid var(--color-main-1) !important;
13322
13145
  outline-offset: 2px !important;
13323
13146
  }
13324
13147
 
13325
- .focus-visible\:outline-accent:focus-visible {
13326
- outline: 2px solid var(--color-accent-1) !important;
13327
- outline-offset: 2px !important;
13328
- }
13148
+ /* 포커스 방지 */
13329
13149
 
13330
- .focus-visible\:outline-base-1:focus-visible {
13331
- outline: 2px solid var(--color-base-1) !important;
13332
- outline-offset: 2px !important;
13150
+ .no-focus {
13151
+ outline: none !important;
13152
+ -webkit-tap-highlight-color: transparent !important;
13333
13153
  }
13334
13154
 
13335
- .focus-visible\:outline-base-10:focus-visible {
13336
- outline: 2px solid var(--color-base-10) !important;
13337
- outline-offset: 2px !important;
13155
+ .no-focus:focus,
13156
+ .no-focus:focus-visible {
13157
+ outline: none !important;
13158
+ box-shadow: none !important;
13338
13159
  }
13339
13160
 
13340
- /* 포커스 배경색 변경 */
13161
+ /* 키보드 전용 포커스 */
13341
13162
 
13342
- .focus-visible\:bg-main-1:focus-visible {
13343
- background-color: var(--color-main-1) !important;
13344
- color: var(--color-base-1) !important;
13163
+ .keyboard-only-focus {
13164
+ outline: none !important;
13345
13165
  }
13346
13166
 
13347
- .focus-visible\:bg-accent-1:focus-visible {
13348
- background-color: var(--color-accent-1) !important;
13349
- color: var(--color-base-1) !important;
13167
+ .keyboard-only-focus:focus:not(:focus-visible) {
13168
+ outline: none !important;
13169
+ box-shadow: none !important;
13350
13170
  }
13351
13171
 
13352
- .focus-visible\:bg-base-2:focus-visible {
13353
- background-color: var(--color-base-2) !important;
13172
+ .keyboard-only-focus:focus-visible {
13173
+ outline: 2px solid var(--color-main-1) !important;
13174
+ outline-offset: 2px !important;
13354
13175
  }
13355
13176
 
13356
- /* 포커스 그림자 효과 */
13177
+ /* ===== RESPONSIVE FOCUS ===== */
13357
13178
 
13358
- .focus-visible\:shadow-main:focus-visible {
13359
- box-shadow: 0 0 0 3px rgba(var(--rgb-main-1), 0.3) !important;
13360
- }
13179
+ /* 모바일 포커스 최적화 */
13361
13180
 
13362
- .focus-visible\:shadow-accent:focus-visible {
13363
- box-shadow: 0 0 0 3px rgba(var(--rgb-accent-1), 0.3) !important;
13181
+ @media (max-width: 767px) {
13182
+ .focus-indicator,
13183
+ .btn-focus,
13184
+ .link-focus,
13185
+ .input-focus {
13186
+ outline-width: 3px !important;
13187
+ outline-offset: 3px !important;
13188
+ }
13364
13189
  }
13365
13190
 
13366
- .focus-visible\:shadow-danger:focus-visible {
13367
- box-shadow: 0 0 0 3px rgba(var(--rgb-danger-1), 0.3) !important;
13368
- }
13191
+ /* 터치 디바이스 포커스 */
13369
13192
 
13370
- /* ===== FOCUS WITHIN (포커스 내부) ===== */
13193
+ @media (hover: none) and (pointer: coarse) {
13194
+ .focus-indicator:focus-visible,
13195
+ .btn-focus:focus-visible,
13196
+ .link-focus:focus-visible {
13197
+ outline-width: 3px !important;
13198
+ outline-offset: 3px !important;
13199
+ }
13200
+ }
13371
13201
 
13372
- /* 자식 요소가 포커스될 부모 스타일 변경 */
13202
+ /* ===== MOTION SENSITIVITY (모션 민감도) ===== */
13373
13203
 
13374
- .focus-within\:outline-main:focus-within {
13375
- outline: 2px solid var(--color-main-1) !important;
13376
- outline-offset: 2px !important;
13204
+ @media (prefers-reduced-motion: reduce) {
13205
+ .focus-indicator,
13206
+ .btn-focus,
13207
+ .link-focus,
13208
+ .input-focus,
13209
+ .focus-glow,
13210
+ .focus-pulse {
13211
+ transition: none !important;
13212
+ animation: none !important;
13213
+ }
13377
13214
  }
13378
13215
 
13379
- .focus-within\:bg-base-1:focus-within {
13380
- background-color: var(--color-base-1) !important;
13381
- }
13216
+ /* ===== HIGH CONTRAST MODE (고대비 모드) ===== */
13382
13217
 
13383
- .focus-within\:border-main-1:focus-within {
13384
- border-color: var(--color-main-1) !important;
13218
+ @media (prefers-contrast: high) {
13219
+ .focus-indicator:focus-visible,
13220
+ .btn-focus:focus-visible,
13221
+ .link-focus:focus-visible,
13222
+ .input-focus:focus {
13223
+ outline-width: 3px !important;
13224
+ outline-color: var(--color-base-10) !important;
13225
+ background-color: var(--color-yellow) !important;
13226
+ color: var(--color-base-10) !important;
13227
+ }
13385
13228
  }
13386
13229
 
13387
- .focus-within\:shadow-main:focus-within {
13388
- box-shadow: 0 0 0 3px rgba(var(--rgb-main-1), 0.2) !important;
13389
- }
13230
+ /* ===== PRINT SUPPORT (프린트 지원) ===== */
13390
13231
 
13391
- /* ===== FOCUS TRAP (포커스 트랩) ===== */
13232
+ /* ===== PRINT UTILITIES ===== */
13392
13233
 
13393
- /* 모달/다이얼로그용 포커스 트랩 */
13234
+ /* CSS 속성명과 값을 그대로 유지하는 NewTil CSS 철학 */
13394
13235
 
13395
- .focus-trap {
13396
- position: relative !important;
13397
- }
13236
+ /* 프린트 최적화: @media print, page-break, ink saving 등 */
13398
13237
 
13399
- .focus-trap::before,
13400
- .focus-trap::after {
13401
- content: "" !important;
13402
- position: absolute !important;
13403
- width: 1px !important;
13404
- height: 1px !important;
13405
- overflow: hidden !important;
13406
- clip: rect(1px, 1px, 1px, 1px) !important;
13407
- }
13238
+ /* ===== PRINT DISPLAY (프린트 표시/숨김) ===== */
13408
13239
 
13409
- .focus-trap::before {
13410
- top: 0 !important;
13411
- left: 0 !important;
13412
- }
13240
+ /* 프린트 시에만 표시 */
13413
13241
 
13414
- .focus-trap::after {
13415
- bottom: 0 !important;
13416
- right: 0 !important;
13242
+ .print\:block {
13243
+ display: none !important;
13417
13244
  }
13418
13245
 
13419
- /* 포커스 가능한 첫 번째/마지막 요소 */
13246
+ @media print {
13247
+ .print\:block {
13248
+ display: block !important;
13249
+ }
13250
+ }
13420
13251
 
13421
- .focus-first {
13422
- position: relative !important;
13252
+ .print\:inline {
13253
+ display: none !important;
13423
13254
  }
13424
13255
 
13425
- .focus-last {
13426
- position: relative !important;
13256
+ @media print {
13257
+ .print\:inline {
13258
+ display: inline !important;
13259
+ }
13427
13260
  }
13428
13261
 
13429
- /* ===== FOCUS INDICATOR STYLES (포커스 표시자 스타일) ===== */
13262
+ .print\:inline-block {
13263
+ display: none !important;
13264
+ }
13430
13265
 
13431
- /* 기본 포커스 표시자 */
13266
+ @media print {
13267
+ .print\:inline-block {
13268
+ display: inline-block !important;
13269
+ }
13270
+ }
13432
13271
 
13433
- .focus-indicator {
13434
- outline: 2px solid transparent !important;
13435
- outline-offset: 2px !important;
13436
- border-radius: var(--radius-sm) !important;
13437
- transition: outline-color var(--duration-fast) var(--ease-out) !important;
13272
+ .print\:flex {
13273
+ display: none !important;
13438
13274
  }
13439
13275
 
13440
- .focus-indicator:focus-visible {
13441
- outline-color: var(--color-main-1) !important;
13276
+ @media print {
13277
+ .print\:flex {
13278
+ display: flex !important;
13279
+ }
13442
13280
  }
13443
13281
 
13444
- /* 고대비 포커스 표시자 */
13282
+ /* 프린트 숨김 */
13445
13283
 
13446
- .focus-indicator-high-contrast {
13447
- outline: 3px solid transparent !important;
13448
- outline-offset: 3px !important;
13449
- transition: outline-color var(--duration-fast) var(--ease-out) !important;
13284
+ .print\:hidden {
13285
+ display: block !important;
13450
13286
  }
13451
13287
 
13452
- .focus-indicator-high-contrast:focus-visible {
13453
- outline-color: var(--color-base-10) !important;
13454
- background-color: var(--color-yellow) !important;
13455
- color: var(--color-base-10) !important;
13288
+ @media print {
13289
+ .print\:hidden {
13290
+ display: none !important;
13291
+ }
13456
13292
  }
13457
13293
 
13458
- /* 내부 포커스 표시자 (outline 대신 box-shadow 사용) */
13294
+ /* 화면에서만 표시 (프린트 숨김) */
13459
13295
 
13460
- .focus-indicator-inner {
13461
- box-shadow: inset 0 0 0 0 var(--color-main-1) !important;
13462
- transition: box-shadow var(--duration-fast) var(--ease-out) !important;
13296
+ .screen-only {
13297
+ display: block !important;
13463
13298
  }
13464
13299
 
13465
- .focus-indicator-inner:focus-visible {
13466
- box-shadow: inset 0 0 0 3px var(--color-main-1) !important;
13300
+ @media print {
13301
+ .screen-only {
13302
+ display: none !important;
13303
+ }
13467
13304
  }
13468
13305
 
13469
- /* 둥근 포커스 표시자 */
13306
+ /* 프린트에서만 표시 (화면에서 숨김) */
13470
13307
 
13471
- .focus-indicator-rounded {
13472
- outline: 2px solid transparent !important;
13473
- outline-offset: 2px !important;
13474
- border-radius: var(--radius-full) !important;
13475
- transition: outline-color var(--duration-fast) var(--ease-out) !important;
13308
+ .print-only {
13309
+ display: none !important;
13476
13310
  }
13477
13311
 
13478
- .focus-indicator-rounded:focus-visible {
13479
- outline-color: var(--color-main-1) !important;
13312
+ @media print {
13313
+ .print-only {
13314
+ display: block !important;
13315
+ }
13480
13316
  }
13481
13317
 
13482
- /* ===== BUTTON FOCUS STYLES (버튼 포커스 스타일) ===== */
13318
+ /* ===== PAGE BREAKS (페이지 나누기) ===== */
13483
13319
 
13484
- /* 기본 버튼 포커스 */
13320
+ /* page-break-before */
13485
13321
 
13486
- .btn-focus {
13487
- position: relative !important;
13488
- outline: 2px solid transparent !important;
13489
- outline-offset: 2px !important;
13490
- transition: all var(--duration-fast) var(--ease-out) !important;
13322
+ .page-break-before\:auto {
13323
+ page-break-before: auto !important;
13491
13324
  }
13492
13325
 
13493
- .btn-focus:focus-visible {
13494
- outline-color: var(--color-accent-1) !important;
13495
- transform: translateY(-1px) !important;
13496
- box-shadow: var(--shadow-md) !important;
13326
+ .page-break-before\:always,
13327
+ .break-before\:page {
13328
+ page-break-before: always !important;
13497
13329
  }
13498
13330
 
13499
- /* 주요 버튼 포커스 */
13331
+ .page-break-before\:avoid,
13332
+ .break-before\:avoid {
13333
+ page-break-before: avoid !important;
13334
+ }
13500
13335
 
13501
- .btn-focus-primary {
13502
- outline: 2px solid transparent !important;
13503
- outline-offset: 2px !important;
13504
- transition: all var(--duration-fast) var(--ease-out) !important;
13336
+ .page-break-before\:left,
13337
+ .break-before\:left {
13338
+ page-break-before: left !important;
13505
13339
  }
13506
13340
 
13507
- .btn-focus-primary:focus-visible {
13508
- outline-color: var(--color-base-1) !important;
13509
- box-shadow: 0 0 0 3px rgba(var(--rgb-main-1), 0.5) !important;
13341
+ .page-break-before\:right,
13342
+ .break-before\:right {
13343
+ page-break-before: right !important;
13510
13344
  }
13511
13345
 
13512
- /* 보조 버튼 포커스 */
13346
+ /* page-break-after */
13513
13347
 
13514
- .btn-focus-secondary {
13515
- outline: 2px solid transparent !important;
13516
- outline-offset: 2px !important;
13517
- transition: all var(--duration-fast) var(--ease-out) !important;
13348
+ .page-break-after\:auto {
13349
+ page-break-after: auto !important;
13518
13350
  }
13519
13351
 
13520
- .btn-focus-secondary:focus-visible {
13521
- outline-color: var(--color-main-1) !important;
13522
- background-color: var(--color-base-1) !important;
13352
+ .page-break-after\:always,
13353
+ .break-after\:page {
13354
+ page-break-after: always !important;
13523
13355
  }
13524
-
13525
- /* ===== LINK FOCUS STYLES (링크 포커스 스타일) ===== */
13526
-
13527
- /* 기본 링크 포커스 */
13528
-
13529
- .link-focus {
13530
- position: relative !important;
13531
- outline: 2px solid transparent !important;
13532
- outline-offset: 2px !important;
13533
- border-radius: var(--radius-xs) !important;
13534
- transition: all var(--duration-fast) var(--ease-out) !important;
13535
- }
13536
-
13537
- .link-focus:focus-visible {
13538
- outline-color: var(--color-main-1) !important;
13539
- background-color: rgba(var(--rgb-main-1), 0.1) !important;
13540
- padding: 2px 4px !important;
13541
- margin: -2px -4px !important;
13542
- }
13543
-
13544
- /* 네비게이션 링크 포커스 */
13545
-
13546
- .nav-link-focus {
13547
- outline: 2px solid transparent !important;
13548
- outline-offset: 2px !important;
13549
- border-radius: var(--radius-sm) !important;
13550
- transition: all var(--duration-fast) var(--ease-out) !important;
13551
- }
13552
-
13553
- .nav-link-focus:focus-visible {
13554
- outline-color: var(--color-accent-1) !important;
13555
- background-color: var(--color-base-1) !important;
13556
- }
13557
-
13558
- /* ===== FORM FOCUS STYLES (폼 포커스 스타일) ===== */
13559
-
13560
- /* 입력 필드 포커스 */
13561
-
13562
- .input-focus {
13563
- outline: 2px solid transparent !important;
13564
- border: 1px solid var(--color-base-4) !important;
13565
- transition: all var(--duration-fast) var(--ease-out) !important;
13566
- }
13567
-
13568
- .input-focus:focus {
13569
- outline-color: var(--color-main-1) !important;
13570
- border-color: var(--color-main-1) !important;
13571
- box-shadow: 0 0 0 1px var(--color-main-1) !important;
13572
- }
13573
-
13574
- /* 체크박스/라디오 포커스 */
13575
-
13576
- .checkbox-focus,
13577
- .radio-focus {
13578
- outline: 2px solid transparent !important;
13579
- outline-offset: 2px !important;
13580
- }
13581
-
13582
- .checkbox-focus:focus-visible,
13583
- .radio-focus:focus-visible {
13584
- outline-color: var(--color-main-1) !important;
13585
- }
13586
-
13587
- /* 셀렉트 박스 포커스 */
13588
-
13589
- .select-focus {
13590
- outline: 2px solid transparent !important;
13591
- border: 1px solid var(--color-base-4) !important;
13592
- transition: all var(--duration-fast) var(--ease-out) !important;
13593
- }
13594
-
13595
- .select-focus:focus {
13596
- outline-color: var(--color-main-1) !important;
13597
- border-color: var(--color-main-1) !important;
13598
- box-shadow: 0 0 0 1px var(--color-main-1) !important;
13599
- }
13600
-
13601
- /* ===== CUSTOM FOCUS STYLES (커스텀 포커스 스타일) ===== */
13602
-
13603
- /* 글로우 포커스 효과 */
13604
-
13605
- .focus-glow {
13606
- outline: none !important;
13607
- box-shadow: 0 0 0 0 rgba(var(--rgb-main-1), 0) !important;
13608
- transition: box-shadow var(--duration-fast) var(--ease-out) !important;
13609
- }
13610
-
13611
- .focus-glow:focus-visible {
13612
- box-shadow: 0 0 0 4px rgba(var(--rgb-main-1), 0.3),
13613
- 0 0 20px rgba(var(--rgb-main-1), 0.2) !important;
13614
- }
13615
-
13616
- /* 펄스 포커스 효과 */
13617
-
13618
- .focus-pulse {
13619
- outline: 2px solid transparent !important;
13620
- outline-offset: 2px !important;
13621
- transition: outline-color var(--duration-fast) var(--ease-out) !important;
13622
- }
13623
-
13624
- .focus-pulse:focus-visible {
13625
- outline-color: var(--color-main-1) !important;
13626
- animation: focus-pulse-animation 1s ease-in-out infinite !important;
13627
- }
13628
-
13629
- @keyframes focus-pulse-animation {
13630
- 0%,
13631
- 100% {
13632
- outline-color: var(--color-main-1);
13633
- outline-width: 2px;
13634
- }
13635
- 50% {
13636
- outline-color: var(--color-main-2);
13637
- outline-width: 3px;
13638
- }
13639
- }
13640
-
13641
- /* ===== FOCUS MANAGEMENT (포커스 관리) ===== */
13642
-
13643
- /* 자동 포커스 */
13644
-
13645
- .auto-focus {
13646
- outline: 2px solid var(--color-main-1) !important;
13647
- outline-offset: 2px !important;
13648
- }
13649
-
13650
- /* 포커스 방지 */
13651
-
13652
- .no-focus {
13653
- outline: none !important;
13654
- -webkit-tap-highlight-color: transparent !important;
13655
- }
13656
-
13657
- .no-focus:focus,
13658
- .no-focus:focus-visible {
13659
- outline: none !important;
13660
- box-shadow: none !important;
13661
- }
13662
-
13663
- /* 키보드 전용 포커스 */
13664
-
13665
- .keyboard-only-focus {
13666
- outline: none !important;
13667
- }
13668
-
13669
- .keyboard-only-focus:focus:not(:focus-visible) {
13670
- outline: none !important;
13671
- box-shadow: none !important;
13672
- }
13673
-
13674
- .keyboard-only-focus:focus-visible {
13675
- outline: 2px solid var(--color-main-1) !important;
13676
- outline-offset: 2px !important;
13677
- }
13678
-
13679
- /* ===== RESPONSIVE FOCUS ===== */
13680
-
13681
- /* 모바일 포커스 최적화 */
13682
-
13683
- @media (max-width: 767px) {
13684
- .focus-indicator,
13685
- .btn-focus,
13686
- .link-focus,
13687
- .input-focus {
13688
- outline-width: 3px !important;
13689
- outline-offset: 3px !important;
13690
- }
13691
- }
13692
-
13693
- /* 터치 디바이스 포커스 */
13694
-
13695
- @media (hover: none) and (pointer: coarse) {
13696
- .focus-indicator:focus-visible,
13697
- .btn-focus:focus-visible,
13698
- .link-focus:focus-visible {
13699
- outline-width: 3px !important;
13700
- outline-offset: 3px !important;
13701
- }
13702
- }
13703
-
13704
- /* ===== MOTION SENSITIVITY (모션 민감도) ===== */
13705
-
13706
- @media (prefers-reduced-motion: reduce) {
13707
- .focus-indicator,
13708
- .btn-focus,
13709
- .link-focus,
13710
- .input-focus,
13711
- .focus-glow,
13712
- .focus-pulse {
13713
- transition: none !important;
13714
- animation: none !important;
13715
- }
13716
- }
13717
-
13718
- /* ===== HIGH CONTRAST MODE (고대비 모드) ===== */
13719
-
13720
- @media (prefers-contrast: high) {
13721
- .focus-indicator:focus-visible,
13722
- .btn-focus:focus-visible,
13723
- .link-focus:focus-visible,
13724
- .input-focus:focus {
13725
- outline-width: 3px !important;
13726
- outline-color: var(--color-base-10) !important;
13727
- background-color: var(--color-yellow) !important;
13728
- color: var(--color-base-10) !important;
13729
- }
13730
- }
13731
-
13732
- /* ===== HIGH CONTRAST UTILITIES ===== */
13733
-
13734
- /* CSS 속성명과 값을 그대로 유지하는 NewTil CSS 철학 */
13735
-
13736
- /* 고대비 접근성: 시각 장애인, 저시력자를 위한 고대비 스타일 */
13737
-
13738
- /* ===== HIGH CONTRAST DETECTION (고대비 모드 감지) ===== */
13739
-
13740
- /* 고대비 모드가 활성화된 경우에만 적용되는 스타일 */
13741
-
13742
- @media (prefers-contrast: high) {
13743
- /* 기본 텍스트 대비 강화 */
13744
- .text-high-contrast,
13745
- .high-contrast-text {
13746
- color: var(--color-black) !important;
13747
- background-color: var(--color-white) !important;
13748
- border: 2px solid var(--color-black) !important;
13749
- }
13750
-
13751
- /* 링크 대비 강화 */
13752
- .link-high-contrast,
13753
- .high-contrast-link {
13754
- color: var(--color-blue) !important;
13755
- text-decoration: underline !important;
13756
- text-decoration-thickness: 2px !important;
13757
- background-color: var(--color-white) !important;
13758
- }
13759
-
13760
- .link-high-contrast:hover,
13761
- .high-contrast-link:hover {
13762
- color: var(--color-white) !important;
13763
- background-color: var(--color-blue) !important;
13764
- outline: 2px solid var(--color-black) !important;
13765
- }
13766
-
13767
- /* 버튼 대비 강화 */
13768
- .btn-high-contrast,
13769
- .high-contrast-btn {
13770
- color: var(--color-white) !important;
13771
- background-color: var(--color-black) !important;
13772
- border: 3px solid var(--color-black) !important;
13773
- }
13774
-
13775
- .btn-high-contrast:hover,
13776
- .high-contrast-btn:hover {
13777
- color: var(--color-black) !important;
13778
- background-color: var(--color-yellow) !important;
13779
- border-color: var(--color-black) !important;
13780
- }
13781
- }
13782
-
13783
- /* ===== MANUAL HIGH CONTRAST CLASSES (수동 고대비 클래스) ===== */
13784
-
13785
- /* 고대비 모드와 관계없이 항상 적용되는 고대비 스타일 */
13786
-
13787
- /* 흑백 고대비 */
13788
-
13789
- .contrast-black-white {
13790
- color: var(--color-black) !important;
13791
- background-color: var(--color-white) !important;
13792
- border: 2px solid var(--color-black) !important;
13793
- }
13794
-
13795
- .contrast-white-black {
13796
- color: var(--color-white) !important;
13797
- background-color: var(--color-black) !important;
13798
- border: 2px solid var(--color-white) !important;
13799
- }
13800
-
13801
- /* 황색 강조 고대비 */
13802
-
13803
- .contrast-black-yellow {
13804
- color: var(--color-black) !important;
13805
- background-color: var(--color-yellow) !important;
13806
- border: 2px solid var(--color-black) !important;
13807
- }
13808
-
13809
- .contrast-yellow-black {
13810
- color: var(--color-yellow) !important;
13811
- background-color: var(--color-black) !important;
13812
- border: 2px solid var(--color-yellow) !important;
13813
- }
13814
-
13815
- /* 파란색 강조 고대비 */
13816
-
13817
- .contrast-white-blue {
13818
- color: var(--color-white) !important;
13819
- background-color: var(--color-blue) !important;
13820
- border: 2px solid var(--color-white) !important;
13821
- }
13822
-
13823
- .contrast-blue-white {
13824
- color: var(--color-blue) !important;
13825
- background-color: var(--color-white) !important;
13826
- border: 2px solid var(--color-blue) !important;
13827
- }
13828
-
13829
- /* ===== TEXT CONTRAST (텍스트 대비) ===== */
13830
-
13831
- /* 텍스트 크기 확대 + 고대비 */
13832
-
13833
- .text-large-contrast {
13834
- font-size: 1.25rem !important;
13835
- font-weight: var(--font-weight-bold) !important;
13836
- color: var(--color-black) !important;
13837
- background-color: var(--color-white) !important;
13838
- padding: var(--space-1) var(--space-2) !important;
13839
- border-radius: var(--radius-xs) !important;
13840
- }
13841
-
13842
- /* 헤딩 고대비 */
13843
-
13844
- .heading-high-contrast {
13845
- color: var(--color-black) !important;
13846
- background-color: var(--color-yellow) !important;
13847
- padding: var(--space-2) var(--space-4) !important;
13848
- border: 3px solid var(--color-black) !important;
13849
- border-radius: var(--radius-sm) !important;
13850
- font-weight: var(--font-weight-black) !important;
13851
- }
13852
-
13853
- /* 중요 텍스트 강조 */
13854
-
13855
- .text-emphasis-high {
13856
- color: var(--color-white) !important;
13857
- background-color: var(--color-red) !important;
13858
- padding: var(--space-1) var(--space-2) !important;
13859
- border: 2px solid var(--color-black) !important;
13860
- border-radius: var(--radius-xs) !important;
13861
- font-weight: var(--font-weight-bold) !important;
13862
- }
13863
-
13864
- /* ===== BUTTON CONTRAST (버튼 대비) ===== */
13865
-
13866
- /* 주요 버튼 고대비 */
13867
-
13868
- .btn-primary-contrast {
13869
- color: var(--color-white) !important;
13870
- background-color: var(--color-black) !important;
13871
- border: 3px solid var(--color-black) !important;
13872
- padding: var(--space-3) var(--space-6) !important;
13873
- font-weight: var(--font-weight-bold) !important;
13874
- font-size: 1.125rem !important;
13875
- border-radius: var(--radius-sm) !important;
13876
- transition: all var(--duration-fast) var(--ease-out) !important;
13877
- }
13878
-
13879
- .btn-primary-contrast:hover {
13880
- color: var(--color-black) !important;
13881
- background-color: var(--color-yellow) !important;
13882
- border-color: var(--color-black) !important;
13883
- transform: scale(1.05) !important;
13884
- }
13885
-
13886
- .btn-primary-contrast:focus-visible {
13887
- outline: 4px solid var(--color-blue) !important;
13888
- outline-offset: 2px !important;
13889
- }
13890
-
13891
- /* 보조 버튼 고대비 */
13892
-
13893
- .btn-secondary-contrast {
13894
- color: var(--color-black) !important;
13895
- background-color: var(--color-white) !important;
13896
- border: 3px solid var(--color-black) !important;
13897
- padding: var(--space-3) var(--space-6) !important;
13898
- font-weight: var(--font-weight-bold) !important;
13899
- font-size: 1.125rem !important;
13900
- border-radius: var(--radius-sm) !important;
13901
- transition: all var(--duration-fast) var(--ease-out) !important;
13902
- }
13903
-
13904
- .btn-secondary-contrast:hover {
13905
- color: var(--color-white) !important;
13906
- background-color: var(--color-black) !important;
13907
- border-color: var(--color-black) !important;
13908
- }
13909
-
13910
- .btn-secondary-contrast:focus-visible {
13911
- outline: 4px solid var(--color-blue) !important;
13912
- outline-offset: 2px !important;
13913
- }
13914
-
13915
- /* 위험 버튼 고대비 */
13916
-
13917
- .btn-danger-contrast {
13918
- color: var(--color-white) !important;
13919
- background-color: var(--color-red) !important;
13920
- border: 3px solid var(--color-black) !important;
13921
- padding: var(--space-3) var(--space-6) !important;
13922
- font-weight: var(--font-weight-bold) !important;
13923
- font-size: 1.125rem !important;
13924
- border-radius: var(--radius-sm) !important;
13925
- transition: all var(--duration-fast) var(--ease-out) !important;
13926
- }
13927
-
13928
- .btn-danger-contrast:hover {
13929
- color: var(--color-red) !important;
13930
- background-color: var(--color-white) !important;
13931
- border-color: var(--color-red) !important;
13932
- }
13933
-
13934
- .btn-danger-contrast:focus-visible {
13935
- outline: 4px solid var(--color-yellow) !important;
13936
- outline-offset: 2px !important;
13937
- }
13938
-
13939
- /* ===== LINK CONTRAST (링크 대비) ===== */
13940
-
13941
- /* 기본 링크 고대비 */
13942
-
13943
- .link-contrast {
13944
- color: var(--color-blue) !important;
13945
- text-decoration: underline !important;
13946
- text-decoration-thickness: 2px !important;
13947
- text-underline-offset: 4px !important;
13948
- font-weight: var(--font-weight-semibold) !important;
13949
- background-color: transparent !important;
13950
- border-radius: var(--radius-xs) !important;
13951
- transition: all var(--duration-fast) var(--ease-out) !important;
13952
- }
13953
-
13954
- .link-contrast:hover {
13955
- color: var(--color-white) !important;
13956
- background-color: var(--color-blue) !important;
13957
- padding: 2px 4px !important;
13958
- margin: -2px -4px !important;
13959
- text-decoration: none !important;
13960
- }
13961
-
13962
- .link-contrast:focus-visible {
13963
- outline: 3px solid var(--color-yellow) !important;
13964
- outline-offset: 2px !important;
13965
- background-color: var(--color-blue) !important;
13966
- color: var(--color-white) !important;
13967
- }
13968
-
13969
- /* 방문한 링크 고대비 */
13970
-
13971
- .link-contrast:visited {
13972
- color: var(--color-purple) !important;
13973
- }
13974
-
13975
- .link-contrast:visited:hover {
13976
- color: var(--color-white) !important;
13977
- background-color: var(--color-purple) !important;
13978
- }
13979
-
13980
- /* ===== FORM CONTRAST (폼 대비) ===== */
13981
-
13982
- /* 입력 필드 고대비 */
13983
-
13984
- .input-contrast {
13985
- color: var(--color-black) !important;
13986
- background-color: var(--color-white) !important;
13987
- border: 3px solid var(--color-black) !important;
13988
- padding: var(--space-3) var(--space-4) !important;
13989
- font-size: 1.125rem !important;
13990
- font-weight: var(--font-weight-medium) !important;
13991
- border-radius: var(--radius-sm) !important;
13992
- transition: all var(--duration-fast) var(--ease-out) !important;
13993
- }
13994
-
13995
- .input-contrast:focus {
13996
- outline: 3px solid var(--color-blue) !important;
13997
- outline-offset: 2px !important;
13998
- border-color: var(--color-blue) !important;
13999
- background-color: var(--color-yellow) !important;
14000
- }
14001
-
14002
- .input-contrast::placeholder {
14003
- color: var(--color-base-6) !important;
14004
- font-weight: var(--font-weight-normal) !important;
14005
- }
14006
-
14007
- /* 라벨 고대비 */
14008
-
14009
- .label-contrast {
14010
- color: var(--color-black) !important;
14011
- font-weight: var(--font-weight-bold) !important;
14012
- font-size: 1.125rem !important;
14013
- background-color: var(--color-yellow) !important;
14014
- padding: var(--space-1) var(--space-2) !important;
14015
- border-radius: var(--radius-xs) !important;
14016
- border: 2px solid var(--color-black) !important;
14017
- }
14018
-
14019
- /* 체크박스/라디오 고대비 */
14020
-
14021
- .checkbox-contrast,
14022
- .radio-contrast {
14023
- width: 1.5rem !important;
14024
- height: 1.5rem !important;
14025
- border: 3px solid var(--color-black) !important;
14026
- background-color: var(--color-white) !important;
14027
- cursor: pointer !important;
14028
- }
14029
-
14030
- .checkbox-contrast:checked,
14031
- .radio-contrast:checked {
14032
- background-color: var(--color-black) !important;
14033
- border-color: var(--color-black) !important;
14034
- }
14035
-
14036
- .checkbox-contrast:focus-visible,
14037
- .radio-contrast:focus-visible {
14038
- outline: 3px solid var(--color-blue) !important;
14039
- outline-offset: 2px !important;
14040
- }
14041
-
14042
- /* ===== TABLE CONTRAST (테이블 대비) ===== */
14043
-
14044
- /* 테이블 헤더 고대비 */
14045
-
14046
- .table-header-contrast {
14047
- color: var(--color-white) !important;
14048
- background-color: var(--color-black) !important;
14049
- border: 2px solid var(--color-black) !important;
14050
- padding: var(--space-3) var(--space-4) !important;
14051
- font-weight: var(--font-weight-bold) !important;
14052
- font-size: 1.125rem !important;
14053
- }
14054
-
14055
- /* 테이블 셀 고대비 */
14056
-
14057
- .table-cell-contrast {
14058
- color: var(--color-black) !important;
14059
- background-color: var(--color-white) !important;
14060
- border: 2px solid var(--color-black) !important;
14061
- padding: var(--space-3) var(--space-4) !important;
14062
- font-size: 1rem !important;
14063
- }
14064
-
14065
- /* 교대로 나타나는 행 고대비 */
14066
-
14067
- .table-row-contrast:nth-child(even) {
14068
- background-color: var(--color-base-1) !important;
14069
- }
14070
-
14071
- .table-row-contrast:nth-child(odd) {
14072
- background-color: var(--color-white) !important;
14073
- }
14074
-
14075
- /* ===== NAVIGATION CONTRAST (네비게이션 대비) ===== */
14076
-
14077
- /* 네비게이션 메뉴 고대비 */
14078
-
14079
- .nav-contrast {
14080
- background-color: var(--color-black) !important;
14081
- border: 3px solid var(--color-white) !important;
14082
- padding: var(--space-4) !important;
14083
- }
14084
-
14085
- .nav-contrast a {
14086
- color: var(--color-white) !important;
14087
- text-decoration: none !important;
14088
- font-weight: var(--font-weight-bold) !important;
14089
- font-size: 1.125rem !important;
14090
- padding: var(--space-2) var(--space-4) !important;
14091
- border-radius: var(--radius-sm) !important;
14092
- border: 2px solid transparent !important;
14093
- transition: all var(--duration-fast) var(--ease-out) !important;
14094
- }
14095
-
14096
- .nav-contrast a:hover {
14097
- color: var(--color-black) !important;
14098
- background-color: var(--color-yellow) !important;
14099
- border-color: var(--color-black) !important;
14100
- }
14101
-
14102
- .nav-contrast a:focus-visible {
14103
- outline: 3px solid var(--color-blue) !important;
14104
- outline-offset: 2px !important;
14105
- }
14106
-
14107
- .nav-contrast a[aria-current="page"] {
14108
- color: var(--color-black) !important;
14109
- background-color: var(--color-white) !important;
14110
- border-color: var(--color-black) !important;
14111
- }
14112
-
14113
- /* ===== CARD CONTRAST (카드 대비) ===== */
14114
-
14115
- /* 카드 고대비 */
14116
-
14117
- .card-contrast {
14118
- color: var(--color-black) !important;
14119
- background-color: var(--color-white) !important;
14120
- border: 4px solid var(--color-black) !important;
14121
- border-radius: var(--radius-md) !important;
14122
- padding: var(--space-6) !important;
14123
- box-shadow: 4px 4px 0 var(--color-black) !important;
14124
- }
14125
-
14126
- .card-contrast:hover {
14127
- transform: translate(-2px, -2px) !important;
14128
- box-shadow: 6px 6px 0 var(--color-black) !important;
14129
- }
14130
-
14131
- /* 카드 헤더 고대비 */
14132
-
14133
- .card-header-contrast {
14134
- color: var(--color-white) !important;
14135
- background-color: var(--color-black) !important;
14136
- padding: var(--space-4) var(--space-6) !important;
14137
- margin: calc(-1 * var(--space-6)) calc(-1 * var(--space-6))
14138
- var(--space-4) calc(-1 * var(--space-6)) !important;
14139
- border-radius: var(--radius-md) var(--radius-md) 0 0 !important;
14140
- font-weight: var(--font-weight-bold) !important;
14141
- font-size: 1.25rem !important;
14142
- }
14143
-
14144
- /* ===== ALERT CONTRAST (알림 대비) ===== */
14145
-
14146
- /* 성공 알림 고대비 */
14147
-
14148
- .alert-success-contrast {
14149
- color: var(--color-black) !important;
14150
- background-color: var(--color-green) !important;
14151
- border: 3px solid var(--color-black) !important;
14152
- padding: var(--space-4) var(--space-6) !important;
14153
- border-radius: var(--radius-md) !important;
14154
- font-weight: var(--font-weight-bold) !important;
14155
- font-size: 1.125rem !important;
14156
- }
14157
-
14158
- /* 경고 알림 고대비 */
14159
-
14160
- .alert-warning-contrast {
14161
- color: var(--color-black) !important;
14162
- background-color: var(--color-yellow) !important;
14163
- border: 3px solid var(--color-black) !important;
14164
- padding: var(--space-4) var(--space-6) !important;
14165
- border-radius: var(--radius-md) !important;
14166
- font-weight: var(--font-weight-bold) !important;
14167
- font-size: 1.125rem !important;
14168
- }
14169
-
14170
- /* 오류 알림 고대비 */
14171
-
14172
- .alert-error-contrast {
14173
- color: var(--color-white) !important;
14174
- background-color: var(--color-red) !important;
14175
- border: 3px solid var(--color-black) !important;
14176
- padding: var(--space-4) var(--space-6) !important;
14177
- border-radius: var(--radius-md) !important;
14178
- font-weight: var(--font-weight-bold) !important;
14179
- font-size: 1.125rem !important;
14180
- }
14181
-
14182
- /* 정보 알림 고대비 */
14183
-
14184
- .alert-info-contrast {
14185
- color: var(--color-white) !important;
14186
- background-color: var(--color-blue) !important;
14187
- border: 3px solid var(--color-black) !important;
14188
- padding: var(--space-4) var(--space-6) !important;
14189
- border-radius: var(--radius-md) !important;
14190
- font-weight: var(--font-weight-bold) !important;
14191
- font-size: 1.125rem !important;
14192
- }
14193
-
14194
- /* ===== RESPONSIVE HIGH CONTRAST ===== */
14195
-
14196
- /* 모바일에서 고대비 최적화 */
14197
-
14198
- @media (max-width: 767px) {
14199
- .btn-primary-contrast,
14200
- .btn-secondary-contrast,
14201
- .btn-danger-contrast {
14202
- font-size: 1.25rem !important;
14203
- padding: var(--space-4) var(--space-8) !important;
14204
- border-width: 4px !important;
14205
- }
14206
-
14207
- .input-contrast {
14208
- font-size: 1.25rem !important;
14209
- padding: var(--space-4) var(--space-5) !important;
14210
- border-width: 4px !important;
14211
- }
14212
-
14213
- .text-large-contrast {
14214
- font-size: 1.5rem !important;
14215
- }
14216
- }
14217
-
14218
- /* 큰 화면에서 고대비 최적화 */
14219
-
14220
- @media (min-width: 1024px) {
14221
- .heading-high-contrast {
14222
- font-size: 2rem !important;
14223
- padding: var(--space-4) var(--space-8) !important;
14224
- }
14225
-
14226
- .card-contrast {
14227
- padding: var(--space-8) !important;
14228
- border-width: 5px !important;
14229
- box-shadow: 6px 6px 0 var(--color-black) !important;
14230
- }
14231
- }
14232
-
14233
- /* ===== UTILITY COMBINATIONS ===== */
14234
-
14235
- /* 완전한 고대비 페이지 래퍼 */
14236
-
14237
- .high-contrast-page {
14238
- color: var(--color-black) !important;
14239
- background-color: var(--color-white) !important;
14240
- font-weight: var(--font-weight-medium) !important;
14241
- line-height: 1.6 !important;
14242
- }
14243
-
14244
- .high-contrast-page * {
14245
- border-color: var(--color-black) !important;
14246
- }
14247
-
14248
- /* 고대비 컨테이너 */
14249
-
14250
- .high-contrast-container {
14251
- color: var(--color-black) !important;
14252
- background-color: var(--color-white) !important;
14253
- border: 3px solid var(--color-black) !important;
14254
- padding: var(--space-6) !important;
14255
- border-radius: var(--radius-lg) !important;
14256
- margin: var(--space-4) !important;
14257
- }
14258
-
14259
- /* ===== PRINT SUPPORT (프린트 지원) ===== */
14260
-
14261
- /* ===== PRINT UTILITIES ===== */
14262
-
14263
- /* CSS 속성명과 값을 그대로 유지하는 NewTil CSS 철학 */
14264
-
14265
- /* 프린트 최적화: @media print, page-break, ink saving 등 */
14266
-
14267
- /* ===== PRINT DISPLAY (프린트 표시/숨김) ===== */
14268
-
14269
- /* 프린트 시에만 표시 */
14270
-
14271
- .print\:block {
14272
- display: none !important;
14273
- }
14274
-
14275
- @media print {
14276
- .print\:block {
14277
- display: block !important;
14278
- }
14279
- }
14280
-
14281
- .print\:inline {
14282
- display: none !important;
14283
- }
14284
-
14285
- @media print {
14286
- .print\:inline {
14287
- display: inline !important;
14288
- }
14289
- }
14290
-
14291
- .print\:inline-block {
14292
- display: none !important;
14293
- }
14294
-
14295
- @media print {
14296
- .print\:inline-block {
14297
- display: inline-block !important;
14298
- }
14299
- }
14300
-
14301
- .print\:flex {
14302
- display: none !important;
14303
- }
14304
-
14305
- @media print {
14306
- .print\:flex {
14307
- display: flex !important;
14308
- }
14309
- }
14310
-
14311
- /* 프린트 시 숨김 */
14312
-
14313
- .print\:hidden {
14314
- display: block !important;
14315
- }
14316
-
14317
- @media print {
14318
- .print\:hidden {
14319
- display: none !important;
14320
- }
14321
- }
14322
-
14323
- /* 화면에서만 표시 (프린트 시 숨김) */
14324
-
14325
- .screen-only {
14326
- display: block !important;
14327
- }
14328
-
14329
- @media print {
14330
- .screen-only {
14331
- display: none !important;
14332
- }
14333
- }
14334
-
14335
- /* 프린트에서만 표시 (화면에서 숨김) */
14336
-
14337
- .print-only {
14338
- display: none !important;
14339
- }
14340
-
14341
- @media print {
14342
- .print-only {
14343
- display: block !important;
14344
- }
14345
- }
14346
-
14347
- /* ===== PAGE BREAKS (페이지 나누기) ===== */
14348
-
14349
- /* page-break-before */
14350
-
14351
- .page-break-before\:auto {
14352
- page-break-before: auto !important;
14353
- }
14354
-
14355
- .page-break-before\:always,
14356
- .break-before\:page {
14357
- page-break-before: always !important;
14358
- }
14359
-
14360
- .page-break-before\:avoid,
14361
- .break-before\:avoid {
14362
- page-break-before: avoid !important;
14363
- }
14364
-
14365
- .page-break-before\:left,
14366
- .break-before\:left {
14367
- page-break-before: left !important;
14368
- }
14369
-
14370
- .page-break-before\:right,
14371
- .break-before\:right {
14372
- page-break-before: right !important;
14373
- }
14374
-
14375
- /* page-break-after */
14376
-
14377
- .page-break-after\:auto {
14378
- page-break-after: auto !important;
14379
- }
14380
-
14381
- .page-break-after\:always,
14382
- .break-after\:page {
14383
- page-break-after: always !important;
14384
- }
14385
-
14386
- .page-break-after\:avoid,
14387
- .break-after\:avoid {
14388
- page-break-after: avoid !important;
14389
- }
14390
-
14391
- .page-break-after\:left,
14392
- .break-after\:left {
14393
- page-break-after: left !important;
14394
- }
14395
-
14396
- .page-break-after\:right,
14397
- .break-after\:right {
14398
- page-break-after: right !important;
14399
- }
14400
-
14401
- /* page-break-inside */
14402
-
14403
- .page-break-inside\:auto {
14404
- page-break-inside: auto !important;
14405
- }
14406
-
14407
- .page-break-inside\:avoid,
14408
- .break-inside\:avoid {
14409
- page-break-inside: avoid !important;
14410
- }
14411
-
14412
- /* ===== MODERN BREAK PROPERTIES (현대적 나누기 속성) ===== */
14413
-
14414
- /* break-before */
14415
-
14416
- .break-before\:auto {
14417
- break-before: auto !important;
14418
- }
14419
-
14420
- .break-before\:avoid {
14421
- break-before: avoid !important;
14422
- }
14423
-
14424
- .break-before\:page {
14425
- break-before: page !important;
14426
- }
14427
-
14428
- .break-before\:left {
14429
- break-before: left !important;
14430
- }
14431
-
14432
- .break-before\:right {
14433
- break-before: right !important;
14434
- }
14435
-
14436
- .break-before\:column {
14437
- break-before: column !important;
14438
- }
14439
-
14440
- /* break-after */
14441
-
14442
- .break-after\:auto {
14443
- break-after: auto !important;
14444
- }
14445
-
14446
- .break-after\:avoid {
14447
- break-after: avoid !important;
14448
- }
14449
-
14450
- .break-after\:page {
14451
- break-after: page !important;
14452
- }
14453
-
14454
- .break-after\:left {
14455
- break-after: left !important;
14456
- }
14457
-
14458
- .break-after\:right {
14459
- break-after: right !important;
14460
- }
14461
-
14462
- .break-after\:column {
14463
- break-after: column !important;
14464
- }
14465
-
14466
- /* break-inside */
14467
-
14468
- .break-inside\:auto {
14469
- break-inside: auto !important;
14470
- }
14471
-
14472
- .break-inside\:avoid {
14473
- break-inside: avoid !important;
14474
- }
14475
-
14476
- .break-inside\:avoid-page {
14477
- break-inside: avoid-page !important;
14478
- }
14479
-
14480
- .break-inside\:avoid-column {
14481
- break-inside: avoid-column !important;
14482
- }
14483
-
14484
- /* ===== PRINT COLORS (프린트 색상) ===== */
14485
-
14486
- /* 프린트 시 색상 조정 */
14487
-
14488
- @media print {
14489
- .print\:text-black {
14490
- color: black !important;
14491
- }
14492
-
14493
- .print\:bg-white {
14494
- background-color: white !important;
14495
- }
14496
-
14497
- .print\:bg-transparent {
14498
- background-color: transparent !important;
14499
- }
14500
-
14501
- .print\:border-black {
14502
- border-color: black !important;
14503
- }
14504
-
14505
- .print\:border-gray {
14506
- border-color: #666 !important;
14507
- }
14508
- }
14509
-
14510
- /* 잉크 절약 모드 */
14511
-
14512
- .ink-saving {
14513
- background: white !important;
14514
- color: black !important;
14515
- border-color: black !important;
14516
- }
14517
-
14518
- @media print {
14519
- .ink-saving {
14520
- background: transparent !important;
14521
- box-shadow: none !important;
14522
- text-shadow: none !important;
14523
- }
14524
-
14525
- .ink-saving img {
14526
- opacity: 0.8 !important;
14527
- filter: grayscale(100%) !important;
14528
- }
14529
- }
14530
-
14531
- /* 프린트 시 그래디언트 제거 */
14532
-
14533
- @media print {
14534
- .print\:no-gradient {
14535
- background-image: none !important;
14536
- background: white !important;
14537
- }
14538
- }
14539
-
14540
- /* ===== PRINT TYPOGRAPHY (프린트 타이포그래피) ===== */
14541
-
14542
- /* 프린트 시 글꼴 크기 조정 */
14543
-
14544
- @media print {
14545
- .print\:text-xs {
14546
- font-size: 10pt !important;
14547
- }
14548
-
14549
- .print\:text-sm {
14550
- font-size: 11pt !important;
14551
- }
14552
-
14553
- .print\:text-base {
14554
- font-size: 12pt !important;
14555
- }
14556
-
14557
- .print\:text-lg {
14558
- font-size: 14pt !important;
14559
- }
14560
-
14561
- .print\:text-xl {
14562
- font-size: 16pt !important;
14563
- }
14564
-
14565
- .print\:text-2xl {
14566
- font-size: 18pt !important;
14567
- }
14568
-
14569
- .print\:text-3xl {
14570
- font-size: 24pt !important;
14571
- }
14572
- }
14573
-
14574
- /* 프린트 시 폰트 최적화 */
14575
-
14576
- @media print {
14577
- .print-optimized {
14578
- font-family: "Times New Roman", serif !important;
14579
- line-height: 1.4 !important;
14580
- color: black !important;
14581
- }
14582
-
14583
- .print-optimized h1,
14584
- .print-optimized h2,
14585
- .print-optimized h3,
14586
- .print-optimized h4,
14587
- .print-optimized h5,
14588
- .print-optimized h6 {
14589
- color: black !important;
14590
- page-break-after: avoid !important;
14591
- }
14592
-
14593
- .print-optimized p {
14594
- orphans: 3 !important;
14595
- widows: 3 !important;
14596
- }
14597
- }
14598
-
14599
- /* ===== PRINT LAYOUT (프린트 레이아웃) ===== */
14600
-
14601
- /* 프린트 시 마진/패딩 조정 */
14602
-
14603
- @media print {
14604
- .print\:m-0 {
14605
- margin: 0 !important;
14606
- }
14607
-
14608
- .print\:p-0 {
14609
- padding: 0 !important;
14610
- }
14611
-
14612
- .print\:m-2 {
14613
- margin: 0.5cm !important;
14614
- }
14615
-
14616
- .print\:p-2 {
14617
- padding: 0.5cm !important;
14618
- }
14619
-
14620
- .print\:m-4 {
14621
- margin: 1cm !important;
14622
- }
14623
-
14624
- .print\:p-4 {
14625
- padding: 1cm !important;
14626
- }
14627
- }
14628
-
14629
- /* 프린트 시 폭 조정 */
14630
-
14631
- @media print {
14632
- .print\:w-full {
14633
- width: 100% !important;
14634
- }
14635
-
14636
- .print\:w-1\/2 {
14637
- width: 50% !important;
14638
- }
14639
-
14640
- .print\:w-1\/3 {
14641
- width: 33.333333% !important;
14642
- }
14643
-
14644
- .print\:w-2\/3 {
14645
- width: 66.666667% !important;
14646
- }
14647
-
14648
- .print\:w-1\/4 {
14649
- width: 25% !important;
14650
- }
14651
-
14652
- .print\:w-3\/4 {
14653
- width: 75% !important;
14654
- }
14655
- }
14656
-
14657
- /* ===== PRINT TABLES (프린트 테이블) ===== */
14658
-
14659
- /* 테이블 프린트 최적화 */
14660
-
14661
- .print-table {
14662
- width: 100% !important;
14663
- border-collapse: collapse !important;
14664
- }
14665
-
14666
- @media print {
14667
- .print-table {
14668
- page-break-inside: auto !important;
14669
- }
14670
-
14671
- .print-table thead {
14672
- display: table-header-group !important;
14673
- }
14674
-
14675
- .print-table tbody {
14676
- display: table-row-group !important;
14677
- }
14678
-
14679
- .print-table tr {
14680
- page-break-inside: avoid !important;
14681
- }
14682
-
14683
- .print-table th,
14684
- .print-table td {
14685
- border: 1pt solid black !important;
14686
- padding: 0.25cm !important;
14687
- font-size: 10pt !important;
14688
- }
14689
-
14690
- .print-table th {
14691
- background-color: #f0f0f0 !important;
14692
- font-weight: bold !important;
14693
- }
14694
- }
14695
-
14696
- /* ===== PRINT LINKS (프린트 링크) ===== */
14697
-
14698
- /* 링크 URL 표시 */
14699
-
14700
- @media print {
14701
- .print-urls a:after {
14702
- content: " (" attr(href) ")" !important;
14703
- font-size: smaller !important;
14704
- color: #666 !important;
14705
- }
14706
-
14707
- .print-urls a[href^="mailto:"]:after {
14708
- content: " (" attr(href) ")" !important;
14709
- }
14710
-
14711
- .print-urls a[href^="tel:"]:after {
14712
- content: " (" attr(href) ")" !important;
14713
- }
14714
-
14715
- /* 내부 링크는 URL 표시하지 않음 */
14716
- .print-urls a[href^="#"]:after,
14717
- .print-urls a[href^="/"]:after {
14718
- content: "" !important;
14719
- }
14720
- }
14721
-
14722
- /* 링크 스타일 제거 */
14723
-
14724
- @media print {
14725
- .print-no-links a {
14726
- color: black !important;
14727
- text-decoration: none !important;
14728
- }
14729
- }
14730
-
14731
- /* ===== PRINT IMAGES (프린트 이미지) ===== */
14732
-
14733
- /* 이미지 프린트 최적화 */
14734
-
14735
- @media print {
14736
- .print-img-optimize img {
14737
- max-width: 100% !important;
14738
- height: auto !important;
14739
- page-break-inside: avoid !important;
14740
- filter: grayscale(100%) !important; /* 잉크 절약 */
14741
- }
14742
-
14743
- .print-img-full img {
14744
- max-width: 100% !important;
14745
- height: auto !important;
14746
- page-break-inside: avoid !important;
14747
- }
14748
-
14749
- .print-img-small img {
14750
- max-width: 50% !important;
14751
- height: auto !important;
14752
- }
14753
-
14754
- .print-img-hide img {
14755
- display: none !important;
14756
- }
14757
- }
14758
-
14759
- /* ===== PRINT HEADERS & FOOTERS (프린트 헤더/푸터) ===== */
14760
-
14761
- /* 페이지 헤더/푸터 스타일 */
14762
-
14763
- @media print {
14764
- .print-header {
14765
- position: fixed !important;
14766
- top: 0 !important;
14767
- left: 0 !important;
14768
- right: 0 !important;
14769
- height: 1cm !important;
14770
- background: white !important;
14771
- border-bottom: 1pt solid black !important;
14772
- padding: 0.25cm !important;
14773
- font-size: 10pt !important;
14774
- text-align: center !important;
14775
- }
14776
-
14777
- .print-footer {
14778
- position: fixed !important;
14779
- bottom: 0 !important;
14780
- left: 0 !important;
14781
- right: 0 !important;
14782
- height: 1cm !important;
14783
- background: white !important;
14784
- border-top: 1pt solid black !important;
14785
- padding: 0.25cm !important;
14786
- font-size: 10pt !important;
14787
- text-align: center !important;
14788
- }
14789
-
14790
- .print-content {
14791
- margin-top: 1.5cm !important;
14792
- margin-bottom: 1.5cm !important;
14793
- }
14794
- }
14795
-
14796
- /* ===== PRINT SECTIONS (프린트 섹션) ===== */
14797
-
14798
- /* 섹션별 페이지 나누기 */
14799
-
14800
- .print-section {
14801
- page-break-before: auto !important;
14802
- page-break-after: avoid !important;
14803
- page-break-inside: avoid !important;
14804
- }
14805
-
14806
- @media print {
14807
- .print-section-new-page {
14808
- page-break-before: always !important;
14809
- }
14810
-
14811
- .print-section-avoid-break {
14812
- page-break-inside: avoid !important;
14813
- }
14814
-
14815
- .print-section-keep-together {
14816
- page-break-before: avoid !important;
14817
- page-break-after: avoid !important;
14818
- page-break-inside: avoid !important;
14819
- }
14820
- }
14821
-
14822
- /* ===== PRINT FORMS (프린트 폼) ===== */
14823
-
14824
- /* 폼 요소 프린트 최적화 */
14825
-
14826
- @media print {
14827
- .print-form input,
14828
- .print-form select,
14829
- .print-form textarea {
14830
- border: 1pt solid black !important;
14831
- background: white !important;
14832
- color: black !important;
14833
- padding: 0.1cm !important;
14834
- font-size: 10pt !important;
14835
- }
14836
-
14837
- .print-form input[type="checkbox"],
14838
- .print-form input[type="radio"] {
14839
- width: 0.4cm !important;
14840
- height: 0.4cm !important;
14841
- }
14842
-
14843
- .print-form label {
14844
- font-weight: bold !important;
14845
- color: black !important;
14846
- }
14847
-
14848
- /* 빈 입력 필드에 밑줄 표시 */
14849
- .print-form input:not([value]),
14850
- .print-form input[value=""] {
14851
- border-bottom: 1pt solid black !important;
14852
- border-top: none !important;
14853
- border-left: none !important;
14854
- border-right: none !important;
14855
- background: transparent !important;
14856
- min-width: 3cm !important;
14857
- }
14858
- }
14859
-
14860
- /* ===== PRINT UTILITIES (프린트 유틸리티) ===== */
14861
-
14862
- /* 프린트 최적화 기본 설정 */
14863
-
14864
- .print-optimized-page {
14865
- font-size: 12pt !important;
14866
- line-height: 1.4 !important;
14867
- color: black !important;
14868
- background: white !important;
14869
- }
14870
-
14871
- @media print {
14872
- .print-optimized-page {
14873
- margin: 2cm !important;
14874
- font-family: "Times New Roman", serif !important;
14875
- }
14876
-
14877
- .print-optimized-page * {
14878
- color: black !important;
14879
- background: transparent !important;
14880
- box-shadow: none !important;
14881
- text-shadow: none !important;
14882
- }
14883
-
14884
- .print-optimized-page img {
14885
- max-width: 100% !important;
14886
- height: auto !important;
14887
- page-break-inside: avoid !important;
14888
- }
14889
-
14890
- .print-optimized-page h1,
14891
- .print-optimized-page h2,
14892
- .print-optimized-page h3,
14893
- .print-optimized-page h4,
14894
- .print-optimized-page h5,
14895
- .print-optimized-page h6 {
14896
- page-break-after: avoid !important;
14897
- margin-top: 1em !important;
14898
- margin-bottom: 0.5em !important;
14899
- }
14900
-
14901
- .print-optimized-page p,
14902
- .print-optimized-page li {
14903
- orphans: 3 !important;
14904
- widows: 3 !important;
14905
- }
14906
-
14907
- .print-optimized-page blockquote,
14908
- .print-optimized-page pre {
14909
- page-break-inside: avoid !important;
14910
- border-left: 2pt solid black !important;
14911
- padding-left: 0.5cm !important;
14912
- margin: 1em 0 !important;
14913
- }
14914
- }
14915
-
14916
- /* QR 코드/바코드용 */
14917
-
14918
- @media print {
14919
- .print-qr,
14920
- .print-barcode {
14921
- page-break-inside: avoid !important;
14922
- filter: none !important; /* 그레이스케일 제거 */
14923
- }
14924
- }
14925
-
14926
- /* 프린트 프리뷰 시 시뮬레이션 */
14927
-
14928
- .print-preview {
14929
- background: white !important;
14930
- color: black !important;
14931
- font-family: "Times New Roman", serif !important;
14932
- font-size: 12pt !important;
14933
- line-height: 1.4 !important;
14934
- max-width: 21cm !important; /* A4 폭 */
14935
- margin: 0 auto !important;
14936
- padding: 2cm !important;
14937
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.1) !important;
14938
- }
14939
-
14940
- /* ===== PAGE ORIENTATION (페이지 방향) ===== */
14941
-
14942
- /* 가로 방향 페이지 */
14943
-
14944
- @page landscape {
14945
- size: landscape;
14946
- }
14947
-
14948
- .print-landscape {
14949
- page: landscape !important;
14950
- }
14951
-
14952
- /* 세로 방향 페이지 */
14953
-
14954
- @page portrait {
14955
- size: portrait;
14956
- }
14957
-
14958
- .print-portrait {
14959
- page: portrait !important;
14960
- }
14961
-
14962
- /* ===== PAGE SIZE (페이지 크기) ===== */
14963
-
14964
- @page {
14965
- margin: 2cm;
14966
- size: A4;
14967
- }
14968
-
14969
- @page A4 {
14970
- size: A4;
14971
- margin: 2cm;
14972
- }
14973
-
14974
- @page letter {
14975
- size: letter;
14976
- margin: 1in;
14977
- }
14978
-
14979
- /* ===== PRINT DEBUGGING (프린트 디버깅) ===== */
14980
-
14981
- /* 개발 시 프린트 스타일 확인용 */
14982
-
14983
- .print-debug {
14984
- outline: 1px solid red !important;
14985
- }
14986
-
14987
- @media print {
14988
- .print-debug {
14989
- outline: 1pt solid black !important;
14990
- }
14991
-
14992
- .print-debug::before {
14993
- content: "PRINT DEBUG" !important;
14994
- display: block !important;
14995
- background: yellow !important;
14996
- color: black !important;
14997
- font-size: 8pt !important;
14998
- padding: 2pt !important;
14999
- margin-bottom: 2pt !important;
15000
- }
13356
+
13357
+ .page-break-after\:avoid,
13358
+ .break-after\:avoid {
13359
+ page-break-after: avoid !important;
13360
+ }
13361
+
13362
+ .page-break-after\:left,
13363
+ .break-after\:left {
13364
+ page-break-after: left !important;
15001
13365
  }
15002
13366
 
15003
- /* ===== BROWSER COMPATIBILITY (브라우저 호환성) ===== */
13367
+ .page-break-after\:right,
13368
+ .break-after\:right {
13369
+ page-break-after: right !important;
13370
+ }
15004
13371
 
15005
- /* ===== BROWSER COMPATIBILITY UTILITIES ===== */
13372
+ /* page-break-inside */
15006
13373
 
15007
- /* CSS 속성명과 값을 그대로 유지하는 NewTil CSS 철학 */
13374
+ .page-break-inside\:auto {
13375
+ page-break-inside: auto !important;
13376
+ }
15008
13377
 
15009
- /* 브라우저 호환성: vendor prefixes, feature detection, fallbacks 등 */
13378
+ .page-break-inside\:avoid,
13379
+ .break-inside\:avoid {
13380
+ page-break-inside: avoid !important;
13381
+ }
15010
13382
 
15011
- /* ===== VENDOR PREFIXES (벤더 프리픽스) ===== */
13383
+ /* ===== MODERN BREAK PROPERTIES (현대적 나누기 속성) ===== */
15012
13384
 
15013
- /* Transform 호환성 */
13385
+ /* break-before */
15014
13386
 
15015
- .transform-compat {
15016
- -webkit-transform: var(--transform, none) !important;
15017
- -moz-transform: var(--transform, none) !important;
15018
- -ms-transform: var(--transform, none) !important;
15019
- -o-transform: var(--transform, none) !important;
15020
- transform: var(--transform, none) !important;
13387
+ .break-before\:auto {
13388
+ break-before: auto !important;
15021
13389
  }
15022
13390
 
15023
- /* Transition 호환성 */
15024
-
15025
- .transition-compat {
15026
- -webkit-transition: var(--transition, all 0.3s ease) !important;
15027
- -moz-transition: var(--transition, all 0.3s ease) !important;
15028
- -ms-transition: var(--transition, all 0.3s ease) !important;
15029
- -o-transition: var(--transition, all 0.3s ease) !important;
15030
- transition: var(--transition, all 0.3s ease) !important;
13391
+ .break-before\:avoid {
13392
+ break-before: avoid !important;
15031
13393
  }
15032
13394
 
15033
- /* Animation 호환성 */
13395
+ .break-before\:page {
13396
+ break-before: page !important;
13397
+ }
15034
13398
 
15035
- .animation-compat {
15036
- -webkit-animation: var(--animation, none) !important;
15037
- -moz-animation: var(--animation, none) !important;
15038
- -ms-animation: var(--animation, none) !important;
15039
- -o-animation: var(--animation, none) !important;
15040
- animation: var(--animation, none) !important;
13399
+ .break-before\:left {
13400
+ break-before: left !important;
15041
13401
  }
15042
13402
 
15043
- /* Box Shadow 호환성 */
13403
+ .break-before\:right {
13404
+ break-before: right !important;
13405
+ }
15044
13406
 
15045
- .box-shadow-compat {
15046
- -webkit-box-shadow: var(--shadow, none) !important;
15047
- -moz-box-shadow: var(--shadow, none) !important;
15048
- box-shadow: var(--shadow, none) !important;
13407
+ .break-before\:column {
13408
+ break-before: column !important;
15049
13409
  }
15050
13410
 
15051
- /* Border Radius 호환성 */
13411
+ /* break-after */
15052
13412
 
15053
- .border-radius-compat {
15054
- -webkit-border-radius: var(--radius, 0) !important;
15055
- -moz-border-radius: var(--radius, 0) !important;
15056
- border-radius: var(--radius, 0) !important;
13413
+ .break-after\:auto {
13414
+ break-after: auto !important;
15057
13415
  }
15058
13416
 
15059
- /* Linear Gradient 호환성 */
15060
-
15061
- .linear-gradient-compat {
15062
- background: var(--gradient-fallback, #ffffff) !important; /* 폴백 색상 */
15063
- background: -webkit-linear-gradient(
15064
- var(--gradient-direction, top),
15065
- var(--gradient-stops)
15066
- ) !important;
15067
- background: -moz-linear-gradient(
15068
- var(--gradient-direction, top),
15069
- var(--gradient-stops)
15070
- ) !important;
15071
- background: -ms-linear-gradient(
15072
- var(--gradient-direction, top),
15073
- var(--gradient-stops)
15074
- ) !important;
15075
- background: -o-linear-gradient(
15076
- var(--gradient-direction, top),
15077
- var(--gradient-stops)
15078
- ) !important;
15079
- background: linear-gradient(
15080
- var(--gradient-direction, to bottom),
15081
- var(--gradient-stops)
15082
- ) !important;
13417
+ .break-after\:avoid {
13418
+ break-after: avoid !important;
15083
13419
  }
15084
13420
 
15085
- /* ===== FLEXBOX COMPATIBILITY (플렉스박스 호환성) ===== */
13421
+ .break-after\:page {
13422
+ break-after: page !important;
13423
+ }
15086
13424
 
15087
- /* 구 버전 Flexbox 지원 */
13425
+ .break-after\:left {
13426
+ break-after: left !important;
13427
+ }
15088
13428
 
15089
- .flex-compat {
15090
- display: -webkit-box !important; /* iOS 6-, Safari 3.1-6 */
15091
- display: -moz-box !important; /* Firefox 19- */
15092
- display: -ms-flexbox !important; /* IE 10 */
15093
- display: -webkit-flex !important; /* Chrome */
15094
- display: flex !important; /* 표준 */
13429
+ .break-after\:right {
13430
+ break-after: right !important;
15095
13431
  }
15096
13432
 
15097
- .flex-direction-row-compat {
15098
- -webkit-box-orient: horizontal !important;
15099
- -webkit-box-direction: normal !important;
15100
- -webkit-flex-direction: row !important;
15101
- -ms-flex-direction: row !important;
15102
- flex-direction: row !important;
13433
+ .break-after\:column {
13434
+ break-after: column !important;
15103
13435
  }
15104
13436
 
15105
- .flex-direction-column-compat {
15106
- -webkit-box-orient: vertical !important;
15107
- -webkit-box-direction: normal !important;
15108
- -webkit-flex-direction: column !important;
15109
- -ms-flex-direction: column !important;
15110
- flex-direction: column !important;
13437
+ /* break-inside */
13438
+
13439
+ .break-inside\:auto {
13440
+ break-inside: auto !important;
15111
13441
  }
15112
13442
 
15113
- .justify-content-center-compat {
15114
- -webkit-box-pack: center !important;
15115
- -webkit-justify-content: center !important;
15116
- -ms-flex-pack: center !important;
15117
- justify-content: center !important;
13443
+ .break-inside\:avoid {
13444
+ break-inside: avoid !important;
15118
13445
  }
15119
13446
 
15120
- .align-items-center-compat {
15121
- -webkit-box-align: center !important;
15122
- -webkit-align-items: center !important;
15123
- -ms-flex-align: center !important;
15124
- align-items: center !important;
13447
+ .break-inside\:avoid-page {
13448
+ break-inside: avoid-page !important;
15125
13449
  }
15126
13450
 
15127
- .flex-1-compat {
15128
- -webkit-box-flex: 1 !important;
15129
- -webkit-flex: 1 !important;
15130
- -ms-flex: 1 !important;
15131
- flex: 1 !important;
13451
+ .break-inside\:avoid-column {
13452
+ break-inside: avoid-column !important;
15132
13453
  }
15133
13454
 
15134
- /* ===== GRID COMPATIBILITY (그리드 호환성) ===== */
13455
+ /* ===== PRINT COLORS (프린트 색상) ===== */
13456
+
13457
+ /* 프린트 시 색상 조정 */
15135
13458
 
15136
- /* CSS Grid 호환성 */
13459
+ @media print {
13460
+ .print\:text-black {
13461
+ color: black !important;
13462
+ }
15137
13463
 
15138
- .grid-compat {
15139
- display: -ms-grid !important; /* IE 10-11 */
15140
- display: grid !important; /* 표준 */
15141
- }
13464
+ .print\:bg-white {
13465
+ background-color: white !important;
13466
+ }
15142
13467
 
15143
- /* IE Grid 폴백 */
13468
+ .print\:bg-transparent {
13469
+ background-color: transparent !important;
13470
+ }
15144
13471
 
15145
- @supports not (display: grid) {
15146
- .grid-compat {
15147
- display: flex !important;
15148
- flex-wrap: wrap !important;
13472
+ .print\:border-black {
13473
+ border-color: black !important;
15149
13474
  }
15150
13475
 
15151
- .grid-compat > * {
15152
- flex: 1 !important;
15153
- min-width: 0 !important;
13476
+ .print\:border-gray {
13477
+ border-color: #666 !important;
15154
13478
  }
15155
13479
  }
15156
13480
 
15157
- /* ===== USER SELECT COMPATIBILITY (사용자 선택 호환성) ===== */
13481
+ /* 잉크 절약 모드 */
15158
13482
 
15159
- .user-select-none-compat {
15160
- -webkit-user-select: none !important;
15161
- -moz-user-select: none !important;
15162
- -ms-user-select: none !important;
15163
- user-select: none !important;
13483
+ .ink-saving {
13484
+ background: white !important;
13485
+ color: black !important;
13486
+ border-color: black !important;
15164
13487
  }
15165
13488
 
15166
- .user-select-all-compat {
15167
- -webkit-user-select: all !important;
15168
- -moz-user-select: all !important;
15169
- -ms-user-select: all !important;
15170
- user-select: all !important;
15171
- }
13489
+ @media print {
13490
+ .ink-saving {
13491
+ background: transparent !important;
13492
+ box-shadow: none !important;
13493
+ text-shadow: none !important;
13494
+ }
15172
13495
 
15173
- .user-select-text-compat {
15174
- -webkit-user-select: text !important;
15175
- -moz-user-select: text !important;
15176
- -ms-user-select: text !important;
15177
- user-select: text !important;
13496
+ .ink-saving img {
13497
+ opacity: 0.8 !important;
13498
+ filter: grayscale(100%) !important;
13499
+ }
15178
13500
  }
15179
13501
 
15180
- /* ===== APPEARANCE COMPATIBILITY (외형 호환성) ===== */
13502
+ /* 프린트 그래디언트 제거 */
15181
13503
 
15182
- .appearance-none-compat {
15183
- -webkit-appearance: none !important;
15184
- -moz-appearance: none !important;
15185
- -ms-appearance: none !important;
15186
- appearance: none !important;
13504
+ @media print {
13505
+ .print\:no-gradient {
13506
+ background-image: none !important;
13507
+ background: white !important;
13508
+ }
15187
13509
  }
15188
13510
 
15189
- /* ===== BACKDROP FILTER COMPATIBILITY (백드롭 필터 호환성) ===== */
13511
+ /* ===== PRINT TYPOGRAPHY (프린트 타이포그래피) ===== */
15190
13512
 
15191
- .backdrop-filter-compat {
15192
- -webkit-backdrop-filter: var(--backdrop-filter, none) !important;
15193
- backdrop-filter: var(--backdrop-filter, none) !important;
15194
- }
13513
+ /* 프린트 시 글꼴 크기 조정 */
13514
+
13515
+ @media print {
13516
+ .print\:text-xs {
13517
+ font-size: 10pt !important;
13518
+ }
15195
13519
 
15196
- /* 백드롭 필터 미지원 시 폴백 */
13520
+ .print\:text-sm {
13521
+ font-size: 11pt !important;
13522
+ }
15197
13523
 
15198
- @supports not (backdrop-filter: blur(1px)) and not
15199
- (-webkit-backdrop-filter: blur(1px)) {
15200
- .backdrop-filter-fallback {
15201
- background-color: rgba(255, 255, 255, 0.8) !important;
13524
+ .print\:text-base {
13525
+ font-size: 12pt !important;
15202
13526
  }
15203
13527
 
15204
- .backdrop-filter-fallback.dark {
15205
- background-color: rgba(0, 0, 0, 0.8) !important;
13528
+ .print\:text-lg {
13529
+ font-size: 14pt !important;
15206
13530
  }
15207
- }
15208
13531
 
15209
- /* ===== STICKY POSITION COMPATIBILITY (스티키 포지션 호환성) ===== */
13532
+ .print\:text-xl {
13533
+ font-size: 16pt !important;
13534
+ }
15210
13535
 
15211
- .sticky-compat {
15212
- position: -webkit-sticky !important;
15213
- position: sticky !important;
13536
+ .print\:text-2xl {
13537
+ font-size: 18pt !important;
13538
+ }
13539
+
13540
+ .print\:text-3xl {
13541
+ font-size: 24pt !important;
13542
+ }
15214
13543
  }
15215
13544
 
15216
- /* Sticky 미지원 폴백 */
13545
+ /* 프린트폰트 최적화 */
15217
13546
 
15218
- @supports not (position: sticky) {
15219
- .sticky-fallback {
15220
- position: fixed !important;
15221
- top: 0 !important;
15222
- z-index: var(--z-index-fixed, 1000) !important;
13547
+ @media print {
13548
+ .print-optimized {
13549
+ font-family: "Times New Roman", serif !important;
13550
+ line-height: 1.4 !important;
13551
+ color: black !important;
15223
13552
  }
15224
- }
15225
13553
 
15226
- /* ===== OBJECT FIT COMPATIBILITY (오브젝트 핏 호환성) ===== */
13554
+ .print-optimized h1,
13555
+ .print-optimized h2,
13556
+ .print-optimized h3,
13557
+ .print-optimized h4,
13558
+ .print-optimized h5,
13559
+ .print-optimized h6 {
13560
+ color: black !important;
13561
+ page-break-after: avoid !important;
13562
+ }
15227
13563
 
15228
- .object-fit-cover-compat {
15229
- object-fit: cover !important;
15230
- object-position: center !important;
13564
+ .print-optimized p {
13565
+ orphans: 3 !important;
13566
+ widows: 3 !important;
13567
+ }
15231
13568
  }
15232
13569
 
15233
- /* Object-fit 미지원 폴백 */
13570
+ /* ===== PRINT LAYOUT (프린트 레이아웃) ===== */
15234
13571
 
15235
- @supports not (object-fit: cover) {
15236
- .object-fit-cover-fallback {
15237
- position: relative !important;
15238
- overflow: hidden !important;
13572
+ /* 프린트 마진/패딩 조정 */
13573
+
13574
+ @media print {
13575
+ .print\:m-0 {
13576
+ margin: 0 !important;
15239
13577
  }
15240
13578
 
15241
- .object-fit-cover-fallback img {
15242
- position: absolute !important;
15243
- top: 50% !important;
15244
- left: 50% !important;
15245
- transform: translate(-50%, -50%) !important;
15246
- min-width: 100% !important;
15247
- min-height: 100% !important;
15248
- width: auto !important;
15249
- height: auto !important;
13579
+ .print\:p-0 {
13580
+ padding: 0 !important;
15250
13581
  }
15251
- }
15252
13582
 
15253
- /* ===== ASPECT RATIO COMPATIBILITY (종횡비 호환성) ===== */
13583
+ .print\:m-2 {
13584
+ margin: 0.5cm !important;
13585
+ }
15254
13586
 
15255
- /* Aspect Ratio 호환성 (padding-top hack) */
13587
+ .print\:p-2 {
13588
+ padding: 0.5cm !important;
13589
+ }
15256
13590
 
15257
- @supports not (aspect-ratio: 1 / 1) {
15258
- .aspect-ratio-fallback {
15259
- position: relative !important;
15260
- overflow: hidden !important;
13591
+ .print\:m-4 {
13592
+ margin: 1cm !important;
15261
13593
  }
15262
13594
 
15263
- .aspect-ratio-fallback::before {
15264
- content: "" !important;
15265
- display: block !important;
15266
- padding-top: var(--aspect-ratio-percent, 100%) !important;
13595
+ .print\:p-4 {
13596
+ padding: 1cm !important;
15267
13597
  }
13598
+ }
15268
13599
 
15269
- .aspect-ratio-fallback > * {
15270
- position: absolute !important;
15271
- top: 0 !important;
15272
- left: 0 !important;
13600
+ /* 프린트 폭 조정 */
13601
+
13602
+ @media print {
13603
+ .print\:w-full {
15273
13604
  width: 100% !important;
15274
- height: 100% !important;
13605
+ }
13606
+
13607
+ .print\:w-1\/2 {
13608
+ width: 50% !important;
13609
+ }
13610
+
13611
+ .print\:w-1\/3 {
13612
+ width: 33.333333% !important;
13613
+ }
13614
+
13615
+ .print\:w-2\/3 {
13616
+ width: 66.666667% !important;
13617
+ }
13618
+
13619
+ .print\:w-1\/4 {
13620
+ width: 25% !important;
13621
+ }
13622
+
13623
+ .print\:w-3\/4 {
13624
+ width: 75% !important;
15275
13625
  }
15276
13626
  }
15277
13627
 
15278
- /* ===== SCROLL BEHAVIOR COMPATIBILITY (스크롤 동작 호환성) ===== */
13628
+ /* ===== PRINT TABLES (프린트 테이블) ===== */
15279
13629
 
15280
- .scroll-smooth-compat {
15281
- scroll-behavior: smooth !important;
13630
+ /* 테이블 프린트 최적화 */
13631
+
13632
+ .print-table {
13633
+ width: 100% !important;
13634
+ border-collapse: collapse !important;
15282
13635
  }
15283
13636
 
15284
- /* Smooth scroll 미지원 시 폴백 */
13637
+ @media print {
13638
+ .print-table {
13639
+ page-break-inside: auto !important;
13640
+ }
15285
13641
 
15286
- @supports not (scroll-behavior: smooth) {
15287
- .scroll-smooth-js {
15288
- /* JavaScript로 부드러운 스크롤 구현 필요 */
15289
- scroll-behavior: auto !important;
13642
+ .print-table thead {
13643
+ display: table-header-group !important;
15290
13644
  }
15291
- }
15292
13645
 
15293
- /* ===== CONTAINER QUERIES COMPATIBILITY (컨테이너 쿼리 호환성) ===== */
13646
+ .print-table tbody {
13647
+ display: table-row-group !important;
13648
+ }
15294
13649
 
15295
- /* Container Queries 미지원 시 폴백 */
13650
+ .print-table tr {
13651
+ page-break-inside: avoid !important;
13652
+ }
15296
13653
 
15297
- @supports not (container-type: inline-size) {
15298
- .container-fallback {
15299
- /* 미디어 쿼리로 대체 */
15300
- width: 100% !important;
13654
+ .print-table th,
13655
+ .print-table td {
13656
+ border: 1pt solid black !important;
13657
+ padding: 0.25cm !important;
13658
+ font-size: 10pt !important;
15301
13659
  }
15302
13660
 
15303
- @media (min-width: 400px) {
15304
- .container-fallback {
15305
- /* 컨테이너 쿼리 대신 미디어 쿼리 사용 */
15306
- }
13661
+ .print-table th {
13662
+ background-color: #f0f0f0 !important;
13663
+ font-weight: bold !important;
15307
13664
  }
15308
13665
  }
15309
13666
 
15310
- /* ===== CLAMP FUNCTION COMPATIBILITY (clamp 함수 호환성) ===== */
13667
+ /* ===== PRINT LINKS (프린트 링크) ===== */
13668
+
13669
+ /* 링크 URL 표시 */
15311
13670
 
15312
- /* clamp() 미지원 시 폴백 */
13671
+ @media print {
13672
+ .print-urls a:after {
13673
+ content: " (" attr(href) ")" !important;
13674
+ font-size: smaller !important;
13675
+ color: #666 !important;
13676
+ }
15313
13677
 
15314
- @supports not (font-size: clamp(1rem, 4vw, 2rem)) {
15315
- .clamp-fallback {
15316
- font-size: 1.25rem !important; /* 중간값으로 폴백 */
13678
+ .print-urls a[href^="mailto:"]:after {
13679
+ content: " (" attr(href) ")" !important;
15317
13680
  }
15318
13681
 
15319
- @media (min-width: 768px) {
15320
- .clamp-fallback {
15321
- font-size: 1.5rem !important;
15322
- }
13682
+ .print-urls a[href^="tel:"]:after {
13683
+ content: " (" attr(href) ")" !important;
15323
13684
  }
15324
13685
 
15325
- @media (min-width: 1200px) {
15326
- .clamp-fallback {
15327
- font-size: 2rem !important;
15328
- }
13686
+ /* 내부 링크는 URL 표시하지 않음 */
13687
+ .print-urls a[href^="#"]:after,
13688
+ .print-urls a[href^="/"]:after {
13689
+ content: "" !important;
15329
13690
  }
15330
13691
  }
15331
13692
 
15332
- /* ===== CUSTOM PROPERTIES COMPATIBILITY (CSS 변수 호환성) ===== */
15333
-
15334
- /* CSS Variables 미지원 시 폴백 */
13693
+ /* 링크 스타일 제거 */
15335
13694
 
15336
- @supports not (color: var(--primary-color)) {
15337
- .css-variables-fallback {
15338
- /* 하드코딩된 값으로 폴백 */
15339
- color: #007bff !important;
15340
- background-color: #ffffff !important;
15341
- border-color: #dee2e6 !important;
13695
+ @media print {
13696
+ .print-no-links a {
13697
+ color: black !important;
13698
+ text-decoration: none !important;
15342
13699
  }
15343
13700
  }
15344
13701
 
15345
- /* ===== INTERNET EXPLORER SPECIFIC (Internet Explorer 전용) ===== */
15346
-
15347
- /* IE 조건부 클래스 */
15348
-
15349
- .ie-only {
15350
- display: none !important;
15351
- }
13702
+ /* ===== PRINT IMAGES (프린트 이미지) ===== */
15352
13703
 
15353
- /* IE에서만 표시 */
13704
+ /* 이미지 프린트 최적화 */
15354
13705
 
15355
- @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
15356
- .ie-only {
15357
- display: block !important;
13706
+ @media print {
13707
+ .print-img-optimize img {
13708
+ max-width: 100% !important;
13709
+ height: auto !important;
13710
+ page-break-inside: avoid !important;
13711
+ filter: grayscale(100%) !important; /* 잉크 절약 */
15358
13712
  }
15359
13713
 
15360
- .ie-hide {
15361
- display: none !important;
13714
+ .print-img-full img {
13715
+ max-width: 100% !important;
13716
+ height: auto !important;
13717
+ page-break-inside: avoid !important;
15362
13718
  }
15363
- }
15364
13719
 
15365
- /* IE 그리드 레이아웃 수정 */
13720
+ .print-img-small img {
13721
+ max-width: 50% !important;
13722
+ height: auto !important;
13723
+ }
15366
13724
 
15367
- @supports (-ms-grid-columns: 1fr) {
15368
- .ie-grid-fix {
15369
- -ms-grid-columns: 1fr !important;
15370
- -ms-grid-rows: auto !important;
13725
+ .print-img-hide img {
13726
+ display: none !important;
15371
13727
  }
15372
13728
  }
15373
13729
 
15374
- /* ===== SAFARI SPECIFIC (Safari 전용) ===== */
13730
+ /* ===== PRINT HEADERS & FOOTERS (프린트 헤더/푸터) ===== */
15375
13731
 
15376
- /* Safari 버그 수정 */
13732
+ /* 페이지 헤더/푸터 스타일 */
15377
13733
 
15378
- @supports (-webkit-touch-callout: none) {
15379
- .safari-fix {
15380
- -webkit-transform: translateZ(0) !important; /* 하드웨어 가속 */
13734
+ @media print {
13735
+ .print-header {
13736
+ position: fixed !important;
13737
+ top: 0 !important;
13738
+ left: 0 !important;
13739
+ right: 0 !important;
13740
+ height: 1cm !important;
13741
+ background: white !important;
13742
+ border-bottom: 1pt solid black !important;
13743
+ padding: 0.25cm !important;
13744
+ font-size: 10pt !important;
13745
+ text-align: center !important;
15381
13746
  }
15382
- }
15383
13747
 
15384
- /* iOS Safari 뷰포트 높이 수정 */
15385
-
15386
- @supports (-webkit-touch-callout: none) {
15387
- .ios-viewport-fix {
15388
- height: -webkit-fill-available !important;
13748
+ .print-footer {
13749
+ position: fixed !important;
13750
+ bottom: 0 !important;
13751
+ left: 0 !important;
13752
+ right: 0 !important;
13753
+ height: 1cm !important;
13754
+ background: white !important;
13755
+ border-top: 1pt solid black !important;
13756
+ padding: 0.25cm !important;
13757
+ font-size: 10pt !important;
13758
+ text-align: center !important;
15389
13759
  }
15390
- }
15391
-
15392
- /* ===== FIREFOX SPECIFIC (Firefox 전용) ===== */
15393
13760
 
15394
- /* Firefox 스크롤바 스타일링 */
15395
-
15396
- @-moz-document url-prefix() {
15397
- .firefox-scrollbar {
15398
- scrollbar-width: thin !important;
15399
- scrollbar-color: var(--color-base-4) var(--color-base-1) !important;
13761
+ .print-content {
13762
+ margin-top: 1.5cm !important;
13763
+ margin-bottom: 1.5cm !important;
15400
13764
  }
15401
13765
  }
15402
13766
 
15403
- /* ===== FEATURE DETECTION (기능 감지) ===== */
13767
+ /* ===== PRINT SECTIONS (프린트 섹션) ===== */
15404
13768
 
15405
- /* Hover 지원 감지 */
13769
+ /* 섹션별 페이지 나누기 */
15406
13770
 
15407
- @media (hover: hover) {
15408
- .hover-supported:hover {
15409
- background-color: var(--color-base-2) !important;
15410
- transform: translateY(-2px) !important;
15411
- }
13771
+ .print-section {
13772
+ page-break-before: auto !important;
13773
+ page-break-after: avoid !important;
13774
+ page-break-inside: avoid !important;
15412
13775
  }
15413
13776
 
15414
- @media (hover: none) {
15415
- .hover-not-supported {
15416
- /* 터치 디바이스용 스타일 */
15417
- padding: var(--space-4) !important;
15418
- font-size: 1.125rem !important;
13777
+ @media print {
13778
+ .print-section-new-page {
13779
+ page-break-before: always !important;
15419
13780
  }
15420
- }
15421
13781
 
15422
- /* Pointer 정밀도 감지 */
15423
-
15424
- @media (pointer: fine) {
15425
- .fine-pointer {
15426
- /* 마우스/트랙패드용 */
15427
- cursor: pointer !important;
13782
+ .print-section-avoid-break {
13783
+ page-break-inside: avoid !important;
15428
13784
  }
15429
- }
15430
13785
 
15431
- @media (pointer: coarse) {
15432
- .coarse-pointer {
15433
- /* 터치용 */
15434
- min-height: 44px !important; /* 터치 최소 크기 */
15435
- min-width: 44px !important;
13786
+ .print-section-keep-together {
13787
+ page-break-before: avoid !important;
13788
+ page-break-after: avoid !important;
13789
+ page-break-inside: avoid !important;
15436
13790
  }
15437
13791
  }
15438
13792
 
15439
- /* ===== REDUCED MOTION COMPATIBILITY (모션 감소 호환성) ===== */
15440
-
15441
- /* 모션 감소 미지원 시 폴백 */
13793
+ /* ===== PRINT FORMS (프린트 ) ===== */
15442
13794
 
15443
- .motion-safe {
15444
- animation: var(--animation, none) !important;
15445
- transition: var(--transition, all 0.3s ease) !important;
15446
- }
13795
+ /* 폼 요소 프린트 최적화 */
15447
13796
 
15448
- @media (prefers-reduced-motion: reduce) {
15449
- .motion-safe {
15450
- animation: none !important;
15451
- transition: none !important;
13797
+ @media print {
13798
+ .print-form input,
13799
+ .print-form select,
13800
+ .print-form textarea {
13801
+ border: 1pt solid black !important;
13802
+ background: white !important;
13803
+ color: black !important;
13804
+ padding: 0.1cm !important;
13805
+ font-size: 10pt !important;
15452
13806
  }
15453
- }
15454
13807
 
15455
- /* ===== HIGH CONTRAST MODE COMPATIBILITY (고대비 모드 호환성) ===== */
15456
-
15457
- /* Windows 고대비 모드 감지 */
15458
-
15459
- @media (-ms-high-contrast: active) {
15460
- .high-contrast-mode {
15461
- border: 1px solid !important;
15462
- background: ButtonFace !important;
15463
- color: ButtonText !important;
13808
+ .print-form input[type="checkbox"],
13809
+ .print-form input[type="radio"] {
13810
+ width: 0.4cm !important;
13811
+ height: 0.4cm !important;
15464
13812
  }
15465
- }
15466
-
15467
- /* ===== COLOR SCHEME COMPATIBILITY (색상 스킴 호환성) ===== */
15468
13813
 
15469
- /* 다크 모드 미지원 시 폴백 */
15470
-
15471
- @media (prefers-color-scheme: dark) {
15472
- .dark-mode-supported {
15473
- background-color: var(--color-base-9) !important;
15474
- color: var(--color-white) !important;
13814
+ .print-form label {
13815
+ font-weight: bold !important;
13816
+ color: black !important;
15475
13817
  }
15476
- }
15477
13818
 
15478
- /* 다크 모드 감지 불가능한 경우 */
15479
-
15480
- @supports not (color-scheme: dark) {
15481
- .dark-mode-fallback {
15482
- /* JavaScript로 다크 모드 토글 구현 필요 */
13819
+ /* 입력 필드에 밑줄 표시 */
13820
+ .print-form input:not([value]),
13821
+ .print-form input[value=""] {
13822
+ border-bottom: 1pt solid black !important;
13823
+ border-top: none !important;
13824
+ border-left: none !important;
13825
+ border-right: none !important;
13826
+ background: transparent !important;
13827
+ min-width: 3cm !important;
15483
13828
  }
15484
13829
  }
15485
13830
 
15486
- /* ===== PRINT COMPATIBILITY (프린트 호환성) ===== */
13831
+ /* ===== PRINT UTILITIES (프린트 유틸리티) ===== */
13832
+
13833
+ /* 프린트 최적화 기본 설정 */
15487
13834
 
15488
- /* 프린트 시 웹폰트 폴백 */
13835
+ .print-optimized-page {
13836
+ font-size: 12pt !important;
13837
+ line-height: 1.4 !important;
13838
+ color: black !important;
13839
+ background: white !important;
13840
+ }
15489
13841
 
15490
13842
  @media print {
15491
- .print-font-fallback {
13843
+ .print-optimized-page {
13844
+ margin: 2cm !important;
15492
13845
  font-family: "Times New Roman", serif !important;
15493
13846
  }
15494
13847
 
15495
- .print-safe {
13848
+ .print-optimized-page * {
15496
13849
  color: black !important;
15497
- background: white !important;
15498
- text-shadow: none !important;
13850
+ background: transparent !important;
15499
13851
  box-shadow: none !important;
13852
+ text-shadow: none !important;
13853
+ }
13854
+
13855
+ .print-optimized-page img {
13856
+ max-width: 100% !important;
13857
+ height: auto !important;
13858
+ page-break-inside: avoid !important;
15500
13859
  }
15501
- }
15502
13860
 
15503
- /* ===== BROWSER DETECTION UTILITIES (브라우저 감지 유틸리티) ===== */
13861
+ .print-optimized-page h1,
13862
+ .print-optimized-page h2,
13863
+ .print-optimized-page h3,
13864
+ .print-optimized-page h4,
13865
+ .print-optimized-page h5,
13866
+ .print-optimized-page h6 {
13867
+ page-break-after: avoid !important;
13868
+ margin-top: 1em !important;
13869
+ margin-bottom: 0.5em !important;
13870
+ }
15504
13871
 
15505
- /* Chromium 기반 브라우저 감지 */
13872
+ .print-optimized-page p,
13873
+ .print-optimized-page li {
13874
+ orphans: 3 !important;
13875
+ widows: 3 !important;
13876
+ }
15506
13877
 
15507
- @supports (-webkit-appearance: none) and (not (-moz-appearance: none)) {
15508
- .chromium-only {
15509
- display: block !important;
13878
+ .print-optimized-page blockquote,
13879
+ .print-optimized-page pre {
13880
+ page-break-inside: avoid !important;
13881
+ border-left: 2pt solid black !important;
13882
+ padding-left: 0.5cm !important;
13883
+ margin: 1em 0 !important;
15510
13884
  }
15511
13885
  }
15512
13886
 
15513
- /* WebKit 기반 브라우저 감지 */
13887
+ /* QR 코드/바코드용 */
15514
13888
 
15515
- @supports (-webkit-appearance: none) {
15516
- .webkit-only {
15517
- display: block !important;
13889
+ @media print {
13890
+ .print-qr,
13891
+ .print-barcode {
13892
+ page-break-inside: avoid !important;
13893
+ filter: none !important; /* 그레이스케일 제거 */
15518
13894
  }
15519
13895
  }
15520
13896
 
15521
- /* Gecko 기반 브라우저 감지 */
13897
+ /* 프린트 프리뷰 시뮬레이션 */
15522
13898
 
15523
- @supports (-moz-appearance: none) {
15524
- .gecko-only {
15525
- display: block !important;
15526
- }
13899
+ .print-preview {
13900
+ background: white !important;
13901
+ color: black !important;
13902
+ font-family: "Times New Roman", serif !important;
13903
+ font-size: 12pt !important;
13904
+ line-height: 1.4 !important;
13905
+ max-width: 21cm !important; /* A4 폭 */
13906
+ margin: 0 auto !important;
13907
+ padding: 2cm !important;
13908
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1) !important;
15527
13909
  }
15528
13910
 
15529
- /* ===== PERFORMANCE OPTIMIZATION (성능 최적화) ===== */
13911
+ /* ===== PAGE ORIENTATION (페이지 방향) ===== */
15530
13912
 
15531
- /* GPU 가속 활성화 */
13913
+ /* 가로 방향 페이지 */
15532
13914
 
15533
- .gpu-accelerated {
15534
- -webkit-transform: translateZ(0) !important;
15535
- -moz-transform: translateZ(0) !important;
15536
- -ms-transform: translateZ(0) !important;
15537
- -o-transform: translateZ(0) !important;
15538
- transform: translateZ(0) !important;
13915
+ @page landscape {
13916
+ size: landscape;
13917
+ }
15539
13918
 
15540
- /* will-change 최적화 */
15541
- will-change: var(--will-change, auto) !important;
13919
+ .print-landscape {
13920
+ page: landscape !important;
15542
13921
  }
15543
13922
 
15544
- /* 하드웨어 가속 비활성화 */
13923
+ /* 세로 방향 페이지 */
15545
13924
 
15546
- .no-gpu-acceleration {
15547
- transform: none !important;
15548
- will-change: auto !important;
13925
+ @page portrait {
13926
+ size: portrait;
15549
13927
  }
15550
13928
 
15551
- /* ===== POLYFILL HINTS (폴리필 힌트) ===== */
13929
+ .print-portrait {
13930
+ page: portrait !important;
13931
+ }
15552
13932
 
15553
- /* JavaScript 폴리필이 필요한 기능들 */
13933
+ /* ===== PAGE SIZE (페이지 크기) ===== */
15554
13934
 
15555
- .needs-polyfill {
15556
- /*
15557
- 필요한 폴리필들:
15558
- - IntersectionObserver
15559
- - ResizeObserver
15560
- - CustomEvent
15561
- - Object.assign
15562
- - Array.from
15563
- - Promise
15564
- - fetch
15565
- */
13935
+ @page {
13936
+ margin: 2cm;
13937
+ size: A4;
15566
13938
  }
15567
13939
 
15568
- /* 폴리필 로드 완료 후 활성화되는 클래스 */
13940
+ @page A4 {
13941
+ size: A4;
13942
+ margin: 2cm;
13943
+ }
15569
13944
 
15570
- .polyfill-loaded .feature-enhanced {
15571
- /* 폴리필 의존 기능들 */
13945
+ @page letter {
13946
+ size: letter;
13947
+ margin: 1in;
15572
13948
  }
15573
13949
 
15574
- /* ===== CRITICAL CSS OPTIMIZATION (중요 CSS 최적화) ===== */
13950
+ /* ===== PRINT DEBUGGING (프린트 디버깅) ===== */
15575
13951
 
15576
- /* Above the fold 콘텐츠 */
13952
+ /* 개발 프린트 스타일 확인용 */
15577
13953
 
15578
- .critical-css {
15579
- /* 중요한 스타일만 포함 */
15580
- display: block !important;
15581
- position: relative !important;
15582
- margin: 0 !important;
15583
- padding: 0 !important;
13954
+ .print-debug {
13955
+ outline: 1px solid red !important;
15584
13956
  }
15585
13957
 
15586
- /* 지연 로드 콘텐츠 */
13958
+ @media print {
13959
+ .print-debug {
13960
+ outline: 1pt solid black !important;
13961
+ }
15587
13962
 
15588
- .non-critical {
15589
- /* 나중에 로드될 스타일들 */
13963
+ .print-debug::before {
13964
+ content: "PRINT DEBUG" !important;
13965
+ display: block !important;
13966
+ background: yellow !important;
13967
+ color: black !important;
13968
+ font-size: 8pt !important;
13969
+ padding: 2pt !important;
13970
+ margin-bottom: 2pt !important;
13971
+ }
15590
13972
  }
15591
13973
 
15592
13974
  /* ===== RESPONSIVE BREAKPOINTS ===== */