@instruments/taxonomy 2.6.0 → 2.8.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/index.js CHANGED
@@ -7,8 +7,11 @@ import { createHash } from "crypto";
7
7
  // src/axes/external-search.ts
8
8
  var SEARCHED_ON = "2026-10-21";
9
9
  var SEARCHED_ON_TAX66 = "2026-10-22";
10
- var SEARCHED_ON_TAX66_COVERAGE = "2026-10-23";
11
- var SEARCHED_ON_TAX66_GAPS = "2026-10-23";
10
+ var OCTOBER_23 = "2026-10-23";
11
+ var SEARCHED_ON_TAX66_COVERAGE = OCTOBER_23;
12
+ var SEARCHED_ON_TAX66_GAPS = OCTOBER_23;
13
+ var SEARCHED_ON_MG2620 = OCTOBER_23;
14
+ var GETTY_VOW_SEARCH = "https://www.getty.edu/vow/AATServlet";
12
15
  var WIKIDATA_SEARCH = "https://www.wikidata.org/w/api.php?action=wbsearchentities";
13
16
  var GETTY_SPARQL = "https://vocab.getty.edu/sparql";
14
17
  var UNICLASS_SEARCH = "https://uniclass.thenbs.com/search";
@@ -3420,7 +3423,7 @@ var ELEMENT_TERMS = [
3420
3423
 
3421
3424
  // src/crossover-sources.ts
3422
3425
  var RETRIEVAL_LEXICON_SOURCE = "color-material lexicon in a materials-retrieval system (src-05)";
3423
- var COLORSCOPE_CROSSOVER_SOURCE = "materialinstruments/colorscope@5feb29b267a7954c135976ede8039f37121afd27:packages/core/data/reference/v1/taxonomy.json";
3426
+ var COLORSCOPE_CROSSOVER_SOURCE = "materialinstruments/colorscope@3f490d3cdf26d3af77841a55f0c94cb5e24bb891:packages/core/data/reference/v1/taxonomy.json";
3424
3427
  var BRASS_MATERIAL_SOURCE = "https://archive.copper.org/applications/industrial/DesignGuide/terms.php";
3425
3428
  var BRASS_FINISH_SOURCE = "https://nickelinstitute.org/media/lxxh1zwr/2023-nickelplatinghandbooka5_printablepdf.pdf section 5";
3426
3429
  var NICKEL_MATERIAL_SOURCE = "https://nickelinstitute.org/en/nickel-applications/";
@@ -3770,6 +3773,361 @@ var FINISH_TEXTURE_TERMS = [
3770
3773
  }
3771
3774
  ];
3772
3775
 
3776
+ // src/axes/mg2620-shared.ts
3777
+ var MG2620_DATE = SEARCHED_ON_MG2620;
3778
+ var MG2620_PROVENANCE = {
3779
+ basis: "authored",
3780
+ source: "Linear MG-2620 MaterialGraph vocabulary request"
3781
+ };
3782
+ var MG2620_LIFECYCLE = {
3783
+ introducedAt: MG2620_DATE,
3784
+ provenance: MG2620_PROVENANCE,
3785
+ reviewedAt: MG2620_DATE
3786
+ };
3787
+ var mg2620Term = (slug, label, definition, extra = {}) => ({
3788
+ definition,
3789
+ label,
3790
+ slug,
3791
+ ...MG2620_LIFECYCLE,
3792
+ ...extra
3793
+ });
3794
+ var mg2620SearchedAat = (query) => ({
3795
+ date: MG2620_DATE,
3796
+ query,
3797
+ scheme: "aat",
3798
+ via: `${GETTY_VOW_SEARCH}; record pages read, because ${GETTY_SPARQL} was degraded (HTTP 499) on the day`
3799
+ });
3800
+ var mg2620SearchedWikidata = (query) => ({
3801
+ date: MG2620_DATE,
3802
+ query,
3803
+ scheme: "wikidata",
3804
+ via: `${WIKIDATA_SEARCH}&language=en&format=json; labels and descriptions read`
3805
+ });
3806
+
3807
+ // src/axes/mg2620-finish.ts
3808
+ var related = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
3809
+ var MG2620_TREATMENT_TERMS = [
3810
+ mg2620Term(
3811
+ "sawn",
3812
+ "Sawn",
3813
+ "Left as it comes from the saw, with the faint parallel or arcing marks of the blade and no further dressing.",
3814
+ {
3815
+ altLabels: ["sawn finish", "saw-cut", "rough sawn"],
3816
+ searchedWithout: [
3817
+ mg2620SearchedAat("sawn finish | sawn"),
3818
+ mg2620SearchedWikidata("sawn finish stone")
3819
+ ]
3820
+ }
3821
+ ),
3822
+ mg2620Term(
3823
+ "riven",
3824
+ "Riven",
3825
+ "Split along the stone's natural bedding plane and left with the uneven, layered face the split produces; not sawn and not machine-split.",
3826
+ {
3827
+ altLabels: ["natural cleft", "cleft"],
3828
+ related: related(
3829
+ "finish.treatment.split-face",
3830
+ "finish.texture.textured"
3831
+ ),
3832
+ searchedWithout: [
3833
+ mg2620SearchedAat("riven | cleft | natural cleft"),
3834
+ mg2620SearchedWikidata("riven stone | cleft stone")
3835
+ ]
3836
+ }
3837
+ ),
3838
+ mg2620Term(
3839
+ "rock-faced",
3840
+ "Rock-faced",
3841
+ "Dressed with a pitching tool so the face projects as a rough, rock-like mass inside a straight arris.",
3842
+ {
3843
+ altLabels: ["pitch-faced", "pitched face", "quarry-faced"],
3844
+ related: related(
3845
+ "finish.treatment.split-face",
3846
+ "finish.texture.textured"
3847
+ ),
3848
+ searchedWithout: [
3849
+ mg2620SearchedAat("rock-faced | rockfaced | pitch-faced | pitch faced"),
3850
+ mg2620SearchedWikidata("rock-faced stone | pitch-faced")
3851
+ ]
3852
+ }
3853
+ ),
3854
+ mg2620Term(
3855
+ "acid-washed",
3856
+ "Acid-washed",
3857
+ "Treated with acid to soften saw marks and etch the face to a muted, faintly textured surface that keeps the stone's natural character.",
3858
+ {
3859
+ altLabels: ["acid washed", "acid-etched"],
3860
+ searchedWithout: [
3861
+ mg2620SearchedAat("acid-washed | acid etched | etching"),
3862
+ mg2620SearchedWikidata("acid washed stone")
3863
+ ]
3864
+ }
3865
+ ),
3866
+ mg2620Term(
3867
+ "wire-brushed",
3868
+ "Wire-brushed",
3869
+ "Brushed with wire to remove the softer grain of timber, leaving the harder grain standing in relief.",
3870
+ {
3871
+ altLabels: ["wire brushed"],
3872
+ external: [
3873
+ mapping("aat", "300438802", "brushing (general process)", "broad")
3874
+ ],
3875
+ related: related("finish.texture.grained", "finish.texture.textured"),
3876
+ searchedWithout: [
3877
+ mg2620SearchedWikidata("wire brushed wood | wire brushing")
3878
+ ]
3879
+ }
3880
+ ),
3881
+ mg2620Term(
3882
+ "hand-scraped",
3883
+ "Hand-scraped",
3884
+ "Worked with a curved blade so the face carries shallow, irregular scallops across its width, by hand or by a machine imitating it.",
3885
+ {
3886
+ altLabels: ["hand scraped", "scraped"],
3887
+ external: [mapping("aat", "300053711", "scraping", "broad")],
3888
+ related: related(
3889
+ "finish.treatment.distressed",
3890
+ "finish.texture.textured"
3891
+ ),
3892
+ searchedWithout: [mg2620SearchedWikidata("hand-scraped flooring")]
3893
+ }
3894
+ ),
3895
+ mg2620Term(
3896
+ "fumed",
3897
+ "Fumed",
3898
+ "Darkened by exposing tannin-rich timber, usually oak, to ammonia fumes, which colour the wood through rather than staining its face.",
3899
+ {
3900
+ altLabels: ["ammonia fumed", "smoked"],
3901
+ searchedWithout: [
3902
+ mg2620SearchedAat("fumed oak | fuming | ammonia"),
3903
+ mg2620SearchedWikidata("fumed oak | fuming wood ammonia")
3904
+ ]
3905
+ }
3906
+ ),
3907
+ mg2620Term(
3908
+ "cerused",
3909
+ "Cerused",
3910
+ "Open-grained timber, usually oak, with the grain opened and filled with a white or pale paste or wax so it stands out against the wood.",
3911
+ {
3912
+ altLabels: ["limed", "pickled", "liming"],
3913
+ external: [
3914
+ mapping("aat", "300053862", "pickling (woodworking)", "related")
3915
+ ],
3916
+ searchedWithout: [
3917
+ mg2620SearchedWikidata(
3918
+ "cerused wood | cerusing | limed oak | liming wood | wood pickling"
3919
+ )
3920
+ ]
3921
+ }
3922
+ )
3923
+ ];
3924
+ var METALLIC_TONE_TERMS = [
3925
+ mg2620Term(
3926
+ "silver",
3927
+ "Silver",
3928
+ "A light, neutral to cool grey-white metallic look, bright or satin, as chrome, stainless steel and aluminium read; it says nothing about the material or how the surface was made.",
3929
+ {
3930
+ external: [
3931
+ mapping("aat", "300311368", "silver (color)", "close"),
3932
+ mapping("wikidata", "Q317802", "silver", "close")
3933
+ ]
3934
+ }
3935
+ ),
3936
+ mg2620Term(
3937
+ "gold",
3938
+ "Gold",
3939
+ "A saturated, warm yellow metallic look, light to mid in value; it says nothing about the material or how the surface was made.",
3940
+ {
3941
+ external: [
3942
+ mapping("aat", "300311191", "gold (color)", "close"),
3943
+ mapping("wikidata", "Q208045", "gold", "close")
3944
+ ]
3945
+ }
3946
+ ),
3947
+ mg2620Term(
3948
+ "champagne",
3949
+ "Champagne",
3950
+ "A pale, muted gold metallic look leaning towards beige; it says nothing about the material or how the surface was made.",
3951
+ {
3952
+ altLabels: ["champagne bronze", "champagne gold"],
3953
+ external: [mapping("wikidata", "Q5069879", "champagne", "close")],
3954
+ searchedWithout: [
3955
+ mg2620SearchedAat("champagne | champagne color | champagne colour")
3956
+ ]
3957
+ }
3958
+ ),
3959
+ mg2620Term(
3960
+ "brass-tone",
3961
+ "Brass",
3962
+ "A yellow metallic look with a slightly brown or green cast, less saturated than gold; it says nothing about the material or how the surface was made.",
3963
+ {
3964
+ related: related("material.brass", "finish.treatment.brass"),
3965
+ searchedWithout: [
3966
+ mg2620SearchedAat("brass | brass color | brass (color)"),
3967
+ mg2620SearchedWikidata(
3968
+ "brass color | brass colour | brass (colour) | yellow brass color"
3969
+ )
3970
+ ]
3971
+ }
3972
+ ),
3973
+ mg2620Term(
3974
+ "rose-gold",
3975
+ "Rose gold",
3976
+ "A gold metallic look with a pink to red cast; it says nothing about the material or how the surface was made.",
3977
+ {
3978
+ altLabels: ["pink gold"],
3979
+ external: [mapping("wikidata", "Q100135995", "rose gold", "close")],
3980
+ searchedWithout: [mg2620SearchedAat("rose gold | rose | pink gold")]
3981
+ }
3982
+ ),
3983
+ mg2620Term(
3984
+ "copper",
3985
+ "Copper",
3986
+ "An orange-red to reddish-brown metallic look; it says nothing about the material or how the surface was made.",
3987
+ {
3988
+ external: [
3989
+ mapping("aat", "300311190", "copper (color)", "close"),
3990
+ mapping("wikidata", "Q2722041", "copper", "close")
3991
+ ]
3992
+ }
3993
+ ),
3994
+ mg2620Term(
3995
+ "bronze",
3996
+ "Bronze",
3997
+ "A warm brown metallic look, mid to dark, reaching near black-brown in oil-rubbed bronze; it says nothing about the material or how the surface was made.",
3998
+ {
3999
+ altLabels: ["oil-rubbed bronze", "antique bronze"],
4000
+ external: [
4001
+ mapping("aat", "300311355", "bronze (color)", "close"),
4002
+ mapping("wikidata", "Q2778382", "bronze", "close")
4003
+ ]
4004
+ }
4005
+ ),
4006
+ mg2620Term(
4007
+ "gunmetal",
4008
+ "Gunmetal",
4009
+ "A dark grey metallic look with a cool cast, darker than pewter and lighter than black; it says nothing about the material or how the surface was made.",
4010
+ {
4011
+ altLabels: ["graphite", "dark zinc", "antique iron"],
4012
+ external: [mapping("wikidata", "Q130307360", "gunmetal", "close")],
4013
+ searchedWithout: [
4014
+ mg2620SearchedAat("gunmetal | gun metal | steel gray | pewter")
4015
+ ]
4016
+ }
4017
+ ),
4018
+ mg2620Term(
4019
+ "black",
4020
+ "Black",
4021
+ "A near-black metallic look, satin to bright; it says nothing about the material or how the surface was made. A flat black coating with no metal look is not this tone.",
4022
+ {
4023
+ altLabels: ["black chrome", "black nickel"],
4024
+ searchedWithout: [
4025
+ mg2620SearchedAat("matte black | black (color) | matte"),
4026
+ mg2620SearchedWikidata("matte black")
4027
+ ]
4028
+ }
4029
+ )
4030
+ ];
4031
+ var EDGE_TERMS = [
4032
+ mg2620Term(
4033
+ "rectified",
4034
+ "Rectified",
4035
+ "Ground on every edge after firing or cutting so each unit is dimensionally exact and the units can be laid with a narrow joint.",
4036
+ {
4037
+ altLabels: ["rectified edge"],
4038
+ searchedWithout: [
4039
+ mg2620SearchedAat("rectified"),
4040
+ mg2620SearchedWikidata("rectified tile | rectified porcelain")
4041
+ ]
4042
+ }
4043
+ ),
4044
+ mg2620Term(
4045
+ "pressed",
4046
+ "Pressed",
4047
+ "Left with the edge it had as it came from the press or kiln, slightly softened and less exact than a rectified edge.",
4048
+ {
4049
+ altLabels: ["pressed edge", "cushion edge", "non-rectified"],
4050
+ searchedWithout: [
4051
+ mg2620SearchedAat("pressed edge | cushion edge | cushion"),
4052
+ mg2620SearchedWikidata("pressed edge tile | cushion edge")
4053
+ ]
4054
+ }
4055
+ ),
4056
+ mg2620Term(
4057
+ "square",
4058
+ "Square",
4059
+ "A sharp edge meeting the face at a right angle, so neighbouring units form a flush, continuous surface.",
4060
+ {
4061
+ altLabels: ["square edge"],
4062
+ searchedWithout: [
4063
+ mg2620SearchedAat("square edge"),
4064
+ mg2620SearchedWikidata("square edge")
4065
+ ]
4066
+ }
4067
+ ),
4068
+ mg2620Term(
4069
+ "eased",
4070
+ "Eased",
4071
+ "A square edge with its arris lightly rounded or sanded off, so the joint shows as a faint line.",
4072
+ {
4073
+ altLabels: ["eased edge", "softened edge", "softened"],
4074
+ searchedWithout: [
4075
+ mg2620SearchedAat("eased edge | arris"),
4076
+ mg2620SearchedWikidata("eased edge | arris")
4077
+ ]
4078
+ }
4079
+ ),
4080
+ mg2620Term(
4081
+ "bevelled",
4082
+ "Bevelled",
4083
+ "An edge cut back at an angle so neighbouring units meet in a visible V-groove.",
4084
+ {
4085
+ altLabels: [
4086
+ "beveled",
4087
+ "bevel",
4088
+ "chamfered",
4089
+ "chamfer",
4090
+ "4-sided bevel",
4091
+ "four-sided bevel"
4092
+ ],
4093
+ external: [
4094
+ mapping("aat", "300053102", "beveling", "related"),
4095
+ mapping("wikidata", "Q1903785", "bevel", "close"),
4096
+ mapping("wikidata", "Q1397389", "chamfer", "close")
4097
+ ]
4098
+ }
4099
+ ),
4100
+ mg2620Term(
4101
+ "micro-bevelled",
4102
+ "Micro-bevelled",
4103
+ "A bevel so small that the joint reads as a fine line rather than a groove.",
4104
+ {
4105
+ altLabels: ["micro-beveled", "micro bevel", "microbevel"],
4106
+ broaderSlug: "bevelled",
4107
+ external: [
4108
+ mapping("aat", "300053102", "beveling", "related"),
4109
+ mapping("wikidata", "Q1903785", "bevel", "broad")
4110
+ ]
4111
+ }
4112
+ )
4113
+ ];
4114
+ var MG2620_FINISH_FACETS = [
4115
+ {
4116
+ governance: MG2620_LIFECYCLE,
4117
+ holds: "several",
4118
+ label: "Metallic tone",
4119
+ slug: "metallic-tone",
4120
+ terms: METALLIC_TONE_TERMS
4121
+ },
4122
+ {
4123
+ governance: MG2620_LIFECYCLE,
4124
+ holds: "several",
4125
+ label: "Edge",
4126
+ slug: "edge",
4127
+ terms: EDGE_TERMS
4128
+ }
4129
+ ];
4130
+
3773
4131
  // src/axes/finish.ts
