// Money — tokens. Warm sand + deep emerald, mid-radii, Manrope.

const TOK = {
  fontText: '"Manrope", -apple-system, system-ui, sans-serif',
  fontDisplay: '"Geist", "Manrope", system-ui, sans-serif',
  fontMono: '"JetBrains Mono", ui-monospace, monospace',
  r: { sm: 12, md: 16, lg: 20, xl: 28, xxl: 36 },
  light: {
    page: '#E8E1D4',     // outer page bg
    bg: '#F5F1EA',       // app canvas
    surface: '#FFFFFF',
    surfaceAlt: '#EEE9DF',
    surfaceTint: '#F9F6EF',
    ink: '#1A1814',
    inkSoft: '#3A362F',
    muted: '#7A746B',
    faint: '#B5AE9F',
    line: 'rgba(40,30,15,0.08)',
    lineStrong: 'rgba(40,30,15,0.14)',
    accent: '#0F8A5A',         // deep emerald
    accentSoft: '#D9EBE0',
    accentInk: '#FFFFFF',
    accent2: '#C77B4A',         // warm copper
    accent2Soft: '#F6E2D0',
    danger: '#C24D40',
    dangerSoft: '#F5DBD6',
    warn: '#D4A23A',
    warnSoft: '#F6E6BC',
    positive: '#0F8A5A',
  },
  dark: {
    page: '#0A0907',
    bg: '#15130F',
    surface: '#1E1C17',
    surfaceAlt: '#2A2620',
    surfaceTint: '#221F1A',
    ink: '#F5F1EA',
    inkSoft: '#D6CFC1',
    muted: '#9A9389',
    faint: '#5E574E',
    line: 'rgba(245,241,234,0.08)',
    lineStrong: 'rgba(245,241,234,0.14)',
    accent: '#3DBA85',
    accentSoft: 'rgba(61,186,133,0.16)',
    accentInk: '#0E1B14',
    accent2: '#E89968',
    accent2Soft: 'rgba(232,153,104,0.16)',
    danger: '#E66B5F',
    dangerSoft: 'rgba(230,107,95,0.18)',
    warn: '#E0B756',
    warnSoft: 'rgba(224,183,86,0.18)',
    positive: '#3DBA85',
  },
};

function T(dark) { return dark ? TOK.dark : TOK.light; }

