matterviz 0.3.2 → 0.3.4

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 (281) hide show
  1. package/dist/EmptyState.svelte +10 -2
  2. package/dist/FilePicker.svelte +123 -82
  3. package/dist/Icon.svelte +18 -12
  4. package/dist/MillerIndexInput.svelte +27 -21
  5. package/dist/api/optimade.js +6 -6
  6. package/dist/app.css +216 -207
  7. package/dist/brillouin/BrillouinZone.svelte +292 -149
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
  9. package/dist/brillouin/BrillouinZoneControls.svelte +32 -5
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +69 -42
  11. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  12. package/dist/brillouin/BrillouinZoneInfoPane.svelte +99 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte +275 -163
  14. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  15. package/dist/brillouin/BrillouinZoneTooltip.svelte +17 -7
  16. package/dist/brillouin/compute.js +11 -6
  17. package/dist/chempot-diagram/ChemPotDiagram.svelte +162 -27
  18. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +451 -281
  19. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +2148 -1642
  20. package/dist/chempot-diagram/ChemPotScene3D.svelte +8 -5
  21. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  22. package/dist/chempot-diagram/async-compute.svelte.js +77 -0
  23. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  24. package/dist/chempot-diagram/chempot-worker.js +11 -0
  25. package/dist/chempot-diagram/color.js +1 -2
  26. package/dist/chempot-diagram/compute.d.ts +10 -0
  27. package/dist/chempot-diagram/compute.js +250 -88
  28. package/dist/chempot-diagram/index.d.ts +2 -1
  29. package/dist/chempot-diagram/index.js +2 -1
  30. package/dist/chempot-diagram/temperature.js +8 -9
  31. package/dist/chempot-diagram/types.d.ts +3 -0
  32. package/dist/chempot-diagram/types.js +1 -0
  33. package/dist/colors/index.d.ts +1 -1
  34. package/dist/colors/index.js +5 -3
  35. package/dist/composition/BarChart.svelte +128 -55
  36. package/dist/composition/BubbleChart.svelte +102 -49
  37. package/dist/composition/Composition.svelte +100 -79
  38. package/dist/composition/Formula.svelte +108 -62
  39. package/dist/composition/FormulaFilter.svelte +665 -537
  40. package/dist/composition/PieChart.svelte +183 -108
  41. package/dist/composition/format.d.ts +5 -0
  42. package/dist/composition/format.js +20 -3
  43. package/dist/composition/parse.js +14 -9
  44. package/dist/convex-hull/ConvexHull.svelte +93 -40
  45. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
  46. package/dist/convex-hull/ConvexHull2D.svelte +549 -360
  47. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  48. package/dist/convex-hull/ConvexHull3D.svelte +1296 -827
  49. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  50. package/dist/convex-hull/ConvexHull4D.svelte +1004 -688
  51. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  52. package/dist/convex-hull/ConvexHullControls.svelte +115 -28
  53. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +1 -1
  54. package/dist/convex-hull/ConvexHullInfoPane.svelte +29 -3
  55. package/dist/convex-hull/ConvexHullStats.svelte +425 -328
  56. package/dist/convex-hull/ConvexHullTooltip.svelte +40 -16
  57. package/dist/convex-hull/GasPressureControls.svelte +104 -61
  58. package/dist/convex-hull/StructurePopup.svelte +25 -4
  59. package/dist/convex-hull/TemperatureSlider.svelte +45 -25
  60. package/dist/convex-hull/barycentric-coords.js +13 -7
  61. package/dist/convex-hull/demo-temperature.js +8 -4
  62. package/dist/convex-hull/gas-thermodynamics.js +17 -12
  63. package/dist/convex-hull/helpers.d.ts +9 -0
  64. package/dist/convex-hull/helpers.js +77 -34
  65. package/dist/convex-hull/thermodynamics.js +61 -56
  66. package/dist/convex-hull/types.d.ts +9 -14
  67. package/dist/convex-hull/types.js +0 -17
  68. package/dist/coordination/CoordinationBarPlot.svelte +227 -154
  69. package/dist/element/BohrAtom.svelte +55 -12
  70. package/dist/element/ElementHeading.svelte +7 -2
  71. package/dist/element/ElementPhoto.svelte +15 -9
  72. package/dist/element/ElementStats.svelte +10 -4
  73. package/dist/element/ElementTile.svelte +137 -73
  74. package/dist/element/Nucleus.svelte +39 -11
  75. package/dist/element/data.js +1 -1
  76. package/dist/feedback/ClickFeedback.svelte +16 -5
  77. package/dist/feedback/DragOverlay.svelte +10 -2
  78. package/dist/feedback/Spinner.svelte +4 -2
  79. package/dist/feedback/StatusMessage.svelte +8 -2
  80. package/dist/fermi-surface/FermiSlice.svelte +118 -88
  81. package/dist/fermi-surface/FermiSurface.svelte +328 -187
  82. package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
  83. package/dist/fermi-surface/FermiSurfaceControls.svelte +113 -46
  84. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  85. package/dist/fermi-surface/FermiSurfaceScene.svelte +535 -342
  86. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  87. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +14 -5
  88. package/dist/fermi-surface/compute.js +16 -20
  89. package/dist/fermi-surface/parse.js +24 -14
  90. package/dist/fermi-surface/symmetry.js +2 -7
  91. package/dist/fermi-surface/types.d.ts +3 -5
  92. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1019 -765
  93. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +1 -1
  94. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +76 -22
  95. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +2 -3
  96. package/dist/icons.js +47 -0
  97. package/dist/index.d.ts +2 -1
  98. package/dist/index.js +2 -1
  99. package/dist/io/decompress.js +1 -1
  100. package/dist/io/export.d.ts +3 -0
  101. package/dist/io/export.js +129 -143
  102. package/dist/io/is-binary.js +2 -3
  103. package/dist/io/url-drop.js +1 -2
  104. package/dist/isosurface/Isosurface.svelte +202 -148
  105. package/dist/isosurface/IsosurfaceControls.svelte +46 -28
  106. package/dist/isosurface/parse.js +34 -29
  107. package/dist/isosurface/slice.js +5 -10
  108. package/dist/isosurface/types.d.ts +2 -1
  109. package/dist/isosurface/types.js +61 -12
  110. package/dist/labels.js +11 -8
  111. package/dist/layout/FullscreenToggle.svelte +11 -2
  112. package/dist/layout/InfoCard.svelte +38 -6
  113. package/dist/layout/InfoTag.svelte +63 -32
  114. package/dist/layout/PropertyFilter.svelte +82 -37
  115. package/dist/layout/SettingsSection.svelte +85 -55
  116. package/dist/layout/SubpageGrid.svelte +10 -2
  117. package/dist/layout/json-tree/JsonNode.svelte +183 -138
  118. package/dist/layout/json-tree/JsonTree.svelte +499 -413
  119. package/dist/layout/json-tree/JsonValue.svelte +127 -99
  120. package/dist/layout/json-tree/utils.js +4 -2
  121. package/dist/marching-cubes.js +25 -2
  122. package/dist/math.d.ts +13 -17
  123. package/dist/math.js +133 -67
  124. package/dist/overlays/ContextMenu.svelte +65 -40
  125. package/dist/overlays/DraggablePane.svelte +211 -139
  126. package/dist/periodic-table/PeriodicTable.svelte +278 -145
  127. package/dist/periodic-table/PeriodicTableControls.svelte +178 -128
  128. package/dist/periodic-table/PropertySelect.svelte +25 -7
  129. package/dist/periodic-table/TableInset.svelte +8 -3
  130. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +446 -309
  131. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +1 -1
  132. package/dist/phase-diagram/PhaseDiagramControls.svelte +102 -43
  133. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
  134. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +63 -40
  135. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +71 -28
  136. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +1 -1
  137. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +158 -101
  138. package/dist/phase-diagram/TdbInfoPanel.svelte +28 -4
  139. package/dist/phase-diagram/build-diagram.js +9 -9
  140. package/dist/phase-diagram/colors.js +1 -3
  141. package/dist/phase-diagram/parse.js +10 -9
  142. package/dist/phase-diagram/svg-to-diagram.js +53 -49
  143. package/dist/phase-diagram/utils.d.ts +1 -0
  144. package/dist/phase-diagram/utils.js +80 -25
  145. package/dist/plot/AxisLabel.svelte +28 -3
  146. package/dist/plot/BarPlot.svelte +1182 -734
  147. package/dist/plot/BarPlot.svelte.d.ts +2 -2
  148. package/dist/plot/BarPlotControls.svelte +31 -5
  149. package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
  150. package/dist/plot/ColorBar.svelte +479 -329
  151. package/dist/plot/ColorScaleSelect.svelte +27 -6
  152. package/dist/plot/ElementScatter.svelte +36 -15
  153. package/dist/plot/FillArea.svelte +152 -95
  154. package/dist/plot/Histogram.svelte +934 -571
  155. package/dist/plot/Histogram.svelte.d.ts +1 -1
  156. package/dist/plot/HistogramControls.svelte +53 -9
  157. package/dist/plot/HistogramControls.svelte.d.ts +1 -1
  158. package/dist/plot/InteractiveAxisLabel.svelte +34 -11
  159. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +1 -1
  160. package/dist/plot/Line.svelte +63 -28
  161. package/dist/plot/PlotControls.svelte +157 -114
  162. package/dist/plot/PlotControls.svelte.d.ts +1 -1
  163. package/dist/plot/PlotLegend.svelte +174 -91
  164. package/dist/plot/PlotTooltip.svelte +45 -6
  165. package/dist/plot/PortalSelect.svelte +175 -147
  166. package/dist/plot/ReferenceLine.svelte +76 -22
  167. package/dist/plot/ReferenceLine3D.svelte +132 -107
  168. package/dist/plot/ReferencePlane.svelte +146 -121
  169. package/dist/plot/ScatterPlot.svelte +1681 -1091
  170. package/dist/plot/ScatterPlot.svelte.d.ts +2 -2
  171. package/dist/plot/ScatterPlot3D.svelte +256 -131
  172. package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
  173. package/dist/plot/ScatterPlot3DControls.svelte +113 -63
  174. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +2 -1
  175. package/dist/plot/ScatterPlot3DScene.svelte +608 -403
  176. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
  177. package/dist/plot/ScatterPlotControls.svelte +65 -25
  178. package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
  179. package/dist/plot/ScatterPoint.svelte +98 -26
  180. package/dist/plot/ScatterPoint.svelte.d.ts +1 -0
  181. package/dist/plot/SpacegroupBarPlot.svelte +142 -85
  182. package/dist/plot/Surface3D.svelte +159 -108
  183. package/dist/plot/ZeroLines.svelte +55 -3
  184. package/dist/plot/ZoomRect.svelte +4 -2
  185. package/dist/plot/axis-utils.js +1 -3
  186. package/dist/plot/data-cleaning.js +12 -28
  187. package/dist/plot/data-transform.js +2 -1
  188. package/dist/plot/fill-utils.js +2 -0
  189. package/dist/plot/layout.d.ts +4 -1
  190. package/dist/plot/layout.js +33 -14
  191. package/dist/plot/reference-line.d.ts +2 -2
  192. package/dist/plot/reference-line.js +7 -5
  193. package/dist/plot/scales.js +24 -36
  194. package/dist/plot/types.d.ts +11 -23
  195. package/dist/plot/types.js +6 -11
  196. package/dist/plot/utils/label-placement.d.ts +32 -15
  197. package/dist/plot/utils/label-placement.js +227 -66
  198. package/dist/plot/utils/series-visibility.js +2 -3
  199. package/dist/rdf/RdfPlot.svelte +143 -91
  200. package/dist/rdf/calc-rdf.js +4 -5
  201. package/dist/sanitize.d.ts +4 -0
  202. package/dist/sanitize.js +107 -0
  203. package/dist/settings.d.ts +18 -6
  204. package/dist/settings.js +46 -16
  205. package/dist/spectral/Bands.svelte +632 -453
  206. package/dist/spectral/BandsAndDos.svelte +90 -49
  207. package/dist/spectral/BrillouinBandsDos.svelte +151 -93
  208. package/dist/spectral/Dos.svelte +389 -258
  209. package/dist/spectral/helpers.js +55 -43
  210. package/dist/state.svelte.d.ts +1 -1
  211. package/dist/state.svelte.js +3 -2
  212. package/dist/structure/Arrow.svelte +59 -20
  213. package/dist/structure/AtomLegend.svelte +215 -134
  214. package/dist/structure/Bond.svelte +73 -47
  215. package/dist/structure/CanvasTooltip.svelte +10 -2
  216. package/dist/structure/CellSelect.svelte +72 -45
  217. package/dist/structure/Cylinder.svelte +33 -17
  218. package/dist/structure/Lattice.svelte +88 -33
  219. package/dist/structure/Structure.svelte +1063 -797
  220. package/dist/structure/Structure.svelte.d.ts +1 -1
  221. package/dist/structure/StructureControls.svelte +349 -118
  222. package/dist/structure/StructureExportPane.svelte +124 -89
  223. package/dist/structure/StructureExportPane.svelte.d.ts +1 -1
  224. package/dist/structure/StructureInfoPane.svelte +304 -237
  225. package/dist/structure/StructureScene.svelte +879 -443
  226. package/dist/structure/StructureScene.svelte.d.ts +15 -7
  227. package/dist/structure/atom-properties.js +8 -8
  228. package/dist/structure/bonding.js +6 -7
  229. package/dist/structure/export.js +14 -29
  230. package/dist/structure/ferrox-wasm.js +1 -1
  231. package/dist/structure/index.d.ts +13 -3
  232. package/dist/structure/index.js +83 -23
  233. package/dist/structure/measure.d.ts +2 -2
  234. package/dist/structure/measure.js +4 -44
  235. package/dist/structure/parse.js +113 -141
  236. package/dist/structure/partial-occupancy.js +7 -10
  237. package/dist/structure/pbc.d.ts +1 -0
  238. package/dist/structure/pbc.js +16 -6
  239. package/dist/structure/supercell.d.ts +2 -2
  240. package/dist/structure/supercell.js +12 -22
  241. package/dist/structure/validation.js +1 -2
  242. package/dist/symmetry/SymmetryStats.svelte +84 -41
  243. package/dist/symmetry/WyckoffTable.svelte +26 -6
  244. package/dist/symmetry/cell-transform.js +5 -3
  245. package/dist/symmetry/index.js +8 -7
  246. package/dist/symmetry/spacegroups.js +148 -148
  247. package/dist/table/HeatmapTable.svelte +790 -554
  248. package/dist/table/HeatmapTable.svelte.d.ts +1 -1
  249. package/dist/table/ToggleMenu.svelte +125 -92
  250. package/dist/table/index.js +2 -4
  251. package/dist/theme/ThemeControl.svelte +21 -12
  252. package/dist/time.js +4 -1
  253. package/dist/tooltip/TooltipContent.svelte +33 -8
  254. package/dist/trajectory/Trajectory.svelte +758 -558
  255. package/dist/trajectory/TrajectoryError.svelte +14 -3
  256. package/dist/trajectory/TrajectoryExportPane.svelte +137 -83
  257. package/dist/trajectory/TrajectoryInfoPane.svelte +272 -143
  258. package/dist/trajectory/extract.js +10 -26
  259. package/dist/trajectory/format-detect.js +5 -5
  260. package/dist/trajectory/frame-reader.d.ts +1 -1
  261. package/dist/trajectory/frame-reader.js +5 -12
  262. package/dist/trajectory/helpers.d.ts +0 -1
  263. package/dist/trajectory/helpers.js +2 -17
  264. package/dist/trajectory/index.js +14 -12
  265. package/dist/trajectory/parse/ase.js +5 -4
  266. package/dist/trajectory/parse/hdf5.js +26 -18
  267. package/dist/trajectory/parse/index.js +13 -18
  268. package/dist/trajectory/parse/lammps.js +17 -7
  269. package/dist/trajectory/parse/vasp.js +5 -2
  270. package/dist/trajectory/parse/xyz.js +8 -7
  271. package/dist/trajectory/plotting.js +13 -8
  272. package/dist/utils.d.ts +1 -0
  273. package/dist/utils.js +13 -0
  274. package/dist/xrd/XrdPlot.svelte +337 -247
  275. package/dist/xrd/broadening.js +14 -9
  276. package/dist/xrd/calc-xrd.js +12 -18
  277. package/dist/xrd/parse.d.ts +1 -1
  278. package/dist/xrd/parse.js +17 -17
  279. package/package.json +99 -103
  280. package/readme.md +1 -1
  281. /package/dist/theme/{themes.js → themes.mjs} +0 -0