3774
4132
  var TEXTURED_TARGET = "finish.texture.textured";
3775
4133
  var TUMBLE_FINISHING = "tumble finishing";
@@ -4102,9 +4460,12 @@ var FINISH_TREATMENT_TERMS = [
4102
4460
  "Antiqued",
4103
4461
  "Deliberately finished to give a new surface the look of age, by wear, color change or patination; the term names the result, not one process.",
4104
4462
  {
4463
+ altLabels: ["aged"],
4105
4464
  note: "Widened 2026-10-02: the definition no longer lists the processes, and covers any means of giving the look of age."
4106
4465
  }
4107
4466
  ),
4467
+ // MG-2620, 2026-10-23: AAT's antiquing is the process this result names, read on its record page.
4468
+ external: [mapping("aat", "300053800", "antiquing", "close")],
4108
4469
  searchedWithout: [searchedUniclass3("antiquing")]
4109
4470
  },
4110
4471
  {
@@ -4143,7 +4504,8 @@ var FINISH_TREATMENT_TERMS = [
4143
4504
  mapping("wikidata", "Q445063", POWDER_COATING, "close")
4144
4505
  ]
4145
4506
  }
4146
- )
4507
+ ),
4508
+ ...MG2620_TREATMENT_TERMS
4147
4509
  ];
4148
4510
  var FINISH_SHEEN_TERMS = [
4149
4511
  {
@@ -4272,6 +4634,157 @@ var SEARCH_CORPUS_SNAPSHOT = "2026-07-31";
4272
4634
  var SEARCH_CORPUS = "a search benchmark in a materials-retrieval system (src-05)";
4273
4635
  var searchCorpusEvidence = (phrases) => `${SEARCH_CORPUS} (244-query external search corpus; phrase and admission evidence: ${phrases}; canonical boundary authored by Taxonomy)`;
4274
4636
 
4637
+ // src/axes/mg2620-format.ts
4638
+ var related2 = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
4639
+ var MG2620_FORMAT_TERMS = [
4640
+ mg2620Term(
4641
+ "trim-tile",
4642
+ "Trim tile",
4643
+ "A shaped tile supplied to finish an installation rather than to fill it, at an edge, a corner, a base or a band, as against the field tile laid across the surface.",
4644
+ {
4645
+ altLabels: ["trim piece", "trim unit", "tile trim"],
4646
+ broaderSlug: "tile",
4647
+ external: [
4648
+ mapping("wikidata", "Q138307700", "edge protection profile", "related")
4649
+ ],
4650
+ searchedWithout: [mg2620SearchedAat("trim tile | tile trim | trim")]
4651
+ }
4652
+ ),
4653
+ mg2620Term(
4654
+ "bullnose",
4655
+ "Bullnose",
4656
+ "A trim tile with one edge, or two adjacent edges, rounded and finished to close an exposed end of a tiled surface.",
4657
+ {
4658
+ altLabels: [
4659
+ "round edge",
4660
+ "bullnose tile",
4661
+ "double bullnose",
4662
+ "surface bullnose"
4663
+ ],
4664
+ broaderSlug: "trim-tile",
4665
+ external: [
4666
+ mapping("aat", "300010470", "bullnose brick", "related"),
4667
+ mapping("wikidata", "Q4996969", "Bullnose", "close")
4668
+ ]
4669
+ }
4670
+ ),
4671
+ mg2620Term(
4672
+ "cove",
4673
+ "Cove",
4674
+ "A trim tile with a concave curve along one edge, used where floor meets wall or to turn an inside corner without a sharp joint.",
4675
+ {
4676
+ altLabels: ["cove tile", "coving tile"],
4677
+ broaderSlug: "trim-tile",
4678
+ external: [mapping("aat", "300003513", "cavetto moldings", "related")],
4679
+ searchedWithout: [
4680
+ mg2620SearchedWikidata("cove tile | cove molding | coving")
4681
+ ]
4682
+ }
4683
+ ),
4684
+ mg2620Term(
4685
+ "cove-base",
4686
+ "Cove base",
4687
+ "A trim tile laid as the single course above a floor, curved concave where it meets the floor and finished along its top, so the junction can be cleaned.",
4688
+ {
4689
+ altLabels: [
4690
+ "sanitary cove",
4691
+ "sanitary base",
4692
+ "tile base",
4693
+ "cove skirting"
4694
+ ],
4695
+ broaderSlug: "trim-tile",
4696
+ external: [
4697
+ mapping("aat", "300002681", "baseboards", "broad"),
4698
+ mapping("wikidata", "Q1630557", "baseboard", "broad")
4699
+ ],
4700
+ related: related2("element.skirting")
4701
+ }
4702
+ ),
4703
+ mg2620Term(
4704
+ "quarter-round",
4705
+ "Quarter round",
4706
+ "A narrow trim tile whose section is a quarter of a circle, used to finish an internal angle or an edge.",
4707
+ {
4708
+ altLabels: ["quadrant", "quarter-round trim"],
4709
+ broaderSlug: "trim-tile",
4710
+ external: [
4711
+ mapping("aat", "300003546", "quarter rounds", "close"),
4712
+ mapping("wikidata", "Q7269270", "quarter round", "close")
4713
+ ]
4714
+ }
4715
+ ),
4716
+ mg2620Term(
4717
+ "liner",
4718
+ "Liner",
4719
+ "A narrow decorative strip tile laid as a band or border within or around a field.",
4720
+ {
4721
+ altLabels: ["listello", "listel", "border tile", "liner tile"],
4722
+ broaderSlug: "trim-tile",
4723
+ external: [mapping("aat", "300003526", "fillets (moldings)", "related")],
4724
+ searchedWithout: [mg2620SearchedWikidata("listello | tile liner")]
4725
+ }
4726
+ ),
4727
+ mg2620Term(
4728
+ "pencil-liner",
4729
+ "Pencil liner",
4730
+ "A very slender, rounded liner about a pencil's width, laid as a fine line between areas of tile.",
4731
+ {
4732
+ altLabels: ["pencil tile", "pencil trim"],
4733
+ broaderSlug: "liner",
4734
+ searchedWithout: [
4735
+ mg2620SearchedAat("pencil"),
4736
+ mg2620SearchedWikidata("pencil liner tile")
4737
+ ]
4738
+ }
4739
+ ),
4740
+ mg2620Term(
4741
+ "jolly",
4742
+ "Jolly",
4743
+ "A narrow, straight ceramic trim tile with a square face and an angled back, finishing a raw tile edge or an outside corner without rounding it.",
4744
+ {
4745
+ altLabels: ["jolly trim tile", "jolly edge"],
4746
+ broaderSlug: "trim-tile",
4747
+ external: [
4748
+ mapping("wikidata", "Q138307700", "edge protection profile", "broad")
4749
+ ],
4750
+ note: "The metal edge profile sold under the same name is a different product, not a tile, and is not this term.",
4751
+ searchedWithout: [mg2620SearchedAat("jolly")]
4752
+ }
4753
+ ),
4754
+ mg2620Term(
4755
+ "gauged-porcelain-tile",
4756
+ "Gauged porcelain tile",
4757
+ "A porcelain tile made to a specified thin gauge, from about 3.5 to 6.5 mm as ANSI A137.3 sets it out; the claim is the thickness, not the size.",
4758
+ {
4759
+ altLabels: ["gauged tile", "gauged porcelain", "thin porcelain tile"],
4760
+ broaderSlug: "tile",
4761
+ external: [
4762
+ mapping("aat", "300010678", "ceramic tile", "broad"),
4763
+ mapping("wikidata", "Q55654686", "ceramic tile", "broad")
4764
+ ]
4765
+ }
4766
+ ),
4767
+ mg2620Term(
4768
+ "gauged-porcelain-panel",
4769
+ "Gauged porcelain panel",
4770
+ "A gauged porcelain tile of one square metre or more in face area, supplied as a panel or slab.",
4771
+ {
4772
+ altLabels: [
4773
+ "gauged porcelain slab",
4774
+ "porcelain panel",
4775
+ "porcelain slab",
4776
+ "thin porcelain panel"
4777
+ ],
4778
+ broaderSlug: "gauged-porcelain-tile",
4779
+ related: related2("format.slab"),
4780
+ searchedWithout: [
4781
+ mg2620SearchedAat("porcelain | slab"),
4782
+ mg2620SearchedWikidata("porcelain slab | porcelain stoneware")
4783
+ ]
4784
+ }
4785
+ )
4786
+ ];
4787
+
4275
4788
  // src/axes/format.ts
4276
4789
  var SOURCE2 = "format vocabulary in a furnishings retailer (src-03)";
4277
4790
  var SNAPSHOT2 = "2026-08-25";
@@ -4552,7 +5065,8 @@ var FORMAT_TERMS = [
4552
5065
  ),
4553
5066
  broaderSlug: "plank",
4554
5067
  searchedWithout: [searchedUniclass3("wide plank flooring")]
4555
- }
5068
+ },
5069
+ ...MG2620_FORMAT_TERMS
4556
5070
  ];
4557
5071
 
4558
5072
  // src/axes/certification.ts
@@ -11468,50 +11982,467 @@ var MATERIAL_TERMS = [
11468
11982
  ...MATERIAL_ENGINEERED_WOOD_TERMS
11469
11983
  ];
11470
11984
 
