// Shared components used across all KRTD pages.
// Exposes: KrtdLogo, Placeholder, Reveal, useTheme, IconArrow, IconArrowUpRight,
//          IconChevron, IconSun, IconMoon, Marquee,
//          TRANSLATIONS, I18nProvider, useI18n, LangSelector

// ─── KRTD wordmark ────────────────────────────────────────────────
function KrtdLogo({ height = 22, dark = false, style = {} }) {
  return (
    <img
      src="assets/krtd-logo.png"
      alt="KRTD"
      style={{
        height,
        width: 'auto',
        display: 'block',
        filter: dark ? 'invert(1) brightness(1.05)' : 'none',
        ...style,
      }}
    />
  );
}

// ─── Placeholder image ────────────────────────────────────────────
function Placeholder({ label, w = '100%', h = 200, theme = 'light', style = {}, radius = 0, accent }) {
  const stripe = theme === 'dark' ? 'rgba(255,255,255,.04)' : 'rgba(0,0,0,.035)';
  const bg = theme === 'dark' ? 'rgba(255,255,255,.02)' : 'rgba(0,0,0,.015)';
  const fg = theme === 'dark' ? 'rgba(255,255,255,.35)' : 'rgba(0,0,0,.4)';
  const id = `ph-${Math.random().toString(36).slice(2, 8)}`;
  return (
    <div style={{ width: w, height: h, borderRadius: radius, overflow: 'hidden', position: 'relative', ...style }}>
      <svg width="100%" height="100%" preserveAspectRatio="none" style={{ display: 'block' }}>
        <defs>
          <pattern id={id} width="14" height="14" patternUnits="userSpaceOnUse" patternTransform="rotate(45)">
            <rect width="14" height="14" fill={bg} />
            <line x1="0" y1="0" x2="0" y2="14" stroke={stripe} strokeWidth="14" />
          </pattern>
        </defs>
        <rect width="100%" height="100%" fill={`url(#${id})`} />
        {accent && <circle cx="50%" cy="50%" r="40" fill={accent} opacity="0.15" />}
      </svg>
      <div style={{
        position: 'absolute', inset: 0, display: 'flex', alignItems: 'center', justifyContent: 'center',
        fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace', fontSize: 11, letterSpacing: '0.08em',
        textTransform: 'uppercase', color: fg, padding: 16, textAlign: 'center',
      }}>{label}</div>
    </div>
  );
}

// ─── Reveal-on-mount wrapper ──────────────────────────────────────
function Reveal({ children, delay = 0, y = 24, style = {}, as = 'div' }) {
  const ref = React.useRef(null);
  const [shown, setShown] = React.useState(false);
  React.useEffect(() => {
    if (!ref.current) return;
    const io = new IntersectionObserver((entries) => {
      entries.forEach((e) => { if (e.isIntersecting) { setShown(true); io.disconnect(); } });
    }, { threshold: 0.1, root: ref.current.closest('[data-scroll-root]') || null });
    io.observe(ref.current);
    return () => io.disconnect();
  }, []);
  const Tag = as;
  return (
    <Tag ref={ref} style={{
      ...style,
      opacity: shown ? 1 : 0,
      transform: shown ? 'translateY(0)' : `translateY(${y}px)`,
      transition: `opacity .9s cubic-bezier(.2,.7,.3,1) ${delay}ms, transform .9s cubic-bezier(.2,.7,.3,1) ${delay}ms`,
      willChange: 'opacity, transform',
    }}>{children}</Tag>
  );
}

// ─── Theme hook ───────────────────────────────────────────────────
function useTheme(initial = 'dark') {
  const [theme, setTheme] = React.useState(initial);
  const toggle = React.useCallback(() => setTheme((t) => t === 'dark' ? 'light' : 'dark'), []);
  return { theme, toggle, setTheme };
}

// ─── Tiny SVG icons ───────────────────────────────────────────────
function IconArrow({ size = 14, style }) {
  return (
    <svg viewBox="0 0 20 20" width={size} height={size} fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round" style={style}>
      <path d="M4 10h12M11 5l5 5-5 5" />
    </svg>
  );
}
function IconArrowUpRight({ size = 14, style }) {
  return (
    <svg viewBox="0 0 20 20" width={size} height={size} fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round" style={style}>
      <path d="M6 14L14 6M7 6h7v7" />
    </svg>
  );
}
function IconChevron({ size = 14, style, dir = 'down' }) {
  const r = { down: 0, up: 180, right: -90, left: 90 }[dir] || 0;
  return (
    <svg viewBox="0 0 20 20" width={size} height={size} fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round" style={{ transform: `rotate(${r}deg)`, ...style }}>
      <path d="M5 8l5 5 5-5" />
    </svg>
  );
}
function IconSun({ size = 14 }) {
  return (
    <svg viewBox="0 0 20 20" width={size} height={size} fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round">
      <circle cx="10" cy="10" r="3.5" /><path d="M10 2v2M10 16v2M2 10h2M16 10h2M4.2 4.2l1.4 1.4M14.4 14.4l1.4 1.4M4.2 15.8l1.4-1.4M14.4 5.6l1.4-1.4" />
    </svg>
  );
}
function IconMoon({ size = 14 }) {
  return (
    <svg viewBox="0 0 20 20" width={size} height={size} fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round">
      <path d="M16 12.5A6.5 6.5 0 0 1 7.5 4 6.5 6.5 0 1 0 16 12.5z" />
    </svg>
  );
}

// ─── Marquee ──────────────────────────────────────────────────────
function Marquee({ children, speed = 40, style = {} }) {
  const id = React.useMemo(() => `mq-${Math.random().toString(36).slice(2, 8)}`, []);
  return (
    <div style={{ overflow: 'hidden', whiteSpace: 'nowrap', ...style }}>
      <style>{`@keyframes ${id}{from{transform:translateX(0)}to{transform:translateX(-50%)}}`}</style>
      <div style={{ display: 'inline-flex', animation: `${id} ${speed}s linear infinite`, willChange: 'transform' }}>
        <div style={{ display: 'inline-flex', alignItems: 'center' }}>{children}</div>
        <div style={{ display: 'inline-flex', alignItems: 'center' }} aria-hidden>{children}</div>
      </div>
    </div>
  );
}

