@open-file-viewer/core 0.1.1 → 0.1.3

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.
package/dist/style.css CHANGED
@@ -55,12 +55,14 @@
55
55
  }
56
56
 
57
57
  .ofv-viewport {
58
+ container-type: inline-size;
58
59
  flex: 1 1 auto;
59
60
  min-width: 0;
60
61
  min-height: 0;
61
62
  width: 100%;
62
63
  max-width: 100%;
63
- overflow: auto;
64
+ overflow-x: hidden;
65
+ overflow-y: auto;
64
66
  background: var(--ofv-bg);
65
67
  color: var(--ofv-text);
66
68
  }
@@ -92,6 +94,10 @@
92
94
  }
93
95
 
94
96
  .ofv-toolbar button {
97
+ display: inline-flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ gap: 6px;
95
101
  flex: 0 1 auto;
96
102
  min-width: 0;
97
103
  cursor: pointer;
@@ -100,6 +106,31 @@
100
106
  white-space: nowrap;
101
107
  }
102
108
 
109
+ .ofv-toolbar-icon {
110
+ display: inline-flex;
111
+ flex: 0 0 auto;
112
+ align-items: center;
113
+ justify-content: center;
114
+ }
115
+
116
+ .ofv-toolbar-icon svg {
117
+ display: block;
118
+ width: 1em;
119
+ height: 1em;
120
+ }
121
+
122
+ .ofv-toolbar-label {
123
+ min-width: 0;
124
+ overflow: hidden;
125
+ text-overflow: ellipsis;
126
+ }
127
+
128
+ .ofv-react-toolbar,
129
+ .ofv-vue-toolbar,
130
+ .ofv-vue-toolbar-content {
131
+ display: contents;
132
+ }
133
+
103
134
  .ofv-toolbar button:hover {
104
135
  background: var(--ofv-button-hover);
105
136
  }
@@ -353,7 +384,8 @@
353
384
  min-width: 0;
354
385
  min-height: 100%;
355
386
  padding: 16px;
356
- overflow: auto;
387
+ overflow-x: hidden;
388
+ overflow-y: auto;
357
389
  background: #6b7280;
358
390
  }
359
391
 
@@ -552,6 +584,20 @@
552
584
  line-height: 1.6;
553
585
  }
554
586
 
587
+ .ofv-office-conversion {
588
+ border-style: dashed;
589
+ }
590
+
591
+ .ofv-office-conversion > p:first-of-type {
592
+ margin-top: 0;
593
+ color: var(--ofv-text);
594
+ line-height: 1.7;
595
+ }
596
+
597
+ .ofv-office-conversion > p:first-of-type strong {
598
+ color: #f59e0b;
599
+ }
600
+
555
601
  .ofv-office-binary-meta {
556
602
  display: grid;
557
603
  grid-template-columns: max-content minmax(0, 1fr);
@@ -575,32 +621,69 @@
575
621
  overflow-wrap: anywhere;
576
622
  }
577
623
 
624
+ .ofv-office-binary-fragments {
625
+ margin-top: 14px;
626
+ }
627
+
628
+ .ofv-office-binary-fragments h4 {
629
+ margin: 0 0 10px;
630
+ color: var(--ofv-text);
631
+ font-size: 14px;
632
+ }
633
+
634
+ .ofv-office-binary-empty {
635
+ margin: 14px 0 0;
636
+ padding: 12px;
637
+ border: 1px dashed var(--ofv-border);
638
+ border-radius: 6px;
639
+ background: var(--ofv-surface-muted);
640
+ color: var(--ofv-text-muted);
641
+ line-height: 1.6;
642
+ }
643
+
578
644
  .ofv-docx-document {
579
645
  width: 100%;
580
646
  max-width: 100%;
581
647
  min-width: 0;
582
- overflow: auto;
648
+ overflow-x: auto;
649
+ overflow-y: auto;
583
650
  color: #111827;
584
651
  }
585
652
 
586
653
  .ofv-docx-document .ofv-docx-wrapper {
654
+ display: flex;
655
+ flex-direction: column;
587
656
  align-items: center;
588
657
  box-sizing: border-box;
589
658
  width: 100%;
590
659
  max-width: 100%;
591
660
  min-width: 0;
592
661
  padding: 24px;
593
- overflow: auto;
662
+ overflow: hidden;
594
663
  background: #e5e7eb;
664
+ --ofv-docx-scale: 1;
665
+ --ofv-docx-page-width: 794px;
595
666
  }