package/dist/app.css CHANGED
@@ -1,6 +1,9 @@
1
1
  /* Starry-night syntax highlighting (GitHub-style, auto light/dark) */
2
2
  @import '@wooorm/starry-night/style/both';
3
3
 
4
+ /* CSS variables are unlayered so they're available to both layers and to
5
+ components that reference them via var(). Custom properties inherit
6
+ naturally regardless of layer ordering. */
4
7
  :root {
5
8
  --theme-transition-duration: 0.3s;
6
9
  --text-color: #eee;
@@ -19,213 +22,219 @@
19
22
  --border-radius: 3pt;
20
23
  }
21
24
 
22
- /* Targeted theme transitions for performance */
23
- :where(body, main, button, a, code, kbd, pre, blockquote, textarea, table, input),
24
- :where(select, label, .theme-control, .toc, svg, path, circle, rect, text),
25
- :where(.info-pane, .pane-header, .pane-content, .close-button),
26
- :where(nav > a),
27
- :where(.theme-control, .theme-control label, .theme-control select) {
28
- transition:
29
- background-color var(--theme-transition-duration) ease,
30
- color var(--theme-transition-duration) ease,
31
- border-color var(--theme-transition-duration) ease,
32
- fill var(--theme-transition-duration) ease,
33
- stroke var(--theme-transition-duration) ease,
34
- box-shadow var(--theme-transition-duration) ease;
35
- }
36
- body {
37
- background: var(--page-bg);
38
- padding: 5vh 3vw 3vh;
39
- font-family: -apple-system, BlinkMacSystemFont, Roboto, sans-serif;
40
- margin: auto;
41
- color: var(--text-color);
42
- line-height: 1.5;
43
- /* Sticky footer: footer stays at bottom when content is short */
44
- display: flex;
45
- flex-direction: column;
46
- min-height: 100vh;
47
- box-sizing: border-box;
48
- }
49
- main {
50
- margin: auto;
51
- width: 100%;
52
- max-width: var(--max-text-width);
53
- container-type: inline-size;
54
- flex: 1; /* Grow to fill available space (sticky footer) */
55
- }
56
- a {
57
- color: var(--accent-color, cornflowerblue);
58
- text-decoration: none;
59
- }
60
-
61
- button, a.btn {
62
- color: var(--text-color);
63
- cursor: pointer;
64
- border: none;
65
- border-radius: var(--border-radius);
66
- padding: 2pt 4pt;
67
- }
68
- button:disabled {
69
- opacity: 0.5;
70
- cursor: not-allowed;
71
- }
72
- a:hover {
73
- color: var(--accent-hover-color, orange);
74
- }
75
- code, kbd {
76
- overflow-wrap: break-word;
77
- padding: 1pt 3pt;
78
- border-radius: var(--border-radius);
79
- background-color: var(--code-bg);
80
- }
81
- kbd {
82
- font-size: larger;
83
- }
84
- pre code {
85
- background-color: transparent;
86
- display: inline-block;
87
- padding: 0;
88
- width: 100%;
89
- }
90
- pre {
91
- position: relative;
92
- border-radius: var(--border-radius);
93
- font-size: 0.95em;
94
- background-color: var(--pre-bg);
95
- padding: 1ex 1em;
96
- overflow-x: auto;
97
- }
98
- blockquote {
99
- border-left: 3pt solid var(--accent-color, cornflowerblue);
100
- padding: 3pt 7pt;
101
- background: rgba(255, 255, 255, 0.2);
102
- margin: 1em 0;
103
- }
104
- blockquote p:first-child {
105
- margin-top: 0;
106
- }
107
- blockquote p:last-child {
108
- margin-bottom: 0;
109
- }
110
-
111
- :where(h1, h2, h3, h4, h5, h6) {
112
- scroll-margin-top: 100px;
113
- }
114
- :where(h1, h2, h3, h4, h5, h6):target {
115
- color: var(--accent-color, cornflowerblue);
116
- }
117
- body main > :where(h1, h2, h3, h4, h5, h6) {
118
- text-align: center;
119
- }
120
- /* style heading anchors added by heading_anchors attachment from svelte-multiselect */
121
- :where(h2, h3, h4, h5, h6) a[aria-hidden='true'] {
122
- transition: 0.3s;
123
- margin-left: 4pt;
124
- opacity: 0;
125
- }
126
- :where(h2, h3, h4, h5, h6):hover a[aria-hidden='true'] {
127
- opacity: 1;
128
- }
129
-
130
- textarea {
131
- display: block;
132
- width: 100%;
133
- min-height: 100px;
134
- box-sizing: border-box;
135
- margin: 1em auto;
136
- }
137
-
138
- /* Theme-aware form controls (works consistently in notebooks and VSCode/Cursor webviews) */
139
- :is(
140
- input:not([type='checkbox'], [type='radio'], [type='range'], [type='color']),
141
- textarea,
142
- select
143
- ) {
144
- background-color: var(--surface-bg);
145
- color: var(--text-color);
146
- border: 1px solid var(--border-color);
147
- border-radius: var(--border-radius);
148
- padding: 2px 6px;
149
- }
150
- :is(
151
- input:not([type='checkbox'], [type='radio'], [type='range'], [type='color']),
152
- textarea,
153
- select
154
- ):focus {
155
- outline: none;
156
- border-color: var(--accent-color);
157
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-color) 25%, transparent);
158
- }
159
- :is(input, textarea)::placeholder {
160
- color: var(--text-color-muted);
161
- }
162
- select option {
163
- background-color: var(--surface-bg);
164
- color: var(--text-color);
165
- }
166
-
167
- /* Modern flat input styling */
168
- input {
169
- border: none;
170
- border-radius: var(--border-radius);
171
- }
172
- input[type='number'] {
173
- min-width: 40px;
174
- width: auto;
175
- }
176
- input[type='color'] {
177
- border: none;
178
- padding: 0;
179
- outline: none;
180
- border-radius: var(--border-radius);
181
- overflow: hidden;
182
- cursor: pointer;
183
- }
184
- input[type='color']::-webkit-color-swatch-wrapper {
185
- padding: 0;
186
- }
187
- input[type='color']::-webkit-color-swatch {
188
- border: none;
189
- }
190
-
191
- table {
192
- display: block;
193
- max-width: 100%;
194
- overflow: scroll;
195
- border-collapse: collapse;
196
- }
197
- table :is(td, th) {
198
- border: 1px solid var(--border-color, gray);
199
- padding: 3pt 12pt;
200
- }
201
- table.roomy :is(td, th) {
202
- padding: 5pt 9pt;
203
- }
204
- tbody tr:nth-child(odd) {
205
- background: color-mix(in hsl, var(--page-bg, black), var(--text-color) 2%);
206
- }
207
-
208
- :where(ul.selected > li button, button.remove-all) {
209
- background-color: transparent !important;
210
- }
211
-
212
- .full-bleed {
213
- --margin: 5vw;
214
- width: calc(100vw - 2 * var(--margin)) !important;
215
- margin-left: calc(-50vw + 50% + var(--margin));
216
- max-width: none !important;
217
- }
218
- .bleed-1400 {
219
- --margin: 5vw;
220
- width: min(1400px, calc(100vw - 2 * var(--margin))) !important;
221
- margin-left: calc(-50vw + 50% + max(var(--margin), (100vw - 1400px) / 2));
222
- max-width: none !important;
25
+ /* App-shell styles: page layout, typography, headings, navigation.
26
+ These are only needed by the standalone matterviz demo site.
27
+ When embedded in a host framework (Dash/Mantine, React, etc.),
28
+ the host's unlayered CSS automatically takes precedence. */
29
+ @layer matterviz-shell {
30
+ /* Targeted theme transitions for performance */
31
+ :where(body, main, button, a, code, kbd, pre, blockquote, textarea, table, input),
32
+ :where(select, label, .theme-control, .toc, svg, path, circle, rect, text),
33
+ :where(.info-pane, .pane-header, .pane-content, .close-button),
34
+ :where(nav > a),
35
+ :where(.theme-control, .theme-control label, .theme-control select) {
36
+ transition:
37
+ background-color var(--theme-transition-duration) ease,
38
+ color var(--theme-transition-duration) ease,
39
+ border-color var(--theme-transition-duration) ease,
40
+ fill var(--theme-transition-duration) ease,
41
+ stroke var(--theme-transition-duration) ease,
42
+ box-shadow var(--theme-transition-duration) ease;
43
+ }
44
+ body {
45
+ background: var(--page-bg);
46
+ padding: 5vh 3vw 3vh;
47
+ font-family: -apple-system, BlinkMacSystemFont, Roboto, sans-serif;
48
+ margin: auto;
49
+ color: var(--text-color);
50
+ line-height: 1.5;
51
+ /* Sticky footer: footer stays at bottom when content is short */
52
+ display: flex;
53
+ flex-direction: column;
54
+ min-height: 100vh;
55
+ box-sizing: border-box;
56
+ }
57
+ main {
58
+ margin: auto;
59
+ width: 100%;
60
+ max-width: var(--max-text-width);
61
+ container-type: inline-size;
62
+ flex: 1; /* Grow to fill available space (sticky footer) */
63
+ }
64
+ a {
65
+ color: var(--accent-color, cornflowerblue);
66
+ text-decoration: none;
67
+ }
68
+ a:hover {
69
+ color: var(--accent-hover-color, orange);
70
+ }
71
+ blockquote {
72
+ border-left: 3pt solid var(--accent-color, cornflowerblue);
73
+ padding: 3pt 7pt;
74
+ background: rgba(255, 255, 255, 0.2);
75
+ margin: 1em 0;
76
+ }
77
+ blockquote p:first-child {
78
+ margin-top: 0;
79
+ }
80
+ blockquote p:last-child {
81
+ margin-bottom: 0;
82
+ }
83
+ :where(h1, h2, h3, h4, h5, h6) {
84
+ scroll-margin-top: 100px;
85
+ }
86
+ :where(h1, h2, h3, h4, h5, h6):target {
87
+ color: var(--accent-color, cornflowerblue);
88
+ }
89
+ body main > :where(h1, h2, h3, h4, h5, h6) {
90
+ text-align: center;
91
+ }
92
+ /* style heading anchors added by heading_anchors attachment from svelte-multiselect */
93
+ :where(h2, h3, h4, h5, h6) a[aria-hidden='true'] {
94
+ transition: 0.3s;
95
+ margin-left: 4pt;
96
+ opacity: 0;
97
+ }
98
+ :where(h2, h3, h4, h5, h6):hover a[aria-hidden='true'] {
99
+ opacity: 1;
100
+ }
101
+ .full-bleed {
102
+ --margin: 5vw;
103
+ width: calc(100vw - 2 * var(--margin)) !important;
104
+ margin-left: calc(-50vw + 50% + var(--margin));
105
+ max-width: none !important;
106
+ }
107
+ .bleed-1400 {
108
+ --margin: 5vw;
109
+ width: min(1400px, calc(100vw - 2 * var(--margin))) !important;
110
+ margin-left: calc(-50vw + 50% + max(var(--margin), (100vw - 1400px) / 2));
111
+ max-width: none !important;
112
+ }
113
+ .copy-btn {
114
+ position: absolute;
115
+ top: 9pt;
116
+ right: 9pt;
117
+ background: var(--btn-bg);
118
+ color: var(--btn-color);
119
+ }
223
120
  }
224
121
 
225
- .copy-btn {
226
- position: absolute;
227
- top: 9pt;
228
- right: 9pt;
229
- background: var(--btn-bg);
230
- color: var(--btn-color);
122
+ /* Component base styles: form controls, tables, code blocks.
123
+ MatterViz components (Structure, ConvexHull, plots, etc.) depend on
124
+ these for consistent appearance. Also layered so host frameworks
125
+ can override if needed, but these target elements that typically
126
+ only appear inside MatterViz component trees. */
127
+ @layer matterviz-components {
128
+ button,
129
+ a.btn {
130
+ color: var(--text-color);
131
+ cursor: pointer;
132
+ border: none;
133
+ border-radius: var(--border-radius);
134
+ padding: 2pt 4pt;
135
+ }
136
+ button:disabled {
137
+ opacity: 0.5;
138
+ cursor: not-allowed;
139
+ }
140
+ code,
141
+ kbd {
142
+ overflow-wrap: break-word;
143
+ padding: 1pt 3pt;
144
+ border-radius: var(--border-radius);
145
+ background-color: var(--code-bg);
146
+ }
147
+ kbd {
148
+ font-size: larger;
149
+ }
150
+ pre code {
151
+ background-color: transparent;
152
+ display: inline-block;
153
+ padding: 0;
154
+ width: 100%;
155
+ }
156
+ pre {
157
+ position: relative;
158
+ border-radius: var(--border-radius);
159
+ font-size: 0.95em;
160
+ background-color: var(--pre-bg);
161
+ padding: 1ex 1em;
162
+ overflow-x: auto;
163
+ }
164
+ textarea {
165
+ display: block;
166
+ width: 100%;
167
+ min-height: 100px;
168
+ box-sizing: border-box;
169
+ margin: 1em auto;
170
+ }
171
+ /* Theme-aware form controls (works consistently in notebooks and VSCode/Cursor webviews) */
172
+ :is(
173
+ input:not([type='checkbox'], [type='radio'], [type='range'], [type='color']),
174
+ textarea,
175
+ select
176
+ ) {
177
+ background-color: var(--surface-bg);
178
+ color: var(--text-color);
179
+ border: 1px solid var(--border-color);
180
+ border-radius: var(--border-radius);
181
+ padding: 2px 6px;
182
+ }
183
+ :is(
184
+ input:not([type='checkbox'], [type='radio'], [type='range'], [type='color']),
185
+ textarea,
186
+ select
187
+ ):focus {
188
+ outline: none;
189
+ border-color: var(--accent-color);
190
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-color) 25%, transparent);
191
+ }
192
+ :is(input, textarea)::placeholder {
193
+ color: var(--text-color-muted);
194
+ }
195
+ select option {
196
+ background-color: var(--surface-bg);
197
+ color: var(--text-color);
198
+ }
199
+ /* Modern flat input styling — only reset border for non-text inputs */
200
+ input:is([type='checkbox'], [type='radio'], [type='range'], [type='color']) {
201
+ border: none;
202
+ }
203
+ input[type='number'] {
204
+ min-width: 40px;
205
+ width: auto;
206
+ }
207
+ input[type='color'] {
208
+ border: none;
209
+ padding: 0;
210
+ outline: none;
211
+ border-radius: var(--border-radius);
212
+ overflow: hidden;
213
+ cursor: pointer;
214
+ }
215
+ input[type='color']::-webkit-color-swatch-wrapper {
216
+ padding: 0;
217
+ }
218
+ input[type='color']::-webkit-color-swatch {
219
+ border: none;
220
+ }
221
+ table {
222
+ display: block;
223
+ max-width: 100%;
224
+ overflow: auto;
225
+ border-collapse: collapse;
226
+ }
227
+ table :is(td, th) {
228
+ border: 1px solid var(--border-color, gray);
229
+ padding: 3pt 12pt;
230
+ }
231
+ table.roomy :is(td, th) {
232
+ padding: 5pt 9pt;
233
+ }
234
+ tbody tr:nth-child(odd) {
235
+ background: color-mix(in hsl, var(--page-bg, black), var(--text-color) 2%);
236
+ }
237
+ :where(ul.selected > li button, button.remove-all) {
238
+ background-color: transparent !important;
239
+ }
231
240
  }