// ─── i18n ─────────────────────────────────────────────────────────
const TRANSLATIONS = {
  en: {
    // nav
    'nav.studio': '/ studio',
    'nav.apps': 'Apps',
    'nav.services': 'Services',
    'nav.work': 'Work',
    'nav.writing': 'Writing',
    'nav.about': 'About',
    'nav.startProject': 'Start a project',
    'nav.getReadaily': 'Get Readaily',
    // home hero
    'home.hero.badge': 'Independent product studio · São Paulo / remote',
    'home.hero.h1a': 'We ship our own apps,',
    'home.hero.h1b.before': 'and build yours ',
    'home.hero.h1b.accent': 'end‑to‑end',
    'home.hero.h1b.after': '.',
    'home.hero.sub': 'KRTD is a small studio behind Readaily and other products. We partner with founders and teams on product strategy, AI & data, and end-to-end development — design through engineering.',
    'home.hero.cta1': 'Explore the apps',
    'home.hero.cta2': 'How we work',
    // stats
    'home.stats.0.k': 'SHIPPED', 'home.stats.0.v': '7+ apps', 'home.stats.0.sub': 'across iOS, web, AI',
    'home.stats.1.k': 'CLIENTS', 'home.stats.1.v': '20+', 'home.stats.1.sub': 'startups & teams',
    'home.stats.2.k': 'DISCIPLINES', 'home.stats.2.v': '04', 'home.stats.2.sub': 'design · eng · AI · strategy',
    'home.stats.3.k': 'SINCE', 'home.stats.3.v': '2025', 'home.stats.3.sub': 'building deliberately',
    // apps section
    'home.apps.eyebrow': 'Apps we own',
    'home.apps.h2a': 'Products we run ourselves —',
    'home.apps.h2b': 'shipping in public.',
    'home.apps.sub': 'Our own apps are how we keep the saw sharp. Same playbook we use with clients.',
    // readaily card
    'home.readaily.tag': 'iOS & ANDROID · LIVE · 2025 →',
    'home.readaily.headline': 'A daily reading habit, gently kept.',
    'home.readaily.sub': 'Fifteen quiet minutes, your current book, a streak that asks nothing of you. Distraction-free sessions, private book clubs, eight languages.',
    'home.readaily.platforms': 'PLATFORMS', 'home.readaily.languages': 'LANGUAGES',
    'home.readaily.price': 'PRICE', 'home.readaily.priceval': 'Free · Pro $0.99',
    'home.readaily.visit': 'Visit page',
    // workshop
    'home.workshop.0.name': 'New app · in the workshop', 'home.workshop.0.tag': 'COMING 2026',
    'home.workshop.0.blurb': 'A small product we\'re shaping next. Sign up to hear when it lands.',
    'home.workshop.1.name': 'Got something we should build?', 'home.workshop.1.tag': 'TELL US',
    'home.workshop.1.blurb': 'Pitch us a product idea — we partner on a handful of new things each year.',
    // services
    'home.services.eyebrow': 'How we help',
    'home.services.h2': 'Three ways to work with us.',
    'home.services.0.n': 'S/01', 'home.services.0.title': 'Product & UX strategy',
    'home.services.0.blurb': 'Sharpen the problem, scope the MVP, design the experience. From founder workshops to full UX engagements.',
    'home.services.0.i0': 'Discovery sprints', 'home.services.0.i1': 'Information architecture',
    'home.services.0.i2': 'UX & UI design systems', 'home.services.0.i3': 'Product roadmaps',
    'home.services.1.n': 'S/02', 'home.services.1.title': 'Data & AI consultation',
    'home.services.1.blurb': 'Pragmatic AI — not demos. We help you decide what to build, what to buy, and how to evaluate it.',
    'home.services.1.i0': 'LLM application design', 'home.services.1.i1': 'Evals & guardrails',
    'home.services.1.i2': 'Data pipelines & analytics', 'home.services.1.i3': 'Model selection',
    'home.services.2.n': 'S/03', 'home.services.2.title': 'End-to-end development',
    'home.services.2.blurb': 'Design, engineering, shipping. Mobile, web, anything digital. Same team takes it from idea to live.',
    'home.services.2.i0': 'iOS & Android (Flutter)', 'home.services.2.i1': 'Web platforms',
    'home.services.2.i2': 'Backends & infra', 'home.services.2.i3': 'Launch & iterate',
    // work
    'home.work.eyebrow': 'Selected work',
    'home.work.h2': 'What we\'ve shipped, with whom.',
    // about
    'home.about.eyebrow': 'About',
    'home.about.h2': 'A small studio, deliberately.',
    'home.about.sub': 'KRTD is built around one principle: the people who shape the product also build it. No handoffs, no hopium. We stay small so the work stays sharp — and so we can keep shipping our own things on the side.',
    'home.about.cta1': 'Start a project', 'home.about.cta2': 'See the work',
    'home.founder.role': 'CEO · FOUNDER',
    'home.founder.bio': 'Engineer, designer, product builder. Spent a decade shipping software inside tech orgs before starting KRTD to do the same work without the meetings. Currently leading product on Readaily and partnering with a handful of teams.',
    'home.founder.linkedin': 'Connect on LinkedIn',
    // writing
    'home.writing.eyebrow': 'Writing',
    'home.writing.h2': 'Notes from the workshop.',
    'home.writing.all': 'All writing',
    // contact
    'home.contact.eyebrow': 'Start a project',
    'home.contact.h2a': 'Tell us what you\'re',
    'home.contact.h2b': 'actually trying to build.',
    'home.contact.sub': 'We respond to every inquiry within two business days. Engagements typically start at six weeks.',
    'home.contact.hours': 'Mon–Fri · 9am–6pm BRT',
    'home.contact.name': 'NAME', 'home.contact.email': 'EMAIL',
    'home.contact.co': 'COMPANY / PROJECT', 'home.contact.message': 'WHAT ARE YOU BUILDING?',
    'home.contact.interestedIn': 'I\'M INTERESTED IN', 'home.contact.send': 'Send inquiry',
    'home.contact.i0': 'Strategy', 'home.contact.i1': 'Design',
    'home.contact.i2': 'Development', 'home.contact.i3': 'AI', 'home.contact.i4': 'Not sure yet',
    // footer
    'home.footer.tagline': 'KARTEADO TECNOLOGIA LTDA — INDEPENDENT PRODUCT STUDIO. SHIPPING DELIBERATELY SINCE 2025.',
    'home.footer.studio': 'STUDIO', 'home.footer.apps': 'APPS', 'home.footer.elsewhere': 'ELSEWHERE',
    'home.footer.about': 'About', 'home.footer.services': 'Services', 'home.footer.writing': 'Writing',
    'home.footer.twitter': 'Twitter', 'home.footer.email': 'Email',
    'home.footer.copyright': '© 2025 KARTEADO TECNOLOGIA LTDA',
    'home.footer.made': 'SÃO PAULO / REMOTE — ALWAYS OPEN TO INTERESTING WORK',
    // readaily page
    'rd.breadcrumb.krtd': 'KRTD', 'rd.breadcrumb.apps': 'APPS', 'rd.breadcrumb.readaily': 'READAILY',
    'rd.nav.getApp': 'Get Readaily',
    'rd.hero.tag': 'BY KRTD · iOS & ANDROID',
    'rd.hero.h1.before': 'A daily reading habit, ', 'rd.hero.h1.accent': 'gently kept.',
    'rd.hero.sub': 'Readaily turns the cover-opening part into the easy part. Fifteen quiet minutes, your current book, a streak that asks nothing of you. Pick up where you left off — every day.',
    'rd.hero.free': 'FREE · WITH OPTIONAL PRO', 'rd.hero.platform': 'iOS 15+ / ANDROID 7+', 'rd.hero.langs': '8 LANGUAGES',
    'rd.store.downloadOn': 'Download on the', 'rd.store.getItOn': 'Get it on',
    'rd.store.appStore': 'App Store', 'rd.store.googlePlay': 'Google Play',
    'rd.quote.eyebrow': 'The feeling we kept hearing',
    'rd.quote': '"A book a year is a person changed. The hard part isn\'t the reading — it\'s opening the cover at all."',
    'rd.features.eyebrow': 'What\'s inside',
    'rd.features.h2a': 'A small app that looks like a book —', 'rd.features.h2b': 'and behaves like one.',
    'rd.features.sub': 'Built around the way reading actually feels — slow, private, optional. No feeds, no leaderboards, no notifications begging for your evening.',
    'rd.features.0.n': 'F/01', 'rd.features.0.t': 'Distraction-free sessions',
    'rd.features.0.b': 'One tap and your phone hands itself over to your book. Focus Mode on iOS, Do Not Disturb on Android, and a quiet timer that fades into the page. Live Activities show your session at a glance — without ever asking you to look.',
    'rd.features.1.n': 'F/02', 'rd.features.1.t': 'Your library, organised',
    'rd.features.1.b': 'Reading, to-read, completed, archived. Add a book by ISBN scan, search, or by hand. Covers, page counts, and progress bars do the talking.',
    'rd.features.2.n': 'F/03', 'rd.features.2.t': 'Read together, at your pace',
    'rd.features.2.b': 'Start a club with two friends or twenty. Share progress, send a gentle nudge, and finish the book on a date you all agreed on.',
    'rd.features.3.n': 'F/04', 'rd.features.3.t': 'A streak that doesn\'t guilt-trip',
    'rd.features.3.b': 'Miss a day? Readaily quietly adjusts your goals — no flame extinguisher, no shame screen. The point isn\'t the streak; it\'s the page you turn next.',
    'rd.features.4.n': 'F/05', 'rd.features.4.t': 'Offline-first by design',
    'rd.features.4.b': 'The whole app works without a connection. Your library, sessions, and streaks live on the device and sync the moment you\'re online again.',
    'rd.features.5.n': 'F/06', 'rd.features.5.t': 'Eight languages, two themes',
    'rd.features.5.b': 'EN, PT-BR, ES, FR, DE, IT, RU, JA — fully localized, including streak copy and notifications. Light or dark. The rest is just you and the book.',
    'rd.streak.eyebrow': 'The streak',
    'rd.streak.h2a': 'Read today, and tomorrow\'s', 'rd.streak.h2b': 'easier than yesterday was.',
    'rd.streak.sub': 'Miss a day? Readaily quietly adjusts your goals — no flame extinguisher, no shame screen. The point isn\'t the streak; it\'s the page you turn next.',
    'rd.streak.thisWeek': 'THIS WEEK', 'rd.streak.streak': 'day streak',
    'rd.streak.pages': 'Pages', 'rd.streak.time': 'Time', 'rd.streak.daily': 'Daily goal',
    'rd.screens.eyebrow': 'Five quiet screens',
    'rd.screens.h2a': 'A reading app that', 'rd.screens.h2b': 'looks like reading.',
    'rd.screens.sub': 'Lora throughout, paper-warm backgrounds, ink-black type. Book covers do the colour work. Everything else gets out of the way.',
    'rd.screens.label': '· SCREEN',
    'rd.screens.0.t': 'Today\'s book, today\'s minutes.',
    'rd.screens.0.b': 'Open the app and meet the page you left off on. Nothing else asks for your attention.',
    'rd.screens.1.t': 'Scan, search, or type it in.',
    'rd.screens.1.b': 'ISBN scan with the camera. Title or author search. Or just add the book by hand — your shelf, your rules.',
    'rd.screens.2.t': 'Read with your people.',
    'rd.screens.2.b': 'A small, private circle. Invite by code, agree on a finish date, and read the same book at your own pace.',
    'rd.screens.3.t': 'See where everyone is.',
    'rd.screens.3.b': 'Member progress bars and a soft little nudge button. No public scoreboards, no shaming.',
    'rd.screens.4.t': 'Eight languages, two themes, one habit.',
    'rd.screens.4.b': 'EN, PT-BR, ES, FR, DE, IT, RU, JA. Light, dark. The rest is just you and the book.',
    'rd.testimonials.eyebrow': 'From readers', 'rd.testimonials.h2': 'Quiet wins, week after week.',
    'rd.pricing.eyebrow': 'Pricing',
    'rd.pricing.h2a': 'Free forever.', 'rd.pricing.h2b': 'Pro when you want more.',
    'rd.pricing.sub': 'Most readers never need Pro. The streak, the timer, the library — all free. Pro unlocks the social, unlimited and optimized experience, and helps us keep the lights on without ads.',
    'rd.pricing.free.label': 'FREE · FOREVER', 'rd.pricing.free.name': 'Reader', 'rd.pricing.free.price': '$0',
    'rd.pricing.free.f0': 'Search books on multiple databases', 'rd.pricing.free.f1': 'Book, pace and streak stats',
    'rd.pricing.free.f2': 'Goal settings and daily reminders', 'rd.pricing.free.f3': 'Join 1 book club',
    'rd.pricing.free.f4': 'Only 1 active book', 'rd.pricing.free.cta': 'Download free',
    'rd.pricing.pro.label': 'PRO · 7 DAY TRIAL', 'rd.pricing.pro.badge': 'RECOMMENDED',
    'rd.pricing.pro.name': 'Reader Pro', 'rd.pricing.pro.price': '$0.99',
    'rd.pricing.pro.period': '/ month, or $9.99/yr',
    'rd.pricing.pro.f0': 'Everything in Reader', 'rd.pricing.pro.f1': 'Ad-free experience',
    'rd.pricing.pro.f2': 'Smart Sessions and Focus Mode', 'rd.pricing.pro.f3': 'Create & join unlimited book clubs',
    'rd.pricing.pro.f4': 'Unlimited active books', 'rd.pricing.pro.cta': 'Try Pro free for 7 days',
    'rd.faq.eyebrow': 'Questions, gently answered',
    'rd.faq.h2a': 'Yes, it really is', 'rd.faq.h2b': 'just for reading.',
    'rd.faq.0.q': 'Does Readaily come with the books?',
    'rd.faq.0.a': "No — Readaily tracks the books you already own, in any format. Paper, ebook, audiobook. We don't sell or host books; we keep the rhythm of reading them.",
    'rd.faq.1.q': 'What happens to my streak when I miss a day?',
    'rd.faq.1.a': "It resets, quietly. You'll see a small note (\"You missed yesterday — your goals have been adjusted\"), and the next day starts fresh. There's no streak insurance to buy and no guilt-trip notifications.",
    'rd.faq.2.q': 'Do I need a Pro account to read with friends?',
    'rd.faq.2.a': "You can join one club for free. Hosting your own clubs and joining unlimited clubs is part of Pro — that's the part that costs us money to run on the server side.",
    'rd.faq.3.q': 'Does Readaily work offline?',
    'rd.faq.3.a': "Yes. The whole app is offline-first. Your library, sessions, and streaks live on your device. Data syncs the moment you're online again.",
    'rd.faq.4.q': 'Which languages are supported?',
    'rd.faq.4.a': 'English, Portuguese, Spanish, French, German, Italian, Russian, and Japanese. The interface — including streak copy, dates, and notifications — is fully localized in each.',
    'rd.cta.eyebrow': 'Get Readaily',
    'rd.cta.h2a': 'Fifteen minutes a day.', 'rd.cta.h2b': 'Today\'s a good day to start.',
    'rd.cta.sub': 'Readaily is free and quietly waiting.\nPick up the book that\'s been waiting longer.',
    'rd.footer.tagline': 'READAILY IS A KRTD PRODUCT. A DAILY READING HABIT, GENTLY KEPT. MADE BY READERS.',
    'rd.footer.readaily': 'Readaily', 'rd.footer.features': 'Features', 'rd.footer.pricing': 'Pricing',
    'rd.footer.studio': 'Studio', 'rd.footer.about': 'About KRTD', 'rd.footer.services': 'Services',
    'rd.footer.allApps': 'All apps', 'rd.footer.support': 'Support',
    'rd.footer.help': 'Help · hello@readaily.app', 'rd.footer.privacy': 'Privacy', 'rd.footer.terms': 'Terms',
    'rd.footer.appStore': 'App Store', 'rd.footer.googlePlay': 'Google Play',
    'rd.footer.copyright': '© 2026 KRTD · KARTEADO LTDA',
    'rd.footer.made': 'READAILY · MADE WITH CARE, ON PAPER-WARM PIXELS',
    // apps portfolio page
    'apps.eyebrow': 'Our apps', 'apps.h1': 'Products we ship and own.',
    'apps.sub': 'Built with the same care we bring to client work. Every app ships with real users, real revenue, and real lessons learned.',
    'apps.live': 'LIVE', 'apps.coming': 'COMING 2026', 'apps.pitch': 'TELL US',
    'apps.readaily.visit': 'See Readaily', 'apps.workshop.name': 'New app · in the workshop',
    'apps.workshop.blurb': 'A small product we\'re shaping next. Sign up to hear when it lands.',
    'apps.pitch.name': 'Got a product idea?', 'apps.pitch.blurb': 'We partner on a handful of new things each year — pitch us.',
    'apps.cta.h2': 'Partner with us on the next one.',
    'apps.cta.sub': 'Every year we take on one or two external projects that challenge us. Tell us what you\'re building.',
    // writing page
    'writing.eyebrow': 'Writing', 'writing.h1': 'Notes from the workshop.',
    'writing.sub': 'Essays and notes on product, engineering, and what it means to build deliberately.',
    'writing.readMore': 'Read more',
    'writing.tags.all': 'All', 'writing.tags.product': 'Product', 'writing.tags.engineering': 'Engineering',
    'writing.tags.ai': 'AI', 'writing.tags.design': 'Design',
    'writing.more.h2': 'More writing on the way.',
    'writing.more.sub': 'These notes come out when there\'s something worth saying. No newsletter cadence, no filler.',
    // ─── services page ─────────────────────────────────────────
    'srv.hero.eyebrow': 'End-to-end product build · {days} days, one team',
    'srv.hero.h1a': 'From idea to',
    'srv.hero.h1.accent': 'live app',
    'srv.hero.h1b': ', in {days} days.',
    'srv.hero.sub': 'Our main engagement: a senior team takes your idea through discovery, design, engineering, and post-launch iteration. No handoffs, no junior bait-and-switch, no scope creep theatre. One contract, one team, one shipped product.',
    'srv.hero.cta1': 'Start a project',
    'srv.hero.cta2': 'See how we work',
    'srv.hero.iphone.label': 'your app here',
    'srv.hero.stat1': 'DAYS TO LAUNCH',
    'srv.hero.stat2': 'TEAM, END-TO-END',
    'srv.hero.stat3': 'CODE YOU OWN',
    'srv.values.eyebrow': 'Why work with us',
    'srv.values.h2a': 'A studio that builds what it designs —',
    'srv.values.h2b': 'and stays after the launch.',
    'srv.values.0.t': 'One team, idea to live',
    'srv.values.0.b': 'The people who shape the product also build and ship it. No "now we hand off to engineering" moment — because engineering was in the room since day one.',
    'srv.values.1.t': 'Senior-only, no resale',
    'srv.values.1.b': 'You get the people in the proposal. We don\'t scale on juniors or subcontract the hard parts. The team that wins the work is the team that does the work.',
    'srv.values.2.t': 'Ships in 90 days',
    'srv.values.2.b': 'A real, public MVP in three months — not a Figma file, not a pitch deck. The timeline is the deliverable. We size scope to the calendar, not the other way around.',
    'srv.values.3.t': 'Iteration as an add-on',
    'srv.values.3.b': 'Launch isn\'t the end — but it\'s where this engagement is. We offer a post-launch iteration phase as a separate add-on, contracted only when you know what your users actually need.',
    'srv.compare.eyebrow': 'How we compare',
    'srv.compare.h2a': 'End-to-end ownership versus',
    'srv.compare.h2b': 'four vendors and a project manager.',
    'srv.compare.us': 'KRTD',
    'srv.compare.usSub': 'END-TO-END',
    'srv.compare.agency': 'Traditional agency',
    'srv.compare.agencySub': 'DESIGN OR DEV',
    'srv.compare.freelance': 'Freelancers',
    'srv.compare.freelanceSub': 'STITCHED TOGETHER',
    'srv.compare.yes': 'Yes',
    'srv.compare.no': 'No',
    'srv.compare.partial': 'Partial',
    'srv.compare.row.0': 'Product strategy & discovery',
    'srv.compare.row.1': 'UX & UI design',
    'srv.compare.row.2': 'Engineering (mobile + backend)',
    'srv.compare.row.3': 'Single point of contact',
    'srv.compare.row.4': 'Senior-only team, no subcontracting',
    'srv.compare.row.5': 'Fixed {days}-day launch commitment',
    'srv.compare.row.6': 'Post-launch iteration offered as add-on',
    'srv.compare.row.7': 'Transparent fixed-scope pricing',
    'srv.testimonials.eyebrow': 'What founders say',
    'srv.testimonials.h2': 'A few words from the people we\'ve shipped with.',
    'srv.testimonials.disclaimer': 'Sample testimonials — to be replaced with real client quotes before public launch.',
    'srv.testimonials.0.q': 'They didn\'t just deliver an app — they argued with us about the right problem to solve. We almost built the wrong thing. They saved us a year.',
    'srv.testimonials.0.n': 'Founder, fintech startup',
    'srv.testimonials.0.m': 'São Paulo · Seed stage',
    'srv.testimonials.1.q': 'The MVP shipped on day 87. We were ready to forgive a week of slip. There was no slip. The honesty about scope upfront was the whole game.',
    'srv.testimonials.1.n': 'Head of Product',
    'srv.testimonials.1.m': 'Lisbon · Series A SaaS',
    'srv.testimonials.2.q': 'After launch they didn\'t disappear. The iteration month is the difference between an app and a product people actually open twice.',
    'srv.testimonials.2.n': 'Co-founder, consumer app',
    'srv.testimonials.2.m': 'Berlin · Bootstrapped',
    'srv.process.eyebrow': 'How we work',
    'srv.process.h2': 'A double-diamond process, plus a third loop for iteration.',
    'srv.process.sub': 'Two diamonds — divergent exploration then convergent decision — for Discovery and for Design+Delivery. Then a third phase: a continuous loop of measure, learn, ship.',
    'srv.process.days': 'days',
    'srv.process.deliverables': 'KEY DELIVERABLES',
    'srv.process.0.t': 'Discovery',
    'srv.process.0.b': 'Sharpen the problem, understand the user, agree on the smallest version that proves the bet. Diverge through interviews and research; converge on a written scope and product brief.',
    'srv.process.0.i0': 'Stakeholder & user interviews',
    'srv.process.0.i1': 'Competitive & solution landscape',
    'srv.process.0.i2': 'Signed product brief & success metrics',
    'srv.process.0.i3': 'Information architecture & user flows',
    'srv.process.1.t': 'Prototype',
    'srv.process.1.b': 'Turn the brief into something you can hold. High-fidelity click-through prototype validated with real users — the cheapest, fastest way to find out what we got wrong before we write production code.',
    'srv.process.1.i0': 'High-fidelity UI in Figma',
    'srv.process.1.i1': 'Interactive click-through prototype',
    'srv.process.1.i2': '3–5 usability tests with target users',
    'srv.process.1.i3': 'Design system foundations',
    'srv.process.2.t': 'MVP',
    'srv.process.2.b': 'Build and ship the real thing. Production code, real backend, real analytics, real app store submission. Weekly demos on real device, public launch at the end of the month.',
    'srv.process.2.i0': 'iOS + Android build (Flutter)',
    'srv.process.2.i1': 'Backend, infra & analytics wired',
    'srv.process.2.i2': 'App Store & Play Store submission',
    'srv.process.2.i3': 'Launch playbook & handover doc',
    'srv.process.optional.eyebrow': 'OPTIONAL · ADD-ON',
    'srv.process.optional.t': 'Iteration — month 4 and beyond',
    'srv.process.optional.b': 'Once the MVP is live, the real product work begins. Add a month (or more) of measured iteration on real user behavior — funnel analysis, qualitative feedback, weekly releases. Contracted separately after launch, when we both know what the product needs.',
    'srv.process.optional.cta': 'Discuss the add-on',
    'srv.timeline.eyebrow': 'Timeline',
    'srv.timeline.h2': 'Three phases. One quarter. One bill of work.',
    'srv.timeline.h2Proposal': 'Your timeline, costed.',
    'srv.timeline.sub': 'A standard engagement runs three months — one month per phase. Scope grows or shrinks to fit the timeline, not the other way around.',
    'srv.timeline.subProposal': 'Phase durations and prices are specific to your project. Total below is the full engagement, payable per phase.',
    'srv.contact.eyebrow': 'Start a project',
    'srv.contact.h2a': 'Tell us about',
    'srv.contact.h2b': 'the thing you\'d build.',
    'srv.contact.h2aProposal': 'Ready to start?',
    'srv.contact.h2bProposal': 'Sign and we begin.',
    'srv.contact.sub': 'Send us a few lines about your idea. We respond within two business days with either a discovery call invite or an honest "this isn\'t a fit, but here\'s who is."',
    'srv.contact.subProposal': 'Reply to confirm the proposal and we\'ll send a contract within 24 hours. Discovery starts the Monday after signature.',
    'srv.contact.idea': 'THE IDEA (one paragraph)',
    'srv.proposal.eyebrow': 'PRIVATE PROPOSAL',
    'srv.proposal.title': 'This page is a private proposal.',
    'srv.proposal.sub': 'Enter the password we shared with you to unlock the customized version of this page. The content is encrypted in your browser — without the password, no one can read it, including us.',
    'srv.proposal.pwLabel': 'PASSWORD',
    'srv.proposal.unlock': 'Unlock proposal',
    'srv.proposal.unlocking': 'Decrypting…',
    'srv.proposal.wrongPw': 'WRONG PASSWORD — TRY AGAIN.',
    'srv.proposal.preparedFor': 'PREPARED FOR',
    'srv.proposal.validUntil': 'VALID UNTIL',
    'srv.proposal.yourContact': 'Your contact at KRTD',
    'srv.acceptance.summaryTitle': 'YOU ARE ACCEPTING',
    'srv.acceptance.engagementTotal': 'Engagement total',
    'srv.acceptance.optionalLine': 'Optional iteration (monthly)',
    'srv.acceptance.perMonth': ' / month',
    'srv.acceptance.name': 'FULL NAME',
    'srv.acceptance.role': 'ROLE / TITLE',
    'srv.acceptance.email': 'EMAIL',
    'srv.acceptance.notes': 'NOTES OR CONDITIONS (optional)',
    'srv.acceptance.notesPlaceholder': 'Anything to flag before we send the contract…',
    'srv.acceptance.agreement': 'I accept this proposal as described — including the scope, timeline (3 phases × ~30 days), and pricing per phase. I confirm I have authority to sign on behalf of my company. KRTD will follow up with a formal contract within 24 hours.',
    'srv.acceptance.send': 'Send acceptance',
    'srv.acceptance.sending': 'Sending…',
    'srv.acceptance.agreement': 'I accept this proposal as described — including scope, timeline, and pricing per phase. I understand that each phase ends with a validation checkpoint where I may choose not to continue to the next phase, with no penalty beyond paying for the completed phase. I confirm I have authority to sign on behalf of my company. KRTD will follow up with a formal contract within 24 hours.',
    'srv.timeline.subProposal': 'Phase durations and prices are specific to your project. Each phase is billed 50% at kick-off and 50% on delivery of deliverables. You decide at each phase checkpoint whether to continue.',
    'srv.process.checkpoint': 'PHASE CHECKPOINT',
    'srv.process.checkpoint.desc': 'Deliverables presented. You choose whether to continue to the next phase — stopping here carries no penalty beyond paying the completed phase.',
    'srv.payment.schedule.eyebrow': 'PAYMENT SCHEDULE',
    'srv.payment.signal': 'Kick-off (50%)',
    'srv.payment.delivery': 'Delivery (50%)',
    'srv.payment.note': 'Each phase is billed in two equal installments: 50% at the start of the phase, 50% on approval of deliverables. No payment for a future phase is due until you decide to start it.',
  },
  'pt-BR': {
    'nav.studio': '/ estúdio', 'nav.apps': 'Apps', 'nav.services': 'Serviços', 'nav.work': 'Trabalho',
    'nav.writing': 'Blog', 'nav.about': 'Sobre', 'nav.startProject': 'Iniciar projeto', 'nav.getReadaily': 'Baixar Readaily',
    'home.hero.badge': 'Estúdio de produto independente · São Paulo / remoto',
    'home.hero.h1a': 'Lançamos nossos próprios apps,',
    'home.hero.h1b.before': 'e construímos o seu ', 'home.hero.h1b.accent': 'do zero.', 'home.hero.h1b.after': '',
    'home.hero.sub': 'KRTD é um estúdio pequeno por trás do Readaily e outros produtos. Parceiros de founders e times em estratégia de produto, IA & dados, e desenvolvimento completo — do design à engenharia.',
    'home.hero.cta1': 'Ver os apps', 'home.hero.cta2': 'Como trabalhamos',
    'home.stats.0.k': 'LANÇADOS', 'home.stats.0.v': '7+ apps', 'home.stats.0.sub': 'iOS, web e IA',
    'home.stats.1.k': 'CLIENTES', 'home.stats.1.v': '20+', 'home.stats.1.sub': 'startups e times',
    'home.stats.2.k': 'DISCIPLINAS', 'home.stats.2.v': '04', 'home.stats.2.sub': 'design · eng · IA · estratégia',
    'home.stats.3.k': 'DESDE', 'home.stats.3.v': '2025', 'home.stats.3.sub': 'construindo com propósito',
    'home.apps.eyebrow': 'Apps próprios', 'home.apps.h2a': 'Produtos que gerenciamos —',
    'home.apps.h2b': 'construindo em público.',
    'home.apps.sub': 'Nossos próprios apps são como mantemos o fio da navalha afiado. O mesmo método que usamos com clientes.',
    'home.readaily.tag': 'iOS & ANDROID · ATIVO · 2025 →',
    'home.readaily.headline': 'Um hábito diário de leitura, mantido com leveza.',
    'home.readaily.sub': 'Quinze minutos tranquilos, seu livro atual, uma sequência que não cobra nada de você. Sessões sem distração, clubes de leitura privados, oito idiomas.',
    'home.readaily.platforms': 'PLATAFORMAS', 'home.readaily.languages': 'IDIOMAS',
    'home.readaily.price': 'PREÇO', 'home.readaily.priceval': 'Grátis · Pro R$4,99',
    'home.readaily.visit': 'Ver página',
    'home.workshop.0.name': 'Novo app · em desenvolvimento', 'home.workshop.0.tag': 'EM BREVE 2026',
    'home.workshop.0.blurb': 'Um pequeno produto que estamos moldando. Cadastre-se para saber quando chegar.',
    'home.workshop.1.name': 'Tem algo que devemos construir?', 'home.workshop.1.tag': 'FALE COM A GENTE',
    'home.workshop.1.blurb': 'Nos apresente uma ideia de produto — fazemos parceria em algumas novidades por ano.',
    'home.services.eyebrow': 'Como ajudamos', 'home.services.h2': 'Três formas de trabalhar com a gente.',
    'home.services.0.n': 'S/01', 'home.services.0.title': 'Estratégia de produto e UX',
    'home.services.0.blurb': 'Afinar o problema, definir o escopo do MVP, desenhar a experiência. De workshops com founders a engajamentos completos de UX.',
    'home.services.0.i0': 'Sprints de descoberta', 'home.services.0.i1': 'Arquitetura de informação',
    'home.services.0.i2': 'Sistemas de UX & UI', 'home.services.0.i3': 'Roadmaps de produto',
    'home.services.1.n': 'S/02', 'home.services.1.title': 'Consultoria em Dados & IA',
    'home.services.1.blurb': 'IA pragmática — sem demos. Ajudamos a decidir o que construir, o que comprar e como avaliar.',
    'home.services.1.i0': 'Design de aplicações com LLM', 'home.services.1.i1': 'Avaliações & guardrails',
    'home.services.1.i2': 'Pipelines de dados & analytics', 'home.services.1.i3': 'Seleção de modelos',
    'home.services.2.n': 'S/03', 'home.services.2.title': 'Desenvolvimento end-to-end',
    'home.services.2.blurb': 'Design, engenharia, lançamento. Mobile, web, tudo digital. O mesmo time leva da ideia ao ar.',
    'home.services.2.i0': 'Apps iOS & Android (Flutter)', 'home.services.2.i1': 'Plataformas web',
    'home.services.2.i2': 'Backends & infraestrutura', 'home.services.2.i3': 'Lançamento & iteração',
    'home.work.eyebrow': 'Trabalho selecionado', 'home.work.h2': 'O que entregamos, com quem.',
    'home.about.eyebrow': 'Sobre', 'home.about.h2': 'Um estúdio pequeno, de propósito.',
    'home.about.sub': 'A KRTD é construída em torno de um princípio: as pessoas que moldam o produto também o constroem. Sem handoffs, sem ilusões. Ficamos pequenos para o trabalho permanecer afiado — e para continuar lançando nossos próprios produtos.',
    'home.about.cta1': 'Iniciar um projeto', 'home.about.cta2': 'Ver o trabalho',
    'home.founder.role': 'CEO · FUNDADOR',
    'home.founder.bio': 'Engenheiro, designer, construtor de produtos. Passou uma década entregando software dentro de empresas de tecnologia antes de fundar a KRTD para fazer o mesmo trabalho sem as reuniões. Atualmente liderando o produto do Readaily e parceiro de alguns times.',
    'home.founder.linkedin': 'Conectar no LinkedIn',
    'home.writing.eyebrow': 'Blog', 'home.writing.h2': 'Notas do ateliê.', 'home.writing.all': 'Ver tudo',
    'home.contact.eyebrow': 'Iniciar projeto',
    'home.contact.h2a': 'Nos conta o que você está', 'home.contact.h2b': 'realmente tentando construir.',
    'home.contact.sub': 'Respondemos a toda mensagem em até dois dias úteis. Projetos geralmente começam em seis semanas.',
    'home.contact.hours': 'Seg–Sex · 9h–18h BRT',
    'home.contact.name': 'NOME', 'home.contact.email': 'E-MAIL',
    'home.contact.co': 'EMPRESA / PROJETO', 'home.contact.message': 'O QUE VOCÊ ESTÁ CONSTRUINDO?',
    'home.contact.interestedIn': 'TENHO INTERESSE EM', 'home.contact.send': 'Enviar mensagem',
    'home.contact.i0': 'Estratégia', 'home.contact.i1': 'Design',
    'home.contact.i2': 'Desenvolvimento', 'home.contact.i3': 'IA', 'home.contact.i4': 'Ainda não sei',
    'home.footer.tagline': 'KARTEADO TECNOLOGIA LTDA — ESTÚDIO DE PRODUTO INDEPENDENTE. CONSTRUINDO COM PROPÓSITO DESDE 2025.',
    'home.footer.studio': 'ESTÚDIO', 'home.footer.apps': 'APPS', 'home.footer.elsewhere': 'OUTROS',
    'home.footer.about': 'Sobre', 'home.footer.services': 'Serviços', 'home.footer.writing': 'Blog',
    'home.footer.twitter': 'Twitter', 'home.footer.email': 'E-mail',
    'home.footer.copyright': '© 2025 KARTEADO TECNOLOGIA LTDA',
    'home.footer.made': 'SÃO PAULO / REMOTO — SEMPRE ABERTOS A PROJETOS INTERESSANTES',
    'rd.breadcrumb.krtd': 'KRTD', 'rd.breadcrumb.apps': 'APPS', 'rd.breadcrumb.readaily': 'READAILY',
    'rd.nav.getApp': 'Baixar Readaily',
    'rd.hero.tag': 'BY KRTD · iOS & ANDROID',
    'rd.hero.h1.before': 'Um hábito diário de leitura, ', 'rd.hero.h1.accent': 'mantido com leveza.',
    'rd.hero.sub': 'O Readaily transforma a parte de abrir o livro na parte fácil. Quinze minutos tranquilos, seu livro atual, uma sequência que não cobra nada de você. Continue de onde parou — todos os dias.',
    'rd.hero.free': 'GRÁTIS · COM PRO OPCIONAL', 'rd.hero.platform': 'iOS 15+ / ANDROID 7+', 'rd.hero.langs': '8 IDIOMAS',
    'rd.store.downloadOn': 'Baixar na', 'rd.store.getItOn': 'Disponível no',
    'rd.store.appStore': 'App Store', 'rd.store.googlePlay': 'Google Play',
    'rd.quote.eyebrow': 'O que os leitores sempre nos dizem',
    'rd.quote': '"Um livro por ano muda uma pessoa. O difícil não é a leitura — é abrir a capa."',
    'rd.features.eyebrow': 'O que tem dentro',
    'rd.features.h2a': 'Um app pequeno que parece um livro —', 'rd.features.h2b': 'e se comporta como um.',
    'rd.features.sub': 'Construído do jeito que a leitura realmente acontece — devagar, privada, opcional. Sem feeds, sem placar, sem notificações importunando sua noite.',
    'rd.features.0.n': 'F/01', 'rd.features.0.t': 'Sessões sem distração',
    'rd.features.0.b': 'Um toque e o celular se entrega ao seu livro. Modo Foco no iOS, Não Perturbe no Android, e um cronômetro silencioso que some na página. Live Activities mostram sua sessão de relance — sem nunca pedir que você olhe.',
    'rd.features.1.n': 'F/02', 'rd.features.1.t': 'Sua biblioteca, organizada',
    'rd.features.1.b': 'Lendo, para ler, concluído, arquivado. Adicione um livro por scan de ISBN, busca ou manualmente. Capas, número de páginas e barras de progresso falam por si.',
    'rd.features.2.n': 'F/03', 'rd.features.2.t': 'Leia junto, no seu ritmo',
    'rd.features.2.b': 'Crie um clube com dois amigos ou vinte. Compartilhe progresso, mande uma cutucada suave e termine o livro na data combinada.',
    'rd.features.3.n': 'F/04', 'rd.features.3.t': 'Uma sequência sem culpa',
    'rd.features.3.b': 'Perdeu um dia? O Readaily ajusta suas metas silenciosamente — sem extintor de chama, sem tela de vergonha. O ponto não é a sequência; é a próxima página que você vira.',
    'rd.features.4.n': 'F/05', 'rd.features.4.t': 'Offline por design',
    'rd.features.4.b': 'O app todo funciona sem conexão. Sua biblioteca, sessões e sequências vivem no aparelho e sincronizam assim que você voltar online.',
    'rd.features.5.n': 'F/06', 'rd.features.5.t': 'Oito idiomas, dois temas',
    'rd.features.5.b': 'PT-BR, EN, ES, FR, DE, IT, RU, JA — totalmente localizado, incluindo textos de sequência e notificações. Claro ou escuro. O resto é só você e o livro.',
    'rd.streak.eyebrow': 'A sequência',
    'rd.streak.h2a': 'Leia hoje, e amanhã', 'rd.streak.h2b': 'é mais fácil que ontem foi.',
    'rd.streak.sub': 'Perdeu um dia? O Readaily ajusta suas metas silenciosamente — sem extintor de chama, sem tela de vergonha. O ponto não é a sequência; é a próxima página que você vira.',
    'rd.streak.thisWeek': 'ESTA SEMANA', 'rd.streak.streak': 'dias seguidos',
    'rd.streak.pages': 'Páginas', 'rd.streak.time': 'Tempo', 'rd.streak.daily': 'Meta diária',
    'rd.screens.eyebrow': 'Cinco telas tranquilas',
    'rd.screens.h2a': 'Um app de leitura que', 'rd.screens.h2b': 'parece com leitura.',
    'rd.screens.sub': 'Lora em todo lugar, fundos cor de papel, tipo preto-tinta. As capas fazem o trabalho visual. Todo o resto sai do caminho.',
    'rd.screens.label': '· TELA',
    'rd.screens.0.t': 'Seu livro de hoje, seus minutos de hoje.',
    'rd.screens.0.b': 'Abra o app e encontre a página onde parou. Nada mais pede sua atenção.',
    'rd.screens.1.t': 'Scan, busca ou digitação.',
    'rd.screens.1.b': 'Scan de ISBN pela câmera. Busca por título ou autor. Ou adicione o livro manualmente — sua estante, suas regras.',
    'rd.screens.2.t': 'Leia com as suas pessoas.',
    'rd.screens.2.b': 'Um círculo pequeno e privado. Convite por código, data de término combinada, cada um no seu ritmo.',
    'rd.screens.3.t': 'Veja onde todo mundo está.',
    'rd.screens.3.b': 'Barras de progresso dos membros e um botão gentil de cutucada. Sem placar público, sem constrangimento.',
    'rd.screens.4.t': 'Oito idiomas, dois temas, um hábito.',
    'rd.screens.4.b': 'PT-BR, EN, ES, FR, DE, IT, RU, JA. Claro, escuro. O resto é só você e o livro.',
    'rd.testimonials.eyebrow': 'De leitores', 'rd.testimonials.h2': 'Conquistas silenciosas, semana após semana.',
    'rd.pricing.eyebrow': 'Preços',
    'rd.pricing.h2a': 'Grátis para sempre.', 'rd.pricing.h2b': 'Pro quando quiser mais.',
    'rd.pricing.sub': 'A maioria dos leitores nunca precisa do Pro. A sequência, o cronômetro, a biblioteca — tudo grátis. O Pro desbloqueia o social, experiência ilimitada e otimizada, e nos ajuda a manter as luzes acesas sem anúncios.',
    'rd.pricing.free.label': 'GRÁTIS · PARA SEMPRE', 'rd.pricing.free.name': 'Leitor', 'rd.pricing.free.price': 'R$0',
    'rd.pricing.free.f0': 'Busca em múltiplos catálogos', 'rd.pricing.free.f1': 'Estatísticas de livro, ritmo e sequência',
    'rd.pricing.free.f2': 'Definição de metas e lembretes diários', 'rd.pricing.free.f3': 'Entrar em 1 clube de leitura',
    'rd.pricing.free.f4': 'Apenas 1 livro ativo', 'rd.pricing.free.cta': 'Baixar grátis',
    'rd.pricing.pro.label': 'PRO · 7 DIAS GRÁTIS', 'rd.pricing.pro.badge': 'RECOMENDADO',
    'rd.pricing.pro.name': 'Leitor Pro', 'rd.pricing.pro.price': 'R$4,99',
    'rd.pricing.pro.period': '/ mês, ou R$49,99/ano',
    'rd.pricing.pro.f0': 'Tudo do plano Leitor', 'rd.pricing.pro.f1': 'Sem anúncios',
    'rd.pricing.pro.f2': 'Sessões Inteligentes e Modo Foco', 'rd.pricing.pro.f3': 'Criar e entrar em clubes ilimitados',
    'rd.pricing.pro.f4': 'Livros ativos ilimitados', 'rd.pricing.pro.cta': 'Experimente o Pro por 7 dias',
    'rd.faq.eyebrow': 'Perguntas, gentilmente respondidas',
    'rd.faq.h2a': 'Sim, é realmente', 'rd.faq.h2b': 'só para leitura.',
    'rd.faq.0.q': 'O Readaily vem com os livros?',
    'rd.faq.0.a': 'Não — o Readaily acompanha os livros que você já tem, em qualquer formato. Físico, ebook, audiolivro. Não vendemos nem hospedamos livros; mantemos o ritmo de lê-los.',
    'rd.faq.1.q': 'O que acontece com minha sequência se eu perder um dia?',
    'rd.faq.1.a': 'Ela reinicia, silenciosamente. Você verá uma pequena mensagem ("Você perdeu ontem — suas metas foram ajustadas"), e o próximo dia começa do zero. Não há seguro de sequência para comprar nem notificações de culpa.',
    'rd.faq.2.q': 'Preciso de conta Pro para ler com amigos?',
    'rd.faq.2.a': 'Você pode entrar em um clube gratuitamente. Criar seus próprios clubes e entrar em clubes ilimitados faz parte do Pro — essa é a parte que custa dinheiro para manter no servidor.',
    'rd.faq.3.q': 'O Readaily funciona offline?',
    'rd.faq.3.a': 'Sim. O app todo é offline-first. Sua biblioteca, sessões e sequências ficam no aparelho. Os dados sincronizam assim que você voltar online.',
    'rd.faq.4.q': 'Quais idiomas são suportados?',
    'rd.faq.4.a': 'Inglês, Português, Espanhol, Francês, Alemão, Italiano, Russo e Japonês. A interface — incluindo textos de sequência, datas e notificações — é completamente localizada em cada um.',
    'rd.cta.eyebrow': 'Baixar Readaily',
    'rd.cta.h2a': 'Quinze minutos por dia.', 'rd.cta.h2b': 'Hoje é um bom dia para começar.',
    'rd.cta.sub': 'O Readaily é grátis e está esperando quieto.\nPegue o livro que esperou mais tempo.',
    'rd.footer.tagline': 'READAILY É UM PRODUTO KRTD. UM HÁBITO DIÁRIO DE LEITURA, MANTIDO COM LEVEZA. FEITO POR LEITORES.',
    'rd.footer.readaily': 'Readaily', 'rd.footer.features': 'Funcionalidades', 'rd.footer.pricing': 'Preços',
    'rd.footer.studio': 'Estúdio', 'rd.footer.about': 'Sobre a KRTD', 'rd.footer.services': 'Serviços',
    'rd.footer.allApps': 'Todos os apps', 'rd.footer.support': 'Suporte',
    'rd.footer.help': 'Ajuda · hello@readaily.app', 'rd.footer.privacy': 'Privacidade', 'rd.footer.terms': 'Termos',
    'rd.footer.appStore': 'App Store', 'rd.footer.googlePlay': 'Google Play',
    'rd.footer.copyright': '© 2026 KRTD · KARTEADO LTDA',
    'rd.footer.made': 'READAILY · FEITO COM CUIDADO, EM PIXELS COR DE PAPEL',
    'apps.eyebrow': 'Nossos apps', 'apps.h1': 'Produtos que lançamos e gerenciamos.',
    'apps.sub': 'Construídos com o mesmo cuidado que levamos ao trabalho com clientes. Todo app sai com usuários reais, receita real e lições reais.',
    'apps.live': 'ATIVO', 'apps.coming': 'EM BREVE 2026', 'apps.pitch': 'FALE COM A GENTE',
    'apps.readaily.visit': 'Ver Readaily', 'apps.workshop.name': 'Novo app · em desenvolvimento',
    'apps.workshop.blurb': 'Um pequeno produto que estamos moldando. Cadastre-se para saber quando chegar.',
    'apps.pitch.name': 'Tem uma ideia de produto?', 'apps.pitch.blurb': 'Fazemos parceria em algumas novidades por ano — nos apresente.',
    'apps.cta.h2': 'Seja parceiro no próximo.',
    'apps.cta.sub': 'Todo ano aceitamos um ou dois projetos externos que nos desafiam. Conta o que você está construindo.',
    'writing.eyebrow': 'Blog', 'writing.h1': 'Notas do ateliê.',
    'writing.sub': 'Ensaios e notas sobre produto, engenharia e o que significa construir com propósito.',
    'writing.readMore': 'Ler mais',
    'writing.tags.all': 'Todos', 'writing.tags.product': 'Produto', 'writing.tags.engineering': 'Engenharia',
    'writing.tags.ai': 'IA', 'writing.tags.design': 'Design',
    'writing.more.h2': 'Mais textos a caminho.',
    'writing.more.sub': 'Esses textos saem quando há algo que vale a pena dizer. Sem cadência de newsletter, sem conteúdo de encher.',
    // ─── services page ─────────────────────────────────────────
    'srv.hero.eyebrow': 'Construção end-to-end · {days} dias, um time só',
    'srv.hero.h1a': 'Da ideia ao',
    'srv.hero.h1.accent': 'app no ar',
    'srv.hero.h1b': ', em {days} dias.',
    'srv.hero.sub': 'Nosso formato principal: um time sênior leva sua ideia por discovery, design, engenharia e iteração pós-lançamento. Sem repasses, sem troca de gente sênior por júnior, sem teatro de escopo. Um contrato, um time, um produto entregue.',
    'srv.hero.cta1': 'Iniciar projeto',
    'srv.hero.cta2': 'Ver o processo',
    'srv.hero.iphone.label': 'seu app aqui',
    'srv.hero.stat1': 'DIAS ATÉ LANÇAR',
    'srv.hero.stat2': 'TIME, PONTA A PONTA',
    'srv.hero.stat3': 'CÓDIGO É SEU',
    'srv.values.eyebrow': 'Por que trabalhar com a gente',
    'srv.values.h2a': 'Um estúdio que constrói o que desenha —',
    'srv.values.h2b': 'e fica depois do lançamento.',
    'srv.values.0.t': 'Um time, da ideia ao ar',
    'srv.values.0.b': 'Quem desenha o produto também constrói e lança. Não tem aquele momento "agora passa pra engenharia" — porque engenharia esteve na sala desde o dia um.',
    'srv.values.1.t': 'Só sênior, sem revenda',
    'srv.values.1.b': 'Você recebe as pessoas da proposta. A gente não escala com júnior nem terceiriza a parte difícil. O time que ganha o trabalho é o time que faz o trabalho.',
    'srv.values.2.t': 'Lança em 90 dias',
    'srv.values.2.b': 'MVP real e público em três meses — não um Figma, não um deck. O prazo é o entregável. A gente dimensiona escopo pro calendário, não o contrário.',
    'srv.values.3.t': 'Iteração como adicional',
    'srv.values.3.b': 'Lançar não é o fim — mas é onde esse engajamento termina. Oferecemos uma fase de iteração pós-lançamento como adicional separado, contratada só quando você já sabe o que o usuário realmente precisa.',
    'srv.compare.eyebrow': 'Como nos comparamos',
    'srv.compare.h2a': 'Propriedade ponta a ponta versus',
    'srv.compare.h2b': 'quatro fornecedores e um PM.',
    'srv.compare.us': 'KRTD',
    'srv.compare.usSub': 'PONTA A PONTA',
    'srv.compare.agency': 'Agência tradicional',
    'srv.compare.agencySub': 'DESIGN OU DEV',
    'srv.compare.freelance': 'Freelancers',
    'srv.compare.freelanceSub': 'COSTURADOS',
    'srv.compare.yes': 'Sim',
    'srv.compare.no': 'Não',
    'srv.compare.partial': 'Parcial',
    'srv.compare.row.0': 'Estratégia de produto & discovery',
    'srv.compare.row.1': 'Design de UX & UI',
    'srv.compare.row.2': 'Engenharia (mobile + backend)',
    'srv.compare.row.3': 'Um único ponto de contato',
    'srv.compare.row.4': 'Time só sênior, sem subcontratação',
    'srv.compare.row.5': 'Compromisso fixo de lançar em {days} dias',
    'srv.compare.row.6': 'Iteração pós-lançamento como adicional',
    'srv.compare.row.7': 'Preço fixo e escopo transparente',
    'srv.testimonials.eyebrow': 'O que founders dizem',
    'srv.testimonials.h2': 'Algumas palavras de quem já lançou com a gente.',
    'srv.testimonials.disclaimer': 'Depoimentos ilustrativos — serão substituídos por citações reais de clientes antes do lançamento público.',
    'srv.testimonials.0.q': 'Eles não só entregaram o app — eles brigaram com a gente sobre qual era o problema certo. A gente ia construir a coisa errada. Eles economizaram um ano da nossa vida.',
    'srv.testimonials.0.n': 'Founder, fintech',
    'srv.testimonials.0.m': 'São Paulo · Seed',
    'srv.testimonials.1.q': 'O MVP foi pro ar no dia 87. A gente já estava perdoando uma semana de atraso. Não teve atraso. A honestidade no escopo lá no começo é o jogo inteiro.',
    'srv.testimonials.1.n': 'Head of Product',
    'srv.testimonials.1.m': 'Lisboa · SaaS Série A',
    'srv.testimonials.2.q': 'Depois do lançamento eles não sumiram. O mês de iteração é a diferença entre um app e um produto que as pessoas realmente abrem duas vezes.',
    'srv.testimonials.2.n': 'Co-founder, app de consumo',
    'srv.testimonials.2.m': 'Berlim · Bootstrapped',
    'srv.process.eyebrow': 'Como trabalhamos',
    'srv.process.h2': 'Um processo double-diamond, mais uma terceira fase de iteração contínua.',
    'srv.process.sub': 'Dois diamantes — exploração divergente e depois decisão convergente — para Discovery e para Design+Delivery. Depois, uma terceira fase: um loop contínuo de medir, aprender, entregar.',
    'srv.process.days': 'dias',
    'srv.process.deliverables': 'PRINCIPAIS ENTREGAS',
    'srv.process.0.t': 'Discovery',
    'srv.process.0.b': 'Afinar o problema, entender o usuário, combinar a menor versão que prova a aposta. Diverge em entrevistas e pesquisa; converge em um escopo escrito e brief de produto.',
    'srv.process.0.i0': 'Entrevistas com stakeholders e usuários',
    'srv.process.0.i1': 'Mapa competitivo e de soluções',
    'srv.process.0.i2': 'Brief de produto assinado e métricas de sucesso',
    'srv.process.0.i3': 'Arquitetura de informação e fluxos',
    'srv.process.1.t': 'Protótipo',
    'srv.process.1.b': 'Transformar o brief em algo que você consegue tocar. Protótipo clicável em alta fidelidade validado com usuários reais — o jeito mais barato e rápido de descobrir o que erramos antes de escrever código de produção.',
    'srv.process.1.i0': 'UI em alta fidelidade no Figma',
    'srv.process.1.i1': 'Protótipo clicável interativo',
    'srv.process.1.i2': '3–5 testes de usabilidade com usuários-alvo',
    'srv.process.1.i3': 'Fundamentos do design system',
    'srv.process.2.t': 'MVP',
    'srv.process.2.b': 'Construir e lançar o produto de verdade. Código de produção, backend real, analytics real, submissão real nas lojas. Demo semanal em dispositivo real e lançamento público ao final do mês.',
    'srv.process.2.i0': 'Build iOS + Android (Flutter)',
    'srv.process.2.i1': 'Backend, infra e analytics ligados',
    'srv.process.2.i2': 'Submissão na App Store e Play Store',
    'srv.process.2.i3': 'Playbook de lançamento e documento de handover',
    'srv.process.optional.eyebrow': 'OPCIONAL · ADICIONAL',
    'srv.process.optional.t': 'Iteração — mês 4 em diante',
    'srv.process.optional.b': 'Quando o MVP entra no ar, o trabalho de produto de verdade começa. Adicione um mês (ou mais) de iteração medida sobre o comportamento real do usuário — análise de funil, feedback qualitativo, releases semanais. Contratada separadamente depois do lançamento, quando os dois lados já sabem o que o produto precisa.',
    'srv.process.optional.cta': 'Conversar sobre o adicional',
    'srv.timeline.eyebrow': 'Cronograma',
    'srv.timeline.h2': 'Três fases. Um trimestre. Uma fatura de trabalho.',
    'srv.timeline.h2Proposal': 'Seu cronograma, com preço.',
    'srv.timeline.sub': 'Um engajamento padrão dura três meses — um mês por fase. O escopo cresce ou diminui pra caber no prazo, não o contrário.',
    'srv.timeline.subProposal': 'Os prazos e preços de cada fase são específicos do seu projeto. O total abaixo é o engajamento completo, pago por fase.',
    'srv.contact.eyebrow': 'Iniciar projeto',
    'srv.contact.h2a': 'Conta pra gente',
    'srv.contact.h2b': 'o que você construiria.',
    'srv.contact.h2aProposal': 'Pronto pra começar?',
    'srv.contact.h2bProposal': 'Assine e começamos.',
    'srv.contact.sub': 'Mande algumas linhas sobre sua ideia. A gente responde em até dois dias úteis com convite pra uma call de discovery ou com um sincero "não é fit, mas conheço quem é."',
    'srv.contact.subProposal': 'Responda confirmando a proposta e mandamos o contrato em 24 horas. O discovery começa na segunda-feira depois da assinatura.',
    'srv.contact.idea': 'A IDEIA (um parágrafo)',
    'srv.proposal.eyebrow': 'PROPOSTA PRIVADA',
    'srv.proposal.title': 'Esta página é uma proposta privada.',
    'srv.proposal.sub': 'Digite a senha que enviamos para você para desbloquear a versão customizada desta página. O conteúdo é criptografado no seu navegador — sem a senha, ninguém consegue ler, nem mesmo nós.',
    'srv.proposal.pwLabel': 'SENHA',
    'srv.proposal.unlock': 'Desbloquear proposta',
    'srv.proposal.unlocking': 'Descriptografando…',
    'srv.proposal.wrongPw': 'SENHA ERRADA — TENTE DE NOVO.',
    'srv.proposal.preparedFor': 'PREPARADO PARA',
    'srv.proposal.validUntil': 'VÁLIDA ATÉ',
    'srv.proposal.yourContact': 'Seu contato na KRTD',
    'srv.acceptance.summaryTitle': 'VOCÊ ESTÁ ACEITANDO',
    'srv.acceptance.engagementTotal': 'Total do engajamento',
    'srv.acceptance.optionalLine': 'Iteração opcional (mensal)',
    'srv.acceptance.perMonth': ' / mês',
    'srv.acceptance.name': 'NOME COMPLETO',
    'srv.acceptance.role': 'CARGO',
    'srv.acceptance.email': 'E-MAIL',
    'srv.acceptance.notes': 'OBSERVAÇÕES OU CONDIÇÕES (opcional)',
    'srv.acceptance.notesPlaceholder': 'Algo a sinalizar antes de mandarmos o contrato…',
    'srv.acceptance.agreement': 'Aceito esta proposta conforme descrita — incluindo escopo, cronograma (3 fases × ~30 dias) e preço por fase. Confirmo que tenho autoridade para assinar em nome da minha empresa. A KRTD enviará o contrato formal em até 24 horas.',
    'srv.acceptance.send': 'Enviar aceite',
    'srv.acceptance.sending': 'Enviando…',
    'srv.acceptance.agreement': 'Aceito esta proposta conforme descrita — incluindo escopo, cronograma e preço por fase. Entendo que cada fase termina com um ponto de validação onde posso optar por não avançar para a próxima fase, sem multa além do pagamento da fase concluída. Confirmo ter autoridade para assinar em nome da minha empresa. A KRTD enviará o contrato formal em até 24 horas.',
    'srv.timeline.subProposal': 'Os prazos e preços de cada fase são específicos do seu projeto. Cada fase é cobrada 50% no kickoff e 50% na aprovação dos entregáveis. Você decide em cada ponto de validação se avança para a próxima fase.',
    'srv.process.checkpoint': 'PONTO DE VALIDAÇÃO',
    'srv.process.checkpoint.desc': 'Entregáveis apresentados. Você decide se avança para a próxima fase — encerrar aqui não implica multa além do pagamento da fase concluída.',
    'srv.payment.schedule.eyebrow': 'CRONOGRAMA DE PAGAMENTO',
    'srv.payment.signal': 'Kickoff (50%)',
    'srv.payment.delivery': 'Entrega (50%)',
    'srv.payment.note': 'Cada fase é cobrada em duas parcelas iguais: 50% no início da fase, 50% na aprovação dos entregáveis. Nenhum pagamento de fase futura é devido até você decidir iniciá-la.',
  },
  es: {
    'nav.studio': '/ estudio', 'nav.apps': 'Apps', 'nav.services': 'Servicios', 'nav.work': 'Trabajo',
    'nav.writing': 'Blog', 'nav.about': 'Acerca', 'nav.startProject': 'Iniciar proyecto', 'nav.getReadaily': 'Descargar Readaily',
    'home.hero.badge': 'Estudio de producto independiente · São Paulo / remoto',
    'home.hero.h1a': 'Lanzamos nuestras propias apps,',
    'home.hero.h1b.before': 'y construimos la tuya ', 'home.hero.h1b.accent': 'de principio a fin.', 'home.hero.h1b.after': '',
    'home.hero.sub': 'KRTD es un estudio pequeño detrás de Readaily y otros productos. Nos asociamos con founders y equipos en estrategia de producto, IA & datos, y desarrollo completo — del diseño a la ingeniería.',
    'home.hero.cta1': 'Ver las apps', 'home.hero.cta2': 'Cómo trabajamos',
    'home.stats.0.k': 'LANZADAS', 'home.stats.0.v': '7+ apps', 'home.stats.0.sub': 'iOS, web e IA',
    'home.stats.1.k': 'CLIENTES', 'home.stats.1.v': '20+', 'home.stats.1.sub': 'startups y equipos',
    'home.stats.2.k': 'DISCIPLINAS', 'home.stats.2.v': '04', 'home.stats.2.sub': 'diseño · ing · IA · estrategia',
    'home.stats.3.k': 'DESDE', 'home.stats.3.v': '2025', 'home.stats.3.sub': 'construyendo con propósito',
    'home.apps.eyebrow': 'Apps propias', 'home.apps.h2a': 'Productos que gestionamos —',
    'home.apps.h2b': 'construyendo en público.',
    'home.apps.sub': 'Nuestras propias apps son cómo mantenemos el hacha afilada. El mismo método que usamos con clientes.',
    'home.readaily.tag': 'iOS & ANDROID · ACTIVO · 2025 →',
    'home.readaily.headline': 'Un hábito diario de lectura, mantenido con suavidad.',
    'home.readaily.sub': 'Quince minutos tranquilos, tu libro actual, una racha que no te exige nada. Sesiones sin distracción, clubes de lectura privados, ocho idiomas.',
    'home.readaily.platforms': 'PLATAFORMAS', 'home.readaily.languages': 'IDIOMAS',
    'home.readaily.price': 'PRECIO', 'home.readaily.priceval': 'Gratis · Pro $0,99',
    'home.readaily.visit': 'Ver página',
    'home.workshop.0.name': 'Nueva app · en desarrollo', 'home.workshop.0.tag': 'PRÓXIMAMENTE 2026',
    'home.workshop.0.blurb': 'Un pequeño producto que estamos formando. Regístrate para saber cuándo llega.',
    'home.workshop.1.name': '¿Tienes algo que deberíamos construir?', 'home.workshop.1.tag': 'CUÉNTANOS',
    'home.workshop.1.blurb': 'Preséntanos una idea de producto — nos asociamos en algunas cosas nuevas cada año.',
    'home.services.eyebrow': 'Cómo ayudamos', 'home.services.h2': 'Tres formas de trabajar con nosotros.',
    'home.services.0.n': 'S/01', 'home.services.0.title': 'Estrategia de producto y UX',
    'home.services.0.blurb': 'Afinar el problema, definir el alcance del MVP, diseñar la experiencia. De talleres con founders a compromisos completos de UX.',
    'home.services.0.i0': 'Sprints de descubrimiento', 'home.services.0.i1': 'Arquitectura de información',
    'home.services.0.i2': 'Sistemas de UX & UI', 'home.services.0.i3': 'Roadmaps de producto',
    'home.services.1.n': 'S/02', 'home.services.1.title': 'Consultoría en Datos e IA',
    'home.services.1.blurb': 'IA pragmática — no demos. Te ayudamos a decidir qué construir, qué comprar y cómo evaluarlo.',
    'home.services.1.i0': 'Diseño de aplicaciones con LLM', 'home.services.1.i1': 'Evaluaciones y guardrails',
    'home.services.1.i2': 'Pipelines de datos y analytics', 'home.services.1.i3': 'Selección de modelos',
    'home.services.2.n': 'S/03', 'home.services.2.title': 'Desarrollo de principio a fin',
    'home.services.2.blurb': 'Diseño, ingeniería, lanzamiento. Móvil, web, todo digital. El mismo equipo lo lleva de la idea al aire.',
    'home.services.2.i0': 'Apps iOS & Android (Flutter)', 'home.services.2.i1': 'Plataformas web',
    'home.services.2.i2': 'Backends e infraestructura', 'home.services.2.i3': 'Lanzamiento e iteración',
    'home.work.eyebrow': 'Trabajo seleccionado', 'home.work.h2': 'Lo que hemos enviado, con quién.',
    'home.about.eyebrow': 'Acerca', 'home.about.h2': 'Un estudio pequeño, a propósito.',
    'home.about.sub': 'KRTD se construye alrededor de un principio: las personas que dan forma al producto también lo construyen. Sin traspasos, sin ilusiones. Nos mantenemos pequeños para que el trabajo permanezca afilado — y para seguir lanzando nuestras propias cosas.',
    'home.about.cta1': 'Iniciar un proyecto', 'home.about.cta2': 'Ver el trabajo',
    'home.founder.role': 'CEO · FUNDADOR',
    'home.founder.bio': 'Ingeniero, diseñador, constructor de productos. Pasó una década enviando software dentro de empresas de tecnología antes de fundar KRTD para hacer el mismo trabajo sin las reuniones. Actualmente liderando el producto de Readaily y asociándose con algunos equipos.',
    'home.founder.linkedin': 'Conectar en LinkedIn',
    'home.writing.eyebrow': 'Blog', 'home.writing.h2': 'Notas del taller.', 'home.writing.all': 'Ver todo',
    'home.contact.eyebrow': 'Iniciar proyecto',
    'home.contact.h2a': 'Cuéntanos qué estás', 'home.contact.h2b': 'realmente intentando construir.',
    'home.contact.sub': 'Respondemos a cada consulta en dos días hábiles. Los proyectos suelen comenzar en seis semanas.',
    'home.contact.hours': 'Lun–Vie · 9am–6pm BRT',
    'home.contact.name': 'NOMBRE', 'home.contact.email': 'CORREO',
    'home.contact.co': 'EMPRESA / PROYECTO', 'home.contact.message': '¿QUÉ ESTÁS CONSTRUYENDO?',
    'home.contact.interestedIn': 'ME INTERESA', 'home.contact.send': 'Enviar mensaje',
    'home.contact.i0': 'Estrategia', 'home.contact.i1': 'Diseño',
    'home.contact.i2': 'Desarrollo', 'home.contact.i3': 'IA', 'home.contact.i4': 'Aún no lo sé',
    'home.footer.tagline': 'KARTEADO TECNOLOGIA LTDA — ESTUDIO DE PRODUCTO INDEPENDIENTE. CONSTRUYENDO CON PROPÓSITO DESDE 2025.',
    'home.footer.studio': 'ESTUDIO', 'home.footer.apps': 'APPS', 'home.footer.elsewhere': 'OTROS',
    'home.footer.about': 'Acerca', 'home.footer.services': 'Servicios', 'home.footer.writing': 'Blog',
    'home.footer.twitter': 'Twitter', 'home.footer.email': 'Correo',
    'home.footer.copyright': '© 2025 KARTEADO TECNOLOGIA LTDA',
    'home.footer.made': 'SÃO PAULO / REMOTO — SIEMPRE ABIERTOS A TRABAJO INTERESANTE',
    'rd.breadcrumb.krtd': 'KRTD', 'rd.breadcrumb.apps': 'APPS', 'rd.breadcrumb.readaily': 'READAILY',
    'rd.nav.getApp': 'Descargar Readaily',
    'rd.hero.tag': 'BY KRTD · iOS & ANDROID',
    'rd.hero.h1.before': 'Un hábito diario de lectura, ', 'rd.hero.h1.accent': 'mantenido con suavidad.',
    'rd.hero.sub': 'Readaily convierte la parte de abrir el libro en la parte fácil. Quince minutos tranquilos, tu libro actual, una racha que no te exige nada. Continúa donde lo dejaste — cada día.',
    'rd.hero.free': 'GRATIS · CON PRO OPCIONAL', 'rd.hero.platform': 'iOS 15+ / ANDROID 7+', 'rd.hero.langs': '8 IDIOMAS',
    'rd.store.downloadOn': 'Descargar en', 'rd.store.getItOn': 'Disponible en',
    'rd.store.appStore': 'App Store', 'rd.store.googlePlay': 'Google Play',
    'rd.quote.eyebrow': 'Lo que los lectores siempre nos dicen',
    'rd.quote': '"Un libro al año cambia a una persona. Lo difícil no es leer — es abrir la portada."',
    'rd.features.eyebrow': 'Qué hay dentro',
    'rd.features.h2a': 'Una app pequeña que parece un libro —', 'rd.features.h2b': 'y se comporta como uno.',
    'rd.features.sub': 'Construida alrededor de cómo se siente leer de verdad — despacio, en privado, sin obligación. Sin feeds, sin tablas de clasificación, sin notificaciones molestando tu noche.',
    'rd.features.0.n': 'F/01', 'rd.features.0.t': 'Sesiones sin distracción',
    'rd.features.0.b': 'Un toque y el teléfono se entrega a tu libro. Modo Enfoque en iOS, No Molestar en Android, y un temporizador silencioso que se desvanece en la página. Live Activities muestran tu sesión de un vistazo — sin pedirte que mires.',
    'rd.features.1.n': 'F/02', 'rd.features.1.t': 'Tu biblioteca, organizada',
    'rd.features.1.b': 'Leyendo, por leer, completado, archivado. Agrega un libro por escaneo de ISBN, búsqueda o manualmente. Portadas, páginas y barras de progreso hablan por sí solas.',
    'rd.features.2.n': 'F/03', 'rd.features.2.t': 'Lee junto, a tu ritmo',
    'rd.features.2.b': 'Crea un club con dos amigos o veinte. Comparte el progreso, envía un suave recordatorio y termina el libro en la fecha acordada.',
    'rd.features.3.n': 'F/04', 'rd.features.3.t': 'Una racha sin culpa',
    'rd.features.3.b': '¿Perdiste un día? Readaily ajusta tus metas silenciosamente — sin extintor de llamas, sin pantalla de vergüenza. El punto no es la racha; es la próxima página que volteas.',
    'rd.features.4.n': 'F/05', 'rd.features.4.t': 'Offline por diseño',
    'rd.features.4.b': 'La app entera funciona sin conexión. Tu biblioteca, sesiones y rachas viven en el dispositivo y se sincronizan cuando vuelves a estar en línea.',
    'rd.features.5.n': 'F/06', 'rd.features.5.t': 'Ocho idiomas, dos temas',
    'rd.features.5.b': 'EN, PT-BR, ES, FR, DE, IT, RU, JA — completamente localizado, incluyendo el texto de racha y notificaciones. Claro u oscuro. El resto eres tú y el libro.',
    'rd.streak.eyebrow': 'La racha',
    'rd.streak.h2a': 'Lee hoy, y mañana', 'rd.streak.h2b': 'es más fácil que ayer.',
    'rd.streak.sub': '¿Perdiste un día? Readaily ajusta tus metas silenciosamente — sin extintor de llamas, sin pantalla de vergüenza. El punto no es la racha; es la próxima página que volteas.',
    'rd.streak.thisWeek': 'ESTA SEMANA', 'rd.streak.streak': 'días seguidos',
    'rd.streak.pages': 'Páginas', 'rd.streak.time': 'Tiempo', 'rd.streak.daily': 'Meta diaria',
    'rd.screens.eyebrow': 'Cinco pantallas tranquilas',
    'rd.screens.h2a': 'Una app de lectura que', 'rd.screens.h2b': 'parece lectura.',
    'rd.screens.sub': 'Lora en todo, fondos color papel, tipo tinta-negra. Las portadas hacen el trabajo visual. Todo lo demás se quita del camino.',
    'rd.screens.label': '· PANTALLA',
    'rd.screens.0.t': 'Tu libro de hoy, tus minutos de hoy.',
    'rd.screens.0.b': 'Abre la app y encuentra la página donde lo dejaste. Nada más pide tu atención.',
    'rd.screens.1.t': 'Escanea, busca o escríbelo.',
    'rd.screens.1.b': 'Escaneo de ISBN con la cámara. Búsqueda por título o autor. O simplemente agrega el libro a mano — tu estante, tus reglas.',
    'rd.screens.2.t': 'Lee con tu gente.',
    'rd.screens.2.b': 'Un círculo pequeño y privado. Invitación por código, fecha de finalización acordada, cada uno a su propio ritmo.',
    'rd.screens.3.t': 'Ve dónde está cada uno.',
    'rd.screens.3.b': 'Barras de progreso de los miembros y un botón suave de recordatorio. Sin tablas públicas, sin vergüenza.',
    'rd.screens.4.t': 'Ocho idiomas, dos temas, un hábito.',
    'rd.screens.4.b': 'EN, PT-BR, ES, FR, DE, IT, RU, JA. Claro, oscuro. El resto eres tú y el libro.',
    'rd.testimonials.eyebrow': 'De lectores', 'rd.testimonials.h2': 'Victorias silenciosas, semana tras semana.',
    'rd.pricing.eyebrow': 'Precios',
    'rd.pricing.h2a': 'Gratis para siempre.', 'rd.pricing.h2b': 'Pro cuando quieras más.',
    'rd.pricing.sub': 'La mayoría de los lectores nunca necesitan Pro. La racha, el temporizador, la biblioteca — todo gratis. Pro desbloquea lo social, experiencia ilimitada y optimizada, y nos ayuda a mantener las luces encendidas sin anuncios.',
    'rd.pricing.free.label': 'GRATIS · PARA SIEMPRE', 'rd.pricing.free.name': 'Lector', 'rd.pricing.free.price': '$0',
    'rd.pricing.free.f0': 'Busca libros en múltiples catálogos', 'rd.pricing.free.f1': 'Estadísticas de libro, ritmo y racha',
    'rd.pricing.free.f2': 'Configuración de metas y recordatorios', 'rd.pricing.free.f3': 'Unirse a 1 club de lectura',
    'rd.pricing.free.f4': 'Solo 1 libro activo', 'rd.pricing.free.cta': 'Descargar gratis',
    'rd.pricing.pro.label': 'PRO · 7 DÍAS GRATIS', 'rd.pricing.pro.badge': 'RECOMENDADO',
    'rd.pricing.pro.name': 'Lector Pro', 'rd.pricing.pro.price': '$0,99',
    'rd.pricing.pro.period': '/ mes, o $9,99/año',
    'rd.pricing.pro.f0': 'Todo del plan Lector', 'rd.pricing.pro.f1': 'Sin anuncios',
    'rd.pricing.pro.f2': 'Sesiones Inteligentes y Modo Enfoque', 'rd.pricing.pro.f3': 'Crear y unirse a clubes ilimitados',
    'rd.pricing.pro.f4': 'Libros activos ilimitados', 'rd.pricing.pro.cta': 'Prueba Pro gratis por 7 días',
    'rd.faq.eyebrow': 'Preguntas, gentilmente respondidas',
    'rd.faq.h2a': 'Sí, realmente es', 'rd.faq.h2b': 'solo para leer.',
    'rd.faq.0.q': '¿Readaily viene con los libros?',
    'rd.faq.0.a': 'No — Readaily rastrea los libros que ya tienes, en cualquier formato. Papel, ebook, audiolibro. No vendemos ni alojamos libros; mantenemos el ritmo de leerlos.',
    'rd.faq.1.q': '¿Qué pasa con mi racha si pierdo un día?',
    'rd.faq.1.a': 'Se reinicia, silenciosamente. Verás una pequeña nota ("Perdiste ayer — tus metas han sido ajustadas"), y el día siguiente empieza de cero. No hay seguro de racha para comprar ni notificaciones de culpa.',
    'rd.faq.2.q': '¿Necesito cuenta Pro para leer con amigos?',
    'rd.faq.2.a': 'Puedes unirte a un club gratis. Crear tus propios clubes y unirte a clubes ilimitados es parte de Pro — esa es la parte que nos cuesta dinero en el servidor.',
    'rd.faq.3.q': '¿Readaily funciona sin conexión?',
    'rd.faq.3.a': 'Sí. La app entera es offline-first. Tu biblioteca, sesiones y rachas viven en tu dispositivo. Los datos se sincronizan en cuanto vuelves a estar en línea.',
    'rd.faq.4.q': '¿Qué idiomas están disponibles?',
    'rd.faq.4.a': 'Inglés, Portugués, Español, Francés, Alemán, Italiano, Ruso y Japonés. La interfaz — incluyendo el texto de racha, fechas y notificaciones — está completamente localizada en cada uno.',
    'rd.cta.eyebrow': 'Descargar Readaily',
    'rd.cta.h2a': 'Quince minutos al día.', 'rd.cta.h2b': 'Hoy es un buen día para empezar.',
    'rd.cta.sub': 'Readaily es gratis y está esperando en silencio.\nRecoge el libro que ha esperado más tiempo.',
    'rd.footer.tagline': 'READAILY ES UN PRODUCTO DE KRTD. UN HÁBITO DIARIO DE LECTURA, MANTENIDO CON SUAVIDAD. HECHO POR LECTORES.',
    'rd.footer.readaily': 'Readaily', 'rd.footer.features': 'Funciones', 'rd.footer.pricing': 'Precios',
    'rd.footer.studio': 'Estudio', 'rd.footer.about': 'Acerca de KRTD', 'rd.footer.services': 'Servicios',
    'rd.footer.allApps': 'Todas las apps', 'rd.footer.support': 'Soporte',
    'rd.footer.help': 'Ayuda · hello@readaily.app', 'rd.footer.privacy': 'Privacidad', 'rd.footer.terms': 'Términos',
    'rd.footer.appStore': 'App Store', 'rd.footer.googlePlay': 'Google Play',
    'rd.footer.copyright': '© 2026 KRTD · KARTEADO LTDA',
    'rd.footer.made': 'READAILY · HECHO CON CUIDADO, EN PÍXELES COLOR PAPEL',
    'apps.eyebrow': 'Nuestras apps', 'apps.h1': 'Productos que lanzamos y gestionamos.',
    'apps.sub': 'Construidos con el mismo cuidado que llevamos al trabajo con clientes. Cada app sale con usuarios reales, ingresos reales y lecciones reales.',
    'apps.live': 'ACTIVO', 'apps.coming': 'PRÓXIMAMENTE 2026', 'apps.pitch': 'CUÉNTANOS',
    'apps.readaily.visit': 'Ver Readaily', 'apps.workshop.name': 'Nueva app · en desarrollo',
    'apps.workshop.blurb': 'Un pequeño producto que estamos formando. Regístrate para saber cuándo llega.',
    'apps.pitch.name': '¿Tienes una idea de producto?', 'apps.pitch.blurb': 'Nos asociamos en algunas cosas nuevas cada año — preséntanos.',
    'apps.cta.h2': 'Sé nuestro socio en el próximo.',
    'apps.cta.sub': 'Cada año aceptamos uno o dos proyectos externos que nos desafían. Cuéntanos qué estás construyendo.',
    'writing.eyebrow': 'Blog', 'writing.h1': 'Notas del taller.',
    'writing.sub': 'Ensayos y notas sobre producto, ingeniería y lo que significa construir con propósito.',
    'writing.readMore': 'Leer más',
    'writing.tags.all': 'Todos', 'writing.tags.product': 'Producto', 'writing.tags.engineering': 'Ingeniería',
    'writing.tags.ai': 'IA', 'writing.tags.design': 'Diseño',
    'writing.more.h2': 'Más escritos en camino.',
    'writing.more.sub': 'Estas notas salen cuando hay algo que vale la pena decir. Sin cadencia de newsletter, sin relleno.',
    // ─── services page ─────────────────────────────────────────
    'srv.hero.eyebrow': 'Construcción end-to-end · {days} días, un solo equipo',
    'srv.hero.h1a': 'De la idea a',
    'srv.hero.h1.accent': 'app en vivo',
    'srv.hero.h1b': ', en {days} días.',
    'srv.hero.sub': 'Nuestro formato principal: un equipo senior lleva tu idea por discovery, diseño, ingeniería e iteración post-lanzamiento. Sin traspasos, sin cambiar senior por junior, sin teatro de alcance. Un contrato, un equipo, un producto entregado.',
    'srv.hero.cta1': 'Iniciar proyecto',
    'srv.hero.cta2': 'Ver el proceso',
    'srv.hero.iphone.label': 'tu app aquí',
    'srv.hero.stat1': 'DÍAS HASTA LANZAR',
    'srv.hero.stat2': 'EQUIPO, DE PUNTA A PUNTA',
    'srv.hero.stat3': 'CÓDIGO ES TUYO',
    'srv.values.eyebrow': 'Por qué trabajar con nosotros',
    'srv.values.h2a': 'Un estudio que construye lo que diseña —',
    'srv.values.h2b': 'y se queda después del lanzamiento.',
    'srv.values.0.t': 'Un equipo, de la idea al aire',
    'srv.values.0.b': 'Quien diseña el producto también lo construye y lanza. No existe ese momento de "ahora se lo pasamos a ingeniería" — porque ingeniería estuvo en la sala desde el día uno.',
    'srv.values.1.t': 'Solo senior, sin reventa',
    'srv.values.1.b': 'Recibes a las personas de la propuesta. No escalamos con juniors ni subcontratamos lo difícil. El equipo que gana el trabajo es el equipo que lo hace.',
    'srv.values.2.t': 'Lanza en 90 días',
    'srv.values.2.b': 'Un MVP real y público en tres meses — no un Figma, no un deck. El plazo es el entregable. Dimensionamos el alcance al calendario, no al revés.',
    'srv.values.3.t': 'Iteración como adicional',
    'srv.values.3.b': 'Lanzar no es el final — pero es donde este engagement termina. Ofrecemos una fase de iteración post-lanzamiento como adicional separado, contratada solo cuando ya sabes lo que tu usuario realmente necesita.',
    'srv.compare.eyebrow': 'Cómo nos comparamos',
    'srv.compare.h2a': 'Propiedad de punta a punta versus',
    'srv.compare.h2b': 'cuatro proveedores y un PM.',
    'srv.compare.us': 'KRTD',
    'srv.compare.usSub': 'DE PUNTA A PUNTA',
    'srv.compare.agency': 'Agencia tradicional',
    'srv.compare.agencySub': 'DISEÑO O DEV',
    'srv.compare.freelance': 'Freelancers',
    'srv.compare.freelanceSub': 'COSIDOS',
    'srv.compare.yes': 'Sí',
    'srv.compare.no': 'No',
    'srv.compare.partial': 'Parcial',
    'srv.compare.row.0': 'Estrategia de producto y discovery',
    'srv.compare.row.1': 'Diseño de UX y UI',
    'srv.compare.row.2': 'Ingeniería (móvil + backend)',
    'srv.compare.row.3': 'Un único punto de contacto',
    'srv.compare.row.4': 'Equipo solo senior, sin subcontratación',
    'srv.compare.row.5': 'Compromiso fijo de lanzar en {days} días',
    'srv.compare.row.6': 'Iteración post-lanzamiento como adicional',
    'srv.compare.row.7': 'Precio fijo y alcance transparente',
    'srv.testimonials.eyebrow': 'Lo que dicen los founders',
    'srv.testimonials.h2': 'Algunas palabras de quien ya ha lanzado con nosotros.',
    'srv.testimonials.disclaimer': 'Testimonios ilustrativos — serán reemplazados por citas reales de clientes antes del lanzamiento público.',
    'srv.testimonials.0.q': 'No solo entregaron la app — discutieron con nosotros sobre cuál era el problema correcto. Casi construimos lo equivocado. Nos ahorraron un año.',
    'srv.testimonials.0.n': 'Founder, fintech',
    'srv.testimonials.0.m': 'São Paulo · Seed',
    'srv.testimonials.1.q': 'El MVP salió el día 87. Ya estábamos perdonando una semana de retraso. No hubo retraso. La honestidad sobre el alcance al principio es todo el juego.',
    'srv.testimonials.1.n': 'Head of Product',
    'srv.testimonials.1.m': 'Lisboa · SaaS Serie A',
    'srv.testimonials.2.q': 'Después del lanzamiento no desaparecieron. El mes de iteración es la diferencia entre una app y un producto que la gente realmente abre dos veces.',
    'srv.testimonials.2.n': 'Co-founder, app de consumo',
    'srv.testimonials.2.m': 'Berlín · Bootstrapped',
    'srv.process.eyebrow': 'Cómo trabajamos',
    'srv.process.h2': 'Un proceso double-diamond, más un tercer loop de iteración.',
    'srv.process.sub': 'Dos diamantes — exploración divergente y luego decisión convergente — para Discovery y para Design+Delivery. Después una tercera fase: un loop continuo de medir, aprender, entregar.',
    'srv.process.days': 'días',
    'srv.process.deliverables': 'PRINCIPALES ENTREGAS',
    'srv.process.0.t': 'Discovery',
    'srv.process.0.b': 'Afinar el problema, entender al usuario, acordar la versión más pequeña que prueba la apuesta. Diverge con entrevistas e investigación; converge en un alcance escrito y brief de producto.',
    'srv.process.0.i0': 'Entrevistas con stakeholders y usuarios',
    'srv.process.0.i1': 'Mapa competitivo y de soluciones',
    'srv.process.0.i2': 'Brief de producto firmado y métricas de éxito',
    'srv.process.0.i3': 'Arquitectura de información y flujos',
    'srv.process.1.t': 'Prototipo',
    'srv.process.1.b': 'Convertir el brief en algo que puedas tocar. Prototipo clickeable en alta fidelidad validado con usuarios reales — la forma más barata y rápida de descubrir lo que nos equivocamos antes de escribir código de producción.',
    'srv.process.1.i0': 'UI en alta fidelidad en Figma',
    'srv.process.1.i1': 'Prototipo clickeable interactivo',
    'srv.process.1.i2': '3–5 pruebas de usabilidad con usuarios objetivo',
    'srv.process.1.i3': 'Fundamentos del design system',
    'srv.process.2.t': 'MVP',
    'srv.process.2.b': 'Construir y lanzar el producto de verdad. Código de producción, backend real, analytics real, envío real a las tiendas. Demo semanal en dispositivo real y lanzamiento público al final del mes.',
    'srv.process.2.i0': 'Build iOS + Android (Flutter)',
    'srv.process.2.i1': 'Backend, infra y analytics conectados',
    'srv.process.2.i2': 'Envío a App Store y Play Store',
    'srv.process.2.i3': 'Playbook de lanzamiento y documento de handover',
    'srv.process.optional.eyebrow': 'OPCIONAL · ADICIONAL',
    'srv.process.optional.t': 'Iteración — mes 4 en adelante',
    'srv.process.optional.b': 'Cuando el MVP está en vivo, el trabajo de producto real comienza. Añade un mes (o más) de iteración medida sobre el comportamiento real del usuario — análisis de embudo, feedback cualitativo, releases semanales. Contratada por separado después del lanzamiento, cuando los dos lados ya saben qué necesita el producto.',
    'srv.process.optional.cta': 'Conversar sobre el adicional',
    'srv.timeline.eyebrow': 'Cronograma',
    'srv.timeline.h2': 'Tres fases. Un trimestre. Una factura de trabajo.',
    'srv.timeline.h2Proposal': 'Tu cronograma, con precio.',
    'srv.timeline.sub': 'Un engagement estándar dura tres meses — un mes por fase. El alcance crece o se reduce para caber en el plazo, no al revés.',
    'srv.timeline.subProposal': 'Los plazos y precios de cada fase son específicos de tu proyecto. El total abajo es el engagement completo, pagado por fase.',
    'srv.contact.eyebrow': 'Iniciar proyecto',
    'srv.contact.h2a': 'Cuéntanos sobre',
    'srv.contact.h2b': 'lo que construirías.',
    'srv.contact.h2aProposal': '¿Listo para empezar?',
    'srv.contact.h2bProposal': 'Firma y empezamos.',
    'srv.contact.sub': 'Envíanos unas líneas sobre tu idea. Respondemos en dos días hábiles con una invitación a una call de discovery o con un sincero "no es fit, pero conozco a quien sí".',
    'srv.contact.subProposal': 'Responde confirmando la propuesta y mandamos el contrato en 24 horas. Discovery empieza el lunes después de la firma.',
    'srv.contact.idea': 'LA IDEA (un párrafo)',
    'srv.proposal.eyebrow': 'PROPUESTA PRIVADA',
    'srv.proposal.title': 'Esta página es una propuesta privada.',
    'srv.proposal.sub': 'Introduce la contraseña que te enviamos para desbloquear la versión personalizada de esta página. El contenido está cifrado en tu navegador — sin la contraseña, nadie puede leerlo, ni siquiera nosotros.',
    'srv.proposal.pwLabel': 'CONTRASEÑA',
    'srv.proposal.unlock': 'Desbloquear propuesta',
    'srv.proposal.unlocking': 'Descifrando…',
    'srv.proposal.wrongPw': 'CONTRASEÑA INCORRECTA — INTÉNTALO DE NUEVO.',
    'srv.proposal.preparedFor': 'PREPARADA PARA',
    'srv.proposal.validUntil': 'VÁLIDA HASTA',
    'srv.proposal.yourContact': 'Tu contacto en KRTD',
    'srv.acceptance.summaryTitle': 'ESTÁS ACEPTANDO',
    'srv.acceptance.engagementTotal': 'Total del engagement',
    'srv.acceptance.optionalLine': 'Iteración opcional (mensual)',
    'srv.acceptance.perMonth': ' / mes',
    'srv.acceptance.name': 'NOMBRE COMPLETO',
    'srv.acceptance.role': 'CARGO',
    'srv.acceptance.email': 'CORREO',
    'srv.acceptance.notes': 'OBSERVACIONES O CONDICIONES (opcional)',
    'srv.acceptance.notesPlaceholder': 'Algo a señalar antes de enviar el contrato…',
    'srv.acceptance.agreement': 'Acepto esta propuesta como se describe — incluyendo alcance, cronograma (3 fases × ~30 días) y precio por fase. Confirmo que tengo autoridad para firmar en nombre de mi empresa. KRTD enviará el contrato formal en 24 horas.',
    'srv.acceptance.send': 'Enviar aceptación',
    'srv.acceptance.sending': 'Enviando…',
    'srv.acceptance.agreement': 'Acepto esta propuesta como se describe — incluyendo alcance, cronograma y precio por fase. Entiendo que cada fase termina con un punto de validación donde puedo optar por no continuar a la siguiente fase, sin penalización más allá del pago de la fase completada. Confirmo que tengo autoridad para firmar en nombre de mi empresa. KRTD enviará el contrato formal en 24 horas.',
    'srv.timeline.subProposal': 'Los plazos y precios de cada fase son específicos de tu proyecto. Cada fase se factura 50% al kickoff y 50% en la entrega de entregables. Decides en cada punto de validación si continúas a la siguiente fase.',
    'srv.process.checkpoint': 'PUNTO DE VALIDACIÓN',
    'srv.process.checkpoint.desc': 'Entregables presentados. Decides si continúas a la siguiente fase — detenerse aquí no implica penalización más allá del pago de la fase completada.',
    'srv.payment.schedule.eyebrow': 'CRONOGRAMA DE PAGOS',
    'srv.payment.signal': 'Kickoff (50%)',
    'srv.payment.delivery': 'Entrega (50%)',
    'srv.payment.note': 'Cada fase se factura en dos cuotas iguales: 50% al inicio de la fase, 50% al aprobar los entregables. Ningún pago de una fase futura es exigible hasta que decidas iniciarla.',
  },
};

