@mdxui/named 8.0.0 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -810,4 +810,306 @@ html:has([data-dialect='named']) {
810
810
  left: 0;
811
811
  right: 0;
812
812
  border-top: 1px solid var(--color-border);
813
- }
813
+ }
814
+
815
+ /**
816
+ * @mdxui/named — GALLERY template envelope ("The Evening Gallery")
817
+ * ============================================================================
818
+ *
819
+ * The museum register of the named dialect: the page is an exhibition
820
+ * catalogue for a singular talent. Scene: an evening visitor moving alone
821
+ * through a dim gallery — warm near-black walls, each capability hung as a
822
+ * spot-lit work with its bone placard beside it, one Klein-blue wall at the
823
+ * end of the walk.
824
+ *
825
+ * LIGHT MODE IS THE DAY GALLERY, not an inversion: bone plaster walls under
826
+ * even daylight, the SAME placard system (placards are physical bone cards —
827
+ * they keep their material in both modes), the vitrines keep their dark
828
+ * velvet interiors, and the ultramarine holds. Dark mode dims the walls to
829
+ * warm near-black; the placards and vitrines read as lit objects by contrast
830
+ * alone.
831
+ *
832
+ * Color strategy: RESTRAINED — vast warm-neutral emptiness; one saturated
833
+ * accent (electric ultramarine, the International-Klein-Blue register of
834
+ * gallery walls) held under ~10% of the surface: catalogue numbers, the
835
+ * primary action, and the single painted wall of the closing room.
836
+ * Deliberately NOT gold/amber, NOT neon, NOT terminal-dark.
837
+ *
838
+ * SCOPING — rides on top of the studio envelope exactly like executive: the
839
+ * view renders `data-dialect="named" data-template="gallery"`, so studio's
840
+ * bare `[data-dialect='named']` block still matches and this two-attribute
841
+ * selector re-points every token the gallery subtree reads. The dark block
842
+ * below (3 selectors) outranks both this block and studio's `.dark` block.
843
+ */
844
+
845
+ /* Display face — Bricolage Grotesque (variable 200–800, optical sizes 12–96):
846
+ a grotesque with flare cuts and real presence at exhibition-title sizes,
847
+ nothing like Halant's serif or Anton's condensed shout. Inter body ships
848
+ from the studio block of the same stylesheet. */
849
+ @font-face {
850
+ font-family: 'Bricolage Grotesque';
851
+ font-style: normal;
852
+ font-weight: 200 800;
853
+ font-stretch: 100%;
854
+ font-display: swap;
855
+ src: url('https://fonts.gstatic.com/s/bricolagegrotesque/v9/3y9K6as8bTXq_nANBjzKo3IeZx8z6up5BeSl9D4dj_x9PpZBMlGIInHWVyNJ.woff2')
856
+ format('woff2');
857
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
858
+ U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
859
+ U+2212, U+2215, U+FEFF, U+FFFD;
860
+ }
861
+
862
+ [data-dialect='named'][data-template='gallery'] {
863
+ /* ---- semantic layer — the day gallery -------------------------------- */
864
+ /* walls: bone plaster (warm hue, whisper of chroma — never #fff) */
865
+ --color-surface: oklch(0.957 0.007 80);
866
+ --color-surface-raised: oklch(0.978 0.005 82);
867
+ --color-surface-sunken: oklch(0.928 0.009 78);
868
+
869
+ /* ink: warm umber, never pure black */
870
+ --color-fg: oklch(0.21 0.012 55);
871
+ --color-fg-soft: oklch(0.34 0.012 55);
872
+ --color-fg-muted: oklch(0.47 0.014 60);
873
+
874
+ /* hairlines — frame edges and rule lines */
875
+ --color-border: oklch(0.21 0.012 55 / 0.14);
876
+ --color-border-strong: oklch(0.21 0.012 55 / 0.42);
877
+ --color-ring: oklch(0.45 0.2 264 / 0.5);
878
+ --color-hover: oklch(0.21 0.012 55 / 0.05);
879
+
880
+ /* the one accent: electric ultramarine (Klein blue). `field` paints the
881
+ large surfaces (the closing-room wall, the featured edition); `strong`
882
+ is blue TYPE and small marks (catalogue numbers, diamonds). They share
883
+ a value in daylight; after dark they split — fields stay deep and
884
+ saturated, type lifts to stay legible on near-black. */
885
+ --color-accent-field: oklch(0.45 0.28 264);
886
+ --color-accent-strong: oklch(0.45 0.26 264);
887
+ --color-accent: oklch(0.5 0.24 264);
888
+ --color-accent-soft: oklch(0.93 0.035 264);
889
+ --color-accent-fg: oklch(0.975 0.006 85);
890
+
891
+ /* placards: physical bone cards — same material in BOTH modes */
892
+ --color-placard: oklch(0.982 0.005 85);
893
+ --color-placard-fg: oklch(0.21 0.012 55);
894
+ --color-placard-soft: oklch(0.36 0.012 55);
895
+ --color-placard-muted: oklch(0.48 0.014 58);
896
+ --color-placard-border: oklch(0.21 0.012 55 / 0.12);
897
+
898
+ /* vitrines: dark velvet interiors — display cases stay dark by day too */
899
+ --color-vitrine: oklch(0.15 0.012 48);
900
+ --color-vitrine-fg: oklch(0.92 0.008 80);
901
+ --color-vitrine-border: oklch(0.21 0.012 55 / 0.35);
902
+
903
+ /* primary action: solid ultramarine (the studio gradient collapses flat) */
904
+ --color-btn-primary-from: oklch(0.45 0.28 264);
905
+ --color-btn-primary-to: oklch(0.45 0.28 264);
906
+ --color-btn-primary-fg: oklch(0.975 0.006 85);
907
+
908
+ --color-destructive: oklch(0.55 0.19 28);
909
+ --color-destructive-fg: oklch(0.975 0.006 85);
910
+
911
+ /* ---- neo shared names, re-pointed (keeps shared primitives correct) -- */
912
+ --background: oklch(0.957 0.007 80);
913
+ --foreground: oklch(0.21 0.012 55);
914
+ --card: oklch(0.978 0.005 82);
915
+ --card-foreground: oklch(0.21 0.012 55);
916
+ --popover: oklch(0.978 0.005 82);
917
+ --popover-foreground: oklch(0.21 0.012 55);
918
+ --muted: oklch(0.928 0.009 78);
919
+ --muted-foreground: oklch(0.47 0.014 60);
920
+ --primary: oklch(0.45 0.28 264);
921
+ --primary-foreground: oklch(0.975 0.006 85);
922
+ --secondary: oklch(0.928 0.009 78);
923
+ --secondary-foreground: oklch(0.21 0.012 55);
924
+ --accent: oklch(0.5 0.24 264);
925
+ --accent-foreground: oklch(0.975 0.006 85);
926
+ --border: oklch(0.21 0.012 55 / 0.14);
927
+ --input: oklch(0.21 0.012 55 / 0.14);
928
+ --ring: oklch(0.45 0.2 264 / 0.5);
929
+ --destructive: oklch(0.55 0.19 28);
930
+ --destructive-foreground: oklch(0.975 0.006 85);
931
+
932
+ /* ---- geometry: crisp frames, gently eased placard corners ------------ */
933
+ /* 4px base (--radius anchors the host's @theme-inline multipliers; see
934
+ the studio block for the mechanism). Frames and vitrines are sharp by
935
+ component class; placards take the soft 4px of a die-cut card. */
936
+ --radius: 0.25rem;
937
+ --radius-xs: 0.125rem;
938
+ --radius-sm: 0.1875rem;
939
+ --radius-md: 0.25rem;
940
+ --radius-lg: 0.25rem;
941
+ --radius-xl: 0.375rem;
942
+ --radius-2xl: 0.5rem;
943
+ --radius-3xl: 0.5rem;
944
+ --radius-4xl: 0.5rem;
945
+ --radius-section: 0px;
946
+ --radius-image: 4px;
947
+
948
+ /* ---- elevation: museum light --------------------------------------- */
949
+ /* Placards and vitrines cast soft warm shadows (objects under daylight);
950
+ warm-black tint so the shadow belongs to the room, not to a screen. */
951
+ --shadow-2xs: 0 1px 1px oklch(0.15 0.012 48 / 0.05);
952
+ --shadow-xs: 0 1px 2px oklch(0.15 0.012 48 / 0.06);
953
+ --shadow-sm: 0 1px 3px oklch(0.15 0.012 48 / 0.08),
954
+ 0 1px 2px -1px oklch(0.15 0.012 48 / 0.08);
955
+ --shadow-md: 0 6px 16px -6px oklch(0.15 0.012 48 / 0.14),
956
+ 0 2px 4px -2px oklch(0.15 0.012 48 / 0.08);
957
+ --shadow-lg: 0 18px 40px -16px oklch(0.15 0.012 48 / 0.2),
958
+ 0 4px 10px -6px oklch(0.15 0.012 48 / 0.1);
959
+ --shadow-xl: 0 28px 56px -20px oklch(0.15 0.012 48 / 0.26);
960
+ --shadow-2xl: 0 36px 72px -24px oklch(0.15 0.012 48 / 0.32);
961
+
962
+ /* ---- type ------------------------------------------------------------ */
963
+ /* Display = Bricolage Grotesque (exhibition titles, catalogue numbers,
964
+ prices). Body stays on the inherited Inter. */
965
+ --font-display: 'Bricolage Grotesque', 'Avenir Next', system-ui, sans-serif;
966
+
967
+ background: var(--color-surface);
968
+ color: var(--color-fg);
969
+ font-family: var(--font-inter, 'Inter'), system-ui, -apple-system, sans-serif;
970
+ -webkit-font-smoothing: antialiased;
971
+ -moz-osx-font-smoothing: grayscale;
972
+ text-rendering: optimizeLegibility;
973
+ }
974
+
975
+ /* The hero's light wash — dark mode only, FULL WIDTH of the hero (inset 0,
976
+ never a negative-offset box): one warm pool falling from the top of the
977
+ wall, fading out before the ticker rule. */
978
+ [data-dialect='named'][data-template='gallery'] .gal-wash {
979
+ position: relative;
980
+ }
981
+ .dark [data-dialect='named'][data-template='gallery'] .gal-wash::before,
982
+ [data-dialect='named'][data-template='gallery'].dark .gal-wash::before {
983
+ content: '';
984
+ position: absolute;
985
+ inset: 0;
986
+ pointer-events: none;
987
+ background: radial-gradient(
988
+ 120% 100% at 50% 0%,
989
+ oklch(0.93 0.01 80 / 0.08),
990
+ transparent 58%
991
+ );
992
+ }
993
+
994
+ /* ──────────────────────────────────────────────────────────────────
995
+ DARK MODE — the evening gallery, the design's namesake. Warm near-black
996
+ walls (NOT cool terminal black), bone type. The placard keeps its
997
+ bone card material — a lit object on a dark wall — and the vitrine keeps
998
+ its velvet interior, now a step deeper than the room. Ultramarine splits
999
+ by role: painted fields stay deep IKB, type lifts to read on the dark.
1000
+ Activated by the host's `.dark` class (DialectShell's <Site mode="dark">).
1001
+ ────────────────────────────────────────────────────────────────── */
1002
+ .dark [data-dialect='named'][data-template='gallery'],
1003
+ [data-dialect='named'][data-template='gallery'].dark {
1004
+ /* ---- semantic layer — after hours ------------------------------------ */
1005
+ --color-surface: oklch(0.168 0.012 45);
1006
+ --color-surface-raised: oklch(0.205 0.014 45);
1007
+ --color-surface-sunken: oklch(0.13 0.01 45);
1008
+
1009
+ --color-fg: oklch(0.93 0.01 80);
1010
+ --color-fg-soft: oklch(0.82 0.01 80);
1011
+ --color-fg-muted: oklch(0.66 0.012 75);
1012
+
1013
+ --color-border: oklch(0.93 0.01 80 / 0.13);
1014
+ --color-border-strong: oklch(0.93 0.01 80 / 0.4);
1015
+ --color-ring: oklch(0.64 0.19 266 / 0.55);
1016
+ --color-hover: oklch(0.93 0.01 80 / 0.06);
1017
+
1018
+ /* ultramarine after dark: fields hold deep IKB, type lifts */
1019
+ --color-accent-field: oklch(0.43 0.27 264);
1020
+ --color-accent-strong: oklch(0.66 0.19 266);
1021
+ --color-accent: oklch(0.58 0.22 265);
1022
+ --color-accent-soft: oklch(0.26 0.08 264);
1023
+ --color-accent-fg: oklch(0.965 0.008 85);
1024
+
1025
+ /* the placard stays a bone card — now a lit object on the dark wall */
1026
+ --color-placard: oklch(0.936 0.012 82);
1027
+ --color-placard-fg: oklch(0.22 0.012 50);
1028
+ --color-placard-soft: oklch(0.37 0.012 52);
1029
+ --color-placard-muted: oklch(0.46 0.014 55);
1030
+ --color-placard-border: oklch(0.22 0.012 50 / 0.14);
1031
+
1032
+ /* vitrine: a step deeper than the walls */
1033
+ --color-vitrine: oklch(0.115 0.01 45);
1034
+ --color-vitrine-fg: oklch(0.92 0.008 80);
1035
+ --color-vitrine-border: oklch(0.93 0.01 80 / 0.22);
1036
+
1037
+ /* primary action: ultramarine lifted half a step for the dark room */
1038
+ --color-btn-primary-from: oklch(0.48 0.26 264);
1039
+ --color-btn-primary-to: oklch(0.48 0.26 264);
1040
+ --color-btn-primary-fg: oklch(0.965 0.008 85);
1041
+
1042
+ --color-destructive: oklch(0.62 0.18 28);
1043
+ --color-destructive-fg: oklch(0.168 0.012 45);
1044
+
1045
+ /* ---- neo shared names, re-pointed ----------------------------------- */
1046
+ --background: oklch(0.168 0.012 45);
1047
+ --foreground: oklch(0.93 0.01 80);
1048
+ --card: oklch(0.205 0.014 45);
1049
+ --card-foreground: oklch(0.93 0.01 80);
1050
+ --popover: oklch(0.205 0.014 45);
1051
+ --popover-foreground: oklch(0.93 0.01 80);
1052
+ --muted: oklch(0.13 0.01 45);
1053
+ --muted-foreground: oklch(0.66 0.012 75);
1054
+ --primary: oklch(0.48 0.26 264);
1055
+ --primary-foreground: oklch(0.965 0.008 85);
1056
+ --secondary: oklch(0.205 0.014 45);
1057
+ --secondary-foreground: oklch(0.93 0.01 80);
1058
+ --accent: oklch(0.58 0.22 265);
1059
+ --accent-foreground: oklch(0.965 0.008 85);
1060
+ --border: oklch(0.93 0.01 80 / 0.13);
1061
+ --input: oklch(0.93 0.01 80 / 0.13);
1062
+ --ring: oklch(0.64 0.19 266 / 0.55);
1063
+ --destructive: oklch(0.62 0.18 28);
1064
+ --destructive-foreground: oklch(0.168 0.012 45);
1065
+
1066
+ /* shadows deepen after dark — spotlit objects throw real penumbrae */
1067
+ --shadow-sm: 0 1px 3px oklch(0.08 0.008 45 / 0.3),
1068
+ 0 1px 2px -1px oklch(0.08 0.008 45 / 0.3);
1069
+ --shadow-md: 0 8px 20px -8px oklch(0.08 0.008 45 / 0.5),
1070
+ 0 2px 6px -2px oklch(0.08 0.008 45 / 0.35);
1071
+ --shadow-lg: 0 22px 48px -18px oklch(0.08 0.008 45 / 0.6),
1072
+ 0 6px 14px -8px oklch(0.08 0.008 45 / 0.4);
1073
+ --shadow-xl: 0 32px 64px -22px oklch(0.08 0.008 45 / 0.65);
1074
+ --shadow-2xl: 0 40px 80px -26px oklch(0.08 0.008 45 / 0.7);
1075
+ }
1076
+
1077
+ /* Display headings: the shared h1/h2 rule supplies var(--font-display) →
1078
+ Bricolage Grotesque here. Exhibition titles set tight and confident —
1079
+ medium weight (the variable cut around 560 has the flare without the
1080
+ shout), near-solid leading, a breath of negative tracking. Title case,
1081
+ never uppercase — placards do the small-caps work. */
1082
+ [data-dialect='named'][data-template='gallery'] h1,
1083
+ [data-dialect='named'][data-template='gallery'] h2 {
1084
+ font-weight: 560;
1085
+ letter-spacing: -0.02em;
1086
+ line-height: 0.98;
1087
+ }
1088
+
1089
+ /* The display voice, on demand (prices, the wordmark, catalogue numbers). */
1090
+ [data-dialect='named'][data-template='gallery'] .gal-display {
1091
+ font-family: var(--font-display);
1092
+ }
1093
+
1094
+ /* Museum placard label — small-caps register built from uppercase + wide
1095
+ tracking (Inter carries no true smcp; synthesis reads cheap). */
1096
+ [data-dialect='named'][data-template='gallery'] .gal-label {
1097
+ font-size: 0.6875rem;
1098
+ font-weight: 500;
1099
+ letter-spacing: 0.18em;
1100
+ text-transform: uppercase;
1101
+ line-height: 1.5;
1102
+ }
1103
+
1104
+ /* Catalogue number — "No. 3" in the display face, lining figures. */
1105
+ [data-dialect='named'][data-template='gallery'] .gal-no {
1106
+ font-family: var(--font-display);
1107
+ font-weight: 500;
1108
+ letter-spacing: 0.02em;
1109
+ font-variant-numeric: lining-nums tabular-nums;
1110
+ }
1111
+
1112
+ /* The spotlight pool — the dark gallery's lighting model. By day the room
1113
+ is evenly lit, so the class renders nothing; after dark a soft bone wash
1114
+ falls from above each work. A lighting effect on the wall, not a panel
1115
+ treatment (no blur, no glass). */
@@ -106,7 +106,7 @@ type NamedAgentLandingContent = {
106
106
  cta: NamedAgentCta;
107
107
  };
108
108
 
109
- type NamedAgentTemplate = 'studio' | 'executive';
109
+ type NamedAgentTemplate = 'studio' | 'executive' | 'gallery';
110
110
  type NamedAgentViewProps = DialectViewProps<NamedAgentLandingContent> & {
111
111
  /** Design language for the page. Defaults to the named-agents baseline. */
112
112
  template?: NamedAgentTemplate;