596
667
 
597
- .ofv-docx-document section.ofv-docx {
598
- box-sizing: border-box;
668
+ .ofv-docx-page-frame {
669
+ flex: 0 0 auto;
670
+ width: min(100%, calc(var(--ofv-docx-page-width) * var(--ofv-docx-scale)));
599
671
  max-width: 100%;
600
672
  min-width: 0;
673
+ position: relative;
674
+ overflow: visible;
675
+ }
676
+
677
+ .ofv-docx-document section.ofv-docx {
678
+ box-sizing: border-box;
679
+ flex: 0 0 auto;
680
+ max-width: none;
681
+ min-width: auto;
601
682
  color: #111827;
602
- overflow: auto;
603
- overflow-wrap: anywhere;
683
+ overflow: visible;
684
+ overflow-wrap: normal;
685
+ transform: scale(var(--ofv-docx-scale));
686
+ transform-origin: top left;
604
687
  }
605
688
 
606
689
  .ofv-docx-document section.ofv-docx img,
@@ -1667,9 +1750,19 @@
1667
1750
  }
1668
1751
 
1669
1752
  /* Archive / Zip layout styling */
1753
+ .ofv-archive {
1754
+ width: 100%;
1755
+ max-width: 100%;
1756
+ height: 100%;
1757
+ min-height: 0;
1758
+ overflow: hidden;
1759
+ }
1760
+
1670
1761
  .ofv-archive-layout {
1762
+ --ofv-archive-sidebar-expanded: 320px;
1763
+ --ofv-archive-sidebar-collapsed: 56px;
1671
1764
  display: flex;
1672
- flex-wrap: wrap;
1765
+ flex-wrap: nowrap;
1673
1766
  width: 100%;
1674
1767
  max-width: 100%;
1675
1768
  height: 100%;
@@ -1679,17 +1772,40 @@
1679
1772
  }
1680
1773
 
1681
1774
  .ofv-archive-sidebar {
1682
- width: 320px;
1683
- flex: 1 1 220px;
1775
+ width: var(--ofv-archive-sidebar-expanded);
1776
+ flex: 0 0 var(--ofv-archive-sidebar-expanded);
1684
1777
  min-width: 0;
1685
1778
  max-width: 100%;
1686
1779
  border-right: 1px solid var(--ofv-border);
1780
+ overflow: hidden;
1781
+ position: relative;
1782
+ z-index: 2;
1783
+ color: var(--ofv-text);
1784
+ background: var(--ofv-surface-muted);
1785
+ transition:
1786
+ flex-basis 0.2s ease,
1787
+ width 0.2s ease,
1788
+ max-width 0.2s ease;
1789
+ }
1790
+
1791
+ .ofv-archive-layout.is-sidebar-collapsed .ofv-archive-sidebar {
1792
+ flex-basis: var(--ofv-archive-sidebar-collapsed);
1793
+ width: var(--ofv-archive-sidebar-collapsed);
1794
+ max-width: var(--ofv-archive-sidebar-collapsed);
1795
+ }
1796
+
1797
+ .ofv-archive-sidebar-panel {
1798
+ width: 100%;
1799
+ height: 100%;
1687
1800
  display: flex;
1688
1801
  flex-direction: column;
1689
1802
  background: var(--ofv-surface-muted);
1690
1803
  }
1691
1804
 
1692
1805
  .ofv-archive-header {
1806
+ display: flex;
1807
+ align-items: center;
1808
+ gap: 8px;
1693
1809
  padding: 12px 16px;
1694
1810
  border-bottom: 1px solid var(--ofv-border);
1695
1811
  font-weight: bold;
@@ -1698,18 +1814,60 @@
1698
1814
  background: var(--ofv-surface);
1699
1815
  }
1700
1816
 
