Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 20 additions & 20 deletions src/components/advanced/TreatmentDetection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ interface TreatmentType {
const TREATMENT_TYPES: TreatmentType[] = [
{
name: 'Heat Treatment',
description: 'Controlled heating to improve color and clarity',
purpose: 'Color improvement, inclusion dissolving',
description: 'Controlled heating to improve colour and clarity',
purpose: 'Colour improvement, inclusion dissolving',
detectability: 'Moderate'
},
{
Expand All @@ -37,8 +37,8 @@ const TREATMENT_TYPES: TreatmentType[] = [
},
{
name: 'Dyeing',
description: 'Adding color through dyes or stains',
purpose: 'Color enhancement',
description: 'Adding colour through dyes or stains',
purpose: 'Colour enhancement',
detectability: 'Easy'
},
{
Expand All @@ -49,26 +49,26 @@ const TREATMENT_TYPES: TreatmentType[] = [
},
{
name: 'Irradiation',
description: 'Exposure to radiation to alter color',
purpose: 'Color change (blue topaz, colored diamonds)',
description: 'Exposure to radiation to alter colour',
purpose: 'Colour change (blue topaz, coloured diamonds)',
detectability: 'Difficult'
},
{
name: 'Diffusion',
description: 'Surface or bulk diffusion of color-causing elements',
purpose: 'Color enhancement',
description: 'Surface or bulk diffusion of colour-causing elements',
purpose: 'Colour enhancement',
detectability: 'Moderate'
},
{
name: 'Coating',
description: 'Thin surface coating for color/effect',
purpose: 'Color, iridescence, or protective layer',
description: 'Thin surface coating for colour/effect',
purpose: 'Colour, iridescence, or protective layer',
detectability: 'Easy'
},
{
name: 'HPHT',
description: 'High Pressure High Temperature processing',
purpose: 'Color improvement (diamonds, synthetic gems)',
purpose: 'Colour improvement (diamonds, synthetic gems)',
detectability: 'Very Difficult'
},
];
Expand All @@ -77,23 +77,23 @@ const TREATMENT_INDICATORS: Treatment[] = [
{
treatment: 'Heat (Corundum)',
gems: 'Ruby, Sapphire',
visualIndicators: 'Silk dissolution, rounded inclusions, color zoning changes, stress fractures',
visualIndicators: 'Silk dissolution, rounded inclusions, colour zoning changes, stress fractures',
instrumentalTests: 'Microscopy (inclusion changes), spectroscopy (Fe³⁺ peaks)',
permanence: 'Permanent',
disclosure: 'Standard practice - disclosure varies by market'
},
{
treatment: 'Beryllium Diffusion',
gems: 'Sapphire (orange padparadscha)',
visualIndicators: 'Color concentration at facet junctions, uneven color',
visualIndicators: 'Colour concentration at facet junctions, uneven colour',
instrumentalTests: 'EDXRF (beryllium detection), FTIR, UV-Vis',
permanence: 'Permanent',
disclosure: 'Required - significantly affects value'
},
{
treatment: 'Fracture Filling (Glass)',
gems: 'Ruby, Diamond',
visualIndicators: 'Flash effect, color flashes in fissures, surface residue',
visualIndicators: 'Flash effect, colour flashes in fissures, surface residue',
instrumentalTests: 'Microscopy (gas bubbles, flow structures)',
permanence: 'Not permanent - avoid heat/ultrasonic',
disclosure: 'Required - major value impact'
Expand All @@ -109,31 +109,31 @@ const TREATMENT_INDICATORS: Treatment[] = [
{
treatment: 'Irradiation + Heat',
gems: 'Blue Topaz, Fancy Diamonds',
visualIndicators: 'Uniform color, specific color types (Swiss/London blue)',
instrumentalTests: 'Spectroscopy (radiation-induced defects), color centers',
visualIndicators: 'Uniform colour, specific colour types (Swiss/London blue)',
instrumentalTests: 'Spectroscopy (radiation-induced defects), colour centres',
permanence: 'Permanent (stable)',
disclosure: 'Required for blue topaz'
},
{
treatment: 'Dyeing',
gems: 'Jade, Chalcedony, Pearls',
visualIndicators: 'Color in pores/fractures, unnatural colors, concentrations',
visualIndicators: 'Colour in pores/fractures, unnatural colours, concentrations',
instrumentalTests: 'Microscopy (dye concentrations), Chelsea filter, spectroscopy',
permanence: 'Not permanent - can fade',
disclosure: 'Required - major value impact'
},
{
treatment: 'Coating',
gems: 'Topaz (Mystic), Diamond',
visualIndicators: 'Wear at facet edges, scratches revealing base color',
visualIndicators: 'Wear at facet edges, scratches revealing base colour',
instrumentalTests: 'Microscopy (edge chipping), spectroscopy',
permanence: 'Not permanent - wears off',
disclosure: 'Required - temporary treatment'
},
{
treatment: 'Lattice Diffusion',
gems: 'Sapphire (full color)',
visualIndicators: 'Even color distribution, possible surface concentration',
gems: 'Sapphire (full colour)',
visualIndicators: 'Even colour distribution, possible surface concentration',
instrumentalTests: 'EDXRF (Ti, Fe detection at surface), FTIR',
permanence: 'Permanent',
disclosure: 'Required - affects value'
Expand Down
6 changes: 3 additions & 3 deletions src/components/calculator/CriticalAngleCalc.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,9 @@ export function CriticalAngleCalc() {
</div>

<div className="text-sm text-slate-600 space-y-1">
<p><strong>Diamond (RI 2.417):</strong> θc = 24.4° — Excellent light return</p>
<p><strong>Corundum (RI 1.77):</strong> θc = 34.4° — Good light return</p>
<p><strong>Quartz (RI 1.55):</strong> θc = 40.2° — Moderate light return</p>
<p><strong>Diamond (RI 2.417):</strong> θc = 24.4° (excellent light return)</p>
<p><strong>Corundum (RI 1.77):</strong> θc = 34.4° (good light return)</p>
<p><strong>Quartz (RI 1.55):</strong> θc = 40.2° (moderate light return)</p>
</div>
</div>
);
Expand Down
4 changes: 2 additions & 2 deletions src/components/calculator/DispersionCalculator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ export function DispersionCalculator() {
value={result.dispersion}
precision={3}
label={`Dispersion (${result.category})`}
classification={`${result.category === 'Very High' || result.category === 'High' ? 'Excellent' : result.category === 'Moderate' ? 'Good' : 'Low'} spectral color separation`}
classification={`${result.category === 'Very High' || result.category === 'High' ? 'Excellent' : result.category === 'Moderate' ? 'Good' : 'Low'} spectral colour separation`}
classificationLevel={result.level}
/>
)}
Expand All @@ -164,7 +164,7 @@ export function DispersionCalculator() {
<div className="bg-blue-50 border border-blue-200 rounded-lg p-4">
<h4 className="text-sm font-semibold text-blue-900 mb-2">Why Dispersion Matters</h4>
<p className="text-sm text-blue-800">
Dispersion measures how much a gem splits white light into spectral colors. Higher dispersion creates more "fire" — the rainbow flashes seen in a well-cut stone. Diamond's high dispersion (0.044) is why it shows exceptional fire, while quartz's low dispersion (0.013) produces minimal color flashes.
Dispersion measures how much a gem splits white light into spectral colours. Higher dispersion creates more "fire" (the rainbow flashes seen in a well-cut stone). Diamond's high dispersion (0.044) is why it shows exceptional fire, while quartz's low dispersion (0.013) produces minimal colour flashes.
</p>
</div>
</div>
Expand Down
4 changes: 2 additions & 2 deletions src/components/gallery/FamilyModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ export function FamilyModal({ family, onClose }: FamilyModalProps) {
/>
</div>

{/* Crystal Visualization */}
{/* Crystal Visualisation */}
<div className="flex-1 flex items-center justify-center relative">
{viewMode === '2d' ? (
<div className="w-full max-w-sm aspect-square relative">
Expand Down Expand Up @@ -394,7 +394,7 @@ export function FamilyModal({ family, onClose }: FamilyModalProps) {
onClick={handleDownloadSVG}
disabled={!sanitizedSvg}
className="inline-flex items-center gap-1.5 px-3 py-1.5 text-sm bg-slate-100 hover:bg-slate-200 disabled:opacity-50 disabled:cursor-not-allowed text-slate-700 rounded-lg transition-colors"
title="Download 2D SVG visualization"
title="Download 2D SVG visualisation"
>
<svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
Expand Down
4 changes: 2 additions & 2 deletions src/components/gallery/MineralModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ export function MineralModal({ mineral, onClose }: MineralModalProps) {
/>
</div>

{/* Crystal Visualization */}
{/* Crystal Visualisation */}
<div className="flex-1 flex items-center justify-center relative">
{viewMode === '2d' ? (
<div className="w-full max-w-sm aspect-square relative">
Expand Down Expand Up @@ -248,7 +248,7 @@ export function MineralModal({ mineral, onClose }: MineralModalProps) {
<button
onClick={handleDownloadSVG}
className="inline-flex items-center gap-1.5 px-3 py-1.5 text-sm bg-slate-100 hover:bg-slate-200 text-slate-700 rounded-lg transition-colors"
title="Download 2D SVG visualization"
title="Download 2D SVG visualisation"
>
<svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
Expand Down
38 changes: 19 additions & 19 deletions src/components/identification/HardnessReference.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,32 +27,32 @@ const MOHS_SCALE: MohsLevel[] = [
{ hardness: 8, mineral: 'Topaz / Spinel', wearResistance: 'Excellent for daily wear' },
{ hardness: 7.5, mineral: 'Beryl (Emerald / Aquamarine)', wearResistance: 'Good for most jewelry' },
{ hardness: 7, mineral: 'Quartz', wearResistance: 'Good for most jewelry' },
{ hardness: 6.5, mineral: 'Tanzanite / Peridot', wearResistance: 'Fair — avoid rings' },
{ hardness: 6, mineral: 'Feldspar (Moonstone)', wearResistance: 'Fair — pendants/earrings' },
{ hardness: 5, mineral: 'Apatite', wearResistance: 'Poor — collector only' },
{ hardness: 4, mineral: 'Fluorite', wearResistance: 'Poor — collector only' },
{ hardness: 6.5, mineral: 'Tanzanite / Peridot', wearResistance: 'Fair: avoid rings' },
{ hardness: 6, mineral: 'Feldspar (Moonstone)', wearResistance: 'Fair: pendants/earrings' },
{ hardness: 5, mineral: 'Apatite', wearResistance: 'Poor: collector only' },
{ hardness: 4, mineral: 'Fluorite', wearResistance: 'Poor: collector only' },
{ hardness: 3, mineral: 'Calcite', wearResistance: 'Not suitable for jewelry' },
];

// Fallback data if database is unavailable
const FALLBACK_GEMS: GemHardness[] = [
{ name: 'Diamond', hardness: '10', wearability: 'Excellent', notes: 'Perfect cleavage — avoid sharp blows' },
{ name: 'Ruby', hardness: '9', wearability: 'Excellent', notes: 'No cleavage — extremely durable' },
{ name: 'Sapphire', hardness: '9', wearability: 'Excellent', notes: 'No cleavage — extremely durable' },
{ name: 'Diamond', hardness: '10', wearability: 'Excellent', notes: 'Perfect cleavage; avoid sharp blows' },
{ name: 'Ruby', hardness: '9', wearability: 'Excellent', notes: 'No cleavage; extremely durable' },
{ name: 'Sapphire', hardness: '9', wearability: 'Excellent', notes: 'No cleavage; extremely durable' },
{ name: 'Alexandrite', hardness: '8.5', wearability: 'Excellent', notes: 'Good toughness' },
{ name: 'Spinel', hardness: '8', wearability: 'Excellent', notes: 'No cleavage — excellent toughness' },
{ name: 'Topaz', hardness: '8', wearability: 'Good', notes: 'Perfect cleavage — handle with care' },
{ name: 'Emerald', hardness: '7.5–8', wearability: 'Fair', notes: 'Usually included — avoid ultrasonic' },
{ name: 'Spinel', hardness: '8', wearability: 'Excellent', notes: 'No cleavage; excellent toughness' },
{ name: 'Topaz', hardness: '8', wearability: 'Good', notes: 'Perfect cleavage; handle with care' },
{ name: 'Emerald', hardness: '7.5–8', wearability: 'Fair', notes: 'Usually included; avoid ultrasonic' },
{ name: 'Aquamarine', hardness: '7.5–8', wearability: 'Good', notes: 'Better toughness than emerald' },
{ name: 'Tourmaline', hardness: '7–7.5', wearability: 'Good', notes: 'Can be brittle — avoid sharp blows' },
{ name: 'Garnet', hardness: '6.5–7.5', wearability: 'Good', notes: 'Varies by type — generally durable' },
{ name: 'Tourmaline', hardness: '7–7.5', wearability: 'Good', notes: 'Can be brittle; avoid sharp blows' },
{ name: 'Garnet', hardness: '6.5–7.5', wearability: 'Good', notes: 'Varies by type; generally durable' },
{ name: 'Amethyst', hardness: '7', wearability: 'Good', notes: 'Durable but can fade in sunlight' },
{ name: 'Peridot', hardness: '6.5–7', wearability: 'Fair', notes: 'Avoid rings — better for pendants' },
{ name: 'Tanzanite', hardness: '6–6.5', wearability: 'Fair', notes: 'Perfect cleavage — very fragile' },
{ name: 'Moonstone', hardness: '6–6.5', wearability: 'Fair', notes: 'Two cleavage directions — fragile' },
{ name: 'Opal', hardness: '5–6.5', wearability: 'Poor', notes: 'Hydrous — can crack with drying' },
{ name: 'Turquoise', hardness: '5–6', wearability: 'Poor', notes: 'Porous — avoid chemicals/heat' },
{ name: 'Pearl', hardness: '2.5–4.5', wearability: 'Poor', notes: 'Organic — avoid acids/cosmetics' },
{ name: 'Peridot', hardness: '6.5–7', wearability: 'Fair', notes: 'Avoid rings; better for pendants' },
{ name: 'Tanzanite', hardness: '6–6.5', wearability: 'Fair', notes: 'Perfect cleavage; very fragile' },
{ name: 'Moonstone', hardness: '6–6.5', wearability: 'Fair', notes: 'Two cleavage directions; fragile' },
{ name: 'Opal', hardness: '5–6.5', wearability: 'Poor', notes: 'Hydrous; can crack with drying' },
{ name: 'Turquoise', hardness: '5–6', wearability: 'Poor', notes: 'Porous; avoid chemicals/heat' },
{ name: 'Pearl', hardness: '2.5–4.5', wearability: 'Poor', notes: 'Organic; avoid acids/cosmetics' },
];

// Compute wearability from hardness value
Expand Down Expand Up @@ -235,7 +235,7 @@ export function HardnessReference() {
<div className="flex flex-wrap gap-x-5 gap-y-1 text-xs text-slate-600">
<span>• <strong>Hardness</strong> = resistance to scratching</span>
<span>• <strong>Toughness</strong> = resistance to breaking (not the same thing)</span>
<span>• Diamond is hard but has perfect cleavage — jade is softer but tougher</span>
<span>• Diamond is hard but has perfect cleavage; jade is softer but tougher</span>
</div>

<div className="text-sm text-slate-600">
Expand Down
10 changes: 5 additions & 5 deletions src/components/lab/ChelseaFilter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const REACTIONS: ChelseaReaction[] = [
gem: 'Emerald (Natural Colombian)',
natural: 'Strong red/pink',
synthetic: 'Strong red/pink',
notes: 'Chrome-colored emeralds fluoresce',
notes: 'Chrome-coloured emeralds fluoresce',
category: 'emerald',
},
{
Expand Down Expand Up @@ -53,7 +53,7 @@ const REACTIONS: ChelseaReaction[] = [
gem: 'Synthetic Blue Spinel',
natural: 'N/A',
synthetic: 'Red',
notes: 'Cobalt-colored shows red',
notes: 'Cobalt-coloured shows red',
category: 'synthetic',
},
{
Expand Down Expand Up @@ -81,13 +81,13 @@ const REACTIONS: ChelseaReaction[] = [
gem: 'Peridot',
natural: 'Remains green',
synthetic: 'Remains green',
notes: 'Iron-colored, no reaction',
notes: 'Iron-coloured, no reaction',
category: 'other',
},
{
gem: 'Diamond',
natural: 'Remains white/colorless',
synthetic: 'Remains white/colorless',
natural: 'Remains white/colourless',
synthetic: 'Remains white/colourless',
notes: 'No reaction expected',
category: 'other',
},
Expand Down
4 changes: 2 additions & 2 deletions src/components/lab/LabTools.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export function LabTools() {
<ToolSection
id="chelsea"
title="Chelsea Filter"
description="Expected color reactions for gem identification"
description="Expected colour reactions for gem identification"
iconPath={ICON_PATHS.filter}
accent="rose"
>
Expand All @@ -30,7 +30,7 @@ export function LabTools() {
<ToolSection
id="spectroscope"
title="Spectroscope Calculator"
description="Wavelength ↔ color converter and absorption line reference"
description="Wavelength ↔ colour converter and absorption line reference"
iconPath={ICON_PATHS.spectrum}
accent="rose"
>
Expand Down
6 changes: 3 additions & 3 deletions src/components/lab/SpectroscopeCalculator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export function SpectroscopeCalculator() {
<div className="space-y-6">
<div>
<p className="text-sm text-slate-600">
Enter a wavelength (380-780nm) to see its color, or browse common absorption lines by gem.
Enter a wavelength (380-780nm) to see its colour, or browse common absorption lines by gem.
</p>
</div>

Expand Down Expand Up @@ -132,7 +132,7 @@ export function SpectroscopeCalculator() {
{isValid && (
<div className="p-6 rounded-lg border border-slate-300">
<div className="text-center">
<div className="text-sm text-slate-600 mb-2">Color at {wl}nm</div>
<div className="text-sm text-slate-600 mb-2">Colour at {wl}nm</div>
<div
className="w-full h-24 rounded-lg border-2 border-slate-300 shadow-inner"
style={{ backgroundColor: color }}
Expand Down Expand Up @@ -165,7 +165,7 @@ export function SpectroscopeCalculator() {
</span>
</div>
<div className="text-sm text-slate-600">
<span className="font-mono font-medium">{line.wavelength}nm</span> — {line.color}
<span className="font-mono font-medium">{line.wavelength}nm</span> – {line.color}
</div>
<p className="text-xs text-slate-600 mt-1">{line.notes}</p>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/components/layout/Footer.astro
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ const showPackages = path.startsWith('/docs');
gemmology.dev
</a>
<p class="mt-3 text-sm text-slate-600">
Crystal structure visualization and gemmological reference for FGA students and professionals.
Crystal structure visualisation and gemmological reference for FGA students and professionals.
</p>
</div>

Expand Down
Loading
Loading