11471
- // src/axes/mood.ts
11472
- var SNAPSHOT4 = "2026-08-21";
11473
- var MS_MOOD = "ms_mood, a mood dictionary in a materials-retrieval system (src-05)";
11474
- var ADR = "@instruments/taxonomy ADR 0001";
11475
- var aat5 = (identifier, label, match) => ({ identifier, label, match, scheme: "aat" });
11476
- var relatedTo10 = (target) => ({
11477
- predicate: "related-to",
11478
- target
11479
- });
11480
- var MOOD_TERMS = [
11481
- {
11482
- definition: "Weighted and settled; the room reads as resting on the earth rather than floating.",
11483
- label: "Grounded",
11484
- provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
11485
- searchedWithout: [
11486
- {
11487
- date: SEARCHED_ON,
11488
- query: "grounded",
11489
- scheme: "aat",
11490
- via: GETTY_SPARQL
11491
- }
11492
- ],
11493
- slug: "grounded"
11494
- },
11495
- {
11496
- altLabels: ["serene", "tranquil"],
11497
- definition: "Low stimulus; nothing in the room asks for attention.",
11498
- label: "Calm",
11499
- provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
11500
- searchedWithout: [
11501
- {
11502
- date: SEARCHED_ON,
11503
- query: "calm OR serene OR tranquil",
11504
- scheme: "aat",
11505
- via: GETTY_SPARQL
11506
- }
11507
- ],
11508
- slug: "calm"
11509
- },
11510
- {
11511
- definition: "Edges, light and contrast all diffused rather than sharp.",
11512
- label: "Soft",
11513
- provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
11514
- searchedWithout: [
11985
+ // src/axes/mg2620-terms.ts
11986
+ var related3 = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
11987
+ var CHARACTER_EXPRESSION_TERMS = [
11988
+ mg2620Term(
11989
+ "quiet",
11990
+ "Quiet",
11991
+ "Described as reading with almost no incident: an even surface, little contrast and no visible pattern.",
11992
+ {
11993
+ searchedWithout: [
11994
+ mg2620SearchedAat("quiet"),
11995
+ mg2620SearchedWikidata("quiet design")
11996
+ ]
11997
+ }
11998
+ ),
11999
+ mg2620Term(
12000
+ "restrained",
12001
+ "Restrained",
12002
+ "Described as carrying texture or pattern that is held back: visible up close, muted at a distance.",
12003
+ {
12004
+ searchedWithout: [
12005
+ mg2620SearchedAat("restrained | restraint"),
12006
+ mg2620SearchedWikidata("restrained design")
12007
+ ]
12008
+ }
12009
+ ),
12010
+ mg2620Term(
12011
+ "expressive",
12012
+ "Expressive",
12013
+ "Described as carrying pattern, figure or texture that is meant to be noticed.",
12014
+ {
12015
+ searchedWithout: [
12016
+ mg2620SearchedAat("expressive"),
12017
+ mg2620SearchedWikidata("expressive")
12018
+ ]
12019
+ }
12020
+ ),
12021
+ mg2620Term(
12022
+ "bold",
12023
+ "Bold",
12024
+ "Described as dominating at first glance through strong contrast, saturated colour or large-scale pattern.",
12025
+ {
12026
+ searchedWithout: [
12027
+ mg2620SearchedAat("bold"),
12028
+ mg2620SearchedWikidata("bold design")
12029
+ ]
12030
+ }
12031
+ )
12032
+ ];
12033
+ var CHARACTER_MAKING_TERMS = [
12034
+ mg2620Term(
12035
+ "refined",
12036
+ "Refined",
12037
+ "Described as precisely made: crisp edges, an even face and no marks of hand or tool.",
12038
+ {
12039
+ searchedWithout: [
12040
+ mg2620SearchedAat("refined | refinement"),
12041
+ mg2620SearchedWikidata("refined")
12042
+ ]
12043
+ }
12044
+ ),
12045
+ mg2620Term(
12046
+ "crafted",
12047
+ "Crafted",
12048
+ "Described as showing the hand that made it: tool marks, hand-applied texture or slight irregularity within a controlled piece.",
12049
+ {
12050
+ altLabels: ["handcrafted", "hand-crafted"],
12051
+ external: [
12052
+ mapping("aat", "300191818", "handmade", "related"),
12053
+ mapping("wikidata", "Q877729", "handicraft", "related")
12054
+ ]
12055
+ }
12056
+ ),
12057
+ mg2620Term(
12058
+ "rustic",
12059
+ "Rustic",
12060
+ "Described as roughly made or roughly finished: irregular faces, softened or broken edges and strong variation from piece to piece. The material's reading, not the style.",
12061
+ {
12062
+ external: [mapping("aat", "300310541", "rustic (style)", "related")],
12063
+ related: related3("style.rustic"),
12064
+ searchedWithout: [mg2620SearchedWikidata("rustic")]
12065
+ }
12066
+ )
12067
+ ];
12068
+ var CHARACTER_REGISTER_TERMS = [
12069
+ mg2620Term(
12070
+ "formal",
12071
+ "Formal",
12072
+ "Described as suited to formal settings: composed, symmetrical, polished or ornamented.",
12073
+ {
12074
+ searchedWithout: [
12075
+ mg2620SearchedAat("formal"),
12076
+ mg2620SearchedWikidata("formal style interior")
12077
+ ]
12078
+ }
12079
+ ),
12080
+ mg2620Term(
12081
+ "casual",
12082
+ "Casual",
12083
+ "Described as suited to relaxed settings: soft-edged, matte, irregular or informal in arrangement.",
12084
+ {
12085
+ searchedWithout: [
12086
+ mg2620SearchedAat("casual"),
12087
+ mg2620SearchedWikidata("casual style")
12088
+ ]
12089
+ }
12090
+ )
12091
+ ];
12092
+ var CHARACTER_ORIGIN_LOOK_TERMS = [
12093
+ mg2620Term(
12094
+ "natural",
12095
+ "Natural",
12096
+ "Described as looking natural: the non-repeating grain, veining or fibre of an organic or geological source. A claim about the look, never about composition; a printed laminate can look natural.",
12097
+ {
12098
+ altLabels: ["natural-looking"],
12099
+ external: [
12100
+ mapping("aat", "300219527", "natural", "related"),
12101
+ mapping("wikidata", "Q2451477", "natural material", "related")
12102
+ ]
12103
+ }
12104
+ ),
12105
+ mg2620Term(
12106
+ "synthetic",
12107
+ "Synthetic",
12108
+ "Described as looking manufactured: an exact repeat, an even colour no natural source gives, or a flawless sheen. A claim about the look, never about composition.",
12109
+ {
12110
+ altLabels: ["synthetic-looking", "man-made look"],
12111
+ external: [
12112
+ mapping("aat", "300218678", "synthetic", "related"),
12113
+ mapping("wikidata", "Q3300022", "synthetic material", "related")
12114
+ ]
12115
+ }
12116
+ )
12117
+ ];
12118
+ var CHARACTER_FEEL_TERMS = [
12119
+ mg2620Term(
12120
+ "soft",
12121
+ "Soft",
12122
+ "Described as soft to the touch: yielding, with pile, nap or give.",
12123
+ {
12124
+ external: [mapping("wikidata", "Q12894628", "softness", "related")],
12125
+ searchedWithout: [mg2620SearchedAat("soft | softness | tactile")]
12126
+ }
12127
+ ),
12128
+ mg2620Term(
12129
+ "hard",
12130
+ "Hard",
12131
+ "Described as hard to the touch: rigid and unyielding under the hand.",
12132
+ {
12133
+ external: [
12134
+ mapping("aat", "300072602", "hardness", "related"),
12135
+ mapping("wikidata", "Q3236003", "hardness", "related")
12136
+ ]
12137
+ }
12138
+ )
12139
+ ];
12140
+ var PRODUCT_SHAPE_OUTLINE_TERMS = [
12141
+ mg2620Term(
12142
+ "rectilinear",
12143
+ "Rectilinear",
12144
+ "Drawn in straight lines that meet mostly at right angles.",
12145
+ {
12146
+ altLabels: ["straight-lined"],
12147
+ searchedWithout: [
12148
+ mg2620SearchedAat("rectilinear | rectangular | straight"),
12149
+ mg2620SearchedWikidata("rectilinear")
12150
+ ]
12151
+ }
12152
+ ),
12153
+ mg2620Term(
12154
+ "curved",
12155
+ "Curved",
12156
+ "Drawn mainly in smooth curves, with no sharp angles.",
12157
+ {
12158
+ altLabels: ["curvilinear", "rounded"],
12159
+ external: [
12160
+ mapping("aat", "300154222", "curvilinear (shape)", "close"),
12161
+ mapping("wikidata", "Q107426401", "curvilinear", "close")
12162
+ ]
12163
+ }
12164
+ ),
12165
+ mg2620Term(
12166
+ "faceted",
12167
+ "Faceted",
12168
+ "Made of flat planes meeting at angles other than a right angle, as a cut stone is.",
12169
+ {
12170
+ external: [
12171
+ mapping("aat", "300236211", "faceting", "related"),
12172
+ mapping("wikidata", "Q99578669", "facet cutting", "related")
12173
+ ]
12174
+ }
12175
+ )
12176
+ ];
12177
+ var PRODUCT_SHAPE_REGULARITY_TERMS = [
12178
+ mg2620Term(
12179
+ "geometric",
12180
+ "Geometric",
12181
+ "Built from regular, recognisable figures: circle, square, triangle, polygon, sphere or cube.",
12182
+ {
12183
+ external: [
12184
+ mapping("aat", "300263819", "geometric shape", "close"),
12185
+ mapping("wikidata", "Q815741", "geometric shape", "broad")
12186
+ ]
12187
+ }
12188
+ ),
12189
+ mg2620Term(
12190
+ "organic",
12191
+ "Organic",
12192
+ "Irregular, asymmetric and free, following no regular figure, as a pebble or a growing thing does.",
12193
+ {
12194
+ altLabels: ["biomorphic", "freeform"],
12195
+ external: [
12196
+ mapping("aat", "300069065", "biomorphic abstraction", "related"),
12197
+ mapping("wikidata", "Q864599", "Biomorphism", "related")
12198
+ ]
12199
+ }
12200
+ )
12201
+ ];
12202
+ var PRODUCT_SHAPE_PROPORTION_TERMS = [
12203
+ mg2620Term(
12204
+ "linear",
12205
+ "Linear",
12206
+ "Much longer in one direction than in the others, so it reads as a line.",
12207
+ {
12208
+ altLabels: ["elongated"],
12209
+ external: [mapping("aat", "300234452", "linear forms", "related")],
12210
+ searchedWithout: [mg2620SearchedWikidata("linear shape")]
12211
+ }
12212
+ ),
12213
+ mg2620Term(
12214
+ "slender",
12215
+ "Slender",
12216
+ "Thin in section for its height or length, so it reads as light and fine.",
12217
+ {
12218
+ altLabels: ["slim", "slim profile"],
12219
+ searchedWithout: [
12220
+ mg2620SearchedAat("slender | slim | attenuated"),
12221
+ mg2620SearchedWikidata("slender | slank")
12222
+ ]
12223
+ }
12224
+ )
12225
+ ];
12226
+ var LIGHT_TRANSMISSION_TERMS = [
12227
+ mg2620Term(
12228
+ "transparent",
12229
+ "Transparent",
12230
+ "Lets light through with little scattering, so objects behind it are seen clearly.",
12231
+ {
12232
+ external: [
12233
+ mapping("aat", "300056220", "transparency (optical property)", "close"),
12234
+ mapping("wikidata", "Q487623", "transparency", "close")
12235
+ ]
12236
+ }
12237
+ ),
12238
+ mg2620Term(
12239
+ "translucent",
12240
+ "Translucent",
12241
+ "Lets light through but scatters it, so objects behind it are seen indistinctly or only as shapes.",
12242
+ {
12243
+ altLabels: ["semi-transparent", "frosted", "diffusing"],
12244
+ external: [
12245
+ mapping("aat", "300056219", "translucency", "close"),
12246
+ mapping("wikidata", "Q1259897", "translucency", "close")
12247
+ ]
12248
+ }
12249
+ ),
12250
+ mg2620Term("opaque", "Opaque", "Lets no apparent light through.", {
12251
+ external: [
12252
+ mapping("aat", "300056216", "opacity", "close"),
12253
+ mapping("wikidata", "Q691914", "opacity", "close")
12254
+ ]
12255
+ })
12256
+ ];
12257
+ var LIGHT_CONTROL_TERMS = [
12258
+ mg2620Term(
12259
+ "sheer",
12260
+ "Sheer",
12261
+ "A window covering light enough to see shapes through, giving daytime privacy only.",
12262
+ {
12263
+ altLabels: ["sheers", "voile"],
12264
+ external: [
12265
+ mapping("aat", "300203990", "sheer curtains", "close"),
12266
+ mapping("wikidata", "Q7492502", "sheer fabric", "close")
12267
+ ],
12268
+ related: related3("light-transmission.transmission.translucent")
12269
+ }
12270
+ ),
12271
+ mg2620Term(
12272
+ "room-darkening",
12273
+ "Room-darkening",
12274
+ "A window covering that blocks most of the light through the fabric, leaving the room dim with some light at the edges.",
12275
+ {
12276
+ altLabels: ["room darkening", "dim-out"],
12277
+ searchedWithout: [
12278
+ mg2620SearchedAat("room-darkening | darkening"),
12279
+ mg2620SearchedWikidata("room darkening")
12280
+ ]
12281
+ }
12282
+ ),
12283
+ mg2620Term(
12284
+ "blackout",
12285
+ "Blackout",
12286
+ "A window covering made, by its weave, lining or coating, to stop light passing through the fabric itself.",
12287
+ {
12288
+ altLabels: ["black-out", "blackout lining"],
12289
+ external: [mapping("wikidata", "Q4923213", "blackout", "close")],
12290
+ related: related3("light-transmission.transmission.opaque"),
12291
+ searchedWithout: [mg2620SearchedAat("blackout | curtain")]
12292
+ }
12293
+ )
12294
+ ];
12295
+
12296
+ // src/axes/mg2620-axes.ts
12297
+ var CHARACTER_AXIS = {
12298
+ boundary: "Character is how a material or product is described as reading, as a listing or a search states it: its expression, its making, its register, whether it looks natural or manufactured, and whether it is soft or hard to the touch. Every value is a stated claim and never a judgement taken from a photograph. It is not Mood, which is how a room reads: a material can be expressive in a calm room. It is not Style, not Finish, which is how the surface was produced, and not Material: a natural look says nothing about composition.",
12299
+ facets: [
12300
+ {
12301
+ governance: MG2620_LIFECYCLE,
12302
+ holds: "one",
12303
+ label: "Expression",
12304
+ slug: "expression",
12305
+ terms: CHARACTER_EXPRESSION_TERMS
12306
+ },
12307
+ {
12308
+ governance: MG2620_LIFECYCLE,
12309
+ holds: "one",
12310
+ label: "Making",
12311
+ slug: "making",
12312
+ terms: CHARACTER_MAKING_TERMS
12313
+ },
12314
+ {
12315
+ governance: MG2620_LIFECYCLE,
12316
+ holds: "one",
12317
+ label: "Register",
12318
+ slug: "register",
12319
+ terms: CHARACTER_REGISTER_TERMS
12320
+ },
12321
+ {
12322
+ governance: MG2620_LIFECYCLE,
12323
+ holds: "one",
12324
+ label: "Origin look",
12325
+ slug: "origin-look",
12326
+ terms: CHARACTER_ORIGIN_LOOK_TERMS
12327
+ },
12328
+ {
12329
+ governance: MG2620_LIFECYCLE,
12330
+ holds: "one",
12331
+ label: "Feel",
12332
+ slug: "feel",
12333
+ terms: CHARACTER_FEEL_TERMS
12334
+ }
12335
+ ],
12336
+ governance: MG2620_LIFECYCLE,
12337
+ label: "Character",
12338
+ question: "How is it described as reading?",
12339
+ slug: "character",
12340
+ status: "authored"
12341
+ };
12342
+ var LIGHT_TRANSMISSION_AXIS = {
12343
+ boundary: "Light transmission is how light passes through a material or product: whether objects can be seen through it, and for window coverings the light-control class they are sold under. It is not Daylight, which is the light a room receives; not Finish sheen, which is how much a surface reflects; and not Material. The light-control classes are supplier usage, set from catalogue data and never from a photograph, and an openness percentage is a measured value, not a term.",
12344
+ facets: [
12345
+ {
12346
+ governance: MG2620_LIFECYCLE,
12347
+ holds: "one",
12348
+ label: "Transmission",
12349
+ slug: "transmission",
12350
+ terms: LIGHT_TRANSMISSION_TERMS
12351
+ },
12352
+ {
12353
+ governance: MG2620_LIFECYCLE,
12354
+ holds: "several",
12355
+ label: "Light control",
12356
+ slug: "light-control",
12357
+ terms: LIGHT_CONTROL_TERMS
12358
+ }
12359
+ ],
12360
+ governance: MG2620_LIFECYCLE,
12361
+ label: "Light transmission",
12362
+ question: "How does light pass through it?",
12363
+ slug: "light-transmission",
12364
+ status: "authored"
12365
+ };
12366
+ var PRODUCT_SHAPE_AXIS = {
12367
+ boundary: "Product shape is the overall shape of a three-dimensional object: the lines it is drawn in, whether it follows regular figures, and how it is proportioned. It is not Unit shape, which names the flat outline of one tile, paver or panel laid among others; not Form, which asks what move a building makes; not Pattern, which is what a surface carries; and not Finish texture, where fluting and ribbing are relief.",
12368
+ facets: [
12369
+ {
12370
+ governance: MG2620_LIFECYCLE,
12371
+ holds: "several",
12372
+ label: "Outline",
12373
+ slug: "outline",
12374
+ terms: PRODUCT_SHAPE_OUTLINE_TERMS
12375
+ },
12376
+ {
12377
+ governance: MG2620_LIFECYCLE,
12378
+ holds: "one",
12379
+ label: "Regularity",
12380
+ slug: "regularity",
12381
+ terms: PRODUCT_SHAPE_REGULARITY_TERMS
12382
+ },
12383
+ {
12384
+ governance: MG2620_LIFECYCLE,
12385
+ holds: "several",
12386
+ label: "Proportion",
12387
+ slug: "proportion",
12388
+ terms: PRODUCT_SHAPE_PROPORTION_TERMS
12389
+ }
12390
+ ],
12391
+ governance: MG2620_LIFECYCLE,
12392
+ label: "Product shape",
12393
+ question: "What shape is the object?",
12394
+ slug: "product-shape",
12395
+ status: "authored"
12396
+ };
12397
+ var SURFACE_READING_AXES = [
12398
+ CHARACTER_AXIS,
12399
+ LIGHT_TRANSMISSION_AXIS
12400
+ ];
12401
+
12402
+ // src/axes/mood.ts
12403
+ var SNAPSHOT4 = "2026-08-21";
12404
+ var MS_MOOD = "ms_mood, a mood dictionary in a materials-retrieval system (src-05)";
12405
+ var ADR = "@instruments/taxonomy ADR 0001";
12406
+ var aat5 = (identifier, label, match) => ({ identifier, label, match, scheme: "aat" });
12407
+ var relatedTo10 = (target) => ({
12408
+ predicate: "related-to",
12409
+ target
12410
+ });
12411
+ var MOOD_TERMS = [
12412
+ {
12413
+ definition: "Weighted and settled; the room reads as resting on the earth rather than floating.",
12414
+ label: "Grounded",
12415
+ provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
12416
+ searchedWithout: [
12417
+ {
12418
+ date: SEARCHED_ON,
12419
+ query: "grounded",
12420
+ scheme: "aat",
12421
+ via: GETTY_SPARQL
12422
+ }
12423
+ ],
12424
+ slug: "grounded"
12425
+ },
12426
+ {
12427
+ altLabels: ["serene", "tranquil"],
12428
+ definition: "Low stimulus; nothing in the room asks for attention.",
12429
+ label: "Calm",
12430
+ provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
12431
+ searchedWithout: [
12432
+ {
12433
+ date: SEARCHED_ON,
12434
+ query: "calm OR serene OR tranquil",
12435
+ scheme: "aat",
12436
+ via: GETTY_SPARQL
12437
+ }
12438
+ ],
12439
+ slug: "calm"
12440
+ },
12441
+ {
12442
+ definition: "Edges, light and contrast all diffused rather than sharp.",
12443
+ label: "Soft",
12444
+ provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
12445
+ searchedWithout: [
11515
12446
  {
11516
12447
  date: SEARCHED_ON,
11517
12448
  query: "soft",
@@ -11687,407 +12618,444 @@ var MOOD_TERMS = [
11687
12618
  provenance: { basis: "authored", source: ADR },
11688
12619
  related: [{ predicate: "related-to", target: "tier.market.luxury" }],
11689
12620
  searchedWithout: [
11690
- {
11691
- date: SEARCHED_ON,
11692
- query: "luxurious",
11693
- scheme: "aat",
11694
- via: GETTY_SPARQL
11695
- }
11696
- ],
11697
- slug: "luxurious"
11698
- },
11699
- {
11700
- definition: "Composed to be photographed; the room reads as an image before a place.",
11701
- label: "Editorial",
11702
- provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
11703
- searchedWithout: [
11704
- {
11705
- date: SEARCHED_ON,
11706
- query: "editorial",
11707
- scheme: "aat",
11708
- via: GETTY_SPARQL
11709
- }
11710
- ],
11711
- slug: "editorial"
11712
- },
11713
- {
11714
- definition: "Lived-in and unstaged; evidence of ordinary use is present and welcome.",
11715
- label: "Domestic",
11716
- provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
11717
- searchedWithout: [
11718
- {
11719
- date: SEARCHED_ON,
11720
- query: "domestic",
11721
- scheme: "aat",
11722
- via: GETTY_SPARQL
11723
- }
11724
- ],
11725
- slug: "domestic"
11726
- },
11727
- {
11728
- definition: "Scaled past the body; the room addresses an institution rather than a person.",
11729
- external: [aat5("300073760", "monumental (size or dimensions)", "close")],
11730
- label: "Monumental",
11731
- provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
11732
- slug: "monumental"
11733
- }
11734
- ];
11735
-
11736
- // src/axes/palette.ts
11737
- var COLOUR_MOOD = "colour_mood, a mood dictionary in a materials-retrieval system (src-05)";
11738
- var SNAPSHOT5 = "2026-08-21";
11739
- var COLORSCOPE_AUTHORITY_URI = "https://colorscope.materialinstruments.com";
11740
- var PALETTE_MOOD = "palette-mood";
11741
- var colorScopeAuthority = (identifier, referenceKind) => ({
11742
- authority: "colorscope",
11743
- authorityUri: COLORSCOPE_AUTHORITY_URI,
11744
- identifier,
11745
- referenceKind
11746
- });
11747
- var PALETTE_HUE_TERMS = [
11748
- {
11749
- altLabels: ["pure white", "cool white", "soft white"],
11750
- external: [
11751
- {
11752
- identifier: "Q23444",
11753
- label: "white",
11754
- match: "close",
11755
- scheme: "wikidata"
11756
- }
11757
- ],
11758
- label: "White",
11759
- searchedWithout: [searchedUniclass3("White colour")],
11760
- slug: "white"
11761
- },
11762
- {
11763
- altLabels: ["ivory", "warm white", "off-white"],
11764
- external: [
11765
- {
11766
- identifier: "Q2730433",
11767
- label: "cream",
11768
- match: "close",
11769
- scheme: "wikidata"
11770
- }
11771
- ],
11772
- label: "Cream",
11773
- searchedWithout: [searchedUniclass3("Cream colour")],
11774
- slug: "cream"
11775
- },
11776
- {
11777
- altLabels: ["neutral grey", "grey"],
11778
- external: [
11779
- {
11780
- identifier: "Q42519",
11781
- label: "grey",
11782
- match: "close",
11783
- scheme: "wikidata"
11784
- }
11785
- ],
11786
- label: "Grey",
11787
- searchedWithout: [searchedUniclass3("Grey colour")],
11788
- seenAs: ["Gray"],
11789
- slug: "gray"
11790
- },
11791
- {
11792
- altLabels: ["near-black", "ink black", "coal"],
11793
- external: [
11794
- {
11795
- identifier: "Q23445",
11796
- label: "black",
11797
- match: "close",
11798
- scheme: "wikidata"
11799
- }
11800
- ],
11801
- label: "Black",
11802
- searchedWithout: [searchedUniclass3("Black colour")],
11803
- slug: "black"
11804
- },
11805
- {
11806
- altLabels: ["warm neutral", "sand"],
11807
- external: [
11808
- {
11809
- identifier: "Q843607",
11810
- label: "beige",
11811
- match: "close",
11812
- scheme: "wikidata"
11813
- }
11814
- ],
11815
- label: "Beige",
11816
- searchedWithout: [searchedUniclass3("Beige colour")],
11817
- slug: "beige"
11818
- },
11819
- {
11820
- altLabels: ["greige", "mushroom", "putty"],
11821
- external: [
11822
- {
11823
- identifier: "Q2307593",
11824
- label: "taupe",
11825
- match: "close",
11826
- scheme: "wikidata"
11827
- }
11828
- ],
11829
- label: "Taupe",
11830
- searchedWithout: [searchedUniclass3("Taupe colour")],
11831
- slug: "taupe"
11832
- },
11833
- {
11834
- altLabels: ["earth brown", "wood brown", "russet"],
11835
- external: [
11836
- {
11837
- identifier: "Q47071",
11838
- label: "brown",
11839
- match: "close",
11840
- scheme: "wikidata"
11841
- }
11842
- ],
11843
- label: "Brown",
11844
- searchedWithout: [searchedUniclass3("Brown colour")],
11845
- slug: "brown"
11846
- },
11847
- {
11848
- altLabels: ["crimson", "scarlet", "carmine"],
11849
- external: [
11850
- {
11851
- identifier: "Q3142",
11852
- label: "red",
11853
- match: "close",
11854
- scheme: "wikidata"
11855
- }
11856
- ],
11857
- label: "Red",
11858
- searchedWithout: [searchedUniclass3("Red colour")],
11859
- slug: "red"
11860
- },
11861
- {
11862
- altLabels: ["rust"],
11863
- external: [
11864
- {
11865
- identifier: "Q39338",
11866
- label: "orange",
11867
- match: "close",
11868
- scheme: "wikidata"
11869
- }
11870
- ],
11871
- label: "Orange",
11872
- searchedWithout: [searchedUniclass3("Orange colour")],
11873
- slug: "orange"
11874
- },
11875
- {
11876
- altLabels: ["mustard", "ochre"],
11877
- external: [
11878
- {
11879
- identifier: "Q943",
11880
- label: "yellow",
11881
- match: "close",
11882
- scheme: "wikidata"
11883
- }
11884
- ],
11885
- label: "Yellow",
11886
- searchedWithout: [searchedUniclass3("Yellow colour")],
11887
- slug: "yellow"
11888
- },
11889
- {
11890
- altLabels: ["sage", "olive"],
11891
- external: [
11892
- {
11893
- identifier: "Q3133",
11894
- label: "green",
11895
- match: "close",
11896
- scheme: "wikidata"
11897
- }
11898
- ],
11899
- label: "Green",
11900
- searchedWithout: [searchedUniclass3("Green colour")],
11901
- slug: "green"
11902
- },
11903
- {
11904
- altLabels: ["aqua", "turquoise"],
11905
- external: [
11906
- {
11907
- identifier: "Q1078214",
11908
- label: "teal",
11909
- match: "close",
11910
- scheme: "wikidata"
11911
- }
11912
- ],
11913
- label: "Teal",
11914
- searchedWithout: [searchedUniclass3("Teal colour")],
11915
- slug: "teal"
11916
- },
11917
- {
11918
- altLabels: ["navy", "indigo"],
11919
- external: [
11920
- {
11921
- identifier: "Q1088",
11922
- label: "blue",
11923
- match: "close",
11924
- scheme: "wikidata"
12621
+ {
12622
+ date: SEARCHED_ON,
12623
+ query: "luxurious",
12624
+ scheme: "aat",
12625
+ via: GETTY_SPARQL
11925
12626
  }
11926
12627
  ],
11927
- label: "Blue",
11928
- searchedWithout: [searchedUniclass3("Blue colour")],
11929
- slug: "blue"
12628
+ slug: "luxurious"
11930
12629
  },
11931
12630
  {
11932
- altLabels: ["violet", "mauve"],
11933
- external: [
12631
+ definition: "Composed to be photographed; the room reads as an image before a place.",
12632
+ label: "Editorial",
12633
+ provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
12634
+ searchedWithout: [
11934
12635
  {
11935
- identifier: "Q3257809",
11936
- label: "purple",
11937
- match: "close",
11938
- scheme: "wikidata"
12636
+ date: SEARCHED_ON,
12637
+ query: "editorial",
12638
+ scheme: "aat",
12639
+ via: GETTY_SPARQL
11939
12640
  }
11940
12641
  ],
11941
- label: "Purple",
11942
- searchedWithout: [searchedUniclass3("Purple colour")],
11943
- slug: "purple"
12642
+ slug: "editorial"
11944
12643
  },
11945
12644
  {
11946
- altLabels: ["rose", "blush"],
11947
- external: [
12645
+ definition: "Lived-in and unstaged; evidence of ordinary use is present and welcome.",
12646
+ label: "Domestic",
12647
+ provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
12648
+ searchedWithout: [
11948
12649
  {
11949
- identifier: "Q429220",
11950
- label: "pink",
11951
- match: "close",
11952
- scheme: "wikidata"
12650
+ date: SEARCHED_ON,
12651
+ query: "domestic",
12652
+ scheme: "aat",
12653
+ via: GETTY_SPARQL
11953
12654
  }
11954
12655
  ],
11955
- label: "Pink",
11956
- searchedWithout: [searchedUniclass3("Pink colour")],
11957
- slug: "pink"
11958
- }
11959
- ].map((term12) => ({
11960
- ...term12,
11961
- canonicalAuthority: colorScopeAuthority(term12.slug, "color-family"),
11962
- provenance: {
11963
- basis: "vendored",
11964
- snapshot: SNAPSHOT5,
11965
- source: "@instruments/colorscope COLOR_FAMILIES"
11966
- }
11967
- }));
11968
- var PALETTE_TEMPERATURE_TERMS = [
11969
- {
11970
- definition: "Dominant color casts to the warm side of the OKLab warmth axis.",
11971
- label: "Warm",
11972
- searchedWithout: [searchedUniclass3("Warm colour")],
11973
- slug: "warm"
11974
- },
11975
- {
11976
- definition: "Dominant color casts to the cool side of the OKLab warmth axis.",
11977
- label: "Cool",
11978
- searchedWithout: [searchedUniclass3("Cool colour")],
11979
- slug: "cool"
12656
+ slug: "domestic"
11980
12657
  },
11981
12658
  {
11982
- definition: "No decisive cast either way.",
11983
- label: "Neutral",
11984
- searchedWithout: [searchedUniclass3("Neutral colour")],
11985
- slug: "neutral"
11986
- }
11987
- ].map((term12) => ({
11988
- ...term12,
11989
- canonicalAuthority: colorScopeAuthority(term12.slug, "temperature-level"),
11990
- provenance: {
11991
- basis: "vendored",
11992
- snapshot: SNAPSHOT5,
11993
- source: "colour_undertone, an undertone dictionary in a materials-retrieval system (src-05)"
12659
+ definition: "Scaled past the body; the room addresses an institution rather than a person.",
12660
+ external: [aat5("300073760", "monumental (size or dimensions)", "close")],
12661
+ label: "Monumental",
12662
+ provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
12663
+ slug: "monumental"
11994
12664
  }
11995
- }));
12665
+ ];
12666
+
12667
+ // src/axes/palette.generated.ts
12668
+ var COLORSCOPE_VERSION = "10.4.0";
12669
+ var COLOUR_LAYER = {
12670
+ "basic-tone": [
12671
+ {
12672
+ altLabels: [],
12673
+ definition: "High-lightness colors inside a family.",
12674
+ hex: null,
12675
+ id: "light",
12676
+ label: "Light",
12677
+ uri: "https://colorscope.materialinstruments.com/id/basic-tone/light"
12678
+ },
12679
+ {
12680
+ altLabels: [],
12681
+ definition: "Canonical product-facing colors inside a family.",
12682
+ hex: null,
12683
+ id: "mid",
12684
+ label: "Medium",
12685
+ uri: "https://colorscope.materialinstruments.com/id/basic-tone/mid"
12686
+ },
12687
+ {
12688
+ altLabels: [],
12689
+ definition: "Low-lightness colors inside a family.",
12690
+ hex: null,
12691
+ id: "dark",
12692
+ label: "Dark",
12693
+ uri: "https://colorscope.materialinstruments.com/id/basic-tone/dark"
12694
+ },
12695
+ {
12696
+ altLabels: [],
12697
+ definition: "Lower-chroma colors inside a family.",
12698
+ hex: null,
12699
+ id: "muted",
12700
+ label: "Muted",
12701
+ uri: "https://colorscope.materialinstruments.com/id/basic-tone/muted"
12702
+ },
12703
+ {
12704
+ altLabels: [],
12705
+ definition: "Higher-chroma colors inside a family.",
12706
+ hex: null,
12707
+ id: "vivid",
12708
+ label: "Vivid",
12709
+ uri: "https://colorscope.materialinstruments.com/id/basic-tone/vivid"
12710
+ }
12711
+ ],
12712
+ family: [
12713
+ {
12714
+ altLabels: [],
12715
+ definition: "Light neutral colors spanning crisp whites, cool whites, soft chalks, and paper-like off-whites.",
12716
+ hex: "#f3efe6",
12717
+ id: "white",
12718
+ label: "White",
12719
+ uri: "https://colorscope.materialinstruments.com/id/family/white"
12720
+ },
12721
+ {
12722
+ altLabels: [],
12723
+ definition: "Warm white and pale cream colors spanning ivory, linen white, vanilla, eggshell, and softened cream tones.",
12724
+ hex: "#f3ead8",
12725
+ id: "cream",
12726
+ label: "Cream",
12727
+ uri: "https://colorscope.materialinstruments.com/id/family/cream"
12728
+ },
12729
+ {
12730
+ altLabels: ["Grey"],
12731
+ definition: "Cool and warm grays spanning mist, stone, slate, pewter, and architectural neutrals.",
12732
+ hex: "#8c8d8f",
12733
+ id: "gray",
12734
+ label: "Gray",
12735
+ uri: "https://colorscope.materialinstruments.com/id/family/gray"
12736
+ },
12737
+ {
12738
+ altLabels: [],
12739
+ definition: "Near-black and black-led colors with mineral, ink, soot, and shadow character.",
12740
+ hex: "#232425",
12741
+ id: "black",
12742
+ label: "Black",
12743
+ uri: "https://colorscope.materialinstruments.com/id/family/black"
12744
+ },
12745
+ {
12746
+ altLabels: [],
12747
+ definition: "Light warm neutrals built from sand, linen, oat, ecru, and mellow mineral undertones.",
12748
+ hex: "#d1c2a5",
12749
+ id: "beige",
12750
+ label: "Beige",
12751
+ uri: "https://colorscope.materialinstruments.com/id/family/beige"
12752
+ },
12753
+ {
12754
+ altLabels: [],
12755
+ definition: "Grey-brown and mushroom neutrals sitting between beige, brown, and grey.",
12756
+ hex: "#8b7d6b",
12757
+ id: "taupe",
12758
+ label: "Taupe",
12759
+ uri: "https://colorscope.materialinstruments.com/id/family/taupe"
12760
+ },
12761
+ {
12762
+ altLabels: [],
12763
+ definition: "Earth and wood colors spanning bark, spice, soil, cocoa, leather, and dark timber tones.",
12764
+ hex: "#7b5738",
12765
+ id: "brown",
12766
+ label: "Brown",
12767
+ uri: "https://colorscope.materialinstruments.com/id/family/brown"
12768
+ },
12769
+ {
12770
+ altLabels: [],
12771
+ definition: "Red-led colors spanning crimson, vermilion, tomato, signal red, and deep wine hues.",
12772
+ hex: "#b4403f",
12773
+ id: "red",
12774
+ label: "Red",
12775
+ uri: "https://colorscope.materialinstruments.com/id/family/red"
12776
+ },
12777
+ {
12778
+ altLabels: [],
12779
+ definition: "Orange-led colors spanning terracotta, rust, clay, amber, spice, and peel-bright hues.",
12780
+ hex: "#c77448",
12781
+ id: "orange",
12782
+ label: "Orange",
12783
+ uri: "https://colorscope.materialinstruments.com/id/family/orange"
12784
+ },
12785
+ {
12786
+ altLabels: [],
12787
+ definition: "Yellow-led colors ranging from straw and butter tones through gold, citrus, and saffron.",
12788
+ hex: "#d5b468",
12789
+ id: "yellow",
12790
+ label: "Yellow",
12791
+ uri: "https://colorscope.materialinstruments.com/id/family/yellow"
12792
+ },
12793
+ {
12794
+ altLabels: [],
12795
+ definition: "Green-led colors spanning sage, herb, leaf, forest, mint, and botanical families.",
12796
+ hex: "#5c8a57",
12797
+ id: "green",
12798
+ label: "Green",
12799
+ uri: "https://colorscope.materialinstruments.com/id/family/green"
12800
+ },
12801
+ {
12802
+ altLabels: ["Blue Green", "Blue-Green"],
12803
+ definition: "Blue-green colors spanning aqua, lagoon, patina, seafoam, and mineral teal tones.",
12804
+ hex: "#4e8e8e",
12805
+ id: "teal",
12806
+ label: "Teal",
12807
+ uri: "https://colorscope.materialinstruments.com/id/family/teal"
12808
+ },
12809
+ {
12810
+ altLabels: [],
12811
+ definition: "Blue-led colors spanning sky, sea, teal-leaning, ink, navy, and mineral blue families.",
12812
+ hex: "#4a6e8e",
12813
+ id: "blue",
12814
+ label: "Blue",
12815
+ uri: "https://colorscope.materialinstruments.com/id/family/blue"
12816
+ },
12817
+ {
12818
+ altLabels: [],
12819
+ definition: "Purple-led colors covering lavender, mauve, plum, indigo, and smoke-violet concepts.",
12820
+ hex: "#7a5a88",
12821
+ id: "purple",
12822
+ label: "Purple",
12823
+ uri: "https://colorscope.materialinstruments.com/id/family/purple"
12824
+ },
12825
+ {
12826
+ altLabels: [],
12827
+ definition: "Pink-led colors spanning powder, rose, salmon, blossom, and berry-pink concepts.",
12828
+ hex: "#c98da0",
12829
+ id: "pink",
12830
+ label: "Pink",
12831
+ uri: "https://colorscope.materialinstruments.com/id/family/pink"
12832
+ }
12833
+ ],
12834
+ palette: [
12835
+ {
12836
+ altLabels: [],
12837
+ definition: "A palette of high vibrancy that does not spread across three or more distinct hues.",
12838
+ hex: null,
12839
+ id: "vibrant",
12840
+ label: "Vibrant",
12841
+ uri: "https://colorscope.materialinstruments.com/id/palette/vibrant"
12842
+ },
12843
+ {
12844
+ altLabels: [],
12845
+ definition: "A palette of low vibrancy and middle lightness: the default when no other composition applies.",
12846
+ hex: null,
12847
+ id: "muted",
12848
+ label: "Muted",
12849
+ uri: "https://colorscope.materialinstruments.com/id/palette/muted"
12850
+ },
12851
+ {
12852
+ altLabels: [],
12853
+ definition: "A palette whose proportion-weighted lightness is low, and which is neither monochrome nor vibrant.",
12854
+ hex: null,
12855
+ id: "dark",
12856
+ label: "Dark",
12857
+ uri: "https://colorscope.materialinstruments.com/id/palette/dark"
12858
+ },
12859
+ {
12860
+ altLabels: [],
12861
+ definition: "A palette whose proportion-weighted lightness is high, and which is neither monochrome nor vibrant.",
12862
+ hex: null,
12863
+ id: "light",
12864
+ label: "Light",
12865
+ uri: "https://colorscope.materialinstruments.com/id/palette/light"
12866
+ },
12867
+ {
12868
+ altLabels: [],
12869
+ definition: "A palette built from a single hue with little variety between its colors.",
12870
+ hex: null,
12871
+ id: "monochrome",
12872
+ label: "Monochrome",
12873
+ uri: "https://colorscope.materialinstruments.com/id/palette/monochrome"
12874
+ },
12875
+ {
12876
+ altLabels: [],
12877
+ definition: "A palette of high vibrancy spread across three or more distinct hues.",
12878
+ hex: null,
12879
+ id: "colorful",
12880
+ label: "Colorful",
12881
+ uri: "https://colorscope.materialinstruments.com/id/palette/colorful"
12882
+ }
12883
+ ],
12884
+ temperature: [
12885
+ {
12886
+ altLabels: [],
12887
+ definition: "The strongest cool reading: a highly chromatic color in the cyan to blue-violet hues.",
12888
+ hex: null,
12889
+ id: "cold",
12890
+ label: "Cold",
12891
+ uri: "https://colorscope.materialinstruments.com/id/temperature/cold"
12892
+ },
12893
+ {
12894
+ altLabels: [],
12895
+ definition: "A color that reads cool: blue-green to violet hues at modest chroma, and strongly chromatic greens and magentas.",
12896
+ hex: null,
12897
+ id: "cool",
12898
+ label: "Cool",
12899
+ uri: "https://colorscope.materialinstruments.com/id/temperature/cool"
12900
+ },
12901
+ {
12902
+ altLabels: [],
12903
+ definition: "Neither warm nor cool: achromatic colors, and weakly chromatic ones in the yellow-green, green and magenta hues.",
12904
+ hex: null,
12905
+ id: "neutral",
12906
+ label: "Neutral",
12907
+ uri: "https://colorscope.materialinstruments.com/id/temperature/neutral"
12908
+ },
12909
+ {
12910
+ altLabels: [],
12911
+ definition: "A color that reads warm: red, orange and yellow hues at modest chroma, and strongly chromatic yellow-greens.",
12912
+ hex: null,
12913
+ id: "warm",
12914
+ label: "Warm",
12915
+ uri: "https://colorscope.materialinstruments.com/id/temperature/warm"
12916
+ },
12917
+ {
12918
+ altLabels: [],
12919
+ definition: "The strongest warm reading: a highly chromatic red, orange or yellow.",
12920
+ hex: null,
12921
+ id: "hot",
12922
+ label: "Hot",
12923
+ uri: "https://colorscope.materialinstruments.com/id/temperature/hot"
12924
+ }
12925
+ ]
12926
+ };
12927
+
12928
+ // src/axes/palette.ts
12929
+ var COLOUR_LAYER_DATE = "2026-10-23";
12930
+ var V1_BASELINE = "2026-08-30";
12931
+ var COLORSCOPE_AUTHORITY_URI = "https://colorscope.materialinstruments.com";
12932
+ var LAYER_SOURCE = `@materialinstruments/colorscope ${COLORSCOPE_VERSION} identities`;
12933
+ var COLOUR_LAYER_KINDS = {
12934
+ composition: { colorScopeKind: "palette", referenceKind: "palette-mood" },
12935
+ family: { colorScopeKind: "family", referenceKind: "color-family" },
12936
+ temperature: {
12937
+ colorScopeKind: "temperature",
12938
+ referenceKind: "temperature-level"
12939
+ },
12940
+ tone: { colorScopeKind: "basic-tone", referenceKind: "basic-tone" }
12941
+ };
12942
+ var PALETTE_LABEL_OVERRIDES = {
12943
+ "composition/colorful": "Polychrome"
12944
+ };
12945
+ var termFor = (facet, entry) => {
12946
+ const { referenceKind } = COLOUR_LAYER_KINDS[facet];
12947
+ const override = PALETTE_LABEL_OVERRIDES[`${facet}/${entry.id}`];
12948
+ const altLabels = override === void 0 ? entry.altLabels : [entry.label, ...entry.altLabels];
12949
+ return {
12950
+ ...altLabels.length === 0 ? {} : { altLabels },
12951
+ canonicalAuthority: {
12952
+ authority: "colorscope",
12953
+ authorityUri: COLORSCOPE_AUTHORITY_URI,
12954
+ identifier: entry.id,
12955
+ referenceKind,
12956
+ uri: entry.uri
12957
+ },
12958
+ ...entry.definition === null ? {} : { definition: entry.definition },
12959
+ ...entry.hex === null ? {} : { hex: entry.hex },
12960
+ introducedAt: COLOUR_LAYER_DATE,
12961
+ label: override ?? entry.label,
12962
+ ...override === void 0 ? {} : {
12963
+ note: `ColorScope labels this concept ${entry.label}; Taxonomy reads it as ${override}.`
12964
+ },
12965
+ provenance: {
12966
+ basis: "vendored",
12967
+ snapshot: COLOUR_LAYER_DATE,
12968
+ source: LAYER_SOURCE
12969
+ },
12970
+ reviewedAt: COLOUR_LAYER_DATE,
12971
+ slug: entry.id
12972
+ };
12973
+ };
12974
+ var layerTerms = (facet) => COLOUR_LAYER[COLOUR_LAYER_KINDS[facet].colorScopeKind].map(
12975
+ (entry) => termFor(facet, entry)
12976
+ );
12977
+ var PALETTE_FAMILY_TERMS = layerTerms("family");
12978
+ var PALETTE_TEMPERATURE_TERMS = layerTerms("temperature");
12979
+ var PALETTE_TONE_TERMS = layerTerms("tone");
12980
+ var PALETTE_COMPOSITION_TERMS = layerTerms("composition");
12981
+ var COLORSCOPE_WASHED_URI = `${COLORSCOPE_AUTHORITY_URI}/id/modifier/washed`;
11996
12982
  var PALETTE_CHARACTER_TERMS = [
11997
- {
11998
- canonicalAuthority: colorScopeAuthority("vibrant", PALETTE_MOOD),
11999
- definition: "High chroma; color is the loudest thing in the scheme.",
12000
- label: "Vibrant",
12001
- provenance: { basis: "vendored", snapshot: SNAPSHOT5, source: COLOUR_MOOD },
12002
- searchedWithout: [searchedUniclass3("Vibrant colour")],
12003
- slug: "vibrant"
12004
- },
12005
- {
12006
- canonicalAuthority: colorScopeAuthority("muted", PALETTE_MOOD),
12007
- definition: "Chroma held low by design, with the colors still fully present.",
12008
- label: "Muted",
12009
- provenance: { basis: "vendored", snapshot: SNAPSHOT5, source: COLOUR_MOOD },
12010
- searchedWithout: [searchedUniclass3("Muted colour")],
12011
- slug: "muted"
12012
- },
12013
12983
  {
12014
12984
  altLabels: ["sun-bleached", "washed"],
12015
12985
  definition: "Chroma reduced as if by age, wear or light, rather than chosen low. Distinct from muted: faded implies a stronger original.",
12016
12986
  label: "Faded",
12017
- note: "Authored here. Two estate vocabularies need it (a rendering pipeline's `faded` keyword and `sun-bleached-mediterranean`) and colorscope's palette moods do not reach it.",
12987
+ note: "Deprecated in 2.7.0. ColorScope owns colour, and its `washed` modifier now carries faded, sun-bleached and washed as alternate labels. Use the ColorScope concept; this URI keeps resolving.",
12018
12988
  provenance: { basis: "authored", source: "@instruments/taxonomy ADR 0001" },
12019
- searchedWithout: [searchedUniclass3("Faded colour")],
12020
- slug: "faded"
12989
+ reviewedAt: COLOUR_LAYER_DATE,
12990
+ slug: "faded",
12991
+ status: "deprecated",
12992
+ supersededByReference: COLORSCOPE_WASHED_URI
12993
+ }
12994
+ ];
12995
+ var TAXONOMY_FACET_BASE = "https://taxonomy.materialinstruments.com/id/facet";
12996
+ var layerGovernance = (introducedAt) => ({
12997
+ introducedAt,
12998
+ provenance: {
12999
+ basis: "vendored",
13000
+ snapshot: COLOUR_LAYER_DATE,
13001
+ source: LAYER_SOURCE
12021
13002
  },
13003
+ reviewedAt: COLOUR_LAYER_DATE
13004
+ });
13005
+ var deprecatedFacetGovernance = (successor) => ({
13006
+ introducedAt: V1_BASELINE,
13007
+ provenance: {
13008
+ basis: "authored",
13009
+ source: "@instruments/taxonomy published corpus"
13010
+ },
13011
+ reviewedAt: COLOUR_LAYER_DATE,
13012
+ status: "deprecated",
13013
+ supersededByReference: `${TAXONOMY_FACET_BASE}/palette/${successor}`
13014
+ });
13015
+ var PALETTE_FACET_GOVERNANCE = {
13016
+ character: deprecatedFacetGovernance("composition"),
13017
+ composition: layerGovernance(COLOUR_LAYER_DATE),
13018
+ family: layerGovernance(COLOUR_LAYER_DATE),
13019
+ hue: deprecatedFacetGovernance("family"),
13020
+ temperature: layerGovernance(V1_BASELINE),
13021
+ tone: layerGovernance(COLOUR_LAYER_DATE)
13022
+ };
13023
+ var PALETTE_AXIS_FACETS = [
12022
13024
  {
12023
- canonicalAuthority: colorScopeAuthority("mid", "lightness-level"),
12024
- definition: "Mid-range lightness across the scheme: neither pale nor deep. The midpoint that `light` and `dark` imply and neither states.",
12025
- label: "Mid",
12026
- note: "NOT authored here, and the first draft of this term was the exact mistake this package exists to stop. A paint-sample retailer bands every sample as light, medium or dark and the midpoint is its largest band, so a `medium` term was minted for it - without checking that colorscope already governs a five-level lightness scale with `mid` in the middle. An eighth vocabulary coining a word a governed vocabulary already had. Corrected to colorscope's id, with the retailer's spelling recorded under Seen in the wild where it belongs.",
12027
- provenance: {
12028
- basis: "vendored",
12029
- snapshot: SNAPSHOT5,
12030
- source: "@instruments/colorscope COLOR_LIGHTNESS_LEVELS"
12031
- },
12032
- searchedWithout: [searchedUniclass3("Mid colour")],
12033
- seenAs: ["medium", "Medium", "normal"],
12034
- slug: "mid"
13025
+ governance: PALETTE_FACET_GOVERNANCE.family,
13026
+ label: "Family",
13027
+ slug: "family",
13028
+ terms: PALETTE_FAMILY_TERMS
12035
13029
  },
12036
13030
  {
12037
- canonicalAuthority: colorScopeAuthority("dark", PALETTE_MOOD),
12038
- definition: "Low overall lightness across the scheme.",
12039
- label: "Dark",
12040
- provenance: { basis: "vendored", snapshot: SNAPSHOT5, source: COLOUR_MOOD },
12041
- searchedWithout: [searchedUniclass3("Dark colour")],
12042
- slug: "dark"
13031
+ governance: PALETTE_FACET_GOVERNANCE.temperature,
13032
+ label: "Temperature",
13033
+ slug: "temperature",
13034
+ terms: PALETTE_TEMPERATURE_TERMS
12043
13035
  },
12044
13036
  {
12045
- canonicalAuthority: colorScopeAuthority("light", PALETTE_MOOD),
12046
- definition: "High overall lightness across the scheme.",
12047
- label: "Light",
12048
- provenance: { basis: "vendored", snapshot: SNAPSHOT5, source: COLOUR_MOOD },
12049
- searchedWithout: [searchedUniclass3("Light colour")],
12050
- slug: "light"
13037
+ governance: PALETTE_FACET_GOVERNANCE.tone,
13038
+ label: "Tone",
13039
+ slug: "tone",
13040
+ terms: PALETTE_TONE_TERMS
12051
13041
  },
12052
13042
  {
12053
- canonicalAuthority: colorScopeAuthority("monochrome", PALETTE_MOOD),
12054
- definition: "One hue, or none; the scheme varies by lightness rather than by color.",
12055
- external: [
12056
- {
12057
- identifier: "Q10770146",
12058
- label: "monochrome",
12059
- match: "close",
12060
- scheme: "wikidata"
12061
- }
12062
- ],
12063
- label: "Monochrome",
12064
- provenance: { basis: "vendored", snapshot: SNAPSHOT5, source: COLOUR_MOOD },
12065
- searchedWithout: [searchedUniclass3("Monochrome colour")],
12066
- slug: "monochrome"
13043
+ governance: PALETTE_FACET_GOVERNANCE.composition,
13044
+ label: "Composition",
13045
+ slug: "composition",
13046
+ terms: PALETTE_COMPOSITION_TERMS
12067
13047
  },
12068
13048
  {
12069
- altLabels: ["polychrome"],
12070
- canonicalAuthority: colorScopeAuthority("colorful", PALETTE_MOOD),
12071
- definition: "Many hues held together deliberately.",
12072
- label: "Polychrome",
12073
- provenance: { basis: "vendored", snapshot: SNAPSHOT5, source: COLOUR_MOOD },
12074
- searchedWithout: [searchedUniclass3("Polychrome colour")],
12075
- seenAs: ["colorful"],
12076
- slug: "colorful"
13049
+ governance: PALETTE_FACET_GOVERNANCE.hue,
13050
+ label: "Hue",
13051
+ slug: "hue",
13052
+ terms: []
12077
13053
  },
12078
13054
  {
12079
- altLabels: ["jewel-toned"],
12080
- canonicalAuthority: colorScopeAuthority("saturated", "chroma-level"),
12081
- definition: "Deep and fully-loaded color, jewel-toned rather than bright. Vibrant is loud; saturated is rich, and a dark saturated scheme is ordinary while a dark vibrant one is not.",
12082
- label: "Saturated",
12083
- note: "NOT authored here, and the second time this file made that claim. It was written as authored because colorscope's PaletteMood was checked and its COLOR_CHROMA_LEVELS was not - and the chroma scale is muted, soft, vivid, SATURATED. The same failure as `mid`, in the same file, found by an adversarial pass rather than by the check that should have caught it.",
12084
- provenance: {
12085
- basis: "vendored",
12086
- snapshot: SNAPSHOT5,
12087
- source: "@instruments/colorscope COLOR_CHROMA_LEVELS"
12088
- },
12089
- searchedWithout: [searchedUniclass3("Saturated colour")],
12090
- slug: "saturated"
13055
+ governance: PALETTE_FACET_GOVERNANCE.character,
13056
+ label: "Character",
13057
+ slug: "character",
13058
+ terms: PALETTE_CHARACTER_TERMS
12091
13059
  }
12092
13060
  ];
12093
13061
 
@@ -12871,7 +13839,7 @@ var PATTERN_MOTIF_TERMS = MOTIF_DRAFTS.map(grounded);
12871
13839
 
12872
13840
  // src/axes/pattern.ts
12873
13841
  var SOURCE4 = "pattern vocabulary in a furnishings retailer (src-03)";
12874
- var SNAPSHOT6 = "2026-08-25";
13842
+ var SNAPSHOT5 = "2026-08-25";
12875
13843
  var GEOMETRY_REVIEW_DATE = "2026-08-31";
12876
13844
  var GEOMETRY_SOURCE = "Linear TAX-45 reviewed implementation contract";
12877
13845
  var REVIEW_DATE7 = "2026-09-11";
@@ -12882,7 +13850,7 @@ var TAX58_SOURCE = "Linear TAX-58 visual-vocabulary review; MG-2218 reconciliati
12882
13850
  var term7 = (slug, label, definition, extra = {}) => ({
12883
13851
  definition,
12884
13852
  label,
12885
- provenance: { basis: "evidenced", snapshot: SNAPSHOT6, source: SOURCE4 },
13853
+ provenance: { basis: "evidenced", snapshot: SNAPSHOT5, source: SOURCE4 },
12886
13854
  slug,
12887
13855
  ...extra
12888
13856
  });
@@ -13624,7 +14592,7 @@ var PERIOD_TERMS = [
13624
14592
  ];
13625
14593
 
13626
14594
  // src/axes/place.ts
13627
- var SNAPSHOT7 = "2026-08-21";
14595
+ var SNAPSHOT6 = "2026-08-21";
13628
14596
  var ADR2 = "@instruments/taxonomy ADR 0001";
13629
14597
  var PLATFORM_CONTEXTS = "CONTEXTS in an architecture-projects platform (src-01)";
13630
14598
  var aat7 = (identifier, label, match) => ({ identifier, label, match, scheme: "aat" });
@@ -13639,7 +14607,7 @@ var PLACE_REGION_TERMS = [
13639
14607
  label: "Mediterranean",
13640
14608
  provenance: {
13641
14609
  basis: "evidenced",
13642
- snapshot: SNAPSHOT7,
14610
+ snapshot: SNAPSHOT6,
13643
14611
  source: "a rendering pipeline (src-08) and an architecture-projects platform (src-01)"
13644
14612
  },
13645
14613
  slug: "mediterranean"
@@ -13691,7 +14659,7 @@ var PLACE_REGION_TERMS = [
13691
14659
  label: "Nordic",
13692
14660
  provenance: {
13693
14661
  basis: "evidenced",
13694
- snapshot: SNAPSHOT7,
14662
+ snapshot: SNAPSHOT6,
13695
14663
  source: "an editorial image library (src-02), an architecture-projects platform (src-01) and a materials-retrieval system (src-05)"
13696
14664
  },
13697
14665
  seenAs: ["Nordic modern", "nordic_warm", "Scandinavian"],
@@ -13711,7 +14679,7 @@ var PLACE_REGION_TERMS = [
13711
14679
  label: "Japanese",
13712
14680
  provenance: {
13713
14681
  basis: "evidenced",
13714
- snapshot: SNAPSHOT7,
14682
+ snapshot: SNAPSHOT6,
13715
14683
  source: "an architecture-projects platform (src-01) and a rendering pipeline (src-08)"
13716
14684
  },
13717
14685
  seenAs: ["Japanese contemporary"],
@@ -13723,7 +14691,7 @@ var PLACE_REGION_TERMS = [
13723
14691
  label: "English Country",
13724
14692
  provenance: {
13725
14693
  basis: "evidenced",
13726
- snapshot: SNAPSHOT7,
14694
+ snapshot: SNAPSHOT6,
13727
14695
  source: "an editorial image library (src-02) and a furnishings retailer (src-03)"
13728
14696
  },
13729
14697
  seenAs: ["English Country", "Country"],
@@ -13844,7 +14812,7 @@ var PLACE_LANDSCAPE_TERMS = [
13844
14812
  label: "Coastal",
13845
14813
  provenance: {
13846
14814
  basis: "evidenced",
13847
- snapshot: SNAPSHOT7,
14815
+ snapshot: SNAPSHOT6,
13848
14816
  source: "CONTEXTS in an architecture-projects platform (src-01), a furnishings retailer (src-03), an editorial image library (src-02), a rendering pipeline (src-08) and a materials-retrieval system (src-05)"
13849
14817
  },
13850
14818
  slug: "coastal",
@@ -13860,7 +14828,7 @@ var PLACE_LANDSCAPE_TERMS = [
13860
14828
  label: "Waterfront",
13861
14829
  provenance: {
13862
14830
  basis: "vendored",
13863
- snapshot: SNAPSHOT7,
14831
+ snapshot: SNAPSHOT6,
13864
14832
  source: PLATFORM_CONTEXTS
13865
14833
  },
13866
14834
  related: [relatedTo12("place.landscape.coastal")],
@@ -13872,7 +14840,7 @@ var PLACE_LANDSCAPE_TERMS = [
13872
14840
  label: "Tropical",
13873
14841
  provenance: {
13874
14842
  basis: "evidenced",
13875
- snapshot: SNAPSHOT7,
14843
+ snapshot: SNAPSHOT6,
13876
14844
  source: "an architecture-projects platform (src-01)"
13877
14845
  },
13878
14846
  seenAs: ["Tropical modernism"],
@@ -13892,7 +14860,7 @@ var PLACE_LANDSCAPE_TERMS = [
13892
14860
  label: "Desert",
13893
14861
  provenance: {
13894
14862
  basis: "vendored",
13895
- snapshot: SNAPSHOT7,
14863
+ snapshot: SNAPSHOT6,
13896
14864
  source: PLATFORM_CONTEXTS
13897
14865
  },
13898
14866
  slug: "desert"
@@ -13913,7 +14881,7 @@ var PLACE_LANDSCAPE_TERMS = [
13913
14881
  label: "Mountain",
13914
14882
  provenance: {
13915
14883
  basis: "vendored",
13916
- snapshot: SNAPSHOT7,
14884
+ snapshot: SNAPSHOT6,
13917
14885
  source: PLATFORM_CONTEXTS
13918
14886
  },
13919
14887
  slug: "mountain"
@@ -13932,7 +14900,7 @@ var PLACE_LANDSCAPE_TERMS = [
13932
14900
  label: "Forest",
13933
14901
  provenance: {
13934
14902
  basis: "vendored",
13935
- snapshot: SNAPSHOT7,
14903
+ snapshot: SNAPSHOT6,
13936
14904
  source: PLATFORM_CONTEXTS
13937
14905
  },
13938
14906
  slug: "forest"
@@ -13952,7 +14920,7 @@ var PLACE_LANDSCAPE_TERMS = [
13952
14920
  label: "Rural",
13953
14921
  provenance: {
13954
14922
  basis: "vendored",
13955
- snapshot: SNAPSHOT7,
14923
+ snapshot: SNAPSHOT6,
13956
14924
  source: PLATFORM_CONTEXTS
13957
14925
  },
13958
14926
  slug: "rural"
@@ -13971,7 +14939,7 @@ var PLACE_LANDSCAPE_TERMS = [
13971
14939
  label: "Suburban",
13972
14940
  provenance: {
13973
14941
  basis: "vendored",
13974
- snapshot: SNAPSHOT7,
14942
+ snapshot: SNAPSHOT6,
13975
14943
  source: PLATFORM_CONTEXTS
13976
14944
  },
13977
14945
  related: [relatedTo12("place.landscape.urban")],
@@ -13992,7 +14960,7 @@ var PLACE_LANDSCAPE_TERMS = [
13992
14960
  label: "Urban",
13993
14961
  provenance: {
13994
14962
  basis: "vendored",
13995
- snapshot: SNAPSHOT7,
14963
+ snapshot: SNAPSHOT6,
13996
14964
  source: PLATFORM_CONTEXTS
13997
14965
  },
13998
14966
  seenAs: ["Dense urban", "Urban infill", "downtown"],
@@ -14912,11 +15880,11 @@ var PRODUCT_CATEGORY_TERMS = [
14912
15880
 
14913
15881
  // src/axes/requirement.ts
14914
15882
  var SOURCE5 = "in-house residential and commercial project requirements";
14915
- var SNAPSHOT8 = "2026-08-25";
15883
+ var SNAPSHOT7 = "2026-08-25";
14916
15884
  var term9 = (slug, label, definition, extra = {}) => ({
14917
15885
  definition,
14918
15886
  label,
14919
- provenance: { basis: "evidenced", snapshot: SNAPSHOT8, source: SOURCE5 },
15887
+ provenance: { basis: "evidenced", snapshot: SNAPSHOT7, source: SOURCE5 },
14920
15888
  slug,
14921
15889
  ...extra
14922
15890
  });
@@ -18181,7 +19149,7 @@ var SECTOR_IDS = new Set(
18181
19149
 
18182
19150
  // src/axes/style-shared.ts
18183
19151
  var PLATFORM_STYLES_SOURCE = "STYLES in an architecture-projects platform (src-01)";
18184
- var SNAPSHOT9 = "2026-08-21";
19152
+ var SNAPSHOT8 = "2026-08-21";
18185
19153
  var MOVEMENT = "movement";
18186
19154
  var aat12 = (slug, label, match) => ({
18187
19155
  identifier: slug,
@@ -18202,6 +19170,43 @@ var relatedTo15 = (target) => ({
18202
19170
  target
18203
19171
  });
18204
19172
 
19173
+ // src/axes/mg2620-style.ts
19174
+ var MARKET_IDIOM = "market-idiom";
19175
+ var MG2620_STYLE_TERMS = [
19176
+ mg2620Term(
19177
+ "coastal",
19178
+ "Coastal",
19179
+ "A market idiom drawn from houses by the sea: white and sand-coloured walls, pale or whitewashed timber, natural fibres such as rattan, jute and sea grass, slipcovered linen seating, and the sea's blues as accents.",
19180
+ {
19181
+ altLabels: ["coastal style", "beach house style"],
19182
+ related: [evokes("place.landscape.coastal")],
19183
+ searchedWithout: [
19184
+ mg2620SearchedAat("coastal | seaside | beach"),
19185
+ mg2620SearchedWikidata(
19186
+ "coastal style | coastal interior design | beach house style | coastal grandmother"
19187
+ )
19188
+ ],
19189
+ styleKind: MARKET_IDIOM
19190
+ }
19191
+ ),
19192
+ mg2620Term(
19193
+ "modern-farmhouse",
19194
+ "Modern farmhouse",
19195
+ "A market idiom that takes the farmhouse as its reference and reduces it to a repeatable set: white or neutral walls, shiplap or board-and-batten panelling, white Shaker cabinetry, an apron sink, black metal fittings, wide plank floors and exposed beams, with old pieces mixed in.",
19196
+ {
19197
+ altLabels: ["modern farmhouse style"],
19198
+ external: [mapping("aat", "300310545", "country (style)", "related")],
19199
+ related: [evokes("typology.farmhouse"), relatedTo15("style.rustic")],
19200
+ searchedWithout: [
19201
+ mg2620SearchedWikidata(
19202
+ "modern farmhouse | modern farmhouse architecture"
19203
+ )
19204
+ ],
19205
+ styleKind: MARKET_IDIOM
19206
+ }
19207
+ )
19208
+ ];
19209
+
18205
19210
  // src/axes/style-architectural.ts
18206
19211
  var LATE_CENTURY = "period.late-century";
18207
19212
  var STYLE_ARCHITECTURAL_TERMS = [
@@ -18219,7 +19224,7 @@ var STYLE_ARCHITECTURAL_TERMS = [
18219
19224
  label: "Postmodernism",
18220
19225
  provenance: {
18221
19226
  basis: "vendored",
18222
- snapshot: SNAPSHOT9,
19227
+ snapshot: SNAPSHOT8,
18223
19228
  source: PLATFORM_STYLES_SOURCE
18224
19229
  },
18225
19230
  related: [influencedBy("style.modernism"), evokes(LATE_CENTURY)],
@@ -18240,7 +19245,7 @@ var STYLE_ARCHITECTURAL_TERMS = [
18240
19245
  label: "Deconstructivism",
18241
19246
  provenance: {
18242
19247
  basis: "vendored",
18243
- snapshot: SNAPSHOT9,
19248
+ snapshot: SNAPSHOT8,
18244
19249
  source: PLATFORM_STYLES_SOURCE
18245
19250
  },
18246
19251
  related: [influencedBy("style.constructivism"), evokes(LATE_CENTURY)],
@@ -18253,7 +19258,7 @@ var STYLE_ARCHITECTURAL_TERMS = [
18253
19258
  label: "Parametricism",
18254
19259
  provenance: {
18255
19260
  basis: "vendored",
18256
- snapshot: SNAPSHOT9,
19261
+ snapshot: SNAPSHOT8,
18257
19262
  source: PLATFORM_STYLES_SOURCE
18258
19263
  },
18259
19264
  related: [evokes("period.contemporary")],
@@ -18282,7 +19287,7 @@ var STYLE_ARCHITECTURAL_TERMS = [
18282
19287
  label: "High-Tech",
18283
19288
  provenance: {
18284
19289
  basis: "vendored",
18285
- snapshot: SNAPSHOT9,
19290
+ snapshot: SNAPSHOT8,
18286
19291
  source: PLATFORM_STYLES_SOURCE
18287
19292
  },
18288
19293
  related: [evokes(LATE_CENTURY)],
@@ -18303,7 +19308,7 @@ var STYLE_ARCHITECTURAL_TERMS = [
18303
19308
  label: "Rationalism",
18304
19309
  provenance: {
18305
19310
  basis: "vendored",
18306
- snapshot: SNAPSHOT9,
19311
+ snapshot: SNAPSHOT8,
18307
19312
  source: PLATFORM_STYLES_SOURCE
18308
19313
  },
18309
19314
  related: [evokes("period.interwar")],
@@ -18324,7 +19329,7 @@ var STYLE_ARCHITECTURAL_TERMS = [
18324
19329
  label: "Constructivism",
18325
19330
  provenance: {
18326
19331
  basis: "vendored",
18327
- snapshot: SNAPSHOT9,
19332
+ snapshot: SNAPSHOT8,
18328
19333
  source: PLATFORM_STYLES_SOURCE
18329
19334
  },
18330
19335
  related: [evokes("period.interwar")],
@@ -18346,7 +19351,7 @@ var STYLE_ARCHITECTURAL_TERMS = [
18346
19351
  label: "Organic Modernism",
18347
19352
  provenance: {
18348
19353
  basis: "vendored",
18349
- snapshot: SNAPSHOT9,
19354
+ snapshot: SNAPSHOT8,
18350
19355
  source: PLATFORM_STYLES_SOURCE
18351
19356
  },
18352
19357
  seenAs: ["Organic", "quiet_organic"],
@@ -18357,7 +19362,7 @@ var STYLE_ARCHITECTURAL_TERMS = [
18357
19362
 
18358
19363
  // src/axes/style.ts
18359
19364
  var ESTATE3 = "all five estate repos";
18360
- var MARKET_IDIOM = "market-idiom";
19365
+ var MARKET_IDIOM2 = "market-idiom";
18361
19366
  var TRADITION = "tradition";
18362
19367
  var SCHEME_SNAPSHOT2 = "2026-08-18";
18363
19368
  var SCHEME_CORPUS2 = "room schemes in a furnishings retailer (src-03)";
@@ -18376,7 +19381,7 @@ var STYLE_TERMS = [
18376
19381
  }
18377
19382
  ],
18378
19383
  label: "Minimalism",
18379
- provenance: { basis: "evidenced", snapshot: SNAPSHOT9, source: ESTATE3 },
19384
+ provenance: { basis: "evidenced", snapshot: SNAPSHOT8, source: ESTATE3 },
18380
19385
  seenAs: [
18381
19386
  "serene-minimal",
18382
19387
  "minimal_warm",
@@ -18418,7 +19423,7 @@ var STYLE_TERMS = [
18418
19423
  note: 'NOT the consumer sense of "modern". A consumer calling a room modern usually means it is current and clean-lined, which is `contemporary` here. The two are separate terms and the crosswalk from an ambiguous source label declines rather than guessing. See ADR 0001.',
18419
19424
  provenance: {
18420
19425
  basis: "evidenced",
18421
- snapshot: SNAPSHOT9,
19426
+ snapshot: SNAPSHOT8,
18422
19427
  source: "an architecture-projects platform (src-01) and a rendering pipeline (src-08)"
18423
19428
  },
18424
19429
  slug: "modernism",
@@ -18445,7 +19450,7 @@ var STYLE_TERMS = [
18445
19450
  note: "Style, not period. A reproduction built in 2024 is `style.mid-century-modern` in the `period.contemporary` period, which is why the two axes cannot be one.",
18446
19451
  provenance: {
18447
19452
  basis: "evidenced",
18448
- snapshot: SNAPSHOT9,
19453
+ snapshot: SNAPSHOT8,
18449
19454
  source: "an architecture-projects platform (src-01), an editorial image library (src-02), a furnishings retailer (src-03) and a materials-retrieval system (src-05)"
18450
19455
  },
18451
19456
  related: [{ predicate: "evokes", target: "period.mid-century" }],
@@ -18459,7 +19464,7 @@ var STYLE_TERMS = [
18459
19464
  note: "DELIBERATELY TIME-RELATIVE, and the only term here that is. What it denotes moves; the id does not. Consumers distinguish it from `modern` in practice - a furnishings retailer carries both at similar volume - without anyone having written down how. `period.contemporary` is a different thing on a different axis; the prefix disambiguates.",
18460
19465
  provenance: {
18461
19466
  basis: "evidenced",
18462
- snapshot: SNAPSHOT9,
19467
+ snapshot: SNAPSHOT8,
18463
19468
  source: "a furnishings retailer (src-03), a rendering pipeline (src-08) and a materials-retrieval system (src-05)"
18464
19469
  },
18465
19470
  related: [relatedTo15("period.contemporary")],
@@ -18472,7 +19477,7 @@ var STYLE_TERMS = [
18472
19477
  }
18473
19478
  ],
18474
19479
  slug: "contemporary",
18475
- styleKind: MARKET_IDIOM,
19480
+ styleKind: MARKET_IDIOM2,
18476
19481
  usage: {
18477
19482
  band: "dominant",
18478
19483
  corpus: SCHEME_CORPUS2,
@@ -18483,7 +19488,7 @@ var STYLE_TERMS = [
18483
19488
  definition: "Pre-modern decorative conventions carried forward without irony: mouldings, pattern, symmetry, furniture with a period lineage.",
18484
19489
  external: [aat12("300310540", "traditional (style)", "exact")],
18485
19490
  label: "Traditional",
18486
- provenance: { basis: "evidenced", snapshot: SNAPSHOT9, source: ESTATE3 },
19491
+ provenance: { basis: "evidenced", snapshot: SNAPSHOT8, source: ESTATE3 },
18487
19492
  searchedWithout: [
18488
19493
  {
18489
19494
  date: SEARCHED_ON,
@@ -18521,7 +19526,7 @@ var STYLE_TERMS = [
18521
19526
  label: "Neoclassical",
18522
19527
  provenance: {
18523
19528
  basis: "vendored",
18524
- snapshot: SNAPSHOT9,
19529
+ snapshot: SNAPSHOT8,
18525
19530
  source: PLATFORM_STYLES_SOURCE
18526
19531
  },
18527
19532
  seenAs: ["Classical & Grand"],
@@ -18542,7 +19547,7 @@ var STYLE_TERMS = [
18542
19547
  label: "Gothic",
18543
19548
  provenance: {
18544
19549
  basis: "vendored",
18545
- snapshot: SNAPSHOT9,
19550
+ snapshot: SNAPSHOT8,
18546
19551
  source: PLATFORM_STYLES_SOURCE
18547
19552
  },
18548
19553
  related: [evokes("period.medieval"), evokes("typology.church")],
@@ -18563,7 +19568,7 @@ var STYLE_TERMS = [
18563
19568
  label: "Art Deco",
18564
19569
  provenance: {
18565
19570
  basis: "evidenced",
18566
- snapshot: SNAPSHOT9,
19571
+ snapshot: SNAPSHOT8,
18567
19572
  source: "an architecture-projects platform (src-01), an editorial image library (src-02), a furnishings retailer (src-03) and a rendering pipeline (src-08)"
18568
19573
  },
18569
19574
  related: [{ predicate: "evokes", target: "period.interwar" }],
@@ -18585,13 +19590,13 @@ var STYLE_TERMS = [
18585
19590
  label: "Industrial",
18586
19591
  provenance: {
18587
19592
  basis: "evidenced",
18588
- snapshot: SNAPSHOT9,
19593
+ snapshot: SNAPSHOT8,
18589
19594
  source: "a rendering pipeline (src-08), an architecture-projects platform (src-01), a furnishings retailer (src-03) and a materials-retrieval system (src-05)"
18590
19595
  },
18591
19596
  related: [{ predicate: "evokes", target: "typology.warehouse" }],
18592
19597
  seenAs: ["Industrial & Raw", "industrial_refined"],
18593
19598
  slug: "industrial",
18594
- styleKind: MARKET_IDIOM
19599
+ styleKind: MARKET_IDIOM2
18595
19600
  },
18596
19601
  {
18597
19602
  definition: "Mass concrete left as struck, monumental massing, the construction method visible as the finish.",
@@ -18607,7 +19612,7 @@ var STYLE_TERMS = [
18607
19612
  label: "Brutalism",
18608
19613
  provenance: {
18609
19614
  basis: "vendored",
18610
- snapshot: SNAPSHOT9,
19615
+ snapshot: SNAPSHOT8,
18611
19616
  source: PLATFORM_STYLES_SOURCE
18612
19617
  },
18613
19618
  related: [influencedBy("style.modernism"), evokes("period.mid-century")],
@@ -18627,7 +19632,7 @@ var STYLE_TERMS = [
18627
19632
  label: "Maximalism",
18628
19633
  provenance: {
18629
19634
  basis: "evidenced",
18630
- snapshot: SNAPSHOT9,
19635
+ snapshot: SNAPSHOT8,
18631
19636
  source: "an editorial image library (src-02)"
18632
19637
  },
18633
19638
  searchedWithout: [
@@ -18640,7 +19645,7 @@ var STYLE_TERMS = [
18640
19645
  ],
18641
19646
  seenAs: ["Modern Maximalism"],
18642
19647
  slug: "maximalism",
18643
- styleKind: MARKET_IDIOM
19648
+ styleKind: MARKET_IDIOM2
18644
19649
  },
18645
19650
  {
18646
19651
  definition: "Periods and idioms mixed by intent, with the mixing itself as the method. Distinct from maximalism, which is about quantity rather than provenance.",
@@ -18656,12 +19661,12 @@ var STYLE_TERMS = [
18656
19661
  label: "Eclectic",
18657
19662
  provenance: {
18658
19663
  basis: "evidenced",
18659
- snapshot: SNAPSHOT9,
19664
+ snapshot: SNAPSHOT8,
18660
19665
  source: SCHEME_CORPUS2
18661
19666
  },
18662
19667
  related: [relatedTo15("style.maximalism")],
18663
19668
  slug: "eclectic",
18664
- styleKind: MARKET_IDIOM,
19669
+ styleKind: MARKET_IDIOM2,
18665
19670
  usage: {
18666
19671
  band: "common",
18667
19672
  corpus: SCHEME_CORPUS2,
@@ -18676,7 +19681,7 @@ var STYLE_TERMS = [
18676
19681
  note: 'Defined only relative to two other terms, which is unusual and was nearly grounds to refuse it. It stays because it is heavily used in the US consumer market and because the relative definition is the honest one - the term genuinely means "between those two" and pretending otherwise would invent content nobody intends.',
18677
19682
  provenance: {
18678
19683
  basis: "evidenced",
18679
- snapshot: SNAPSHOT9,
19684
+ snapshot: SNAPSHOT8,
18680
19685
  source: SCHEME_CORPUS2
18681
19686
  },
18682
19687
  related: [
@@ -18692,7 +19697,7 @@ var STYLE_TERMS = [
18692
19697
  }
18693
19698
  ],
18694
19699
  slug: "transitional",
18695
- styleKind: MARKET_IDIOM,
19700
+ styleKind: MARKET_IDIOM2,
18696
19701
  usage: {
18697
19702
  band: "common",
18698
19703
  corpus: SCHEME_CORPUS2,
@@ -18713,7 +19718,7 @@ var STYLE_TERMS = [
18713
19718
  label: "Rustic",
18714
19719
  provenance: {
18715
19720
  basis: "evidenced",
18716
- snapshot: SNAPSHOT9,
19721
+ snapshot: SNAPSHOT8,
18717
19722
  source: "a rendering pipeline (src-08), an architecture-projects platform (src-01), a furnishings retailer (src-03) and a materials-retrieval system (src-05)"
18718
19723
  },
18719
19724
  seenAs: ["Rustic & Artisan"],
@@ -18735,7 +19740,7 @@ var STYLE_TERMS = [
18735
19740
  label: "Vernacular",
18736
19741
  provenance: {
18737
19742
  basis: "vendored",
18738
- snapshot: SNAPSHOT9,
19743
+ snapshot: SNAPSHOT8,
18739
19744
  source: PLATFORM_STYLES_SOURCE
18740
19745
  },
18741
19746
  slug: "vernacular",
@@ -18757,7 +19762,7 @@ var STYLE_TERMS = [
18757
19762
  label: "Critical Regionalism",
18758
19763
  provenance: {
18759
19764
  basis: "vendored",
18760
- snapshot: SNAPSHOT9,
19765
+ snapshot: SNAPSHOT8,
18761
19766
  source: PLATFORM_STYLES_SOURCE
18762
19767
  },
18763
19768
  related: [relatedTo15("style.vernacular")],
@@ -18779,7 +19784,7 @@ var STYLE_TERMS = [
18779
19784
  label: "Wabi-Sabi",
18780
19785
  provenance: {
18781
19786
  basis: "evidenced",
18782
- snapshot: SNAPSHOT9,
19787
+ snapshot: SNAPSHOT8,
18783
19788
  source: "an editorial image library (src-02)"
18784
19789
  },
18785
19790
  related: [
@@ -18831,7 +19836,7 @@ var STYLE_TERMS = [
18831
19836
  }
18832
19837
  ],
18833
19838
  slug: "japandi",
18834
- styleKind: MARKET_IDIOM
19839
+ styleKind: MARKET_IDIOM2
18835
19840
  },
18836
19841
  {
18837
19842
  altLabels: ["boho"],
@@ -18840,8 +19845,9 @@ var STYLE_TERMS = [
18840
19845
  label: "Bohemian",
18841
19846
  provenance: { basis: "authored", source: "@instruments/taxonomy ADR 0001" },
18842
19847
  slug: "bohemian",
18843
- styleKind: MARKET_IDIOM
19848
+ styleKind: MARKET_IDIOM2
18844
19849
  },
19850
+ ...MG2620_STYLE_TERMS,
18845
19851
  ...STYLE_ARCHITECTURAL_TERMS
18846
19852
  ];
18847
19853
 
@@ -18861,7 +19867,7 @@ var searchedWithout = (query) => [
18861
19867
  }
18862
19868
  ];
18863
19869
  var ESTATE_POSITIONING = "brand-positioning vocabulary in a materials-retrieval system (src-05) and project budget bands in a project-materials database (src-07)";
18864
- var SNAPSHOT10 = "2026-08-22";
19870
+ var SNAPSHOT9 = "2026-08-22";
18865
19871
  var ADR3 = "@instruments/taxonomy ADR 0001, amended 22 August 2026";
18866
19872
  var TIER_MARKET_TERMS = [
18867
19873
  {
@@ -18870,7 +19876,7 @@ var TIER_MARKET_TERMS = [
18870
19876
  label: "Value",
18871
19877
  provenance: {
18872
19878
  basis: "evidenced",
18873
- snapshot: SNAPSHOT10,
19879
+ snapshot: SNAPSHOT9,
18874
19880
  source: ESTATE_POSITIONING
18875
19881
  },
18876
19882
  rank: 1,
@@ -18884,7 +19890,7 @@ var TIER_MARKET_TERMS = [
18884
19890
  label: "Mid-market",
18885
19891
  provenance: {
18886
19892
  basis: "evidenced",
18887
- snapshot: SNAPSHOT10,
19893
+ snapshot: SNAPSHOT9,
18888
19894
  source: ESTATE_POSITIONING
18889
19895
  },
18890
19896
  rank: 2,
@@ -18899,7 +19905,7 @@ var TIER_MARKET_TERMS = [
18899
19905
  note: "`upscale` is NOT recorded here as another name for this term, though the trade uses it that way, because `tier.chain-scale.upscale` is a different rung on a longer ladder. Letting the word resolve to both is how the two scales would quietly become one.",
18900
19906
  provenance: {
18901
19907
  basis: "evidenced",
18902
- snapshot: SNAPSHOT10,
19908
+ snapshot: SNAPSHOT9,
18903
19909
  source: ESTATE_POSITIONING
18904
19910
  },
18905
19911
  rank: 3,
@@ -18913,7 +19919,7 @@ var TIER_MARKET_TERMS = [
18913
19919
  note: "NOT `mood.luxurious`, and the distinction is the reason this axis exists. Mood says a space reads as expensive; tier says a thing sits at the top of its market. An Aman is this term and `mood.austere`; a gaudy budget hotel lobby is `mood.luxurious` and `tier.market.value`.",
18914
19920
  provenance: {
18915
19921
  basis: "evidenced",
18916
- snapshot: SNAPSHOT10,
19922
+ snapshot: SNAPSHOT9,
18917
19923
  source: ESTATE_POSITIONING
18918
19924
  },
18919
19925
  rank: 4,
@@ -18992,7 +19998,7 @@ var TIER_PRICE_BAND_TERMS = [
18992
19998
  label: symbols,
18993
19999
  provenance: {
18994
20000
  basis: "vendored",
18995
- snapshot: SNAPSHOT10,
20001
+ snapshot: SNAPSHOT9,
18996
20002
  source: "PRICE_TIERS in a materials-retrieval system (src-05)"
18997
20003
  },
18998
20004
  rank: index + 1,
@@ -20744,6 +21750,9 @@ var STYLE_ANCHORS = {
20744
21750
  brutalism: [
20745
21751
  "Brutalist interior with board-marked in-situ concrete left as struck, heavy monolithic massing, deep window reveals, exposed services, raw unfinished surfaces treated as the finish"
20746
21752
  ],
21753
+ coastal: [
21754
+ "Coastal interior in white and sand with sea-blue accents, whitewashed timber boards, rattan and sea-grass furniture, jute rugs, slipcovered linen sofas, sheer curtains lifting in an open window, and the light of a house by the water"
21755
+ ],
20747
21756
  constructivism: [
20748
21757
  "Constructivist interior with dynamic diagonal composition, exposed structural drama, primary color on structural members, industrial glazing, early Soviet avant-garde geometry"
20749
21758
  ],
@@ -20781,6 +21790,9 @@ var STYLE_ANCHORS = {
20781
21790
  "Minimalist interior defined by what has been taken out: unbroken wall planes, no skirting or trim, concealed frames and fixings, storage vanished into flush joinery, empty surface treated as a material rather than as space left over",
20782
21791
  "Minimal room holding very few objects at deliberate distances, one seat and one low table and nothing else, a wide undecorated floor, a single work on a long blank wall, light and shadow doing what pattern does elsewhere"
20783
21792
  ],
21793
+ "modern-farmhouse": [
21794
+ "Modern farmhouse kitchen with white shiplap walls, white Shaker cabinets, a deep apron-front sink, matte black metal pendants and hardware, open shelving, wide pale plank floors and a reclaimed beam overhead"
21795
+ ],
20784
21796
  modernism: [
20785
21797
  "Modernist interior with the plan running free beneath its frame, columns standing clear of the walls they no longer carry, a window banding horizontally across a facade holding no load, volumes cantilevered out over open ground, ornament argued out of the building rather than simply left off"
20786
21798
  ],
@@ -20925,7 +21937,7 @@ var AXES = [
20925
21937
  status: "authored"
20926
21938
  },
20927
21939
  {
20928
- boundary: "Finish is the deliberately produced state of the exposed surface. It is not material, pattern or construction: polished stone and matte stone share material while differing here. Three facets, because a flat list put treatment beside sheen and could not say honed matte.",
21940
+ boundary: "Finish is the deliberately produced state of the exposed surface. It is not material, pattern or construction: polished stone and matte stone share material while differing here. Separate facets, because a flat list put treatment beside sheen and could not say honed matte. Metallic tone is the metal a surface reads as, and never says what it is made of or names a colour family, which ColorScope owns. Edge is how a unit's edge was finished or profiled.",
20929
21941
  facets: [
20930
21942
  {
20931
21943
  holds: "several",
@@ -20944,13 +21956,15 @@ var AXES = [
20944
21956
  label: "Texture",
20945
21957
  slug: "texture",
20946
21958
  terms: FINISH_TEXTURE_TERMS
20947
- }
21959
+ },
21960
+ ...MG2620_FINISH_FACETS
20948
21961
  ],
20949
21962
  label: "Finish",
20950
21963
  question: "How is the exposed surface finished?",
20951
21964
  slug: "finish",
20952
21965
  status: "authored"
20953
21966
  },
21967
+ ...SURFACE_READING_AXES,
20954
21968
  {
20955
21969
  boundary: "Format is the physical unit or delivery form supplied. It does not say what the product is made of, the visible outline of one unit, or how units are arranged after installation. A mounted mosaic remains a format even when its discrete units also support a layout assertion.",
20956
21970
  facets: single("format", "Format", FORMAT_TERMS),
@@ -20974,6 +21988,7 @@ var AXES = [
20974
21988
  slug: "unit-shape",
20975
21989
  status: "authored"
20976
21990
  },
21991
+ PRODUCT_SHAPE_AXIS,
20977
21992
  {
20978
21993
  boundary: "Installation layout is the persistent spatial relationship among discrete physical units or real joints in the finished surface. Printed or faux joints, woven motifs, terrazzo aggregate, monolithic surfaces and diagonal scene orientation do not establish it. Pattern may use the same trade word but asserts a visible motif, not physical arrangement.",
20979
21994
  facets: single(
@@ -21070,16 +22085,8 @@ var AXES = [
21070
22085
  status: "authored"
21071
22086
  },
21072
22087
  {
21073
- boundary: "Three facets rather than one flat list, because a flat list cannot say warm green or faded blue. Temperature in particular is the most-welded-in property in the estate: warm minimalism had to be minted twice because no vocabulary could compose it.",
21074
- facets: [
21075
- { label: "Hue", slug: "hue", terms: PALETTE_HUE_TERMS },
21076
- {
21077
- label: "Temperature",
21078
- slug: "temperature",
21079
- terms: PALETTE_TEMPERATURE_TERMS
21080
- },
21081
- { label: "Character", slug: "character", terms: PALETTE_CHARACTER_TERMS }
21082
- ],
22088
+ boundary: "ColorScope owns colour; Taxonomy shows it and authors none. Palette lists ColorScope's families, temperature levels, basic tones and palette compositions under ColorScope's own URIs, so any term can relate to a colour. Named colours and paint colours are not terms here: they stay with ColorScope, reached through the phrase lexicon. Four facets rather than one flat list, because a flat list cannot say warm green or muted blue.",
22089
+ facets: PALETTE_AXIS_FACETS,
21083
22090
  label: "Palette",
21084
22091
  question: "What color is it?",
21085
22092
  slug: "palette",
@@ -21174,7 +22181,7 @@ var AXES = [
21174
22181
  {
21175
22182
  boundary: "A formal move is a building-scale geometric decision: a cantilever, a courtyard, a sawtooth roof. It is not the visible outline of a supplied unit, a product profile, an idiom or a mood.",
21176
22183
  facets: [],
21177
- gap: "Identified by the crosswalk-residue test (TAX-14) from an architecture-projects platform's Sculptural value. That platform's own FORMAL_MOVE_EXAMPLES is the obvious starting point. Not yet authored. A materials-retrieval system's ms_shape was considered as a seed on 2026-08-27 and REJECTED: its twelve terms (linear, fluted, channelled, blocky, slender, faceted, gridded, organic) describe a product's own profile, while this axis asks what geometric move a building makes. Seeding it here would put two questions on one axis, which is the defect every boundary in ADR 0001 exists to prevent. Part of ms_shape is also texture-adjacent - fluted and channelled are relief, and finish.texture already carries ribbed - so it needs decomposing before it seeds anything, not adopting whole.",
22184
+ gap: "Identified by the crosswalk-residue test (TAX-14) from an architecture-projects platform's Sculptural value. That platform's own FORMAL_MOVE_EXAMPLES is the obvious starting point. Not yet authored. A materials-retrieval system's ms_shape was considered as a seed on 2026-08-27 and REJECTED: its twelve terms (linear, fluted, channelled, blocky, slender, faceted, gridded, organic) describe a product's own profile, while this axis asks what geometric move a building makes. Seeding it here would put two questions on one axis, which is the defect every boundary in ADR 0001 exists to prevent. Part of ms_shape is also texture-adjacent - fluted and channelled are relief, and finish.texture already carries ribbed - so it needs decomposing before it seeds anything, not adopting whole. Since MG-2620 those words live in Product shape.",
21178
22185
  label: "Form",
21179
22186
  question: "What geometric move does it make?",
21180
22187
  slug: "form",
@@ -21216,7 +22223,7 @@ var resolveReference = (reference) => INDEX.byKey.get(canonicalKey(reference));
21216
22223
  // src/v1.ts
21217
22224
  var TAXONOMY_BASE_URI = "https://taxonomy.materialinstruments.com";
21218
22225
  var TAXONOMY_SNAPSHOT = "2026-10-02";
21219
- var TAXONOMY_VERSION = "2.6.0";
22226
+ var TAXONOMY_VERSION = "2.8.0";
21220
22227
  var PUBLISHED_V1_BASELINE = "2026-08-30";
21221
22228
  var TAX45_REVIEW_SNAPSHOT = "2026-08-31";
21222
22229
  var LIMESTONE_INTRODUCED = "2026-09-01";
@@ -21230,6 +22237,8 @@ var compareText = (left, right) => {
21230
22237
  }
21231
22238
  return 0;
21232
22239
  };
22240
+ var COLORSCOPE_BASE_URI = "https://colorscope.materialinstruments.com";
22241
+ var COLORSCOPE_CONCEPT_PREFIX = `${COLORSCOPE_BASE_URI}/id/`;
21233
22242
  var CANONICAL_SEGMENT = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;
21234
22243
  var canonicalSegment = (segment) => {
21235
22244
  if (!CANONICAL_SEGMENT.test(segment)) {
@@ -21245,15 +22254,30 @@ var DEFAULT_PROVENANCE = {
21245
22254
  basis: "authored",
21246
22255
  source: "@instruments/taxonomy published corpus"
21247
22256
  };
21248
- var lifecycleFor = (term12) => {
21249
- const successor = term12?.supersededByReference === void 0 ? void 0 : resolveReference(term12.supersededByReference);
22257
+ var isTaxonomyConceptUri = (uri) => uri.startsWith(`${TAXONOMY_BASE_URI}/id/`);
22258
+ var isColorScopeConceptUri = (uri) => uri.startsWith(COLORSCOPE_CONCEPT_PREFIX);
22259
+ var isFullUri = (reference) => reference.startsWith("https://");
22260
+ var successorUri = (reference) => {
22261
+ if (reference === void 0) {
22262
+ return void 0;
22263
+ }
22264
+ if (isFullUri(reference)) {
22265
+ if (isTaxonomyConceptUri(reference) || isColorScopeConceptUri(reference)) {
22266
+ return reference;
22267
+ }
22268
+ throw new Error(`Unrecognised successor URI: "${reference}".`);
22269
+ }
22270
+ const successor = resolveReference(reference);
21250
22271
  const successorAxis = successor === void 0 ? void 0 : AXES.find((axis) => axis.slug === successor.axisSlug);
21251
- const supersededBy = successor === void 0 || successorAxis === void 0 ? void 0 : conceptUri(
22272
+ return successor === void 0 || successorAxis === void 0 ? void 0 : conceptUri(
21252
22273
  successor.axisSlug,
21253
22274
  successor.facetSlug,
21254
22275
  successor.termSlug,
21255
22276
  successorAxis.facets.length > 1 || successorAxis.facets[0]?.slug !== successorAxis.slug
21256
22277
  );
22278
+ };
22279
+ var lifecycleFor = (term12) => {
22280
+ const supersededBy = successorUri(term12?.supersededByReference);
21257
22281
  return {
21258
22282
  introducedAt: term12?.introducedAt ?? PUBLISHED_V1_BASELINE,
21259
22283
  reviewedAt: term12?.reviewedAt ?? term12?.introducedAt ?? PUBLISHED_V1_BASELINE,
@@ -21273,7 +22297,12 @@ var inversePredicate = {
21273
22297
  "suitable-for": "supported-by",
21274
22298
  "typically-in": "typically-contains"
21275
22299
  };
21276
- var isColorScopeTerm = (term12) => term12.canonicalAuthority?.authority === "colorscope";
22300
+ var colorScopeConceptUri = (uri) => {
22301
+ if (!isColorScopeConceptUri(uri)) {
22302
+ throw new Error(`Not a ColorScope concept URI: "${uri}".`);
22303
+ }
22304
+ return uri;
22305
+ };
21277
22306
  var governanceFor = (explanation, term12) => ({
21278
22307
  explanation,
21279
22308
  lifecycle: lifecycleFor(term12),
@@ -21327,17 +22356,21 @@ var addTermNodes = (assembly, axis, axisUri) => {
21327
22356
  governedEdge(axisUri, "has-facet", facetUri, facet.governance, "inverse")
21328
22357
  );
21329
22358
  for (const [termOrder, term12] of facet.terms.entries()) {
21330
- if (isColorScopeTerm(term12)) {
21331
- continue;
21332
- }
21333
- const uri = conceptUri(axis.slug, facet.slug, term12.slug, faceted);
22359
+ const external = term12.canonicalAuthority;
22360
+ const uri = external === void 0 ? conceptUri(axis.slug, facet.slug, term12.slug, faceted) : colorScopeConceptUri(external.uri);
21334
22361
  const qualified = faceted ? `${axis.slug}.${facet.slug}.${term12.slug}` : `${axis.slug}.${term12.slug}`;
21335
22362
  assembly.conceptByQualifiedSlug.set(qualified, uri);
21336
22363
  assembly.conceptByAxisAndTerm.set(`${axis.slug}.${term12.slug}`, uri);
21337
- const governance = governanceFor(
22364
+ const governance = external === void 0 ? governanceFor(
21338
22365
  `Taxonomy governs the canonical identity and meaning of ${term12.label}.`,
21339
22366
  term12
21340
- );
22367
+ ) : {
22368
+ ...governanceFor(
22369
+ `ColorScope governs the identity and meaning of ${term12.label}. Taxonomy lists it so that any term can relate to it, and defines nothing about it.`,
22370
+ term12
22371
+ ),
22372
+ steward: "@materialinstruments/colorscope"
22373
+ };
21341
22374
  assembly.nodes.push({
21342
22375
  ...term12.altLabels === void 0 ? {} : { altLabels: term12.altLabels },
21343
22376
  axis: axisUri,
@@ -21345,7 +22378,8 @@ var addTermNodes = (assembly, axis, axisUri) => {
21345
22378
  ...term12.external === void 0 ? {} : { externalReferences: externalReferences(term12.external) },
21346
22379
  facet: facetUri,
21347
22380
  governance,
21348
- governedBy: "taxonomy",
22381
+ governedBy: external === void 0 ? "taxonomy" : "colorscope",
22382
+ ...term12.hex === void 0 ? {} : { hex: term12.hex },
21349
22383
  kind: "concept",
21350
22384
  label: term12.label,
21351
22385
  lifecycle: governance.lifecycle,
@@ -21411,7 +22445,7 @@ var addSemanticEdges = (assembly) => {
21411
22445
  if (from === void 0) {
21412
22446
  continue;
21413
22447
  }
21414
- const { broaderSlug, related } = location.term;
22448
+ const { broaderSlug, related: related4 } = location.term;
21415
22449
  if (broaderSlug !== void 0) {
21416
22450
  const to = assembly.conceptByAxisAndTerm.get(
21417
22451
  `${location.axisSlug}.${broaderSlug}`
@@ -21423,7 +22457,7 @@ var addSemanticEdges = (assembly) => {
21423
22457
  );
21424
22458
  }
21425
22459
  }
21426
- for (const relation of related ?? []) {
22460
+ for (const relation of related4 ?? []) {
21427
22461
  const resolved = resolveReference(relation.target);
21428
22462
  const to = resolved === void 0 ? void 0 : assembly.conceptByQualifiedSlug.get(resolved.qualifiedReference);
21429
22463
  if (to === void 0) {
@@ -21473,13 +22507,25 @@ var KNOWLEDGE_GRAPH = buildKnowledgeGraph();
21473
22507
  var COLOR_FAMILY_REFERENCE_KIND = "color-family";
21474
22508
  var NAMED_COLOR_REFERENCE_KIND = "named-color";
21475
22509
  var COLOR_SCOPE_REFERENCE_KINDS = [
22510
+ "basic-tone",
21476
22511
  "chroma-level",
21477
22512
  COLOR_FAMILY_REFERENCE_KIND,
21478
22513
  "lightness-level",
22514
+ "modifier",
21479
22515
  NAMED_COLOR_REFERENCE_KIND,
21480
22516
  "palette-mood",
21481
22517
  "temperature-level"
21482
22518
  ];
22519
+ var COLORSCOPE_URI_KIND = {
22520
+ "basic-tone": "basic-tone",
22521
+ "chroma-level": "chroma",
22522
+ "color-family": "family",
22523
+ "lightness-level": "lightness",
22524
+ modifier: "modifier",
22525
+ "named-color": "color",
22526
+ "palette-mood": "palette",
22527
+ "temperature-level": "temperature"
22528
+ };
21483
22529
  var lexicalGovernance = (explanation, provenance, lifecycle = lifecycleFor()) => ({
21484
22530
  explanation,
21485
22531
  lifecycle,
@@ -21488,9 +22534,10 @@ var lexicalGovernance = (explanation, provenance, lifecycle = lifecycleFor()) =>
21488
22534
  });
21489
22535
  var colorScope = (identifier, referenceKind) => ({
21490
22536
  authority: "colorscope",
21491
- authorityUri: "https://colorscope.materialinstruments.com",
22537
+ authorityUri: COLORSCOPE_BASE_URI,
21492
22538
  identifier,
21493
- referenceKind
22539
+ referenceKind,
22540
+ uri: `${COLORSCOPE_CONCEPT_PREFIX}${COLORSCOPE_URI_KIND[referenceKind]}/${identifier}`
21494
22541
  });
21495
22542
  var WALNUT_MATERIAL = {
21496
22543
  authority: "taxonomy",
@@ -21555,7 +22602,7 @@ var TERRA_COTTA_LIFECYCLE = {
21555
22602
  reviewedAt: TERRA_COTTA_DATE,
21556
22603
  status: "active"
21557
22604
  };
21558
- var COLORSCOPE_INSTALLED = "@instruments/colorscope 9.4.0 data/reference/v1/taxonomy.json";
22605
+ var COLORSCOPE_INSTALLED = `@materialinstruments/colorscope ${COLORSCOPE_VERSION} data/reference/v1/taxonomy.json`;
21559
22606
  var reviewedTaxonomy = (path) => ({
21560
22607
  authority: "taxonomy",
21561
22608
  uri: `${TAXONOMY_BASE_URI}/id/${path}`
@@ -21661,7 +22708,96 @@ var crossoverTaxonomyAmbiguity = (phrase, meanings, explanation, source, snapsho
21661
22708
  };
21662
22709
  };
21663
22710
  var MG2620_LEXICAL_REVIEW_DATE = "2026-10-10";
22711
+ var COLOUR_REPOINT_LIFECYCLE = {
22712
+ introducedAt: PUBLISHED_V1_BASELINE,
22713
+ reviewedAt: COLOUR_LAYER_DATE,
22714
+ status: "active"
22715
+ };
22716
+ var colourWordProvenance = (identifier) => ({
22717
+ basis: "referenced",
22718
+ snapshot: COLOUR_LAYER_DATE,
22719
+ source: `${COLORSCOPE_INSTALLED} concept ${identifier}`
22720
+ });
22721
+ var capitalised = (phrase) => `${phrase.slice(0, 1).toUpperCase()}${phrase.slice(1)}`;
22722
+ var NAMED_COLOUR_WORDS = [
22723
+ "aqua",
22724
+ "blush",
22725
+ "carmine",
22726
+ "coal",
22727
+ "crimson",
22728
+ "greige",
22729
+ "ivory",
22730
+ "mauve",
22731
+ "mushroom",
22732
+ "mustard",
22733
+ "navy",
22734
+ "ochre",
22735
+ "off-white",
22736
+ "olive",
22737
+ "putty",
22738
+ "rose",
22739
+ "russet",
22740
+ "rust",
22741
+ "sage",
22742
+ "scarlet",
22743
+ "turquoise",
22744
+ "violet"
22745
+ ];
22746
+ var namedColourEntry = (phrase) => ({
22747
+ explanation: `${capitalised(phrase)} is a ColorScope named colour. Taxonomy hands the word to ColorScope, which owns the colour and the family it sits in.`,
22748
+ governance: lexicalGovernance(
22749
+ "ColorScope governs named colours and the family each belongs to; Taxonomy mints no node for one.",
22750
+ colourWordProvenance(phrase),
22751
+ COLOUR_REPOINT_LIFECYCLE
22752
+ ),
22753
+ outcome: "equivalent",
22754
+ phrase,
22755
+ target: colorScope(phrase, NAMED_COLOR_REFERENCE_KIND)
22756
+ });
22757
+ var INDIGO_ENTRY = {
22758
+ explanation: "Indigo names two ColorScope colours, Indigo Blue in the blue family and Indigo Violet in the purple family; the bare word does not settle which.",
22759
+ governance: lexicalGovernance(
22760
+ AMBIGUITY_GOVERNANCE,
22761
+ colourWordProvenance("indigo-blue and indigo-violet"),
22762
+ COLOUR_REPOINT_LIFECYCLE
22763
+ ),
22764
+ meanings: [
22765
+ colorScope("indigo-blue", NAMED_COLOR_REFERENCE_KIND),
22766
+ colorScope("indigo-violet", NAMED_COLOR_REFERENCE_KIND)
22767
+ ],
22768
+ outcome: "ambiguous",
22769
+ phrase: "indigo"
22770
+ };
22771
+ var washedEntry = (phrase) => ({
22772
+ explanation: `${capitalised(phrase)} is a wording of ColorScope's washed modifier: colour that has lost strength through age, light or wear. Taxonomy's former Faded term is deprecated in its favour.`,
22773
+ governance: lexicalGovernance(
22774
+ "ColorScope governs the washed modifier; the deprecated Taxonomy term it replaces keeps its published URI.",
22775
+ colourWordProvenance("washed"),
22776
+ COLOUR_REPOINT_LIFECYCLE
22777
+ ),
22778
+ outcome: "equivalent",
22779
+ phrase,
22780
+ target: colorScope("washed", "modifier")
22781
+ });
22782
+ var SATURATED_ENTRY = {
22783
+ explanation: "Saturated is a ColorScope chroma level. Taxonomy hands the word to ColorScope, which owns it.",
22784
+ governance: lexicalGovernance(
22785
+ "ColorScope governs its chroma levels; Taxonomy lists no node for one.",
22786
+ colourWordProvenance("saturated"),
22787
+ COLOUR_REPOINT_LIFECYCLE
22788
+ ),
22789
+ outcome: "equivalent",
22790
+ phrase: "saturated",
22791
+ target: colorScope("saturated", "chroma-level")
22792
+ };
22793
+ var COLOUR_PHRASE_ENTRIES = [
22794
+ ...NAMED_COLOUR_WORDS.map(namedColourEntry),
22795
+ INDIGO_ENTRY,
22796
+ ...["faded", "sun-bleached", "washed"].map(washedEntry),
22797
+ SATURATED_ENTRY
22798
+ ];
21664
22799
  var AUTHORED_PHRASE_ENTRIES = [
22800
+ ...COLOUR_PHRASE_ENTRIES,
21665
22801
  {
21666
22802
  explanation: "Matt is the British-English spelling of matte for surface sheen. Qualifiers such as semi-matt and full-matt retain their own meanings; this entry does not strip them.",
21667
22803
  governance: lexicalGovernance(
@@ -21731,20 +22867,6 @@ var AUTHORED_PHRASE_ENTRIES = [
21731
22867
  status: "active"
21732
22868
  }
21733
22869
  ),
21734
- {
21735
- explanation: "Blue is a ColorScope color-family meaning; Taxonomy references that authority rather than minting a rival color identity.",
21736
- governance: lexicalGovernance(
21737
- "The ColorScope family is the single governed meaning of the unqualified color word.",
21738
- {
21739
- basis: "vendored",
21740
- snapshot: PUBLISHED_V1_BASELINE,
21741
- source: "@instruments/colorscope COLOR_FAMILIES"
21742
- }
21743
- ),
21744
- outcome: "equivalent",
21745
- phrase: "blue",
21746
- target: colorScope("blue", COLOR_FAMILY_REFERENCE_KIND)
21747
- },
21748
22870
  crossoverAmbiguity(
21749
22871
  "alabaster",
21750
22872
  `${TAXONOMY_BASE_URI}/id/material/alabaster`,
@@ -22607,10 +23729,43 @@ var lexicalPhrases = (term12) => [term12.slug, term12.label, ...term12.altLabels
22607
23729
  (phrase, index, phrases) => phrase.length > 0 && phrases.indexOf(phrase) === index
22608
23730
  );
22609
23731
  var targetKey = (target) => target.authority === "taxonomy" ? `taxonomy:${target.uri}` : `colorscope:${target.referenceKind}:${target.identifier}`;
22610
- var inferredLifecycle = (meanings) => {
23732
+ var PHRASES_RESOLVED_BEFORE_COLOUR_NODES = /* @__PURE__ */ new Set([
23733
+ "beige",
23734
+ "black",
23735
+ "blue",
23736
+ "brown",
23737
+ "colorful",
23738
+ "cool",
23739
+ "cream",
23740
+ "dark",
23741
+ "gray",
23742
+ "green",
23743
+ "grey",
23744
+ "light",
23745
+ "mid",
23746
+ "medium",
23747
+ "monochrome",
23748
+ "muted",
23749
+ "neutral",
23750
+ "orange",
23751
+ "pink",
23752
+ "polychrome",
23753
+ "purple",
23754
+ "red",
23755
+ "taupe",
23756
+ "teal",
23757
+ "vibrant",
23758
+ "warm",
23759
+ "white",
23760
+ "yellow"
23761
+ ]);
23762
+ var inferredLifecycle = (meanings, phrase) => {
22611
23763
  const terms = meanings.flatMap((meaning) => meaning.terms);
22612
23764
  const lifecycles = terms.map((term12) => lifecycleFor(term12));
22613
- const [introducedAt] = terms.map((term12) => term12.introducedAt ?? PUBLISHED_V1_BASELINE).toSorted(compareText);
23765
+ const [introducedAt] = [
23766
+ ...terms.map((term12) => term12.introducedAt ?? PUBLISHED_V1_BASELINE),
23767
+ ...PHRASES_RESOLVED_BEFORE_COLOUR_NODES.has(phrase) ? [PUBLISHED_V1_BASELINE] : []
23768
+ ].toSorted(compareText);
22614
23769
  const reviewedAt = terms.map(
22615
23770
  (term12) => term12.reviewedAt ?? term12.introducedAt ?? PUBLISHED_V1_BASELINE
22616
23771
  ).toSorted(compareText).at(-1);
@@ -22659,7 +23814,7 @@ var inferredLexicalEntries = () => {
22659
23814
  if (first === void 0) {
22660
23815
  throw new Error(`Lexical phrase "${phrase}" has no meaning.`);
22661
23816
  }
22662
- const lifecycle = inferredLifecycle(meanings);
23817
+ const lifecycle = inferredLifecycle(meanings, phrase);
22663
23818
  if (second === void 0) {
22664
23819
  return {
22665
23820
  explanation: `The published spelling \u201C${phrase}\u201D has one governed meaning.`,
@@ -22867,6 +24022,7 @@ var ASSESSMENT_POLICY_REVISION = `sha256:${createHash2("sha256").update(
22867
24022
  export {
22868
24023
  ASSESSMENT_AUTHORITY_REFERENCES,
22869
24024
  ASSESSMENT_POLICY_REVISION,
24025
+ COLORSCOPE_BASE_URI,
22870
24026
  COLOR_SCOPE_REFERENCE_KINDS,
22871
24027
  CONCEPT_ASSESSMENT_POLICIES,
22872
24028
  KNOWLEDGE_GRAPH,