// ─── i18n context & hook ──────────────────────────────────────────
const I18nContext = React.createContext({ lang: 'en', setLang: () => {}, t: k => k });

function detectLang() {
  const supported = ['en', 'pt-BR', 'es'];
  const candidates = (navigator.languages?.length ? navigator.languages : [navigator.language || 'en']);
  for (const l of candidates) {
    if (supported.includes(l)) return l;
    const prefix = l.split('-')[0];
    if (prefix === 'pt') return 'pt-BR';
    if (prefix === 'es') return 'es';
    if (prefix === 'en') return 'en';
  }
  return 'en';
}

function I18nProvider({ children }) {
  const [lang, setLangState] = React.useState(() => {
    try { return localStorage.getItem('krtd_lang') || detectLang(); } catch { return detectLang(); }
  });
  const setLang = React.useCallback((l) => {
    setLangState(l);
    try { localStorage.setItem('krtd_lang', l); } catch {}
  }, []);
  const t = React.useCallback((key) => {
    const dict = TRANSLATIONS[lang] || TRANSLATIONS.en;
    return dict[key] !== undefined ? dict[key] : (TRANSLATIONS.en[key] !== undefined ? TRANSLATIONS.en[key] : key);
  }, [lang]);
  return <I18nContext.Provider value={{ lang, setLang, t }}>{children}</I18nContext.Provider>;
}