// Format
function fmtR(n) {
  return Math.abs(Math.round(n)).toString().replace(/\B(?=(\d{3})+(?!\d))/g, '\u202F');
}
function fmtUSD(n) {
  return '$' + Math.round(Math.abs(n)).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
function fmtCompact(n) {
  if (Math.abs(n) >= 1000000) return (n/1000000).toFixed(1).replace('.0','') + 'M';
  if (Math.abs(n) >= 1000) return Math.round(n/1000) + 'k';
  return String(n);
}

// Hairline icon factory
function Icon({ d, size = 22, stroke = 'currentColor', sw = 1.8, fill = 'none' }) {
  return (
    <svg width={size} height={size} viewBox="0 0 24 24" fill={fill} stroke={stroke} strokeWidth={sw} strokeLinecap="round" strokeLinejoin="round">
      {Array.isArray(d) ? d.map((p,i)=><path key={i} d={p} />) : <path d={d} />}
    </svg>
  );
}

const ICONS = {
  home: 'M3 11l9-7 9 7v9a1 1 0 01-1 1h-5v-7H9v7H4a1 1 0 01-1-1v-9z',
  chart: ['M4 20V12','M10 20V6','M16 20V14','M22 20V8'],
  plus: ['M12 5v14','M5 12h14'],
  calendar: ['M3 9h18','M7 3v4','M17 3v4','M5 6h14a2 2 0 012 2v11a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2z'],
  user: ['M12 12a4 4 0 100-8 4 4 0 000 8z','M4 21a8 8 0 0116 0'],
  card: ['M2 8h20','M3 5h18a1 1 0 011 1v12a1 1 0 01-1 1H3a1 1 0 01-1-1V6a1 1 0 011-1z','M6 16h4'],
  target: ['M12 22a10 10 0 100-20 10 10 0 000 20z','M12 18a6 6 0 100-12 6 6 0 000 12z','M12 14a2 2 0 100-4 2 2 0 000 4z'],
  bell: ['M6 8a6 6 0 1112 0c0 7 3 9 3 9H3s3-2 3-9','M10 21a2 2 0 004 0'],
  repeat: ['M17 1l4 4-4 4','M3 11V9a4 4 0 014-4h14','M7 23l-4-4 4-4','M21 13v2a4 4 0 01-4 4H3'],
  cog: ['M12 15a3 3 0 100-6 3 3 0 000 6z','M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 11-2.83 2.83l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 11-4 0v-.09a1.65 1.65 0 00-1-1.51 1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 11-2.83-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 110-4h.09a1.65 1.65 0 001.51-1 1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 112.83-2.83l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 114 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 112.83 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9c.06.34.34.61.69.69H21a2 2 0 110 4h-.09a1.65 1.65 0 00-1.51 1z'],
  upload: ['M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4','M17 8l-5-5-5 5','M12 3v12'],
  download: ['M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4','M7 10l5 5 5-5','M12 15V3'],
  arrowUpRight: ['M7 17L17 7','M7 7h10v10'],
  arrowDownRight: ['M7 7l10 10','M17 7v10H7'],
  arrowRight: ['M5 12h14','M13 6l6 6-6 6'],
  arrowLeft: ['M19 12H5','M11 18l-6-6 6-6'],
  chevronR: 'M9 6l6 6-6 6',
  chevronL: 'M15 6l-6 6 6 6',
  chevronD: 'M6 9l6 6 6-6',
  back: ['M19 12H5','M12 19l-7-7 7-7'],
  search: ['M11 19a8 8 0 100-16 8 8 0 000 16z','M21 21l-4.35-4.35'],
  filter: ['M3 6h18','M6 12h12','M10 18h4'],
  edit: ['M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7','M18.5 2.5a2.121 2.121 0 113 3L12 15l-4 1 1-4 9.5-9.5z'],
  trash: ['M3 6h18','M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2'],
  check: 'M5 13l4 4L19 7',
  x: ['M18 6L6 18','M6 6l12 12'],
  mail: ['M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z','M22 6l-10 7L2 6'],
  send: ['M22 2L11 13','M22 2l-7 20-4-9-9-4 20-7z'],
  // category-ish
  cart: ['M9 22a1 1 0 100-2 1 1 0 000 2z','M20 22a1 1 0 100-2 1 1 0 000 2z','M1 1h4l2.7 13.4a2 2 0 002 1.6h9.7a2 2 0 002-1.6L23 6H6'],
  car: ['M5 17h14M3 17l1.5-5h15L21 17M7 17v2a1 1 0 001 1h1a1 1 0 001-1v-2M15 17v2a1 1 0 001 1h1a1 1 0 001-1v-2'],
  coffee: ['M18 8h1a4 4 0 010 8h-1','M2 8h16v9a4 4 0 01-4 4H6a4 4 0 01-4-4V8z','M6 1v3','M10 1v3','M14 1v3'],
  book: ['M2 3h6a4 4 0 014 4v14a3 3 0 00-3-3H2z','M22 3h-6a4 4 0 00-4 4v14a3 3 0 013-3h7z'],
  heart: 'M20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z',
  film: ['M2 4h20v16H2z','M7 4v16','M17 4v16','M2 8h5','M17 8h5','M2 16h5','M17 16h5'],
  music: ['M9 18V5l12-2v13','M6 21a3 3 0 100-6 3 3 0 000 6z','M18 19a3 3 0 100-6 3 3 0 000 6z'],
  gift: ['M20 12v10H4V12','M2 7h20v5H2z','M12 22V7','M12 7H7.5a2.5 2.5 0 010-5C11 2 12 7 12 7z','M12 7h4.5a2.5 2.5 0 000-5C13 2 12 7 12 7z'],
  plane: 'M21 16v-2l-8-5V3.5c0-.83-.67-1.5-1.5-1.5S10 2.67 10 3.5V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5z',
  shirt: 'M16 4l-4 2-4-2-6 4 3 4 3-2v10h8V10l3 2 3-4-6-4z',
  bank: ['M3 21h18','M3 10h18','M5 6l7-3 7 3','M4 10v11','M20 10v11','M8 14v3','M12 14v3','M16 14v3'],
  invest: ['M3 17l6-6 4 4 8-8','M14 7h7v7'],
  briefcase: ['M20 7H4a2 2 0 00-2 2v9a2 2 0 002 2h16a2 2 0 002-2V9a2 2 0 00-2-2z','M16 21V5a2 2 0 00-2-2h-4a2 2 0 00-2 2v16'],
};

// Category palette
const CAT_COLOR = {
  food: '#C77B4A', transport: '#5B8BAA', cafe: '#D4A23A', edu: '#7A6BB8',
  health: '#5BA68A', fun: '#C68FB8', subs: '#6B8DC4', gifts: '#B86F8E',
  travel: '#4FA2A8', clothes: '#A38869', invest: '#3DBA85',
};

Object.assign(window, { TOK, T, fmtR, fmtUSD, fmtCompact, Icon, ICONS, CAT_COLOR });
