{
  "$schema": "https://design-tokens.org/draft",
  "meta": {
    "name": "BMC Brand Tokens",
    "version": "1.0.0",
    "updated": "2026-06-15",
    "sourceOfTruth": true,
    "note": "Canonical machine-readable source of truth for the BMC brand. The website CSS (web/src/styles/global.css @theme), the brand guide, the asset pipeline, and Claude all derive from this file. Do not hand-edit derived files; edit here and regenerate.",
    "consumers": ["web/src/styles/global.css", "brand/brand.md", "brand/assets.json", "brand/guidelines/*", "platform admin /brand portal"]
  },

  "brand": {
    "name": "BMC",
    "legalEntity": "Blue Mountain Asesores, S.L.U.",
    "nif": "B42985432",
    "address": "Calle Maestro Alonso, 4, entreplanta, 30005 Murcia",
    "registry": "Inscrita en el RM de Murcia, tomo 3501, folio 189, hoja MU-104343",
    "addressNote": "Registered office (domicilio social). C/ Castelló 36, Madrid, is an office, never the registered office.",
    "domain": "bm.consulting",
    "descriptor": "Tax, Legal & Strategy",
    "slogan": "Counsel that endures.",
    "positioningLine": "Clarity, across borders.",
    "aiDisclosure": {"decidedBy": "MJ, 2026-10-31 (same day: every signature, human or AI; one signature in English with every legal notice in English and Spanish); web texts included in the general AI disclosure (MJ, CEO chat 31-10 15:3x)", "rule": "One BMC email signature, in English, for everyone (Manuel Jiménez, Bárbara Botía, every specialist and every platform automatic email). Every legal notice of the signature goes in English and Spanish: each English paragraph followed by its Spanish version. It never says which team member is or is not an AI agent.", "placement": "Signature legal block, in this order: entity statement; confidentiality and privacy (EN, then ES); this AI Disclosure (EN, then ES), each with a link to the privacy and AI page; registered office / domicilio social. Client portal footer and any portal chat: textPortal, in the portal's language.", "text": {"en": "AI Disclosure. BMC is an AI-native firm: we apply artificial intelligence across all our processes, including but not limited to the processing and preparation of this email.", "es": "Aviso sobre IA. BMC es una firma AI-native: aplicamos inteligencia artificial en todos nuestros procesos, incluidos, entre otros, el tratamiento y la preparación de este correo."}, "textPortal": {"es": "Aviso sobre IA. BMC es una firma AI-native: aplicamos inteligencia artificial en todos nuestros procesos, incluidos, entre otros, el tratamiento y la preparación de los contenidos de esta plataforma.", "en": "AI Disclosure. BMC is an AI-native firm: we apply artificial intelligence across all our processes, including but not limited to the processing and preparation of the content on this platform.", "fr": "Information sur l'IA. BMC est un cabinet AI-native : nous appliquons l'intelligence artificielle à l'ensemble de nos processus, y compris, sans s'y limiter, le traitement et la préparation des contenus de cette plateforme.", "de": "Hinweis zur KI. BMC ist eine AI-native Beratungsgesellschaft: Wir setzen künstliche Intelligenz in allen unseren Prozessen ein, einschließlich, aber nicht beschränkt auf die Bearbeitung und Erstellung der Inhalte dieser Plattform."}, "teamSignature": {"rule": "Platform automatic emails end with the same signature as Gmail. A named sender keeps their own signature; when the platform sends on its own, the area team signs, with no personal name and no personal email.", "en": {"fiscal": "Tax Team", "legal": "Legal Team", "laboral": "HR Team", "contabilidad": "Accounting Team", "facturacion": "Billing Team", "cuentas": "Client Service Team"}}, "links": {"en": "bm.consulting/en/privacy-and-ai", "es": "bm.consulting/es/privacidad-y-ia"}, "confidentiality": {"en": "Confidential: for the addressee only. If you received it in error, please tell us and delete it. Blue Mountain Asesores, S.L.U. processes your data to manage this exchange; your rights: bbotia@bm.consulting · bm.consulting/en/privacy", "es": "Confidencial: solo para su destinatario. Si lo ha recibido por error, avísenos y bórrelo. Blue Mountain Asesores, S.L.U. trata sus datos para gestionar esta comunicación; sus derechos: bbotia@bm.consulting · bm.consulting/es/privacidad"}, "textWeb": {"en": "AI Disclosure. BMC is an AI-native firm: we apply artificial intelligence across all our processes, including but not limited to the processing and preparation of the content on this website.", "es": "Aviso sobre IA. BMC es una firma AI-native: aplicamos inteligencia artificial en todos nuestros procesos, incluidos, entre otros, el tratamiento y la preparación de los contenidos de este sitio web.", "fr": "Information sur l'IA. BMC est un cabinet AI-native : nous appliquons l'intelligence artificielle à l'ensemble de nos processus, y compris, sans s'y limiter, le traitement et la préparation des contenus de ce site web.", "de": "Hinweis zur KI. BMC ist eine AI-native Beratungsgesellschaft: Wir setzen künstliche Intelligenz in allen unseren Prozessen ein, einschließlich, aber nicht beschränkt auf die Bearbeitung und Erstellung der Inhalte dieser Website."}, "placementWeb": "bm.consulting: footer of every page, in the page's language. Also next to the piece, visible where the reader reads it, on the BOE hub, the insights and the DGT ruling pages (/es/consultas-vinculantes/[id], /en/tax-rulings/[id], /fr/rescrits-fiscaux/[id], /de/verbindliche-auskuenfte/[id]; analysis by AI, published and degraded) and the daily DGT briefs (/es/consultas-vinculantes/analisis/[slug], /en/tax-rulings/analysis/[slug], /fr/rescrits-fiscaux/analyse/[slug], /de/verbindliche-auskuenfte/analyse/[slug]) (art. 50 AI Act, «clear and distinguishable»; Legal 31-10). On the BOE hub the notice next to the piece is the BoeMasthead seal (Legal text, live since #9097); do not add a second one. A review statement («revisado por…») only where a person actually reviewed that piece."},
    "languageRule": "Spanish is the primary content language. The mark, descriptor, slogan and service names stay in English in every locale. Body copy localizes to ES (primary), EN, FR, DE. Slogan is never machine-translated; it does not transcreate.",
    "architecture": "One master mark. No per-practice sub-logos or colours. Practices (Strategy, Tax, Legal, Business Services, Compliance) differ only by URL, page H1, nav state and breadcrumb.",
    "practices": ["Strategy (corporate-advisory)", "Tax (tax-fiscal)", "Legal (legal)", "Business Services (business-services)", "Compliance (incl. Digital, Data & EU AI Act)"]
  },

  "color": {
    "navy": {
      "50": "#EBF8FF", "100": "#BEE3F8", "200": "#90CDF4", "300": "#63B3ED",
      "400": "#4299E1", "500": "#3182CE", "600": "#2C5282", "700": "#2A4365",
      "800": "#1A365D", "900": "#152D4F", "950": "#0F2440"
    },
    "gold": {
      "50": "#FFFBEB", "100": "#FEF3C7", "200": "#FDE68A", "300": "#F6E05E",
      "400": "#D8A94B", "500": "#C0922E", "600": "#A86A0A", "700": "#7D5108", "800": "#5C3D06"
    },
    "warm": {
      "50": "#F7FAFC", "100": "#EDF2F7", "200": "#E2E8F0", "300": "#CBD5E0",
      "400": "#A0AEC0", "500": "#718096", "600": "#4A5568", "700": "#2D3748",
      "800": "#1A202C", "900": "#171923"
    },
    "semantic": {
      "success": "#38A169", "warning": "#DD6B20", "error": "#E53E3E", "info": "#3182CE"
    },
    "roles": {
      "brand-primary": "navy.800",
      "ink": "navy.900",
      "ink-body": "warm.700",
      "ink-muted": "warm.500",
      "surface": "#FFFFFF",
      "surface-2": "warm.50",
      "surface-dark": "navy.950",
      "accent": "gold.500",
      "accent-text-aa": "gold.700",
      "accent-text-aaa": "gold.800",
      "structure": "warm.200",
      "link": "navy.600"
    },
    "rules": {
      "goldIsNotText": "Gold (gold.500 #C0922E) is NEVER a UI or body-text colour (it reads orange and fails AA on white at 2.84:1). It is never text, not even the descriptor (white on dark, navy.800 on light; the gold.400 descriptor was retired on 2026-11-01). Otherwise gold is structure only: the mark bars, a bleed/section rule, an active-nav underline, the focus ring (gold.600), one featured-callout border, one data-viz highlight, a single active icon, and the toast action link on navy. All other text is navy or warm-slate.",
      "goldText": "For legible gold-coloured TEXT use gold.700 (AA, ~6.9:1) or gold.800 (AAA, ~10:1). gold.600 (~4.4:1) is for focus rings and large text only, never body/label text. Retired: #B7791F (fails AA), #D69E2E and #ECC94B as the mark (caused hue drift).",
      "heroGradient": "linear-gradient(162deg, #0B1C33, #0F2440 42%, #16304f)",
      "swatchLabelsKnownResidual": "In the guide's colour-scale swatches, the small hex/level labels overlaid on the two mid-luminance backgrounds navy.500 (#3182CE) and gold.600 (#A86A0A) reach only ~4.41:1 (vs WCAG AA 4.5:1). No tinted-neutral text colour clears 4.5:1 on those two grounds; only pure #000 does, which the palette excludes. Accepted residual: tiny copy-to-clipboard reference labels, not product UI. To fully resolve, relayout the labels into a caption strip below each swatch (navy on paper = 12:1)."
    }
  },

  "typography": {
    "families": {
      "heading": "'Playfair Display', Georgia, serif",
      "body": "'DM Sans', system-ui, sans-serif"
    },
    "weights": { "heading": [700, 800], "body": [400, 500, 600, 700] },
    "scale": {
      "display-xl": "clamp(2.5rem, 2rem + 2.5vw, 4.5rem)",
      "display-lg": "clamp(2rem, 1.6rem + 2vw, 3.5rem)",
      "display": "clamp(1.75rem, 1.4rem + 1.75vw, 3rem)",
      "heading-xl": "clamp(1.5rem, 1.2rem + 1.5vw, 2.25rem)",
      "heading-lg": "clamp(1.25rem, 1.1rem + 0.75vw, 1.75rem)",
      "heading": "clamp(1.125rem, 1rem + 0.5vw, 1.5rem)",
      "body-lg": "clamp(1.125rem, 1.05rem + 0.375vw, 1.25rem)",
      "body": "clamp(1rem, 0.94rem + 0.3vw, 1.125rem)",
      "body-sm": "0.875rem",
      "caption": "0.8125rem",
      "overline": "0.75rem"
    },
    "tracking": { "display": "-0.02em", "heading": "-0.01em", "overline": "0.1em to 0.2em", "descriptor": "0.12em" },
    "rules": "Two families only. Playfair Display for display/headings and the mark. DM Sans for body, UI, captions, the descriptor. Body measure capped at 65-75ch. No ALL-CAPS headlines (caps for short labels only)."
  },

  "spacing": { "scale": [4, 8, 12, 16, 24, 32, 48, 64, 96, 128], "unit": "px", "shell": "clamp(20px, 5vw, 96px)", "section-rhythm": "clamp(72px, 11vh, 150px)", "gaps": { "tight": 12, "related": 24, "separate": 48 } },
  "radius": { "sm": "0.375rem", "md": "0.5rem", "lg": "0.75rem", "xl": "1rem" },
  "shadow": {
    "card": "0 1px 3px 0 rgb(0 0 0 / 0.05), 0 1px 2px -1px rgb(0 0 0 / 0.05)",
    "card-hover": "0 10px 15px -3px rgb(0 0 0 / 0.08), 0 4px 6px -4px rgb(0 0 0 / 0.05)",
    "elevated": "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.05)"
  },
  "motion": {
    "duration": { "micro": { "min": "80ms", "max": "120ms", "default": "120ms" }, "action": { "min": "200ms", "max": "300ms", "default": "250ms" }, "reveal": { "min": "600ms", "max": "900ms", "default": "900ms" }, "hero": { "min": "800ms", "max": "1200ms", "default": "1100ms" } },
    "easing": "cubic-bezier(.16,1,.3,1)",
    "rules": "Ease-out only, no bounce, no linear. Never animate layout properties. Respect prefers-reduced-motion (reveals visible immediately, transitions stripped, scroll-behavior auto)."
  },

  "mark": {
    "letters": "BMC",
    "construction": "CSS flexbox is the source of truth (.mk system); SVG/PNG exports are derived, never the reverse.",
    "font": "Playfair Display",
    "fontWeight": 800,
    "barColor": "#C0922E",
    "barColorRule": "Single bronze-gold #C0922E on ALL grounds (light and dark). No two-value system.",
    "barWidth": "0.10em",
    "barHeight": "0.60em, centred on the cap height: air above and below, the bars never touch the cap line or the baseline (MJ 01-11-2026, option B)",
    "barRadius": "1px (clean, near-square ends)",
    "gap": "0.13em between a letter and a bar, at every size (was a fixed 6px)",
    "letterColorLight": "#1A365D",
    "letterColorDark": "#FFFFFF",
    "monoOpacity": 0.35,
    "descriptor": { "text": "Tax, Legal & Strategy", "font": "DM Sans", "weight": 600, "size": "0.22em of the mark font-size, never below 9px", "tracking": "0.22em", "transform": "uppercase", "align": "centred under the mark, 0.30em below it", "color": "the same ink as the letters: navy.800 on light, #FFFFFF on dark (the gold-400 descriptor on dark is retired)" },
    "textRule": "One rule for every line under the mark (descriptor, ONE, RESEARCH): DM Sans 600, 0.22em, tracking 0.22em, same ink as the letters, centred 0.30em under the mark. Only the word changes (MJ 01-11-2026 13:5x).",
    "clearspace": "50% of cap-height on all sides",
    "minSize": { "markOnly": "24px", "withDescriptor": "40px", "favicon16": "two bars only at <=16px (BMC ruled in bronze glyph)" },
    "favicon": "BMC, ruled in bronze: the three letters centred over a single bronze rule, white on navy rounded-rect. One design at all sizes.",
    "misuse": ["no recolouring letters/bars off-palette", "no changing the 6px gap", "no font substitution or pipe characters", "no rewriting the descriptor", "no italics/shadows/gradients/bevels", "no dark mark on low-contrast fields", "no word beside the mark: BMC One is the mark plus ONE beneath it (mark.one)"],
    "one": {
      "decision": "MJ, Creative Director chat, 01-11-2026 09:2x, option B of three shown: «La b tb me parece la ama adecuada y mas limpia».",
      "rule": "BMC One is the B|M|C mark plus the word ONE beneath it. The mark itself never changes: same letters, bars, gap and colours; favicon, app icon and seal are BMC's. The word takes the descriptor's slot and the descriptor's rule, and replaces the descriptor (no Tax, Legal & Strategy under a One lockup). What changes between BMC and BMC One is one line, never a logo.",
      "word": "ONE",
      "font": "DM Sans",
      "weight": 600,
      "tracking": "0.22em",
      "case": "uppercase, written in caps where text-transform is not available (email)",
      "size": "0.22em of the mark font-size, never below 9px (the descriptor's size)",
      "gap": "0.30em between the mark and the word (the descriptor's gap)",
      "align": "centred under the mark; padding-left 0.22em compensates the trailing tracking",
      "color": "same ink as the letters: navy.800 on light, #FFFFFF on dark; never gold, never navy.600",
      "minSize": "40px of mark with the word (as with the descriptor); below that the mark alone",
      "emailException": "the closing line of the email signature: mark at 15px, ONE at 9px (gen.mjs oneLockup(), 01-11-2026)",
      "css": ".lk{display:inline-flex;flex-direction:column;align-items:center;gap:.30em}.lk .one{font-family:var(--sans);font-weight:600;font-size:max(9px,.22em);line-height:1;letter-spacing:.22em;text-transform:uppercase;padding-left:.22em;color:currentColor}",
      "retired": "the 31-10-2026 draft with Playfair italic «One» beside the C: it read as handwriting and bent the mark silhouette"
    },
    "vector": {
      "decision": "Elsa Duarte 01-11-2026 under MJ's «adelante con todo»: one proportion at every size for the masters and exports (the website hero thins the bars to 11px and the book keeps a fixed 6px gap: both align to this geometry as they are touched).",
      "letters": "outlined glyphs of Playfair Display 800; the word ONE/RESEARCH and the descriptor outlined DM Sans 600/500",
      "bar": "0.10em wide, 0.60em tall, centred on the cap height (never touching cap line or baseline), radius 1px at 46px",
      "gap": "0.13em between a letter and a bar",
      "clearspace": "0.36em (50% of cap-height) on every side, inside the file",
      "generator": "brand/scripts/kit (kit.py builds the SVG masters from the fonts, export.py renders PNG, favicon and social)"
    }
  },

  "voice": {
    "principles": ["Strategic (lead with the decision)", "Analytical (claims sourced and quantified)", "Advisory (counsel, not sell)"],
    "tone": "Confident without being imposing, rigorous without being cold.",
    "use": ["advise", "analysis", "strategy", "recommendation", "due diligence", "counsel", "jurisdiction"],
    "avoid": ["help", "review", "plan", "suggestion", "investigation", "cheap", "simple"],
    "rules": ["no em dashes (use commas, colons, periods, parentheses)", "no AI attribution in any public output (no tool or vendor credits); the one exception is the AI Disclosure legal notice, brand.aiDisclosure", "never invent pricing, testimonials or track-record stats", "fact-check all legal/fiscal claims before publishing"]
  },

  "governance": {
    "rule": "tokens.json is the source of truth. A change here regenerates global.css, the guide, assets and brand.md in the same PR. Branch + PR, never direct to main.",
    "approvals": { "mark": "MJ only", "colour": "MJ only", "slogan/descriptor": "MJ", "components/templates": "CMO + MJ" }
  }
}