function useI18n() { return React.useContext(I18nContext); }

const LANGS = [
  { code: 'en', label: 'EN', name: 'English' },
  { code: 'pt-BR', label: 'PT', name: 'Português' },
  { code: 'es', label: 'ES', name: 'Español' },
];

function LangSelector({ T }) {
  const { lang, setLang } = useI18n();
  const [open, setOpen] = React.useState(false);
  const ref = React.useRef(null);
  const MONO = "'JetBrains Mono', ui-monospace, monospace";
  const current = LANGS.find(l => l.code === lang) || LANGS[0];

  React.useEffect(() => {
    if (!open) return;
    const handler = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); };
    document.addEventListener('mousedown', handler);
    return () => document.removeEventListener('mousedown', handler);
  }, [open]);

  return (
    <div ref={ref} style={{ position: 'relative' }}>
      <button
        onClick={() => setOpen(o => !o)}
        aria-label="Select language"
        style={{
          display: 'flex', alignItems: 'center', gap: 6,
          padding: '6px 12px', borderRadius: 999,
          border: `1px solid ${T.lineStrong}`, background: 'transparent',
          color: T.fg, cursor: 'pointer', fontFamily: MONO, fontSize: 11,
          letterSpacing: '0.06em',
        }}
      >
        {current.label} <IconChevron size={10} dir={open ? 'up' : 'down'} />
      </button>
      {open && (
        <div style={{
          position: 'absolute', top: 'calc(100% + 8px)', right: 0,
          background: T.bgAlt, border: `1px solid ${T.line}`,
          borderRadius: 12, overflow: 'hidden', zIndex: 200, minWidth: 130,
          boxShadow: '0 8px 32px rgba(0,0,0,.3)',
        }}>
          {LANGS.map(l => (
            <button key={l.code} onClick={() => { setLang(l.code); setOpen(false); }} style={{
              display: 'flex', alignItems: 'center', gap: 10, width: '100%',
              padding: '10px 16px',
              background: l.code === lang ? T.chip : 'transparent',
              border: 'none', color: l.code === lang ? T.fg : T.fgMute,
              cursor: 'pointer', fontFamily: MONO, fontSize: 12, letterSpacing: '0.06em',
              textAlign: 'left',
            }}>
              <span style={{ fontWeight: 600, minWidth: 22 }}>{l.label}</span>
              <span style={{ fontSize: 11, opacity: 0.65 }}>{l.name}</span>
            </button>
          ))}
        </div>
      )}
    </div>
  );
}

