Cannabis Freedom Index

Changelog 2981716

countries in yaml

268 places added14 files of code, design or docs +18,598 −4,923 lines

Score changes 268 places

  1. Michigan new55
  2. Alberta new54
  3. British Columbia new54
  4. Ontario new54
  5. New York new54
  6. Canada new53
  7. Nova Scotia new53
  8. Northwest Territories new52
  9. New Mexico new52
  10. Rhode Island new52
  11. Manitoba new51
  12. New Brunswick new51
  13. Newfoundland and Labrador new51
  14. Nunavut new51
  15. Prince Edward Island new51
  16. Saskatchewan new51
  17. Yukon new51
  18. Connecticut new51
  19. Massachusetts new51
  20. Minnesota new51
  21. Oregon new51
  22. Uruguay new51
  23. Alaska new50
  24. California new50
  25. Colorado new50
  26. Arizona new49
  27. Maine new49
  28. Missouri new49
  29. Ohio new49
  30. Vermont new49
  31. South Africa new49
  32. District of Columbia new47
  33. Maryland new46
  34. Montana new46
  35. Virginia new46
  36. Nevada new45
  37. Czechia new44
  38. Germany new44
  39. New Jersey new44
  40. Malta new41
  41. Delaware new41
  42. Illinois new41
  43. Quebec new40
  44. Washington new40
  45. Australian Capital Territory new39
  46. Colombia new39
  47. Dominica new37
  48. Saint Lucia new37
  49. Luxembourg new37
  50. Netherlands new37
  51. Trinidad and Tobago new37
  52. Antigua and Barbuda new36
  53. Jamaica new35
  54. United States new34
  55. Saint Kitts and Nevis new33
  56. Spain new31
  57. Switzerland new30
  58. Northern Territory new27
  59. South Australia new27
  60. Thailand new27
  61. Argentina new26
  62. Chile new26
  63. Italy new26
  64. Belize new25
  65. Israel new25
  66. Mexico new25
  67. Belgium new24
  68. Portugal new24
  69. Louisiana new24
  70. Mississippi new24
  71. New Hampshire new24
  72. Saint Vincent and the Grenadines new24
  73. Brazil new23
  74. Costa Rica new23
  75. Slovenia new23
  76. Ukraine new23
  77. Australia new22
  78. Barbados new22
  79. Bahamas new22
  80. Georgia new22
  81. Nebraska new22
  82. Austria new21
  83. Queensland new21
  84. Peru new21
  85. Denmark new20
  86. Croatia new20
  87. New Zealand new20
  88. New South Wales new19
  89. Tasmania new19
  90. Victoria new19
  91. Western Australia new19
  92. Estonia new19
  93. Moldova new19
  94. Hawaii new19
  95. Armenia new18
  96. Ecuador new18
  97. Kyrgyzstan new18
  98. Paraguay new18
  99. North Dakota new18
  100. Micronesia new17
  101. Guyana new17
  102. Norway new17
  103. Palau new17
  104. Ghana new16
  105. Iceland new16
  106. Nicaragua new16
  107. North Carolina new16
  108. United Kingdom new15
  109. Albania new14
  110. Greece new14
  111. Ireland new14
  112. Kazakhstan new14
  113. Latvia new14
  114. Poland new14
  115. Arkansas new14
  116. Florida new14
  117. Oklahoma new14
  118. Pennsylvania new14
  119. Utah new14
  120. West Virginia new14
  121. Venezuela new14
  122. Finland new13
  123. Fiji new13
  124. France new13
  125. India new13
  126. Cambodia new13
  127. Liechtenstein new13
  128. Morocco new13
  129. Kentucky new13
  130. South Dakota new13
  131. Laos new12
  132. North Macedonia new12
  133. Nepal new12
  134. Panama new12
  135. Seychelles new12
  136. Georgia new12
  137. Andorra new11
  138. Angola new11
  139. Bosnia and Herzegovina new11
  140. Botswana new11
  141. Côte d'Ivoire new11
  142. Cabo Verde new11
  143. Eritrea new11
  144. Grenada new11
  145. Equatorial Guinea new11
  146. Guinea-Bissau new11
  147. Honduras new11
  148. Lebanon new11
  149. Lesotho new11
  150. Lithuania new11
  151. Monaco new11
  152. Montenegro new11
  153. Marshall Islands new11
  154. Malawi new11
  155. Mozambique new11
  156. Romania new11
  157. Serbia new11
  158. Russia new11
  159. Solomon Islands new11
  160. Slovakia new11
  161. San Marino new11
  162. São Tomé and Príncipe new11
  163. Eswatini new11
  164. Tonga new11
  165. Türkiye new11
  166. Tanzania new11
  167. Vanuatu new11
  168. Kosovo new11
  169. Cyprus new10
  170. Hungary new10
  171. Mongolia new10
  172. Pakistan new10
  173. Sweden new10
  174. Burkina Faso new9
  175. Burundi new9
  176. Benin new9
  177. Bolivia new9
  178. DR Congo new9
  179. Central African Republic new9
  180. Congo new9
  181. Cameroon new9
  182. Djibouti new9
  183. Ethiopia new9
  184. Gabon new9
  185. Gambia new9
  186. Guinea new9
  187. Guatemala new9
  188. Kiribati new9
  189. Comoros new9
  190. Sri Lanka new9
  191. Liberia new9
  192. Madagascar new9
  193. Mali new9
  194. Mauritius new9
  195. Namibia new9
  196. Niger new9
  197. Papua New Guinea new9
  198. Senegal new9
  199. Suriname new9
  200. Chad new9
  201. Togo new9
  202. Timor-Leste new9
  203. Tuvalu new9
  204. Uganda new9
  205. Iowa new9
  206. Texas new9
  207. Samoa new9
  208. Zimbabwe new9
  209. Azerbaijan new8
  210. Bulgaria new8
  211. Bhutan new8
  212. Palestine new8
  213. Indiana new8
  214. South Carolina new8
  215. Wisconsin new8
  216. Wyoming new7
  217. Alabama new6
  218. Idaho new6
  219. Kansas new6
  220. Tennessee new6
  221. Uzbekistan new6
  222. Vietnam new6
  223. China new5
  224. Iran new4
  225. Myanmar new4
  226. Bangladesh new3
  227. Cuba new3
  228. Dominican Republic new3
  229. Algeria new3
  230. Egypt new3
  231. Haiti new3
  232. Jordan new3
  233. Kenya new3
  234. North Korea new3
  235. Libya new3
  236. Mauritania new3
  237. Nigeria new3
  238. Nauru new3
  239. Sudan new3
  240. Sierra Leone new3
  241. Somalia new3
  242. South Sudan new3
  243. El Salvador new3
  244. Syria new3
  245. Tajikistan new3
  246. Tunisia new3
  247. Yemen new3
  248. Zambia new3
  249. United Arab Emirates new2
  250. Bahrain new2
  251. Iraq new2
  252. Japan new2
  253. South Korea new2
  254. Malaysia new2
  255. Oman new2
  256. Qatar new2
  257. Rwanda new2
  258. Turkmenistan new2
  259. Taiwan new2
  260. Afghanistan new1
  261. Brunei new0
  262. Belarus new0
  263. Indonesia new0
  264. Kuwait new0
  265. Maldives new0
  266. Philippines new0
  267. Saudi Arabia new0
  268. Singapore new0