1817
+ .ofv-archive-header-title {
1818
+ min-width: 0;
1819
+ overflow: hidden;
1820
+ opacity: 1;
1821
+ text-overflow: ellipsis;
1822
+ transition: opacity 0.12s ease;
1823
+ white-space: nowrap;
1824
+ }
1825
+
1826
+ .ofv-archive-sidebar-toggle {
1827
+ display: inline-flex;
1828
+ flex: 0 0 28px;
1829
+ align-items: center;
1830
+ justify-content: center;
1831
+ width: 28px;
1832
+ height: 28px;
1833
+ border: 1px solid var(--ofv-border);
1834
+ border-radius: 6px;
1835
+ color: var(--ofv-text);
1836
+ background: var(--ofv-surface-muted);
1837
+ cursor: pointer;
1838
+ font-size: 18px;
1839
+ line-height: 1;
1840
+ transition:
1841
+ background 0.15s ease,
1842
+ border-color 0.15s ease;
1843
+ }
1844
+
1845
+ .ofv-archive-sidebar-toggle:hover,
1846
+ .ofv-archive-sidebar-toggle:focus-visible {
1847
+ background: var(--ofv-button-hover);
1848
+ }
1849
+
1850
+ .ofv-archive-sidebar-toggle:focus-visible {
1851
+ outline: 2px solid #2563eb;
1852
+ outline-offset: 2px;
1853
+ }
1854
+
1701
1855
  .ofv-archive-tree {
1702
1856
  flex: 1;
1703
1857
  min-width: 0;
1858
+ min-height: 0;
1704
1859
  overflow: auto;
1860
+ overscroll-behavior: contain;
1705
1861
  }
1706
1862
 
1707
1863
  .ofv-archive-main {
1708
1864
  flex: 1;
1709
1865
  min-width: 0;
1866
+ min-height: 0;
1710
1867
  display: flex;
1711
1868
  flex-direction: column;
1712
1869
  overflow: auto;
1870
+ overscroll-behavior: contain;
1713
1871
  position: relative;
1714
1872
  background: var(--ofv-bg);
1715
1873
  }
@@ -1732,6 +1890,12 @@
1732
1890
  transition: background 0.15s ease;
1733
1891
  }
1734
1892
 
1893
+ .ofv-archive-layout.is-sidebar-collapsed .ofv-archive-item {
1894
+ justify-content: center;
1895
+ padding: 10px 0;
1896
+ gap: 0;
1897
+ }
1898
+
1735
1899
  .ofv-archive-item:hover,
1736
1900
  .ofv-archive-item:focus-visible {
1737
1901
  background: var(--ofv-button-hover);
@@ -1749,19 +1913,120 @@
1749
1913
  padding-left: 13px;
1750
1914
  }
1751
1915
 
1916
+ .ofv-archive-layout.is-sidebar-collapsed .ofv-archive-item.is-active {
1917
+ padding-left: 0;
1918
+ border-left-width: 0;
1919
+ box-shadow: inset 3px 0 0 var(--ofv-text);
1920
+ }
1921
+
1752
1922
  .ofv-archive-item-icon {
1753
- flex: 0 0 16px;
1923
+ display: inline-flex;
1924
+ flex: 0 0 20px;
1925
+ align-items: center;
1926
+ justify-content: center;
1927
+ width: 20px;
1754
1928
  text-align: center;
1755
1929
  font-size: 14px;
1756
1930
  }
1757
1931
 
1758
1932
  .ofv-archive-item-name {
1759
1933
  flex: 1;
1934
+ min-width: 0;
1760
1935
  overflow: hidden;
1936
+ opacity: 1;
1761
1937
  text-overflow: ellipsis;
1938
+ transition: opacity 0.12s ease;
1762
1939
  white-space: nowrap;
1763
1940
  }
1764
1941
 