// ─── Global responsive styles (injected once per page) ───────────
// Overrides inline styles via !important + attribute selectors on common patterns.
function ResponsiveStyles() {
  return (
    <style dangerouslySetInnerHTML={{ __html: `
@media (max-width: 1023px) {
  /* Universal safety net — force every descendant of root to not exceed viewport */
  html, body { max-width: 100vw !important; overflow-x: hidden !important; }
  #root, #root > div { width: 100% !important; max-width: 100vw !important; min-height: auto !important; overflow-x: hidden !important; }
  #root *, #root *::before, #root *::after { max-width: 100vw; }
  /* Exception: children of horizontal-scroll wrappers can exceed 100vw */
  #root [data-mobile-scroll] * { max-width: none !important; }

  /* Match values (independent of property name or colon spacing) */
  [style*="120px 64px"] { padding: 56px 20px !important; }
  [style*="100px 64px"] { padding: 56px 20px !important; }
  [style*="80px 64px"]  { padding: 48px 20px !important; }
  [style*="64px 64px"]  { padding: 40px 20px 24px !important; }
  [style*="24px 64px"]  { padding: 18px 20px !important; }
  [style*="32px 64px"]  { padding: 24px 20px !important; }
  [style*="40px 64px"]  { padding: 28px 20px !important; }
  [style*="48px 64px"]  { padding: 32px 20px !important; }
  [style*="56px 64px"]  { padding: 36px 20px !important; }

  /* Grids — match by 'repeat(3' / 'repeat(4' substrings */
  [style*="repeat(3,"], [style*="repeat(3 ,"], [style*="repeat(3"] { grid-template-columns: 1fr !important; }
  [style*="repeat(4,"], [style*="repeat(4 ,"], [style*="repeat(4"] { grid-template-columns: 1fr 1fr !important; }
  [style*="1.15fr 1fr"], [style*="1.1fr 1fr"] { grid-template-columns: 1fr !important; }
  [style*="80px 1fr 1fr"] { grid-template-columns: 1fr !important; }

  /* Headings — using a class-free hack: match decimal-free font sizes */
  h1 { font-size: 38px !important; line-height: 1.05 !important; letter-spacing: -0.03em !important; }
  h2 { font-size: 28px !important; line-height: 1.1 !important; }
  h3 { font-size: 20px !important; }

  /* Body text — paragraphs limit max font */
  p { font-size: 15px !important; line-height: 1.55 !important; }

  /* Width / max-width overrides */
  [style*="width: 1440"], [style*="width:1440"] { width: 100% !important; max-width: 100% !important; }
  [style*="max-width: 1440"], [style*="max-width:1440"] { max-width: 100% !important; }
  [style*="max-width: 1100"], [style*="max-width:1100"] { max-width: 100% !important; }
  [style*="max-width: 900"],  [style*="max-width:900"]  { max-width: 100% !important; }
  [style*="max-width: 720"],  [style*="max-width:720"]  { max-width: 100% !important; }
  [style*="max-width: 700"],  [style*="max-width:700"]  { max-width: 100% !important; }
  [style*="max-width: 680"],  [style*="max-width:680"]  { max-width: 100% !important; }
  [style*="max-width: 640"],  [style*="max-width:640"]  { max-width: 100% !important; }
  [style*="max-width: 620"],  [style*="max-width:620"]  { max-width: 100% !important; }
  [style*="max-width: 600"],  [style*="max-width:600"]  { max-width: 100% !important; }
  [style*="max-width: 540"],  [style*="max-width:540"]  { max-width: 100% !important; }
  [style*="max-width: 500"],  [style*="max-width:500"]  { max-width: 100% !important; }
  [style*="max-width: 480"],  [style*="max-width:480"]  { max-width: 100% !important; }

  /* Gaps using common values */
  [style*="gap: 80"], [style*="gap:80"] { gap: 32px !important; }
  [style*="gap: 64"], [style*="gap:64"] { gap: 28px !important; }
  [style*="gap: 48"], [style*="gap:48"] { gap: 24px !important; }
  [style*="gap: 40"], [style*="gap:40"] { gap: 20px !important; }
  [style*="gap: 36"], [style*="gap:36"] { gap: 18px !important; }
  [style*="gap: 32"], [style*="gap:32"] { gap: 16px !important; }

  /* Images / SVG always fit container */
  img, svg { max-width: 100%; height: auto; }

  /* Hero gradient background tiles smaller */
  [style*="background-size: 64px 64px"], [style*="background-size:64px 64px"] { background-size: 32px 32px !important; }

  /* Horizontally-scrollable wrappers (opt-in via data attribute) */
  [data-mobile-scroll] { overflow-x: auto !important; -webkit-overflow-scrolling: touch; width: 100% !important; max-width: 100vw !important; }
  [data-mobile-scroll] > * { min-width: 720px; }

  /* Hide elements tagged desktop-only on mobile */
  [data-desktop-only] { display: none !important; }
}
    ` }} />
  );
}