Countries and states 268 files

Code, design and documents 14 files

README.md +23 −5
@@ -36,12 +36,30 @@ Built with [Astro](https://astro.build). Pushing to `main` deploys to GitHub Pag
 | Path | What |
 |---|---|
-| `src/data/data.js` | Segments, weights, and each country's scores and summary |
-| `src/data/details.js` | Per-segment explanations and sources for each country |
-| `src/lib/facts.js` | "Did you know?" facts |
-| `src/pages/` | Home, country pages, compare page |
+| `countries/de.yaml` | Everything about one country: scores, summary, explanations, sources |
+| `countries/us/` | A federation: `index.yaml` for the country, one file per state |
+| `segments.yaml` | The six segments, their weights and level descriptions |
+| `src/` | The website: pages, components, styles |
+
+The build checks every data file against a schema (`src/content.config.ts`) and fails with a clear message if, say, a score is out of range or a segment cites a source that isn't defined.
 
 ## Contributing
 
-Corrections are welcome — laws change and many entries rest on secondary sources. To fix a country, edit its row in `src/data/data.js` and its block in `src/data/details.js`, and include a source link. Or just [open an issue](https://github.com/burningtree/cannabis-freedom-index/issues).
+Corrections are welcome — laws change and many entries rest on secondary sources. To fix a country, edit its file in `countries/`:
+
+```yaml
+updated: 2026-10-04        # change this when you edit
+scores:
+  possession: 5            # 0–10, see segments.yaml for what each level means
+segments:
+  possession:
+    text: Adults may carry up to 25 g in public…
+    sources: [bmg]         # keys from the `sources` block below
+sources:
+  bmg:
+    title: Bundesgesundheitsministerium — FAQ zum Cannabisgesetz
+    url: https://…
+```
+
+Please include a source link. Or just [open an issue](https://github.com/burningtree/cannabis-freedom-index/issues).
 
 ## Disclaimer

segments.yaml +102 −0
@@ -0,0 +1,102 @@
+# The six scored segments. Weights must add up to 100.
+# `levels` describe what a score means; values in between sit between two descriptions.
+- id: possession
+  name: Possession
+  weight: 25
+  description: Can an adult hold a small amount for personal use?
+  levels:
+    - score: 0
+      text: Prison is a realistic outcome for a small amount
+    - score: 1
+      text: A crime, but usually ends in a fine or diversion
+    - score: 3
+      text: "Decriminalised: at most an administrative fine"
+    - score: 5
+      text: Legal up to a small cap (around 30 g)
+    - score: 7
+      text: Legal with a generous cap or none at home
+    - score: 10
+      text: Unlimited — like any vegetable
+- id: cultivation
+  name: Personal cultivation
+  weight: 25
+  description: Can you grow your own plants at home?
+  levels:
+    - score: 0
+      text: Treated as drug production, prison
+    - score: 1
+      text: A crime, lesser penalties for a few plants
+    - score: 2
+      text: A few plants tolerated or decriminalised
+    - score: 4
+      text: Legal for a handful of plants (3–6)
+    - score: 6
+      text: Legal with no fixed plant cap, private only
+    - score: 10
+      text: Unlimited, indoors or out, no registration
+- id: enforcement
+  name: Punishment & enforcement
+  weight: 20
+  description: How hard does the law come down on personal users in practice?
+  levels:
+    - score: 0
+      text: Death penalty, corporal punishment or long sentences
+    - score: 1
+      text: Users are routinely jailed
+    - score: 2
+      text: Prison possible, fines typical
+    - score: 4
+      text: Fines or diversion only
+    - score: 6
+      text: Nothing inside the limits, prison for going beyond them
+    - score: 10
+      text: No cannabis offences at all
+- id: sharing
+  name: Sharing & gifting
+  weight: 10
+  description: Is passing cannabis to another adult, unpaid, treated differently from dealing?
+  levels:
+    - score: 0
+      text: Sharing equals trafficking
+    - score: 2
+      text: Illegal, but not pursued in practice
+    - score: 3
+      text: Legal grey area
+    - score: 5
+      text: Gifts between adults legal up to a cap
+    - score: 10
+      text: Give away any amount
+- id: consumption
+  name: Consumption
+  weight: 10
+  description: Is using itself an offence, and where may you do it?
+  levels:
+    - score: 0
+      text: Use itself is a crime
+    - score: 1
+      text: Illegal, lightly enforced
+    - score: 3
+      text: Legal or tolerated in private only
+    - score: 5
+      text: Legal in public with many restrictions
+    - score: 7
+      text: Allowed wherever tobacco is
+    - score: 10
+      text: No cannabis-specific rules
+- id: access
+  name: Legal access
+  weight: 10
+  description: Is there a lawful way to obtain cannabis without growing it yourself?
+  levels:
+    - score: 0
+      text: No lawful source
+    - score: 1
+      text: Medical route only, hard to use
+    - score: 3
+      text: Tolerated shops or clubs, or easy medical access
+    - score: 4
+      text: Legal clubs or state outlets with registration and caps
+    - score: 6
+      text: Licensed shops with purchase caps
+    - score: 10
+      text: Sold by anyone, no licence — like produce

src/components/CountryArticle.astro +12 −14
@@ -2,7 +2,5 @@
 // Full write-up for one country. Rendered on its own page, and fetched into the
 // drawer on the home page — so there is a single template for both views.
-import { SEGMENTS, CONTEXT, REC_LABEL, MED_LABEL } from "../data/data.js";
-import { DETAILS } from "../data/details.js";
-import { countries, segAvg, segmentPoints, segmentMax, subunitsOf, formatDate } from "../lib/countries.js";
+import { SEGMENTS, REC_LABEL, MED_LABEL, countries, segAvg, segmentPoints, segmentMax, subunitsOf, formatDate } from "../lib/countries.js";
 import { tierOf, tierColor } from "../lib/tiers.js";
 
@@ -12,9 +10,9 @@ const base = import.meta.env.BASE_URL;
 const group = subunitsOf(c.id);
 const v = sub ?? c; // whichever entity's scores are on display
-const d = sub ? null : DETAILS[c.id];
+const d = sub ? null : c.details;
 const countryUrl = `${base}country/${c.slug}/`;
 const unitUrl = (x) => `${countryUrl}${x.id}/`;
 // Date the entry was last reviewed, stored as YYYY-MM-DD and shown in full.
-const updated = sub ? group.reviewed : d?.reviewed;
+const updated = sub ? sub.reviewed : d?.reviewed;
 const updatedText = updated && formatDate(updated);
 const byName = group ? [...group.units].sort((a, b) => a.name.localeCompare(b.name)) : [];
@@ -91,5 +89,5 @@ const circ = 2 * Math.PI * r;
     )}
     {!sub && SEGMENTS.map((s, i) => {
-      const seg = d?.seg[s.detail];
+      const seg = d?.segments[i];
       return (
         <details class="segrow" open>
@@ -109,6 +107,6 @@ const circ = 2 * Math.PI * r;
               <p>{seg.t}</p>
               <ul class="srcs">
-                {seg.src.map((k) => (
-                  <li><a href={d.sources[k][1]} target="_blank" rel="noopener noreferrer">{d.sources[k][0]}</a></li>
+                {seg.src.map(([label, url]) => (
+                  <li><a href={url} target="_blank" rel="noopener noreferrer">{label}</a></li>
                 ))}
               </ul>
@@ -146,11 +144,11 @@ const circ = 2 * Math.PI * r;
       <>
         <h2 class="d-h">More context <span>not part of the score</span></h2>
-        {CONTEXT.map(([name, k]) => (
+        {d.context.map((x) => (
           <div class="segrow">
-            <div class="segrow-top"><span>{name}</span></div>
-            <p class="ctx">{d.seg[k].t}</p>
+            <div class="segrow-top"><span>{x.name}</span></div>
+            <p class="ctx">{x.t}</p>
             <ul class="srcs">
-              {d.seg[k].src.map((x) => (
-                <li><a href={d.sources[x][1]} target="_blank" rel="noopener noreferrer">{d.sources[x][0]}</a></li>
+              {x.src.map(([label, url]) => (
+                <li><a href={url} target="_blank" rel="noopener noreferrer">{label}</a></li>
               ))}
             </ul>
@@ -161,5 +159,5 @@ const circ = 2 * Math.PI * r;
           <h2 class="d-h">All sources</h2>
           <ol>
-            {Object.values(d.sources).map(([label, url]) => (
+            {d.sources.map(([label, url]) => (
               <li><a href={url} target="_blank" rel="noopener noreferrer">{label}</a></li>
             ))}

src/content.config.ts +93 −0
@@ -0,0 +1,93 @@
+// Where the site's data comes from, and what a valid file looks like.
+// The build fails with a clear message if a file in /countries breaks these rules.
+import { defineCollection } from "astro:content";
+import { glob, file } from "astro/loaders";
+import { z } from "astro/zod";
+import { SEGMENT_IDS, CONTEXT_IDS } from "./lib/segment-ids.js";
+
+const score = z.number().int().min(0).max(10);
+const perSegment = <T extends z.ZodTypeAny>(value: T) =>
+  z.object(Object.fromEntries(SEGMENT_IDS.map((id) => [id, value])) as Record<string, T>).strict();
+const source = z.object({ title: z.string().min(1), url: z.string().url() }).strict();
+const cited = z.object({ text: z.string().min(1), sources: z.array(z.string()) }).strict();
+const status = {
+  recreational: z.enum(["legal", "partial", "decriminalised", "illegal"]),
+  medical: z.enum(["legal", "limited", "none"]),
+};
+
+// countries/de.yaml, or countries/us/index.yaml for a federation → id "de", "us"
+const countries = defineCollection({
+  loader: glob({
+    base: "./countries",
+    pattern: ["*.yaml", "*/index.yaml"],
+    generateId: ({ entry }) => entry.replace(/(\/index)?\.yaml$/, ""),
+  }),
+  schema: z
+    .object({
+      name: z.string().min(1),
+      region: z.enum(["Africa", "Asia", "Europe", "North America", "South America", "Oceania"]),
+      iso_numeric: z.number().int().optional(), // matches the country to its shape on the map
+      ...status,
+      updated: z.coerce.date(),
+      summary: z.string().min(1),
+      scores: perSegment(score),
+      segments: perSegment(cited),
+      context: z.object(Object.fromEntries(CONTEXT_IDS.map((id) => [id, cited]))).strict(),
+      sources: z.record(z.string(), source),
+      subunits: z
+        .object({
+          label: z.string(), // "State"
+          plural: z.string(), // "states"
+          intro: z.string(),
+          sources: z.array(source),
+        })
+        .strict()
+        .optional(),
+    })
+    .strict()
+    .superRefine((data, ctx) => {
+      // Every source key cited by a segment must be defined under `sources`.
+      const blocks = { ...data.segments, ...data.context } as Record<string, { sources: string[] }>;
+      for (const [name, block] of Object.entries(blocks)) {
+        for (const key of block.sources) {
+          if (!(key in data.sources)) ctx.addIssue({ code: "custom", message: `"${name}" cites unknown source "${key}"` });
+        }
+      }
+    }),
+});
+
+// countries/us/ca.yaml → id "us/ca"
+const units = defineCollection({
+  loader: glob({
+    base: "./countries",
+    pattern: ["*/*.yaml", "!*/index.yaml"],
+    generateId: ({ entry }) => entry.replace(/\.yaml$/, ""),
+  }),
+  schema: z
+    .object({
+      name: z.string().min(1),
+      ...status,
+      updated: z.coerce.date(),
+      summary: z.string().min(1),
+      scores: perSegment(score),
+      segments: perSegment(z.string().min(1)),
+      sources: z.array(source),
+    })
+    .strict(),
+});
+
+// segments.yaml — the six scored segments
+const segments = defineCollection({
+  loader: file("segments.yaml"),
+  schema: z
+    .object({
+      id: z.enum(SEGMENT_IDS as [string, ...string[]]),
+      name: z.string(),
+      weight: z.number().int().positive(),
+      description: z.string(),
+      levels: z.array(z.object({ score, text: z.string() }).strict()),
+    })
+    .strict(),
+});
+
+export const collections = { countries, units, segments };

src/data/data.js +0 −472
@@ -1,472 +0,0 @@
-/* Cannabis Freedom Index — dataset
- *
- * The index measures PERSONAL cannabis freedom: what an ordinary adult may do
- * and what happens to them if they do it. Industry, product and medical rules
- * are deliberately left out of the score.
- *
- * The yardstick is the "tomato standard": 10 means no cannabis-specific rule at all —
- * unlimited, unlicensed, unregistered. Every cap, licence and registry costs points.
- *
- * Every country is scored 0–10 in six segments using the fixed levels in SEGMENTS.
- * The index is the weighted sum, scaled to 0–100.
- *
- * Score order in each row:
- * [possession, cultivation, enforcement, sharing, consumption, access]
- *
- * Scores are editorial estimates of law *and* practice, not legal advice.
- * Per-segment explanations and sources live in js/details.js.
- */
-
-export const DATA_SNAPSHOT = "2026";
-
-// `detail` is the index of this segment's explanation in DETAILS[id].seg.
-export const SEGMENTS = [
-  {
-    id: "possession", name: "Possession", weight: 25, detail: 0,
-    desc: "Can an adult hold a small amount for personal use?",
-    levels: [[0, "Prison is a realistic outcome for a small amount"], [1, "A crime, but usually ends in a fine or diversion"], [3, "Decriminalised: at most an administrative fine"], [5, "Legal up to a small cap (around 30 g)"], [7, "Legal with a generous cap or none at home"], [10, "Unlimited — like any vegetable"]],
-  },
-  {
-    id: "cultivation", name: "Personal cultivation", weight: 25, detail: 1,
-    desc: "Can you grow your own plants at home?",
-    levels: [[0, "Treated as drug production, prison"], [1, "A crime, lesser penalties for a few plants"], [2, "A few plants tolerated or decriminalised"], [4, "Legal for a handful of plants (3–6)"], [6, "Legal with no fixed plant cap, private only"], [10, "Unlimited, indoors or out, no registration"]],
-  },
-  {
-    id: "enforcement", name: "Punishment & enforcement", weight: 20, detail: 8,
-    desc: "How hard does the law come down on personal users in practice?",
-    levels: [[0, "Death penalty, corporal punishment or long sentences"], [1, "Users are routinely jailed"], [2, "Prison possible, fines typical"], [4, "Fines or diversion only"], [6, "Nothing inside the limits, prison for going beyond them"], [10, "No cannabis offences at all"]],
-  },
-  {
-    id: "sharing", name: "Sharing & gifting", weight: 10, detail: 2,
-    desc: "Is passing cannabis to another adult, unpaid, treated differently from dealing?",
-    levels: [[0, "Sharing equals trafficking"], [2, "Illegal, but not pursued in practice"], [3, "Legal grey area"], [5, "Gifts between adults legal up to a cap"], [10, "Give away any amount"]],
-  },
-  {
-    id: "consumption", name: "Consumption", weight: 10, detail: 3,
-    desc: "Is using itself an offence, and where may you do it?",
-    levels: [[0, "Use itself is a crime"], [1, "Illegal, lightly enforced"], [3, "Legal or tolerated in private only"], [5, "Legal in public with many restrictions"], [7, "Allowed wherever tobacco is"], [10, "No cannabis-specific rules"]],
-  },
-  {
-    id: "access", name: "Legal access", weight: 10, detail: 4,
-    desc: "Is there a lawful way to obtain cannabis without growing it yourself?",
-    levels: [[0, "No lawful source"], [1, "Medical route only, hard to use"], [3, "Tolerated shops or clubs, or easy medical access"], [4, "Legal clubs or state outlets with registration and caps"], [6, "Licensed shops with purchase caps"], [10, "Sold by anyone, no licence — like produce"]],
-  },
-];
-
-// Explanations that exist in DETAILS but are not part of the score (index into DETAILS[id].seg).
-export const CONTEXT = [["Commercial production", 5], ["Products", 6], ["Medical use", 7], ["Other consequences", 9]];
-
-export const REC_LABEL = { legal: "Legal", partial: "Partly legal / tolerated", decrim: "Decriminalised", illegal: "Illegal" };
-export const MED_LABEL = { yes: "Legal", limited: "Limited", no: "None" };
-
-const AF = "Africa", AS = "Asia", EU = "Europe", NA = "North America", SA = "South America", OC = "Oceania";
-
-function c(id, num, name, region, s, rec = "illegal", med = "no", note) {
-  return { id, num, name, region, s, rec, med, note };
-}
-
-export const COUNTRIES = [
-  // ───────────── Africa ─────────────
-  c("DZ", 12, "Algeria", AF, [0, 0, 1, 0, 1, 0], "illegal", "no",
-    "Prison and a fine for personal use, with court-ordered treatment as an alternative; penalties for trafficking were raised in 2023."),
-  c("AO", 24, "Angola", AF, [1, 1, 2, 1, 1, 0], "illegal", "no",
-    "Possessing a small amount of liamba for personal use is a crime with up to three months in prison, which courts can suspend in favour of treatment."),
-  c("BJ", 204, "Benin", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Illegal for all purposes; possession is reported to carry two to five years in prison, with some informal tolerance outside the cities."),
-  c("BW", 72, "Botswana", AF, [1, 1, 2, 1, 1, 0], "illegal", "no",
-    "Under 60 g carries a fine of up to 20,000 pula or up to three years; most small cases end in fines."),
-  c("BF", 854, "Burkina Faso", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Possession for personal use is punishable by two months to two years in prison under the 1999 drug code."),
-  c("BI", 108, "Burundi", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Holding or consuming cannabis carries one to five years in prison under the Penal Code."),
-  c("CV", 132, "Cabo Verde", AF, [1, 1, 2, 1, 1, 0], "illegal", "no",
-    "Prohibited under a 1993 law; small personal amounts are reportedly handled leniently, but this entry rests on a single source."),
-  c("CM", 120, "Cameroon", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "A 'high-risk drug' under the 1997 law: possession is a crime and cultivation carries 10 to 20 years, though banga is widely grown."),
-  c("CF", 140, "Central African Republic", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Possession for personal use carries one to five years in prison under a 1997 law; enforcement is patchy outside Bangui."),
-  c("TD", 148, "Chad", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Possession carries one to five years in prison under a 2017 drug law."),
-  c("KM", 174, "Comoros", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Illegal, with long sentences reported. Cannabis was briefly legal here from 1975 to 1978."),
-  c("CG", 178, "Congo", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Illegal for all purposes; penalties for small amounts are not published in accessible sources."),
-  c("CD", 180, "DR Congo", AF, [1, 1, 1, 1, 1, 0], "illegal", "limited",
-    "Recreational use is illegal; a 2021 measure authorised cannabis for medical and scientific purposes under licence."),
-  c("CI", 384, "Côte d'Ivoire", AF, [1, 1, 2, 1, 1, 0], "illegal", "no",
-    "Possession is a crime; a 2022 law reframed drug use as a health matter and lets courts order treatment instead of prison."),
-  c("DJ", 262, "Djibouti", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Possession can bring a fine or up to about five years in prison; cannabis use is rare, khat being the local drug."),
-  c("EG", 818, "Egypt", AF, [0, 0, 1, 0, 1, 0], "illegal", "no",
-    "Hashish and bango are widely used, but the law is harsh: prison for possession, and large-scale trafficking can carry the death penalty."),
-  c("GQ", 226, "Equatorial Guinea", AF, [1, 1, 2, 1, 1, 0], "illegal", "no",
-    "Illegal on paper with long sentences, but smoked openly and rarely prosecuted among locals."),
-  c("ER", 232, "Eritrea", AF, [1, 1, 2, 1, 1, 0], "illegal", "no",
-    "Personal possession is reported to carry 6 to 12 months or a fine; little is known about practice."),
-  c("SZ", 748, "Eswatini", AF, [1, 1, 2, 1, 1, 0], "illegal", "no",
-    "Illegal, though 'Swazi Gold' is a major smallholder cash crop. Bills to license medical and hemp production have been debated for years."),
-  c("ET", 231, "Ethiopia", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Possession for personal use is reported to bring six months to five years; cultivation and sale up to fifteen."),
-  c("GA", 266, "Gabon", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Illegal; trafficking carries up to twenty years. No reliable figure for simple possession was found."),
-  c("GM", 270, "Gambia", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "First-time possession carries a fine of 50,000–100,000 dalasi or six months to a year."),
-  c("GH", 288, "Ghana", AF, [2, 1, 3, 1, 1, 0], "illegal", "limited",
-    "The 2020 Narcotics Control Commission Act treats personal use as a health matter (fine rather than prison). A 2023 amendment licenses low-THC cultivation for industrial and medicinal purposes."),
-  c("GN", 324, "Guinea", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Possession and use are offences; reported cases end in short or suspended sentences and fines."),
-  c("GW", 624, "Guinea-Bissau", AF, [1, 1, 2, 1, 1, 0], "illegal", "no",
-    "Personal possession carries up to three months or a fine; trafficking 2 to 12 years."),
-  c("KE", 404, "Kenya", AF, [0, 0, 1, 0, 1, 0], "illegal", "no",
-    "A 2022 amendment set extremely heavy penalties above a tiny personal-use amount; courts in practice impose far less."),
-  c("LS", 426, "Lesotho", AF, [1, 1, 2, 1, 1, 0], "illegal", "limited",
-    "First African country to license medical cannabis cultivation (2017), mostly for export. Personal use remains illegal although matekoane is widely grown."),
-  c("LR", 430, "Liberia", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Since 2023, personal use carries three to eighteen months and is bailable; dealing carries ten to twenty years."),
-  c("LY", 434, "Libya", AF, [0, 0, 1, 0, 1, 0], "illegal", "no",
-    "Strict prohibition with long prison sentences; a major transit route for Moroccan hashish."),
-  c("MG", 450, "Madagascar", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "A small quantity for personal use carries two to six months; rongony is nonetheless grown on a large scale."),
-  c("MW", 454, "Malawi", AF, [1, 1, 2, 1, 1, 0], "illegal", "limited",
-    "The 2020 Cannabis Regulation Act legalised cultivation for medical and industrial use. Recreational use of the famous 'Malawi Gold' remains illegal."),
-  c("ML", 466, "Mali", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Illegal under a 2001 law; penalties for small amounts are not clearly documented."),
-  c("MR", 478, "Mauritania", AF, [0, 0, 1, 0, 1, 0], "illegal", "no",
-    "Prison even for simple use, up to two years; a large share of prisoners are held for possession."),
-  c("MU", 480, "Mauritius", AF, [1, 0, 2, 0, 1, 1], "illegal", "limited",
-    "Strict prohibition, but since 2022 medical cannabis can be approved by specialist committees in public hospitals."),
-  c("MA", 504, "Morocco", AF, [1, 1, 2, 1, 2, 1], "illegal", "limited",
-    "Law 13-21 (2021) legalised cultivation for medical, cosmetic and industrial use in the Rif provinces. Recreational kif remains illegal but is widely tolerated; thousands of growers were pardoned in 2024."),
-  c("MZ", 508, "Mozambique", AF, [1, 1, 2, 1, 1, 0], "illegal", "no",
-    "Use and possession carry up to two years, with prison waivable for occasional users who accept treatment."),
-  c("NA", 516, "Namibia", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Prohibited under a 1971 Act; over 115 g is presumed dealing. Court challenges by cannabis activists have failed so far."),
-  c("NE", 562, "Niger", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Personal possession carries two months to two years and a fine."),
-  c("NG", 566, "Nigeria", AF, [0, 0, 1, 0, 1, 0], "illegal", "no",
-    "Possession carries long mandatory prison terms under the NDLEA Act, despite Nigeria being one of the world's largest consumer populations."),
-  c("RW", 646, "Rwanda", AF, [0, 0, 1, 0, 0, 0], "illegal", "limited",
-    "Since 2021 licensed producers can grow medical cannabis for export. Domestic use is heavily penalised."),
-  c("ST", 678, "São Tomé and Príncipe", AF, [1, 1, 2, 1, 1, 0], "illegal", "no",
-    "Personal possession is a minor offence; trafficking carries four to twelve years."),
-  c("SN", 686, "Senegal", AF, [1, 1, 1, 1, 1, 0], "illegal", "no",
-    "Personal possession carries two months to one year in prison; trafficking ten to twenty years since 2007."),
-  c("SC", 690, "Seychelles", AF, [1, 1, 2, 1, 1, 1], "illegal", "limited",
-    "Medical cannabis has been available by specialist prescription since 2020; otherwise illegal."),
-  c("SL", 694, "Sierra Leone", AF, [0, 0, 1, 0, 1, 0], "illegal", "no",
-    "Multi-year prison terms for possession under the 2008 Act, with exemplary sentences in recent drug cases."),
-  c("SO", 706, "Somalia", AF, [0, 0, 1, 0, 1, 0], "illegal", "no",
-    "Illegal under the penal code and sharia; outcomes depend on who controls the territory."),
… 314 more lines
src/data/details.js +0 −4124
@@ -1,4124 +0,0 @@
-/* Cannabis Freedom Index — per-segment explanations and sources
- *
- * DETAILS[countryId] = {
- *   reviewed: "YYYY-MM-DD",
- *   sources:  { key: [label, url] },
- *   seg:      ten entries in SEGMENTS order, each { t: explanation, src: [source keys] }
- * }
- *
- * Countries without an entry show only their summary note.
- */
-
-export const DETAILS = {
-  CA: {
-    reviewed: "2026-10-04",
-    sources: {
-      justice: ["Department of Justice Canada — Cannabis legalization and regulation", "https://www.justice.gc.ca/eng/cj-jp/cannabis/"],
-      act: ["Cannabis Act (S.C. 2018, c. 16)", "https://laws-lois.justice.gc.ca/eng/acts/c-24.5/"],
-      hc: ["Health Canada — Cannabis laws and regulations", "https://www.canada.ca/en/health-canada/services/drugs-medication/cannabis/laws-regulations.html"],
-      bc: ["Government of British Columbia — Possession and purchasing limits", "https://www2.gov.bc.ca/gov/content/safety/public-safety/cannabis/possession-and-purchasing-limits"],
-    },
-    seg: [
-      { t: "Adults (18+, 19 or 21 in most provinces) may carry up to 30 g of dried cannabis in public, or its equivalent in other forms (for example 150 g of fresh cannabis or 7.5 g of concentrate). Federal law sets no cap at home, though some provinces add one. It must be 'legal cannabis' from a licensed source. Carrying more than 30 g in public is an offence punishable by up to five years less a day.", src: ["justice", "bc"] },
-      { t: "Up to four plants per residence — not per adult — grown from licensed seeds or seedlings. Quebec prohibits home growing entirely. Any fifth plant is an offence. A hard household cap and a required legal seed source keep this well short of gardening freedom.", src: ["justice", "act"] },
-      { t: "Adults may give up to 30 g of legal cannabis to another adult without payment. Any payment turns it into unlicensed sale, and giving to anyone under 18 carries up to 14 years.", src: ["justice"] },
-      { t: "Using is legal, but where is decided by provinces and cities. Some treat it like tobacco; others restrict it to private residences. Landlords and condo boards can ban smoking, and licensed consumption lounges remain rare.", src: ["hc", "bc"] },
-      { t: "Licensed shops and online ordering exist in every province and territory, privately run in some and government monopolies in others. Purchases are capped at 30 g per transaction. Only provincially authorised retailers may sell; everything else is a criminal market.", src: ["justice", "hc"] },
-      { t: "Anyone can apply for a federal cultivation or processing licence, including small 'micro' classes, and there is no cap on licence numbers. But security clearances, site requirements, excise stamps and compliance costs are heavy, and unlicensed commercial production carries up to 14 years.", src: ["act", "hc"] },
-      { t: "Flower, pre-rolls, oils, edibles, drinks, vapes, concentrates and topicals are all legal. Limits: edibles are capped at 10 mg THC per package, extracts at 1,000 mg per container, with plain packaging, health warnings and a near-total ban on promotion.", src: ["hc", "justice"] },
-      { t: "Any physician or nurse practitioner can authorise medical use with no list of qualifying conditions. Patients buy from federal licence holders by mail, or register with Health Canada to grow their own or designate a grower. Still a registration system, and not covered by public insurance.", src: ["hc"] },
-      { t: "Personal conduct inside the limits is not punished. Outside them the Act is severe: up to 14 years for unlicensed sale, production, export or supplying a minor, with ticketing for small overages.", src: ["justice", "act"] },
-      { t: "Drug-impaired driving law uses per-se THC blood limits, so a regular user can be over the limit without being impaired. Past simple-possession convictions can be cleared through a free, expedited record suspension — on application, not automatically. Admitting to cannabis use can still get a traveller refused at the US border.", src: ["justice", "hc"] },
-    ],
-  },
-
-  UY: {
-    reviewed: "2026-10-04",
-    sources: {
-      law: ["Ley N° 19.172 — Regulación y control del cannabis (IMPO)", "https://www.impo.com.uy/bases/leyes/19172-2013"],
-      ircca: ["IRCCA — Instituto de Regulación y Control del Cannabis", "https://www.ircca.gub.uy/"],
-      wiki: ["Wikipedia — Cannabis in Uruguay", "https://en.wikipedia.org/wiki/Cannabis_in_Uruguay"],
-    },
-    seg: [
-      { t: "Possession for personal use has not been a crime since 1974, and the 2013 law presumes up to 40 g is personal. There is no separate home limit. The cannabis is only 'legal' if it came through one of the three registered routes.", src: ["law", "wiki"] },
-      { t: "Registered residents may grow up to six flowering plants per household with an annual harvest of at most 480 g. Registration with the state regulator IRCCA is mandatory, and choosing home growing excludes you from pharmacies and clubs. Unregistered growing is an offence.", src: ["law", "ircca"] },
-      { t: "The law is built around personal or household use. Club harvests are shared among members, but there is no general right to give cannabis to other adults, and any supply outside the registered channels can be prosecuted as dealing.", src: ["law"] },
-      { t: "Smoking is allowed wherever tobacco is: not in enclosed public spaces, workplaces, schools or health facilities. Using in the street or a park is lawful, one of the most permissive rules anywhere. Working or driving under the influence is prohibited.", src: ["law", "wiki"] },
-      { t: "Only registered Uruguayan citizens and permanent residents aged 18+ can buy, at participating pharmacies, verified by fingerprint, up to 10 g a week (40 g a month) at a state-set price. Tourists are excluded. Each person must pick one route: pharmacy, club or home grow.", src: ["ircca", "wiki"] },
-      { t: "Cannabis for pharmacies is grown by a handful of companies chosen by state tender, on state-controlled land, with the state setting price and genetics. Membership clubs (15–45 members, up to 99 plants) are the only other producers. There is no open commercial licensing.", src: ["law", "wiki"] },
-      { t: "Pharmacies sell only a few state-specified flower varieties with capped THC — launched at very low potency and since raised, with the newest variety at up to about 20%. No edibles, concentrates or vapes in the legal market.", src: ["wiki", "ircca"] },
-      { t: "Medical cannabis is legal and a 2019 law aimed to widen access, but few registered products exist, they are expensive, and most patients rely on the adult-use channels or home-made preparations instead.", src: ["ircca", "wiki"] },
-      { t: "Registered users are left alone. Growing or selling outside the registry remains a criminal offence under the drug law, with prison sentences measured in years.", src: ["law"] },
-      { t: "Three state registries hold the identity of every legal buyer, grower and club member. Driving has a zero-tolerance THC rule, and employers may test for use at work. No criminal record arises from personal use.", src: ["law", "ircca"] },
-    ],
-  },
-
-  DE: {
-    reviewed: "2026-10-04",
-    sources: {
-      bmg: ["Bundesgesundheitsministerium — FAQ zum Cannabisgesetz", "https://www.bundesgesundheitsministerium.de/themen/cannabis/faq-cannabisgesetz"],
-      kcang: ["Konsumcannabisgesetz (KCanG) — full text", "https://www.gesetze-im-internet.de/kcang/"],
-      medcang: ["Medizinal-Cannabisgesetz (MedCanG) — full text", "https://www.gesetze-im-internet.de/medcang/"],
-    },
-    seg: [
-      { t: "Adults may carry up to 25 g in public and keep up to 50 g of dried cannabis at home. Holding 25–30 g in public (or 50–60 g at home) is an administrative offence; above that it is a crime. Applies to people who have lived in Germany for at least six months.", src: ["bmg", "kcang"] },
-      { t: "Up to three plants at a time per adult, at your own residence, protected from access by children. Yield above the 50 g home limit must be destroyed. A fourth plant is a criminal offence.", src: ["bmg", "kcang"] },
-      { t: "Not allowed. Home-grown cannabis may not be passed on to anyone, even for free, and club cannabis is for the member's own use only. Giving cannabis to another adult remains punishable — the main reason this segment scores so low.", src: ["bmg"] },
-      { t: "Public consumption is legal, with exceptions: not near minors, not in or within sight of schools, playgrounds, youth facilities and sports grounds, not in pedestrian zones between 7:00 and 20:00, and not inside or near cultivation associations.", src: ["bmg", "kcang"] },
-      { t: "There are no shops. The only non-medical source besides home growing is a non-profit cultivation association: up to 500 members, minimum three-month membership, at most 25 g a day and 50 g a month (30 g and max 10% THC for ages 18–21). Many regions still have few licensed associations.", src: ["bmg", "kcang"] },
-      { t: "Commercial recreational production is not permitted at all; associations must grow for their own members with member labour. Medical cultivation and import need a licence from the federal medicines agency.", src: ["kcang", "medcang"] },
-      { t: "Associations may hand out only flower and hashish. Edibles such as THC gummies or cookies remain banned, as do extracts for the adult-use channel.", src: ["bmg"] },
-      { t: "Cannabis is no longer a narcotic in law: any doctor can prescribe it on an ordinary prescription, dispensed by pharmacies, and statutory insurers cover it for serious illness after approval. Still prescription-only, and rules on remote prescribing have been tightened.", src: ["medcang", "bmg"] },
-      { t: "Within the limits nothing is punished; small overages are fines. Selling, giving away, or growing beyond three plants are crimes with prison of up to three years, more in aggravated cases.", src: ["kcang", "bmg"] },
-      { t: "Old convictions for conduct that is now legal can be deleted from the federal register on application. The driving limit is 3.5 ng/ml THC in blood serum, with zero tolerance for novice drivers and under-21s.", src: ["bmg"] },
-    ],
-  },
-
-  US: {
-    reviewed: "2026-10-04",
-    sources: {
-      ncsl: ["National Conference of State Legislatures — State cannabis laws", "https://www.ncsl.org/health/state-medical-cannabis-laws"],
-      norml: ["NORML — State-by-state laws", "https://norml.org/laws/"],
-      hh: ["Holland & Hart — Cannabis newsletter, April 2026 (federal rescheduling order)", "https://www.hollandhart.com/webfiles/BUZZ_Cannabis_Newsletter_April_Edition_2026.pdf"],
-      mm: ["Marijuana Moment — Which states could legalize in 2026", "https://www.marijuanamoment.net/which-states-most-likely-to-legalize-marijuana-in-2026/"],
-    },
-    seg: [
-      { t: "It depends entirely on the state. In roughly half the states adults 21+ may carry a capped amount, typically 1 to 2.5 oz (28–70 g). In prohibition states the same amount can mean arrest and jail. Under federal law, non-medical possession is still a Schedule I offence everywhere.", src: ["norml", "ncsl"] },
-      { t: "Most legal states allow home growing, usually six plants per adult with a household cap, but several — including Washington, New Jersey and Illinois for non-patients — ban it. In prohibition states growing a single plant can be a felony.", src: ["norml"] },
-      { t: "Legal states generally allow adults to give up to the possession limit (commonly one ounce) to another adult 21+ with no payment. Elsewhere any transfer counts as distribution.", src: ["norml"] },
-      { t: "Even in legal states use is almost always confined to private property; public consumption is a ticketable offence, landlords and hotels can ban it, and it is prohibited on all federal land. Only a few states license consumption lounges.", src: ["norml", "ncsl"] },
-      { t: "Legal states have licensed dispensaries, many with delivery, open to any adult 21+ including visitors, with per-transaction limits. Licence caps and local opt-outs leave large areas without shops, and nothing can cross state lines. About half the population has no legal adult-use store.", src: ["ncsl", "mm"] },
-      { t: "States issue commercial licences, some uncapped (Oklahoma, Oregon), many tightly capped and very expensive. In April 2026 state-licensed medical cannabis was moved to federal Schedule III; adult-use businesses remain Schedule I, with punitive federal tax treatment and limited banking.", src: ["hh", "ncsl"] },
-      { t: "The widest product range in the world in legal states: flower, edibles (typically capped at 100 mg THC per package), vapes, concentrates and beverages. Hemp-derived products are sold in most states, though federal and state rules on intoxicating hemp have been tightening.", src: ["norml", "hh"] },
-      { t: "40 states have medical programmes. Most require a doctor's certification for a listed condition, a state patient card and an annual fee. Federal rescheduling of state-licensed medical cannabis in 2026 acknowledged medical use, but it is still not prescribed or insured like ordinary medicine.", src: ["ncsl", "hh"] },
-      { t: "Hundreds of thousands of cannabis arrests still happen every year, concentrated in prohibition states where possession can bring jail and sale or cultivation long felony sentences. Federal trafficking penalties include mandatory minimums.", src: ["norml"] },
-      { t: "The heaviest collateral consequences of any country with legal markets: cannabis users are barred from buying firearms under federal law, non-citizens can be deported or refused entry, federally assisted housing can evict, and most employers may still test and fire. Expungement exists in some states only.", src: ["norml", "ncsl"] },
-    ],
-  },
-
-  MT: {
-    reviewed: "2026-10-04",
-    sources: {
-      cap628: ["Authority on the Responsible Use of Cannabis Act (Cap. 628)", "https://legislation.mt/eli/cap/628/eng"],
-      aruc: ["ARUC — Authority for the Responsible Use of Cannabis", "https://aruc.mt/"],
-      euda: ["EU Drugs Agency — Malta and Luxembourg plans for limited cultivation and use", "https://www.euda.europa.eu/news/2021/malta-and-luxembourg-announce-plans-limited-cultivation-and-use-cannabis_en"],
-      mt: ["MaltaToday — 39 fined for smoking cannabis in public", "https://www.maltatoday.com.mt/news/national/132682/39_fined_for_smoking_cannabis_in_public"],
-    },
-    seg: [
-      { t: "Adults 18+ may carry up to 7 g in public and keep up to 50 g of dried cannabis at home. Between 7 g and 28 g in public is not a crime but goes to a tribunal with a fine of €50–100. Above 28 g, ordinary drug law applies.", src: ["cap628", "euda"] },
-      { t: "Up to four plants per household (not per adult), which must not be visible from outside. The dried harvest kept at home may not exceed 50 g.", src: ["cap628", "euda"] },
-      { t: "The law provides for personal use and for distribution by licensed associations to their own members. There is no explicit right to give cannabis to another adult, and supply outside an association remains trafficking.", src: ["cap628"] },
-      { t: "Private only. Consuming in public is prohibited and fined €235; consuming in front of a minor is fined €300–500. Associations may not allow consumption on their premises.", src: ["mt", "cap628"] },
-      { t: "No shops. The only legal source besides home growing is a licensed non-profit Cannabis Harm Reduction Association: maximum 500 members, residents only, one association per person, at most 7 g a day and 50 g a month. Tourists have no legal source.", src: ["aruc", "cap628"] },
-      { t: "Only licensed non-profit associations may grow, for their own members, under ARUC supervision and away from schools and youth centres. For-profit recreational production is not allowed. Medical production is separately licensed.", src: ["aruc"] },
-      { t: "Associations distribute dried flower (and seeds). Edibles and concentrates are not part of the regulated adult-use channel. Advertising is banned.", src: ["aruc", "cap628"] },
-      { t: "Legal since 2018 on prescription from a registered doctor, with an approval card for the patient, dispensed in pharmacies. Products are limited and paid out of pocket.", src: ["euda"] },
-      { t: "Among Europe's mildest for users: conduct inside the limits is unpunished, and small overages or public use are handled by a tribunal with fines rather than courts. Trafficking still carries prison.", src: ["cap628", "mt"] },
-      { t: "People convicted of simple possession before the reform can have the conviction struck from their record. Association membership is recorded, though privacy rules limit access. Driving under the influence remains an offence.", src: ["cap628", "aruc"] },
-    ],
-  },
-
-  JM: {
-    reviewed: "2026-10-04",
-    sources: {
-      fact: ["Ministry of Justice — Dangerous Drugs (Amendment) Act 2015 fact sheet", "https://ncst.gov.jm/wp-content/uploads/2015/09/Ganja-FACT-SHEET-Amendment-to-Dangerous-Drug-ACT.pdf"],
-      cla: ["Cannabis Licensing Authority", "https://www.cla.org.jm/"],
-      facts2: ["The facts about ganja in Jamaica (Jamaica Observer, via TNI)", "https://ungassondrugs.org/en/site_content/item/8143-the-facts-about-ganja-in-jamaica.html"],
-    },
-    seg: [
-      { t: "Not actually legal: possessing up to 2 oz (56 g) is a ticketable infraction with a fixed J$500 penalty — no arrest, no court, no criminal record. Above 2 oz it is still a criminal offence. Rastafari adherents and holders of a medical permit may possess lawfully.", src: ["fact"] },
-      { t: "Each household may legally grow up to five ganja plants on its premises; where several households share a property, each gets five. More than that is an offence unless licensed.", src: ["fact"] },
-      { t: "There is no provision for gifting. Supplying ganja to another person outside the licensed medical system or sacramental use remains dealing.", src: ["fact", "facts2"] },
-      { t: "Smoking in public places is prohibited on the same terms as tobacco, with a J$500 ticket. It is lawful at a private residence that is not a workplace, in licensed premises, and at places registered for Rastafari worship or exempt events.", src: ["fact"] },
-      { t: "Licensed 'herb houses' sell to people with a medical recommendation — obtainable from a local practitioner. Visitors with a prescription from home can buy a permit to purchase up to 2 oz at a time. Formally a medical market, in practice accessible; the informal market remains far larger.", src: ["fact", "cla"] },
-      { t: "The Cannabis Licensing Authority issues cultivator, processor, transporter, retail and research licences in tiers by size. Fees, security rules and banking problems have kept many traditional small growers outside the legal industry.", src: ["cla"] },
-      { t: "Licensed retailers offer flower, oils, edibles and other preparations for medical or therapeutic purposes. Hemp is licensed separately.", src: ["cla", "fact"] },
-      { t: "Any registered medical practitioner can recommend ganja for medical or therapeutic purposes, with no fixed list of conditions. Patients buy from licensed herb houses.", src: ["fact", "cla"] },
-      { t: "Small-scale possession and public smoking mean a ticket. Possession over 2 oz, unlicensed cultivation beyond five plants, dealing and export remain criminal with fines and prison. Under-18s found with ganja are referred to counselling.", src: ["fact"] },
-      { t: "Tickets leave no criminal record, and earlier convictions for small quantities can be expunged. Unpaid tickets can lead to a court order for community service.", src: ["fact", "facts2"] },
-    ],
-  },
-
… 3984 more lines
src/data/subunit-details.js +0 −134

Not shown: a picture, a generated file, or past the length shown per change.

src/data/subunits.js +0 −125

Not shown: a picture, a generated file, or past the length shown per change.

src/lib/countries.js +84 −32

Not shown: a picture, a generated file, or past the length shown per change.

src/lib/facts.js +2 −3

Not shown: a picture, a generated file, or past the length shown per change.

src/lib/segment-ids.js +4 −0

Not shown: a picture, a generated file, or past the length shown per change.

src/pages/api/[id].json.js +6 −9

Not shown: a picture, a generated file, or past the length shown per change.

src/pages/compare.astro +2 −3

Not shown: a picture, a generated file, or past the length shown per change.

src/pages/index.astro +1 −2

Not shown: a picture, a generated file, or past the length shown per change.

    ↑↓ to move, ↵ to open.