1942
+ .ofv-archive-layout.is-sidebar-collapsed .ofv-archive-header {
1943
+ justify-content: center;
1944
+ padding-right: 0;
1945
+ padding-left: 0;
1946
+ }
1947
+
1948
+ .ofv-archive-layout.is-sidebar-collapsed .ofv-archive-header-title,
1949
+ .ofv-archive-layout.is-sidebar-collapsed .ofv-archive-item-name {
1950
+ flex: 0 1 0;
1951
+ width: 0;
1952
+ opacity: 0;
1953
+ }
1954
+
1955
+ .ofv-archive-layout.is-sidebar-collapsed .ofv-archive-tree {
1956
+ overflow: hidden;
1957
+ }
1958
+
1959
+ @container (max-width: 520px) {
1960
+ .ofv-archive-layout {
1961
+ --ofv-archive-sidebar-expanded: min(280px, 72cqw);
1962
+ --ofv-archive-sidebar-collapsed: 48px;
1963
+ }
1964
+
1965
+ .ofv-archive-sidebar {
1966
+ flex: 0 0 var(--ofv-archive-sidebar-expanded);
1967
+ width: var(--ofv-archive-sidebar-expanded);
1968
+ max-width: var(--ofv-archive-sidebar-expanded);
1969
+ height: 100%;
1970
+ min-height: 0;
1971
+ }
1972
+
1973
+ .ofv-archive-header {
1974
+ min-height: 48px;
1975
+ padding: 9px;
1976
+ }
1977
+
1978
+ .ofv-archive-main {
1979
+ flex: 1 1 auto;
1980
+ width: auto;
1981
+ min-width: 0;
1982
+ min-height: 0;
1983
+ }
1984
+
1985
+ .ofv-archive-info {
1986
+ justify-content: flex-start;
1987
+ max-width: 100%;
1988
+ margin: 0;
1989
+ padding: 16px;
1990
+ }
1991
+ }
1992
+
1993
+ @container (max-width: 360px) {
1994
+ .ofv-archive-layout {
1995
+ --ofv-archive-sidebar-expanded: min(248px, 78cqw);
1996
+ --ofv-archive-sidebar-collapsed: 44px;
1997
+ }
1998
+
1999
+ .ofv-archive-sidebar {
2000
+ flex-basis: var(--ofv-archive-sidebar-expanded);
2001
+ width: var(--ofv-archive-sidebar-expanded);
2002
+ max-width: var(--ofv-archive-sidebar-expanded);
2003
+ }
2004
+
2005
+ .ofv-archive-header {
2006
+ min-height: 44px;
2007
+ padding: 7px;
2008
+ }
2009
+
2010
+ .ofv-archive-sidebar-toggle {
2011
+ flex-basis: 28px;
2012
+ width: 28px;
2013
+ height: 28px;
2014
+ }
2015
+
2016
+ .ofv-archive-item {
2017
+ gap: 6px;
2018
+ padding: 7px 10px;
2019
+ }
2020
+
2021
+ .ofv-archive-item.is-active {
2022
+ padding-left: 7px;
2023
+ }
2024
+
2025
+ .ofv-archive-layout.is-sidebar-collapsed .ofv-archive-item.is-active {
2026
+ padding-left: 0;
2027
+ }
2028
+ }
2029
+
1765
2030
  .ofv-archive-loading {
1766
2031
  display: flex;
1767
2032
  flex-direction: column;
@@ -1901,12 +2166,14 @@
1901
2166
  /* GIS / Map Visualization Styles */
1902
2167
  .ofv-gis-viewer {
1903
2168
  display: flex;
2169
+ flex: 1 1 auto;
1904
2170
  flex-direction: column;
1905
2171
  width: 100%;
1906
2172
  max-width: 100%;
1907
2173
  height: 100%;
1908
2174
  min-width: 0;
1909
- min-height: 0;
2175
+ min-height: 320px;
2176
+ overflow: hidden;
1910
2177
  }
1911
2178
 
1912
2179
  .ofv-gis-summary {
@@ -1938,11 +2205,186 @@
1938
2205
  flex: 1 1 auto;
1939
2206
  width: 100%;
1940
2207
  max-width: 100%;
1941
- height: auto;
2208
+ height: 100%;
1942
2209
  min-width: 0;
1943
- min-height: 0;
2210
+ min-height: 280px;
1944
2211
  position: relative;
1945
2212
  background: var(--ofv-bg);
2213
+ overflow: hidden;
2214
+ }
2215
+
2216
+ .ofv-map-stage .leaflet-container,
2217
+ .ofv-map-stage.leaflet-container {
2218
+ width: 100%;
2219
+ height: 100%;
2220
+ min-width: 0;
2221
+ min-height: 280px;
2222
+ background: var(--ofv-bg);
2223
+ }
2224
+
2225
+ .ofv-map-stage .leaflet-pane,
2226
+ .ofv-map-stage .leaflet-tile,
2227
+ .ofv-map-stage .leaflet-marker-icon,
2228
+ .ofv-map-stage .leaflet-marker-shadow,
2229
+ .ofv-map-stage .leaflet-tile-container,
2230
+ .ofv-map-stage .leaflet-pane > svg,
2231
+ .ofv-map-stage .leaflet-pane > canvas,
2232
+ .ofv-map-stage.leaflet-container .leaflet-pane,
2233
+ .ofv-map-stage.leaflet-container .leaflet-tile,
2234
+ .ofv-map-stage.leaflet-container .leaflet-marker-icon,
2235
+ .ofv-map-stage.leaflet-container .leaflet-marker-shadow,
2236
+ .ofv-map-stage.leaflet-container .leaflet-tile-container,
2237
+ .ofv-map-stage.leaflet-container .leaflet-pane > svg,
2238
+ .ofv-map-stage.leaflet-container .leaflet-pane > canvas {
2239
+ position: absolute;
2240
+ left: 0;
2241
+ top: 0;
2242
+ }
2243
+
2244
+ .ofv-map-stage .leaflet-container,
2245
+ .ofv-map-stage.leaflet-container {
2246
+ overflow: hidden;
2247
+ }
2248
+
2249
+ .ofv-map-stage .leaflet-tile,
2250
+ .ofv-map-stage .leaflet-marker-icon,
2251
+ .ofv-map-stage .leaflet-marker-shadow,
2252
+ .ofv-map-stage.leaflet-container .leaflet-tile,
2253
+ .ofv-map-stage.leaflet-container .leaflet-marker-icon,
2254
+ .ofv-map-stage.leaflet-container .leaflet-marker-shadow {
2255
+ user-select: none;
2256
+ -webkit-user-drag: none;
2257
+ }
2258
+
2259
+ .ofv-map-stage .leaflet-overlay-pane svg,
2260
+ .ofv-map-stage.leaflet-container .leaflet-overlay-pane svg {
2261
+ width: auto;
2262
+ height: auto;
2263
+ pointer-events: none;
2264
+ }
2265
+
2266
+ .ofv-map-stage .leaflet-interactive,
2267
+ .ofv-map-stage.leaflet-container .leaflet-interactive {
2268
+ pointer-events: auto;
2269
+ }
2270
+
2271
+ .ofv-map-stage .leaflet-map-pane,
2272
+ .ofv-map-stage.leaflet-container .leaflet-map-pane {
2273
+ z-index: 400;
2274
+ }
2275
+
2276
+ .ofv-map-stage .leaflet-tile-pane,
2277
+ .ofv-map-stage.leaflet-container .leaflet-tile-pane {
2278
+ z-index: 200;
2279
+ }
2280
+
2281
+ .ofv-map-stage .leaflet-overlay-pane,
2282
+ .ofv-map-stage.leaflet-container .leaflet-overlay-pane {
2283
+ z-index: 400;
2284
+ }
2285
+
2286
+ .ofv-map-stage .leaflet-shadow-pane,
2287
+ .ofv-map-stage.leaflet-container .leaflet-shadow-pane {
2288
+ z-index: 500;
2289
+ }
2290
+
2291
+ .ofv-map-stage .leaflet-marker-pane,
2292
+ .ofv-map-stage.leaflet-container .leaflet-marker-pane {
2293
+ z-index: 600;
2294
+ }
2295
+
2296
+ .ofv-map-stage .leaflet-tooltip-pane,
2297
+ .ofv-map-stage.leaflet-container .leaflet-tooltip-pane {
2298
+ z-index: 650;
2299
+ }
2300
+
2301
+ .ofv-map-stage .leaflet-popup-pane,
2302
+ .ofv-map-stage.leaflet-container .leaflet-popup-pane {
2303
+ z-index: 700;
2304
+ }
2305
+
2306
+ .ofv-map-stage .leaflet-control,
2307
+ .ofv-map-stage.leaflet-container .leaflet-control {
2308
+ position: relative;
2309
+ z-index: 800;
2310
+ pointer-events: auto;
2311
+ }
2312
+
2313
+ .ofv-map-empty {
2314
+ position: absolute;
2315
+ inset: 0;
2316
+ z-index: 400;
2317
+ display: flex;
2318
+ flex-direction: column;
2319
+ align-items: center;
2320
+ justify-content: center;
2321
+ gap: 6px;
2322
+ padding: 24px;
2323
+ text-align: center;
2324
+ color: var(--ofv-text-muted);
2325
+ pointer-events: none;
2326
+ }
2327
+
2328
+ .ofv-map-empty strong {
2329
+ color: var(--ofv-text);
2330
+ font-size: 14px;
2331
+ }
2332
+
2333
+ .ofv-map-legend {
2334
+ position: absolute;
2335
+ right: 12px;
2336
+ bottom: 12px;
2337
+ z-index: 450;
2338
+ display: flex;
2339
+ flex-direction: column;
2340
+ gap: 2px;
2341
+ max-width: min(280px, calc(100% - 24px));
2342
+ padding: 8px 10px;
2343
+ border: 1px solid rgba(225, 29, 72, 0.28);
2344
+ border-radius: 8px;
2345
+ background: rgba(255, 255, 255, 0.92);
2346
+ color: #475569;
2347
+ box-shadow: 0 8px 24px rgba(15, 23, 42, 0.16);
2348
+ font-size: 12px;
2349
+ pointer-events: none;
2350
+ }
2351
+
2352
+ .ofv-map-legend strong {
2353
+ position: relative;
2354
+ display: inline-flex;
2355
+ align-items: center;
2356
+ gap: 6px;
2357
+ color: #111827;
2358
+ font-size: 13px;
2359
+ }
2360
+
2361
+ .ofv-map-legend strong::before {
2362
+ content: "";
2363
+ display: inline-block;
2364
+ width: 22px;
2365
+ height: 4px;
2366
+ border-radius: 999px;
2367
+ background: #e11d48;
2368
+ box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.9), 0 0 0 5px rgba(225, 29, 72, 0.24);
2369
+ }
2370
+
2371
+ .ofv-map-stage .ofv-map-feature {
2372
+ filter: drop-shadow(0 1px 0 #ffffff) drop-shadow(0 0 5px rgba(225, 29, 72, 0.82));
2373
+ }
2374
+
2375
+ .ofv-map-stage .ofv-map-point {
2376
+ filter: drop-shadow(0 0 0 #ffffff) drop-shadow(0 0 8px rgba(225, 29, 72, 0.95));
2377
+ }
2378
+
2379
+ .ofv-map-stage .ofv-map-tooltip {
2380
+ border: 1px solid rgba(225, 29, 72, 0.22);
2381
+ border-radius: 6px;
2382
+ background: rgba(255, 255, 255, 0.96);
2383
+ color: #111827;
2384
+ box-shadow: 0 8px 20px rgba(15, 23, 42, 0.16);
2385
+ font: inherit;
2386
+ font-size: 12px;
2387
+ font-weight: 600;
1946
2388
  }
1947
2389
 
1948
2390
  /* Premium custom Leaflet map controls styling */
@@ -2046,8 +2488,7 @@
2046
2488
  white-space: nowrap;
2047
2489
  }
2048
2490
 
2049
- .ofv-code-title span,
2050
- .ofv-code-status {
2491
+ .ofv-code-title span {
2051
2492
  color: var(--ofv-text-muted);
2052
2493
  font-size: 12px;
2053
2494
  line-height: 1.4;
@@ -2056,18 +2497,28 @@
2056
2497
  .ofv-code-actions {
2057
2498
  display: flex;
2058
2499
  flex: 0 0 auto;
2059
- flex-wrap: wrap;
2500
+ flex-wrap: nowrap;
2060
2501
  align-items: center;
2061
2502
  justify-content: flex-end;
2062
2503
  gap: 8px;
2504
+ min-width: 0;
2505
+ max-width: 100%;
2063
2506
  }
2064
2507
 
2065
2508
  .ofv-code-status {
2066
- min-width: min(74px, 100%);
2509
+ flex: 0 1 96px;
2510
+ min-width: 0;
2511
+ overflow: hidden;
2512
+ color: var(--ofv-text-muted);
2513
+ font-size: 12px;
2514
+ line-height: 1.4;
2067
2515
  text-align: right;
2516
+ text-overflow: ellipsis;
2517
+ white-space: nowrap;
2068
2518
  }
2069
2519
 
2070
2520
  .ofv-code-action {
2521
+ flex: 0 0 auto;
2071
2522
  min-height: 30px;
2072
2523
  border: 1px solid var(--ofv-border);
2073
2524
  border-radius: 6px;
@@ -2077,6 +2528,7 @@
2077
2528
  cursor: pointer;
2078
2529
  font: inherit;
2079
2530
  font-size: 12px;
2531
+ white-space: nowrap;
2080
2532
  }
2081
2533
 
2082
2534
  .ofv-code-action:hover {
@@ -2138,6 +2590,8 @@
2138
2590
  display: grid;
2139
2591
  grid-template-columns: auto minmax(0, 1fr);
2140
2592
  flex: 1 1 auto;
2593
+ position: relative;
2594
+ isolation: isolate;
2141
2595
  max-width: 100%;
2142
2596
  min-width: 0;
2143
2597
  min-height: 0;
@@ -2145,51 +2599,20 @@
2145
2599
  background: var(--ofv-surface-muted);
2146
2600
  }
2147
2601
 
2148
- .ofv-code-editor {
2149
- flex: 1 1 auto;
2150
- max-width: 100%;
2151
- min-width: 0;
2152
- min-height: 280px;
2153
- overflow: hidden;
2154
- background: var(--ofv-surface-muted);
2155
- }
2156
-
2157
- .ofv-code-editor[hidden],
2158
2602
  .ofv-code-body[hidden] {
2159
2603
  display: none;
2160
2604
  }
2161
2605
 
2162
- .ofv-code-container.is-editor .ofv-code-editor {
2163
- display: block;
2164
- }
2165
-
2166
- .ofv-code-editor-fallback {
2167
- display: block;
2168
- width: 100%;
2169
- height: 100%;
2170
- min-height: inherit;
2171
- margin: 0;
2172
- border: 0;
2173
- padding: 18px 20px;
2174
- outline: 0;
2175
- resize: none;
2176
- background: var(--ofv-surface-muted);
2177
- color: var(--ofv-text);
2178
- font-family: var(--ofv-font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);
2179
- font-size: 13px;
2180
- line-height: 1.6;
2181
- white-space: pre;
2182
- }
2183
-
2184
2606
  .ofv-code-gutter {
2185
2607
  position: sticky;
2186
2608
  left: 0;
2187
- z-index: 1;
2609
+ z-index: 3;
2188
2610
  min-width: 48px;
2189
2611
  margin: 0;
2190
2612
  padding: 18px 12px;
2191
2613
  border-right: 1px solid var(--ofv-border);
2192
2614
  background: var(--ofv-surface);
2615
+ box-shadow: 8px 0 14px -14px rgba(15, 23, 42, 0.65);
2193
2616
  color: var(--ofv-text-muted);
2194
2617
  font-family: var(--ofv-font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);
2195
2618
  font-size: 13px;
@@ -2199,6 +2622,8 @@
2199
2622
  }
2200
2623
 
2201
2624
  .ofv-code-container pre {
2625
+ position: relative;
2626
+ z-index: 0;
2202
2627
  margin: 0;
2203
2628
  padding: 18px 20px;
2204
2629
  max-width: 100%;
@@ -2241,12 +2666,11 @@
2241
2666
 
2242
2667
  .ofv-code-actions {
2243
2668
  justify-content: flex-start;
2244
- flex-wrap: wrap;
2669
+ flex-wrap: nowrap;
2245
2670
  }
2246
2671
 
2247
2672
  .ofv-code-status {
2248
- min-width: 0;
2249
- width: 100%;
2673
+ flex-basis: 88px;
2250
2674
  text-align: left;
2251
2675
  }
2252
2676
  }
@@ -2411,6 +2835,8 @@
2411
2835
  /* PDF lazy loading elements */
2412
2836
  .ofv-pdf-page-wrapper {
2413
2837
  margin: 16px auto;
2838
+ max-width: 100%;
2839
+ min-width: 0;
2414
2840
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
2415
2841
  border: 1px solid var(--ofv-border);
2416
2842
  background-color: var(--ofv-surface);