// ─── Viewport hook ────────────────────────────────────────────────
function useViewport() {
  const [w, setW] = React.useState(() => (typeof window !== 'undefined' ? window.innerWidth : 1440));
  React.useEffect(() => {
    if (typeof window === 'undefined') return;
    let raf = null;
    const onResize = () => {
      if (raf) cancelAnimationFrame(raf);
      raf = requestAnimationFrame(() => setW(window.innerWidth));
    };
    window.addEventListener('resize', onResize);
    return () => { window.removeEventListener('resize', onResize); if (raf) cancelAnimationFrame(raf); };
  }, []);
  return { width: w, isMobile: w <= 1023 };
}

// ─── Mobile nav (hamburger + slide-down overlay) ──────────────────
// links: [{ href, label, active? }]
// trailing: optional react node rendered above CTA in the overlay (e.g., a "Get Readaily" extra button)
function MobileNav({ T, MONO, isDark, toggle, links, ctaHref, ctaLabel, trailing, currentLogoHref = 'index.html' }) {
  const [open, setOpen] = React.useState(false);
  const { t } = useI18n();
  React.useEffect(() => {
    if (open) document.body.style.overflow = 'hidden';
    else document.body.style.overflow = '';
    return () => { document.body.style.overflow = ''; };
  }, [open]);

  return (
    <>
      <nav style={{
        display: 'flex', alignItems: 'center', justifyContent: 'space-between',
        padding: '18px 20px', borderBottom: `1px solid ${T.line}`,
        background: T.bg, position: 'relative', zIndex: 10,
      }}>
        <a href={currentLogoHref} style={{ display: 'flex', alignItems: 'center', gap: 8, textDecoration: 'none', color: 'inherit' }}>
          <KrtdLogo height={18} dark={isDark} />
          <span style={{ fontFamily: MONO, fontSize: 10, color: T.fgFaint, marginLeft: 2 }}>{t('nav.studio')}</span>
        </a>
        <button
          onClick={() => setOpen((o) => !o)}
          aria-label="Menu"
          style={{
            width: 40, height: 40, borderRadius: 999, border: `1px solid ${T.lineStrong}`,
            background: 'transparent', color: T.fg, cursor: 'pointer',
            display: 'flex', alignItems: 'center', justifyContent: 'center',
          }}
        >
          {open ? (
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round"><path d="M3 3l10 10M13 3L3 13"/></svg>
          ) : (
            <svg width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round"><path d="M2 5h14M2 9h14M2 13h14"/></svg>
          )}
        </button>
      </nav>

      {open && (
        <div style={{
          position: 'fixed', inset: 0, background: T.bg, zIndex: 100,
          display: 'flex', flexDirection: 'column',
        }}>
          <div style={{
            display: 'flex', alignItems: 'center', justifyContent: 'space-between',
            padding: '18px 20px', borderBottom: `1px solid ${T.line}`,
          }}>
            <a href={currentLogoHref} style={{ display: 'flex', alignItems: 'center', gap: 8, textDecoration: 'none', color: 'inherit' }}>
              <KrtdLogo height={18} dark={isDark} />
              <span style={{ fontFamily: MONO, fontSize: 10, color: T.fgFaint, marginLeft: 2 }}>{t('nav.studio')}</span>
            </a>
            <button
              onClick={() => setOpen(false)}
              aria-label="Close"
              style={{
                width: 40, height: 40, borderRadius: 999, border: `1px solid ${T.lineStrong}`,
                background: 'transparent', color: T.fg, cursor: 'pointer',
                display: 'flex', alignItems: 'center', justifyContent: 'center',
              }}
            >
              <svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round"><path d="M3 3l10 10M13 3L3 13"/></svg>
            </button>
          </div>

          <div style={{ flex: 1, overflowY: 'auto', padding: '24px 20px', display: 'flex', flexDirection: 'column', gap: 4 }}>
            {links.map((l, i) => (
              <a key={i} href={l.href} onClick={() => setOpen(false)} style={{
                display: 'flex', alignItems: 'center', justifyContent: 'space-between',
                padding: '20px 4px', fontSize: 26, fontWeight: 500, letterSpacing: '-0.02em',
                color: l.active ? T.fg : T.fgMute, textDecoration: 'none',
                borderBottom: `1px solid ${T.line}`,
              }}>
                <span>{l.label}</span>
                {l.active && <span style={{ fontFamily: MONO, fontSize: 10, color: T.accent, letterSpacing: '0.08em' }}>● HERE</span>}
              </a>
            ))}
          </div>

          <div style={{ padding: '20px', borderTop: `1px solid ${T.line}`, display: 'flex', flexDirection: 'column', gap: 16 }}>
            <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
              <LangSelector T={T} />
              <button onClick={toggle} aria-label="Toggle theme" style={{
                width: 36, height: 36, borderRadius: 999, border: `1px solid ${T.lineStrong}`,
                background: 'transparent', color: T.fg, cursor: 'pointer',
                display: 'flex', alignItems: 'center', justifyContent: 'center',
              }}>
                {isDark ? <IconSun /> : <IconMoon />}
              </button>
              {trailing}
            </div>
            {ctaHref && (
              <a href={ctaHref} onClick={() => setOpen(false)} style={{
                display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 8,
                padding: '16px 18px', borderRadius: 999, fontSize: 15, fontWeight: 500,
                background: T.fg, color: T.bg, textDecoration: 'none',
                border: `1px solid ${T.fg}`,
              }}>
                {ctaLabel} <IconArrow />
              </a>
            )}
          </div>
        </div>
      )}
    </>
  );
}

// ─── Public site content helpers ─────────────────────────────────
const KRTD_SITE_CONTENT_KEY = 'krtd_site_content_home_v1';
const KRTD_PUBLIC_FIREBASE_CONFIG = {
  apiKey: 'AIzaSyA2U-rkhGE6Sl-PJ5rYpBX7raEPsmIdWU4',
  authDomain: 'krtd-2e733.firebaseapp.com',
  projectId: 'krtd-2e733',
  storageBucket: 'krtd-2e733.firebasestorage.app',
  messagingSenderId: '88091257177',
  appId: '1:88091257177:web:1290cd5f6dca9757d80448',
};
const KRTD_CONTENT_LANGS = ['en', 'pt-BR', 'es'];

function krtdSanitizeString(v) {
  return typeof v === 'string' ? v : '';
}

function normalizeHomeLocale(raw) {
  const src = raw && typeof raw === 'object' ? raw : {};
  const hero = src.hero && typeof src.hero === 'object' ? src.hero : {};
  const about = src.about && typeof src.about === 'object' ? src.about : {};
  return {
    hero: {
      badge: krtdSanitizeString(hero.badge),
      h1a: krtdSanitizeString(hero.h1a),
      h1bBefore: krtdSanitizeString(hero.h1bBefore),
      h1bAccent: krtdSanitizeString(hero.h1bAccent),
      h1bAfter: krtdSanitizeString(hero.h1bAfter),
      sub: krtdSanitizeString(hero.sub),
    },
    stats: Array.isArray(src.stats) ? src.stats.map((s) => ({
      label: krtdSanitizeString(s.label),
      value: krtdSanitizeString(s.value),
      sub: krtdSanitizeString(s.sub),
    })).filter((s) => s.label || s.value || s.sub) : [],
    projects: Array.isArray(src.projects) ? src.projects.map((p) => ({
      year: krtdSanitizeString(p.year),
      client: krtdSanitizeString(p.client),
      what: krtdSanitizeString(p.what),
      url: krtdSanitizeString(p.url).trim() || '#',
      tags: Array.isArray(p.tags) ? p.tags.map((tag) => krtdSanitizeString(tag).trim()).filter(Boolean) : [],
    })).filter((p) => p.year || p.client || p.what) : [],
    posts: Array.isArray(src.posts) ? src.posts.map((p) => ({
      date: krtdSanitizeString(p.date),
      title: krtdSanitizeString(p.title),
      mins: krtdSanitizeString(p.mins),
      tag: krtdSanitizeString(p.tag) || 'product',
      blurb: krtdSanitizeString(p.blurb),
      url: krtdSanitizeString(p.url).trim() || 'writing/index.html',
    })).filter((p) => p.title) : [],
    about: {
      headline: krtdSanitizeString(about.headline),
      body: krtdSanitizeString(about.body),
      founderRole: krtdSanitizeString(about.founderRole),
      founderBio: krtdSanitizeString(about.founderBio),
    },
    updatedAt: src.updatedAt || null,
  };
}

function homeLocaleHasContent(locale) {
  if (!locale) return false;
  const hero = locale.hero || {};
  const about = locale.about || {};
  return !!(
    hero.badge || hero.h1a || hero.h1bBefore || hero.h1bAccent || hero.h1bAfter || hero.sub ||
    (Array.isArray(locale.stats) && locale.stats.length) ||
    (Array.isArray(locale.projects) && locale.projects.length) ||
    (Array.isArray(locale.posts) && locale.posts.length) ||
    about.headline || about.body || about.founderRole || about.founderBio
  );
}

function normalizeHomeContent(raw) {
  const src = raw && typeof raw === 'object' ? raw : {};
  const locales = {};
  if (src.locales && typeof src.locales === 'object') {
    KRTD_CONTENT_LANGS.forEach((lang) => {
      const locale = normalizeHomeLocale(src.locales[lang]);
      if (homeLocaleHasContent(locale)) locales[lang] = locale;
    });
  } else {
    const locale = normalizeHomeLocale(src);
    if (homeLocaleHasContent(locale)) locales.en = locale;
  }
  return {
    version: 1,
    locales,
    updatedAt: src.updatedAt || null,
    publishedAt: src.publishedAt || null,
  };
}

function getLocalizedHomeContent(content, lang) {
  const normalized = content && content.locales ? normalizeHomeContent(content) : normalizeHomeContent(content);
  const locale = normalized.locales[lang];
  return homeLocaleHasContent(locale) ? locale : null;
}

function initPublicContentDb() {
  if (!window.firebase || !window.firebase.firestore) return null;
  try {
    if (!window.firebase.apps.length) window.firebase.initializeApp(KRTD_PUBLIC_FIREBASE_CONFIG);
    return window.firebase.firestore();
  } catch (e) {
    console.warn('[KRTD content] Firestore init failed', e);
    return null;
  }
}

function loadLocalHomeContent() {
  try {
    const raw = localStorage.getItem(KRTD_SITE_CONTENT_KEY);
    return raw ? normalizeHomeContent(JSON.parse(raw)) : null;
  } catch { return null; }
}

function saveLocalHomeContent(content) {
  const normalized = normalizeHomeContent({ ...content, updatedAt: content && content.updatedAt ? content.updatedAt : Date.now() });
  try { localStorage.setItem(KRTD_SITE_CONTENT_KEY, JSON.stringify(normalized)); } catch {}
  return normalized;
}

async function loadPublishedHomeContent() {
  const db = initPublicContentDb();
  if (!db) return null;
  try {
    const snap = await db.collection('siteContent').doc('home').get();
    if (!snap.exists) return null;
    const data = snap.data() || {};
    const content = normalizeHomeContent(data.content || data);
    saveLocalHomeContent(content);
    return content;
  } catch (e) {
    console.warn('[KRTD content] load failed', e);
    return null;
  }
}

// Keep last N previously-published versions for one-click rollback.
const KRTD_REVISION_LIMIT = 5;

async function publishHomeContent(content) {
  const db = initPublicContentDb();
  if (!db) throw new Error('Firestore is not available on this page.');
  const now = Date.now();
  const normalized = normalizeHomeContent({ ...content, updatedAt: now });
  normalized.publishedAt = now;

  // Read the current published doc so we can snapshot it into revisions[].
  let revisions = [];
  try {
    const snap = await db.collection('siteContent').doc('home').get();
    if (snap.exists) {
      const prev = snap.data() || {};
      const prevContent = prev.content ? normalizeHomeContent(prev.content) : null;
      const existing = Array.isArray(prev.revisions) ? prev.revisions : [];
      revisions = existing.slice(0, KRTD_REVISION_LIMIT - 1);
      if (prevContent) {
        revisions.unshift({
          publishedAt: prev.publishedAt || prev.updatedAt || null,
          content: prevContent,
        });
      }
      revisions = revisions.slice(0, KRTD_REVISION_LIMIT);
    }
  } catch (e) {
    console.warn('[KRTD content] could not snapshot previous revision', e);
  }

  await db.collection('siteContent').doc('home').set({
    version: 1,
    updatedAt: now,
    publishedAt: now,
    content: normalized,
    revisions,
  });
  saveLocalHomeContent(normalized);
  return normalized;
}

async function loadHomeContentRevisions() {
  const db = initPublicContentDb();
  if (!db) return [];
  try {
    const snap = await db.collection('siteContent').doc('home').get();
    if (!snap.exists) return [];
    const data = snap.data() || {};
    return Array.isArray(data.revisions) ? data.revisions.map((r) => ({
      publishedAt: r.publishedAt || null,
      content: normalizeHomeContent(r.content),
    })) : [];
  } catch (e) {
    console.warn('[KRTD content] revisions load failed', e);
    return [];
  }
}

// Builds default content for hero/stats/about by reading from TRANSLATIONS,
// so those strings live in only one place. Projects and posts have no
// equivalent TRANSLATIONS source, so they remain caller-provided.
function buildDefaultHomeContentFromTranslations(extras) {
  const result = { locales: {} };
  for (const lang of KRTD_CONTENT_LANGS) {
    const dict = TRANSLATIONS[lang] || TRANSLATIONS.en;
    const get = (k) => dict[k] !== undefined ? dict[k] : (TRANSLATIONS.en[k] || '');
    const ex = (extras && extras[lang]) || {};
    result.locales[lang] = {
      hero: {
        badge: get('home.hero.badge'),
        h1a: get('home.hero.h1a'),
        h1bBefore: get('home.hero.h1b.before'),
        h1bAccent: get('home.hero.h1b.accent'),
        h1bAfter: get('home.hero.h1b.after'),
        sub: get('home.hero.sub'),
      },
      stats: [0, 1, 2, 3].map((i) => ({
        label: get(`home.stats.${i}.k`),
        value: get(`home.stats.${i}.v`),
        sub: get(`home.stats.${i}.sub`),
      })),
      projects: Array.isArray(ex.projects) ? ex.projects : [],
      posts: Array.isArray(ex.posts) ? ex.posts : [],
      about: {
        headline: get('home.about.h2'),
        body: get('home.about.sub'),
        founderRole: get('home.founder.role'),
        founderBio: get('home.founder.bio'),
      },
    };
  }
  return normalizeHomeContent(result);
}

// True when local content has been edited since the last successful publish.
function homeContentHasUnpublishedChanges(content) {
  if (!content) return false;
  const edited = Number(content.updatedAt) || 0;
  const published = Number(content.publishedAt) || 0;
  return edited > published;
}

window.KRTD = Object.assign(window.KRTD || {}, {
  normalizeHomeContent,
  normalizeHomeLocale,
  getLocalizedHomeContent,
  KRTD_CONTENT_LANGS,
  loadLocalHomeContent,
  saveLocalHomeContent,
  loadPublishedHomeContent,
  publishHomeContent,
  loadHomeContentRevisions,
  buildDefaultHomeContentFromTranslations,
  homeContentHasUnpublishedChanges,
});

// ─── Expose globals ───────────────────────────────────────────────
Object.assign(window, {
  KrtdLogo, Placeholder, Reveal, useTheme, useViewport, ResponsiveStyles,
  IconArrow, IconArrowUpRight, IconChevron, IconSun, IconMoon, Marquee,
  TRANSLATIONS, I18nProvider, useI18n, LangSelector, LANGS, MobileNav,
});
