/* global React */

const TRAIN_L3 = {
  "beginner-training": {
    n: "01",
    title: "Beginner Training",
    label: "Start here",
    accent: "first honest routine",
    image: "https://images.unsplash.com/photo-1518611012118-696072aa579a?w=2400&q=80",
    lede: "The first weeks of training should feel boring enough to repeat and clear enough to trust. Start with a floor you can keep, then widen from there.",
    meta: ["16 guides", "First weeks", "Gym confidence", "General principles"],
    quote: "A beginner plan is not a test of identity. It is a way to make next week easier to repeat.",
    top: [
      ["01", "How to start training when you have no routine.", "The first three sessions, the first two rules, and the one thing not to buy yet.", "Start"],
      ["02", "How to use a gym for the first time.", "What to do before the first set so the room stops feeling like a test.", "Gym"],
      ["03", "How to train three days a week.", "The durable weekly floor most adults should try before adding more.", "Routine"],
      ["04", "How to know if a beginner workout is too much.", "The soreness, sleep, and motivation checks that matter.", "Recovery"],
      ["05", "How to keep going after the first missed week.", "Do not restart. Resume. That is the whole trick.", "Habit"],
    ],
    sections: [
      ["The floor", "Three sessions. A push, a pull, a squat or hinge, a carry, a walk. Enough to teach the body without turning the calendar into a threat."],
      ["The room", "Most beginners do not need harder exercises. They need less confusion: where to stand, what to write down, what to repeat next time."],
      ["The pace", "Add slowly enough that the habit survives. The first win is not transformation. The first win is coming back."],
    ],
  },
  "warm-ups": {
    n: "03",
    title: "Warm-Ups",
    label: "Prep the work",
    accent: "ready enough",
    image: "https://images.unsplash.com/photo-1518611012118-696072aa579a?w=2400&q=80",
    lede: "Short prep, ramp sets, joint checks, and the simple readiness work that makes the first hard set less surprising.",
    meta: ["16 guides", "Ramp sets", "Mobility", "Readiness"],
    quote: "A warm-up is not a second workout. It is the bridge into the work.",
    top: [
      ["01", "How to warm up before lifting.", "Raise temperature, rehearse the pattern, then stop before the prep becomes the session.", "Lift"],
      ["02", "How to use ramp sets.", "The simple loading ladder that makes the first work set feel less sudden.", "Ramp"],
      ["03", "How long a warm-up should take.", "Five, ten, fifteen minutes, and when more is just delay wearing gym clothes.", "Timing"],
      ["04", "How to warm up when you are short on time.", "The smallest useful version before a busy-day lift.", "Short"],
      ["05", "How to know if you are ready for the first hard set.", "Breath, range, speed, and whether the movement feels owned.", "Ready"],
    ],
    sections: [
      ["Warm the pattern", "The best prep looks like the work at a lower cost. Move the same joints, rehearse the same path, and let the body recognize the assignment."],
      ["Ramp before you prove", "A few lighter sets tell you more than a pile of random drills. The weight should climb because the movement is getting clearer."],
      ["Do not hide in prep", "A warm-up should make the session easier to start, not become the place you avoid starting."],
    ],
  },
  "full-body-workouts": {
    n: "04",
    title: "Full-Body Workouts",
    label: "Train the whole week",
    accent: "whole-body floor",
    image: "https://images.unsplash.com/photo-1581009146145-b5ef050c2e1e?w=2400&q=80",
    lede: "Three-day routines, efficient sessions, beginner-friendly work, and the full-body template for people who need the week to stay honest.",
    meta: ["20 guides", "3-day", "Efficient", "Beginner-friendly"],
    quote: "Full body works because it refuses to make one missed day dramatic.",
    top: [
      ["01", "How to build a full-body workout.", "Push, pull, squat, hinge, carry, and enough restraint to repeat it.", "Template"],
      ["02", "How to train full body three days a week.", "A simple week that keeps strength, practice, and recovery in the same room.", "3-day"],
      ["03", "How to make a full-body workout shorter.", "Pair movements, cut filler, and keep the parts that change the week.", "Efficient"],
      ["04", "How to choose exercises for a full-body day.", "Patterns before favorites, substitutions before excuses.", "Exercises"],
      ["05", "How to recover between full-body workouts.", "Spacing, soreness, sleep, and why every day cannot be the hard day.", "Recovery"],
    ],
    sections: [
      ["Patterns come first", "A full-body session is not every muscle in the catalog. It is a useful pass through the movement patterns that matter."],
      ["The week repeats", "Full-body training shines when life interrupts. The same core work can appear again without the whole split collapsing."],
      ["Efficiency has a cost", "Short sessions need sharper choices. Keep the lifts that earn their space and let the rest stay parked."],
    ],
  },
  "push-workouts": {
    n: "07",
    title: "Push Workouts",
    label: "Press with intent",
    accent: "clean pressing",
    image: "https://images.unsplash.com/photo-1526506118085-60ce8714f8c5?w=2400&q=80",
    lede: "Chest, shoulders, triceps, pressing days, push-up progressions, and the shoulder-friendly order that keeps push work useful.",
    meta: ["16 guides", "Chest", "Shoulders", "Triceps"],
    quote: "A good push day presses hard without making every joint negotiate.",
    top: [
      ["01", "How to build a push workout.", "Press, incline, shoulder work, triceps, and enough pulling to keep the day honest.", "Template"],
      ["02", "How to choose between bench, dumbbell press, and push-ups.", "Match the press to your equipment, shoulders, and skill.", "Press"],
      ["03", "How to train shoulders without irritating them.", "Range, angle, load, and the difference between work and warning.", "Shoulders"],
      ["04", "How to add triceps work without wasting the day.", "Pick the slot that helps pressing instead of just adding burn.", "Triceps"],
      ["05", "How to recover after a hard push day.", "Soreness, elbows, shoulders, and when the next press should wait.", "Recovery"],
    ],
    sections: [
      ["Pressing needs order", "Big presses belong early when attention is clean. Smaller shoulder and triceps work can support the day without taking it over."],
      ["Angles change the cost", "Flat, incline, overhead, push-up, machine, dumbbell. The best choice is the one your shoulders can repeat."],
      ["Volume is not courage", "More pressing is not always better pressing. The useful dose leaves the next upper day possible."],
    ],
  },
  "pull-workouts": {
    n: "08",
    title: "Pull Workouts",
    label: "Build the back",
    accent: "honest pulling",
    image: "https://images.unsplash.com/photo-1534438327276-14e5300c3a48?w=2400&q=80",
    lede: "Rows, pulldowns, pull-ups, hinges, curls, back days, and the pulling order that makes the rep finish where it should.",
    meta: ["16 guides", "Rows", "Pull-ups", "Back days"],
    quote: "Pull day is not just moving handles. It is learning where the pull should finish.",
    top: [
      ["01", "How to build a pull workout.", "Row, vertical pull, hinge, rear delts, curls, and a reason for each slot.", "Template"],
      ["02", "How to choose rows for your back day.", "Chest-supported, cable, dumbbell, barbell, and the torso cost of each.", "Rows"],
      ["03", "How to train for your first pull-up.", "Negatives, bands, pulldowns, grip, and enough patience to earn the rep.", "Pull-up"],
      ["04", "How to hinge on pull day without wrecking it.", "Deadlifts, RDLs, back extensions, and where they belong in the week.", "Hinge"],
      ["05", "How to finish a pull day without junk volume.", "Curls, rear delts, carries, and when the useful work is already done.", "Finish"],
    ],
    sections: [
      ["Rows teach the back", "The best row is the one you can feel, finish, and repeat without turning the torso into the main event."],
      ["Vertical pulls need patience", "Pull-ups and pulldowns improve when the shoulder blades, grip, and range stop fighting each other."],
      ["Hinges are expensive", "A hard hinge can belong on pull day, but it changes recovery. Put it there on purpose."],
    ],
  },
  "leg-workouts": {
    n: "09",
    title: "Leg Workouts",
    label: "Train the lower body",
    accent: "strong legs",
    image: "https://images.unsplash.com/photo-1434596922112-19c563067271?w=2400&q=80",
    lede: "Squats, hinges, single-leg work, calves, carries, and leg days that build strength without turning the rest of the week into damage control.",
    meta: ["16 guides", "Squats", "Hinges", "Single-leg work"],
    quote: "A good leg day should make the lower body stronger without making the whole week smaller.",
    top: [
      ["01", "How to build a leg workout.", "Squat, hinge, single-leg work, calves, and the recovery cost of each slot.", "Template"],
      ["02", "How to choose between squats and leg press.", "Skill, comfort, equipment, and what the lift needs to teach.", "Choice"],
      ["03", "How to add single-leg work.", "Lunges, split squats, step-ups, and the balance tax.", "Single-leg"],
      ["04", "How to train hamstrings without guessing.", "Hinges, curls, bridges, and where each belongs.", "Hamstrings"],
      ["05", "How to recover after leg day.", "Soreness, stairs, walking, and when the next hard lower session should wait.", "Recovery"],
    ],
    sections: [
      ["Choose the main pattern", "A leg day needs a clear center. Squat, hinge, press, or lunge first; the rest supports that choice."],
      ["Respect single-leg work", "Unilateral lifts look smaller until balance, range, and fatigue arrive at the same time."],
      ["Recovery is part of programming", "Lower-body work changes the next few days. Build the day around what the week still needs to do."],
    ],
  },
  "squat": {
    n: "11",
    title: "Squat",
    label: "Own the pattern",
    accent: "clean depth",
    image: "https://images.unsplash.com/photo-1581009146145-b5ef050c2e1e?w=2400&q=80",
    lede: "Squat setup, stance, depth, bracing, tempo, variations, and the simple choices that make the pattern repeatable.",
    meta: ["16 guides", "Setup", "Depth", "Variations"],
    quote: "The squat gets better when the setup stops changing every set.",
    top: [
      ["01", "How to set up for a squat.", "Feet, brace, gaze, rack height, and the first unrushed rep.", "Setup"],
      ["02", "How deep to squat.", "Useful range, control, anatomy, and what to do when depth changes the rep.", "Depth"],
      ["03", "How to choose a squat stance.", "Narrow, wide, toes out, heels down, and finding the stance you can repeat.", "Stance"],
      ["04", "How to fix squat balance.", "Heels, midfoot, knees, torso angle, and why the bar path tells on you.", "Balance"],
      ["05", "How to choose squat variations.", "Goblet, front, back, box, split, and when each earns the slot.", "Variations"],
    ],
    sections: [
      ["Setup decides the rep", "Rack height, stance, brace, and first step matter before the lift ever looks hard."],
      ["Depth needs control", "A deeper squat is useful only if the position is owned and repeatable."],
      ["Variation is a tool", "Change the squat when it solves a problem, not because the current version got boring."],
    ],
  },
  "deadlift": {
    n: "12",
    title: "Deadlift",
    label: "Hinge with control",
    accent: "quiet pull",
    image: "https://images.unsplash.com/photo-1599058917212-d750089bc07e?w=2400&q=80",
    lede: "Hinge mechanics, setup, grip, bar path, safer progress, variations, and the patience that keeps pulling useful.",
    meta: ["16 guides", "Hinge", "Grip", "Bar path"],
    quote: "A deadlift should begin before the bar leaves the floor.",
    top: [
      ["01", "How to set up for a deadlift.", "Bar, feet, grip, brace, slack, and the moment before the pull.", "Setup"],
      ["02", "How to hinge without rounding.", "Hips back, ribs down, lats on, and the difference between motion and position.", "Hinge"],
      ["03", "How to choose deadlift grip.", "Double overhand, mixed grip, straps, hook grip, and what each changes.", "Grip"],
      ["04", "How to progress deadlifts slowly.", "Small jumps, fewer hard sets, and why the hinge charges interest.", "Progress"],
      ["05", "How to choose deadlift variations.", "Trap bar, Romanian, block pulls, sumo, and when the variation helps.", "Variations"],
    ],
    sections: [
      ["Find the floor position", "The pull starts with the body arranged around the bar, not with the bar yanked into place."],
      ["Grip changes the lift", "A grip choice should solve a real limit without hiding the work the rest of the body still needs."],
      ["Pulling has a cost", "Deadlifts can build strength quickly, but the week has to absorb them."],
    ],
  },
  "bench-press": {
    n: "13",
    title: "Bench Press",
    label: "Press from a base",
    accent: "steady press",
    image: "https://images.unsplash.com/photo-1534367610401-9f5ed68180aa?w=2400&q=80",
    lede: "Bench setup, shoulder position, grip, bar path, spotters, variations, and the choices that make pressing repeatable.",
    meta: ["16 guides", "Setup", "Shoulders", "Grip"],
    quote: "A better bench starts with the body making a stable place to press from.",
    top: [
      ["01", "How to set up for bench press.", "Feet, upper back, grip, eyes, rack height, and the first controlled unrack.", "Setup"],
      ["02", "How wide to grip the bench press.", "Comfort, range, shoulders, triceps, and why width is not a personality.", "Grip"],
      ["03", "How to keep shoulders comfortable on bench.", "Scapula position, elbow path, range, and warning signs.", "Shoulders"],
      ["04", "How to use a spotter.", "What to say before the set so the help actually helps.", "Spotter"],
      ["05", "How to choose bench variations.", "Dumbbells, incline, floor press, pause reps, and when each belongs.", "Variations"],
    ],
    sections: [
      ["Build the base first", "The press improves when the feet, back, grip, and rack setup stop changing."],
      ["Shoulders get a vote", "Range and elbow path matter more than forcing a version that keeps arguing with the joint."],
      ["Use help clearly", "A spotter should know whether you want a lift-off, when to touch the bar, and when to leave it alone."],
    ],
  },
  "pull-ups": {
    n: "14",
    title: "Pull-Ups",
    label: "Earn the rep",
    accent: "strong pulls",
    image: "https://images.unsplash.com/photo-1526401485004-2fda9f4d61f9?w=2400&q=80",
    lede: "First reps, negatives, bands, pulldowns, grip, volume, and the patient progress that turns pulling into a repeatable skill.",
    meta: ["16 guides", "First rep", "Negatives", "Volume"],
    quote: "The first pull-up is built by many honest almost-reps.",
    top: [
      ["01", "How to train for your first pull-up.", "Pulldowns, hangs, negatives, rows, and a plan that does not need magic.", "First rep"],
      ["02", "How to use negative pull-ups.", "Lowering with control without turning every rep into a survival test.", "Negatives"],
      ["03", "How to use bands for pull-ups.", "Assistance that helps the rep without teaching a fake bottom.", "Bands"],
      ["04", "How often to train pull-ups.", "Practice, recovery, elbows, and why daily failure is not the shortcut.", "Frequency"],
      ["05", "How to add reps to pull-ups.", "Volume, clusters, rest, body position, and clean attempts.", "Progress"],
    ],
    sections: [
      ["Practice the whole pull", "Rows, pulldowns, hangs, and negatives should each teach part of the same rep."],
      ["Assistance should teach", "Bands and machines work best when they preserve the shape of the pull."],
      ["Elbows count", "More attempts are not better if grip and elbows start losing the week."],
    ],
  },
  "kettlebell-workouts": {
    n: "16",
    title: "Kettlebell Workouts",
    label: "Use the bell well",
    accent: "compact power",
    image: "https://images.unsplash.com/photo-1517964603305-11c0f6f66012?w=2400&q=80",
    lede: "Swings, goblets, carries, complexes, short sessions, and the kettlebell choices that keep power, control, and conditioning in the same room.",
    meta: ["16 guides", "Swings", "Goblets", "Carries"],
    quote: "A kettlebell is useful when the session respects both the weight and the clock.",
    top: [
      ["01", "How to build a kettlebell workout.", "Hinge, squat, press, pull, carry, and one clear reason for the session.", "Template"],
      ["02", "How to learn kettlebell swings.", "Hinge first, snap later, and why fatigue should not teach the pattern.", "Swing"],
      ["03", "How to use goblet squats.", "Depth, brace, elbows, and a squat pattern most people can feel quickly.", "Goblet"],
      ["04", "How to build a kettlebell complex.", "Linked moves that stay clean instead of becoming a sloppy race.", "Complex"],
      ["05", "How to use carries.", "Suitcase, rack, overhead, and the trunk work people usually skip.", "Carry"],
    ],
    sections: [
      ["Skill before speed", "The bell rewards clean timing and punishes rushed reps."],
      ["Simple sessions work", "A hinge, a squat, a press, a pull, and a carry can do a lot without a long menu."],
      ["Conditioning has form", "A hard kettlebell session still needs reps that look like the lift."],
    ],
  },
  "no-equipment-workouts": {
    n: "17",
    title: "No-Equipment Workouts",
    label: "Train with the room",
    accent: "bodyweight floor",
    image: "https://images.unsplash.com/photo-1599901860904-17e6ed7083a0?w=2400&q=80",
    lede: "Bodyweight training, travel sessions, home constraints, short circuits, progressions, and workouts that still have structure without equipment.",
    meta: ["16 guides", "Bodyweight", "Travel", "Home"],
    quote: "No equipment is not no plan.",
    top: [
      ["01", "How to build a no-equipment workout.", "Push, squat, hinge, core, conditioning, and enough structure to repeat.", "Template"],
      ["02", "How to make bodyweight exercises harder.", "Tempo, range, pauses, single-leg work, and smarter density.", "Progress"],
      ["03", "How to train legs without equipment.", "Squats, lunges, split squats, hinges, wall sits, and control.", "Legs"],
      ["04", "How to train upper body without equipment.", "Push-ups, rows with safe setups, shoulder work, and realistic limits.", "Upper"],
      ["05", "How to build a hotel-room workout.", "Floor space, time limits, quiet options, and a clean exit.", "Travel"],
    ],
    sections: [
      ["Use patterns, not tricks", "A room can still train push, squat, hinge, core, and conditioning if the choices are clear."],
      ["Progress changes shape", "Without load, progress often comes from range, tempo, control, density, and single-side work."],
      ["Short can still be complete", "A small session needs sharper choices, not random movement until the timer ends."],
    ],
  },
  "hiit": {
    n: "20",
    title: "HIIT",
    label: "Use hard work carefully",
    accent: "short and sharp",
    image: "https://images.unsplash.com/photo-1518611012118-696072aa579a?w=2400&q=80",
    lede: "Intervals, finishers, short hard sessions, rest periods, exercise choices, and knowing when high intensity should wait.",
    meta: ["16 guides", "Intervals", "Finishers", "Recovery"],
    quote: "HIIT works best when hard means precise, not chaotic.",
    top: [
      ["01", "How to build a HIIT workout.", "Work, rest, movement choice, and the line between hard and messy.", "Template"],
      ["02", "How long HIIT intervals should be.", "Short sprints, longer pushes, rest periods, and what each asks from the body.", "Timing"],
      ["03", "How often to do HIIT.", "The weekly dose that supports training instead of hijacking recovery.", "Frequency"],
      ["04", "How to choose HIIT exercises.", "Bikes, rowers, hills, bodyweight moves, and joint-friendly choices.", "Exercises"],
      ["05", "How to know when to skip HIIT.", "Sleep, soreness, stress, lifting days, and the cost of forcing intensity.", "Skip"],
    ],
    sections: [
      ["Intensity needs edges", "The session should define the work and the rest clearly enough that hard efforts stay clean."],
      ["Exercise choice matters", "A bike sprint and a jump circuit do not cost the body the same thing."],
      ["Recovery sets the ceiling", "The right HIIT dose leaves the rest of the week alive."],
    ],
  },
  "workout-splits": {
    n: "05",
    title: "Workout Splits",
    label: "Build the week",
    accent: "shape of the week",
    image: "https://images.unsplash.com/photo-1517963879433-6ad2b056d712?w=2400&q=80",
    lede: "Full body, upper/lower, push/pull/legs, body-part splits. The split is not the program; it is the calendar shape that lets the program survive.",
    meta: ["18 guides", "PPL", "Upper/lower", "3-day plans"],
    quote: "The best split is the one that still exists after a bad Tuesday.",
    top: [
      ["01", "How to choose a workout split.", "Match the split to your week before you match it to your ambition.", "Start"],
      ["02", "How to run push/pull/legs.", "Why six days looks clean on paper and three days often works better.", "PPL"],
      ["03", "How to build a three-day split.", "The week for people with jobs, families, errands, and a spine.", "3-day"],
      ["04", "How to use an upper/lower split.", "A good middle ground when full body feels too broad.", "Upper/lower"],
      ["05", "How to deload without losing momentum.", "The planned easy week that keeps the next hard week possible.", "Deload"],
    ],
    sections: [
      ["The calendar comes first", "Before exercise order, volume, or intensity, ask how many training days are real. Build around those."],
      ["The missed-day test", "A good split should survive one missed session without making the week feel ruined."],
      ["The honest upgrade", "Only widen the week when the current week has become easy to keep."],
    ],
  },
  "exercise-form": {
    n: "10",
    title: "Exercise Form",
    label: "Learn the lifts",
    accent: "cleaner reps",
    image: "https://images.unsplash.com/photo-1517836357463-d25dfeac3438?w=2400&q=80",
    lede: "Setup, tempo, range, bracing, substitutions. This is the shelf for making reps more honest before making them heavier.",
    meta: ["24 guides", "Technique", "Cues", "Mistakes"],
    quote: "Good form is not pretty. Good form is repeatable under pressure.",
    top: [
      ["01", "How to make any lift easier to coach yourself.", "Film one set, pick one cue, ignore everything else for a week.", "Self-check"],
      ["02", "How to squat without guessing at depth.", "Feet, knees, hips, brace, and the one camera angle that helps.", "Squat"],
      ["03", "How to deadlift without yanking the bar.", "Set the back, pull the slack, push the floor.", "Deadlift"],
      ["04", "How to bench with your shoulders still liking you.", "Setup, contact points, grip, and the spotter conversation.", "Bench"],
      ["05", "How to row without rounding your back.", "The existing form guide, and the cue that makes it click.", "Row"],
    ],
    sections: [
      ["Setup is part of the rep", "Most bad reps are decided before the weight moves. Stance, grip, brace, and attention are not warm-up details."],
      ["One cue at a time", "A lift cannot hold nine new ideas at once. Pick the cue that changes the rep most, then repeat it."],
      ["Pain changes the assignment", "If a movement hurts in a sharp, worsening, or worrying way, stop treating it like a puzzle and ask someone qualified."],
    ],
  },
  "strength-training": {
    n: "04",
    title: "Strength Training",
    label: "Start here",
    accent: "stronger slowly",
    image: "https://images.unsplash.com/photo-1574680096145-d05b474e2155?w=2400&q=80",
    lede: "The broad shelf for getting stronger: effort, progression, rest, the main lifts, and the boring math that makes weight move later.",
    meta: ["16 guides", "Progression", "Main lifts", "Rest"],
    quote: "Strength is mostly the art of doing enough, then having the taste to stop.",
    top: [
      ["01", "How to get stronger without changing programs every week.", "The case for repeating lifts long enough to learn from them.", "Progress"],
      ["02", "How many sets are enough.", "Why minimum effective dose is usually more useful than maximum recoverable volume.", "Volume"],
      ["03", "How long to rest between heavy sets.", "The difference between conditioning fatigue and strength work.", "Rest"],
      ["04", "How to add weight without rushing.", "Small jumps, better reps, and the quiet power of one more clean set.", "Load"],
      ["05", "How to know when strength training is working.", "Numbers, energy, soreness, sleep, and the mirror's unreliable vote.", "Signals"],
    ],
    sections: [
      ["Repeat the lifts", "Strength needs enough sameness to measure. Novelty is fun; repetition is where the numbers learn to move."],
      ["Leave a little in the tank", "Most people do not need failure on compound lifts. They need clean hard work they can recover from."],
      ["Track less, but track something", "Lift, weight, reps. Three numbers are enough to make next week a decision instead of a guess."],
    ],
    editorial: {
      title: "Strength is a week you can repeat.",
      eyebrow: "Editorial",
      dek: "The work is not mysterious. Pick the lifts that matter, make the hard sets honest, rest long enough to make the next set count, then come back before the story gets dramatic.",
      body: [
        "Most people do not need a more theatrical program. They need a week that teaches them what their body does with the same work repeated under slightly better conditions. Same squat pattern. Same press. Same pull. Enough sameness to notice whether the load moved, the rep looked cleaner, or the session cost too much.",
        "The mistake is treating every workout like a referendum on identity. Strong people do not win every Tuesday. They build a room where Tuesday can be ordinary and still useful. The set is hard, the rest is real, the notes are plain, and the next session has something simple to answer.",
        "This hub is for that kind of strength: not maximalist, not fragile, not built around panic. A way to lift that respects effort and recovery at the same time."
      ],
      proof: [
        ["Same lifts", "Can you compare this week to last week without decoding a new plan?"],
        ["Clean hard sets", "Did the difficult reps still look like the exercise you meant to do?"],
        ["Real rest", "Did you rest long enough to lift, not just breathe hard?"],
        ["Next session", "Did the workout make the next workout more possible?"],
      ],
      callout: "The right strength plan should make the next decision clearer, not make you shop for a new identity every Sunday night.",
    },
  },
  "dumbbell-workouts": {
    n: "15",
    title: "Dumbbell Workouts",
    label: "Choose the tool",
    accent: "one pair, real work",
    image: "https://images.unsplash.com/photo-1583454110551-21f2fa2afe61?w=2400&q=80",
    lede: "Home sessions, hotel gyms, single-dumbbell substitutions, full-body days. Dumbbells are not a compromise when the session is built honestly.",
    meta: ["18 guides", "Home", "Hotel gyms", "Substitutions"],
    quote: "A pair of dumbbells is enough if the plan stops apologizing for itself.",
    top: [
      ["01", "How to build a full-body dumbbell workout.", "Five slots, three sets, no bench required.", "Full-body"],
      ["02", "How to train legs with dumbbells.", "Goblets, lunges, hinges, split squats, and carries.", "Legs"],
      ["03", "How to do a hotel gym workout.", "The dumbbell rack you will probably find, used well.", "Travel"],
      ["04", "How to use one dumbbell when one is all you have.", "Offset loading, carries, rows, and the humility of asymmetry.", "One DB"],
      ["05", "How to progress when dumbbells get too light.", "Tempo, range, single-leg work, density, and fewer excuses.", "Progress"],
    ],
    sections: [
      ["The constraint is useful", "Dumbbells force cleaner choices. Fewer machines, fewer distractions, more decisions that fit in a room."],
      ["Train both sides of the body", "Push, pull, squat, hinge, carry. If the session covers those patterns, the tool is doing enough."],
      ["Progress without buying everything", "Before more equipment, try slower reps, longer range, unilateral work, and shorter rests."],
    ],
  },
  "cardio": {
    n: "18",
    title: "Cardio",
    label: "Conditioning",
    accent: "move the engine",
    image: "https://images.unsplash.com/photo-1538805060514-97d9cc17730c?w=2400&q=80",
    lede: "Easy pace, intervals, running, rowing, cycling, incline walks, lifting days, recovery days. Cardio is not punishment; it is the wide conditioning shelf for building an engine you can actually live with.",
    meta: ["42 guides", "Zone two", "Intervals", "Running", "Machines", "Hybrid weeks"],
    quote: "The useful cardio is the kind you can recover from, repeat, and still respect tomorrow.",
    top: [
      ["01", "How to do zone two in plain English.", "Conversational pace, with or without a watch.", "Zone two"],
      ["02", "How much cardio is enough.", "The practical weekly range, translated into real life.", "Basics"],
      ["03", "How to add intervals without wrecking your legs.", "Short, hard, rare enough to keep working.", "Intervals"],
      ["04", "How to start running again.", "Run-walk, patience, and the first eight weeks back.", "Running"],
      ["05", "How to use cardio on lifting days.", "Lift first, condition second, recover like it counts.", "Hybrid"],
    ],
    sections: [
      ["Easy is training", "The boring pace builds capacity without stealing every recovery dollar from the week. It should feel almost too calm until you notice you can do more work with less drama."],
      ["Hard has a cost", "Intervals work because they are stressful. That is also why they need a smaller place in the week, especially if you lift, run, work on your feet, or sleep like a normal adult."],
      ["Mode is a lever", "Run, row, bike, incline walk, stairs, elliptical, jump rope. The best modality is not the coolest one. It is the one your joints, schedule, skill, and attention can tolerate."],
      ["Recovery decides the dose", "Cardio is only useful if the week survives it. The right amount leaves you better conditioned, not quietly resentful of every staircase."],
    ],
    depthTitle: "The cardio engine room.",
    depthMeta: "conditioning\nby need",
    engine: [
      { k: "01", h: "Easy work", d: "Zone two, walks, bikes, rows, and long calm sessions that build capacity without taking over the week.", stat: "repeatable" },
      { k: "02", h: "Hard work", d: "Intervals, hills, tempo touches, and short doses of effort that need a smaller, cleaner place on the calendar.", stat: "expensive" },
      { k: "03", h: "Mode choice", d: "Running is one door. Machines, incline walks, rowing, cycling, stairs, and jump rope are doors too.", stat: "adaptable" },
      { k: "04", h: "Hybrid placement", d: "The question is not whether cardio counts. It is where it sits beside lifting, travel, recovery, and real life.", stat: "weekly" },
    ],
    searches: [
      ["I need the easy version.", "Zone two, walking, low-drama bikes, and sessions that still let tomorrow happen.", "Zone Two"],
      ["I need something short.", "Intervals, hills, finishers, and when a hard touch is useful instead of reckless.", "Intervals"],
      ["I want to run again.", "Run-walk returns, shoes, pacing, mileage, heavy legs, and the bad-run reset.", "Running"],
      ["I am stuck with machines.", "Treadmills, bikes, rowers, ellipticals, stairs, and crowded-gym swaps.", "Machines"],
      ["I lift and need cardio.", "Cardio after lifting, leg-day placement, travel weeks, and recovery-first conditioning.", "Hybrid"],
      ["I just need a starting floor.", "How much is enough, what counts, what to track, and how to stop making minutes moral.", "Basics"],
    ],
    weekShapes: [
      { h: "Minimum floor", d: "Two easy sessions, one optional walk, no heroics.", days: ["Easy 25", "Walk 20", "Easy 30"] },
      { h: "Hybrid lifter", d: "Keep the legs useful while strength work stays primary.", days: ["Lift + easy", "Intervals", "Zone two"] },
      { h: "Runner return", d: "A patient ramp for someone rebuilding trust with impact.", days: ["Run-walk", "Bike easy", "Long walk"] },
    ],
    libraryTitle: "The cardio library.",
    libraryMeta: "42 guides\nby cardio problem",
    libraryTabs: [
      { id: "basics", nm: "Basics", ct: 7 },
      { id: "zone", nm: "Zone Two", ct: 7 },
      { id: "intervals", nm: "Intervals", ct: 7 },
      { id: "running", nm: "Running", ct: 7 },
      { id: "machines", nm: "Machines", ct: 7 },
      { id: "hybrid", nm: "Hybrid", ct: 7 },
    ],
    library: {
      basics: [
        { n: "01", h: "How much cardio is enough.", d: "The weekly floor, the useful ceiling, and how to stop turning minutes into morality.", tag: "Basics", t: "5 min", featured: true },
        { n: "02", h: "How to start cardio when you hate cardio.", d: "Pick the least annoying mode, set a laughably small floor, and build from there.", tag: "Start", t: "5 min" },
        { n: "03", h: "How to choose between walking, running, biking, and rowing.", d: "The joint, skill, equipment, and boredom test for picking your default.", tag: "Mode", t: "6 min" },
        { n: "04", h: "How to know if cardio is actually working.", d: "Breathing, pace, recovery, stairs, sleep, and the signs that matter before a watch does.", tag: "Signals", t: "5 min" },
        { n: "05", h: "How to build a weekly cardio floor.", d: "Two easy sessions, one optional harder touch, and a plan that survives a busy week.", tag: "Weekly plan", t: "6 min" },
        { n: "06", h: "How to warm up before cardio without overdoing it.", d: "Five minutes of ramping, not a second workout before the workout.", tag: "Warm-up", t: "4 min" },
        { n: "07", h: "How to cool down after cardio without making it weird.", d: "Walk, breathe, write one note, leave before the ritual eats the habit.", tag: "Cool down", t: "3 min" },
      ],
      zone: [
        { n: "01", h: "How to do zone two in plain English.", d: "Conversational pace, practical checks, and what to do if you do not own a watch.", tag: "Zone two", t: "6 min", featured: true },
        { n: "02", h: "How to know how hard easy cardio should feel.", d: "The talk test, the nose-breathing myth, and the pace you can repeat tomorrow.", tag: "Effort", t: "5 min" },
        { n: "03", h: "How to do zone two without a heart rate monitor.", d: "Three field checks that keep easy work easy.", tag: "No tech", t: "5 min" },
        { n: "04", h: "How to keep easy cardio from getting boring.", d: "Routes, audio, machines, and the quiet trick of stopping before you hate it.", tag: "Habit", t: "4 min" },
        { n: "05", h: "How to add more easy cardio without stealing recovery.", d: "Increase frequency before intensity, and stop before your legs vote against you.", tag: "Progression", t: "5 min" },
        { n: "06", h: "How to use walking as real cardio.", d: "Pace, incline, duration, and why low drama still counts.", tag: "Walking", t: "5 min" },
        { n: "07", h: "How to make long easy cardio fit a real schedule.", d: "Split sessions, commute tricks, weekend anchors, and the minimum that still helps.", tag: "Schedule", t: "6 min" },
      ],
      intervals: [
        { n: "01", h: "How to add intervals without wrecking your legs.", d: "Small doses, full recoveries, and why one hard day is plenty at first.", tag: "Intervals", t: "6 min", featured: true },
        { n: "02", h: "How to do your first interval workout.", d: "A simple on-off session that teaches effort without turning into a survival test.", tag: "First session", t: "5 min" },
        { n: "03", h: "How to choose interval length.", d: "Thirty seconds, one minute, three minutes, and what each one is actually for.", tag: "Programming", t: "6 min" },
        { n: "04", h: "How to recover between intervals.", d: "Walk, coast, breathe, and wait until the next rep can be honest.", tag: "Recovery", t: "4 min" },
        { n: "05", h: "How to know when intervals are too much.", d: "Sleep, soreness, motivation, pace drop-offs, and the week-after test.", tag: "Signals", t: "5 min" },
        { n: "06", h: "How to do hill intervals without being reckless.", d: "Short climbs, controlled descents, and why downhill is the hidden cost.", tag: "Hills", t: "5 min" },
        { n: "07", h: "How to replace intervals when your body says no.", d: "Tempo, incline walks, bike work, and other ways to train hard without impact.", tag: "Substitution", t: "5 min" },
      ],
      running: [
        { n: "01", h: "How to start running again.", d: "Run-walk, patience, and the first eight weeks back.", tag: "Return", t: "7 min", featured: true },
        { n: "02", h: "How to use run-walk intervals without feeling silly.", d: "The adult way to build running capacity without pretending you are already there.", tag: "Run-walk", t: "5 min" },
        { n: "03", h: "How to choose running shoes without overthinking it.", d: "Comfort, fit, return windows, and the few claims worth ignoring.", tag: "Shoes", t: "5 min" },
        { n: "04", h: "How to increase running mileage without getting greedy.", d: "Frequency, easy pace, small jumps, and why the last good week is the clue.", tag: "Mileage", t: "6 min" },
        { n: "05", h: "How to pace your first thirty minute run.", d: "Start almost too easy, stay boring, and finish with something left.", tag: "Pacing", t: "5 min" },
        { n: "06", h: "How to run when your legs feel heavy.", d: "When to shorten, when to walk, and when the best run is tomorrow.", tag: "Fatigue", t: "4 min" },
        { n: "07", h: "How to come back after a bad run.", d: "Do not rewrite your identity from one ugly session. Shrink the next one and continue.", tag: "Reset", t: "4 min" },
      ],
      machines: [
        { n: "01", h: "How to use the treadmill without hating every minute.", d: "Incline, pace, intervals, and the settings that make indoor running less bleak.", tag: "Treadmill", t: "5 min", featured: true },
        { n: "02", h: "How to use an exercise bike for real conditioning.", d: "Seat height, cadence, resistance, and sessions that do not require pretending it is a road bike.", tag: "Bike", t: "5 min" },
        { n: "03", h: "How to row without turning it into a back problem.", d: "Legs first, arms last, rhythm before power.", tag: "Rowing", t: "6 min" },
        { n: "04", h: "How to use the elliptical without zoning out completely.", d: "Posture, resistance, cadence, and how to make low impact still meaningful.", tag: "Elliptical", t: "4 min" },
        { n: "05", h: "How to use stairs or a stepmill without overcooking it.", d: "Short blocks, posture, rails, and why this machine gets expensive fast.", tag: "Stairs", t: "5 min" },
        { n: "06", h: "How to pick a cardio machine on a crowded gym day.", d: "The quick substitution map when your first choice is taken.", tag: "Crowded gym", t: "4 min" },
        { n: "07", h: "How to make machine cardio easier on your joints.", d: "Lower impact choices, setup checks, and when discomfort should change the plan.", tag: "Low impact", t: "5 min" },
      ],
      hybrid: [
        { n: "01", h: "How to use cardio on lifting days.", d: "Lift first, condition second, and recover like the whole week matters.", tag: "Hybrid", t: "6 min", featured: true },
        { n: "02", h: "How to pair cardio and strength in the same week.", d: "Easy days, hard days, lower-body fatigue, and the calendar order that helps.", tag: "Weekly plan", t: "7 min" },
        { n: "03", h: "How to do cardio after leg day.", d: "When to walk, when to bike, and when to leave your legs alone.", tag: "Leg day", t: "5 min" },
        { n: "04", h: "How to use cardio for recovery, not punishment.", d: "The pace and duration that help you feel better instead of proving a point.", tag: "Recovery", t: "5 min" },
        { n: "05", h: "How to keep cardio while traveling.", d: "Hotel gyms, walks, stairs, jet lag, and the small session that protects the habit.", tag: "Travel", t: "5 min" },
        { n: "06", h: "How to restart cardio after getting sick.", d: "A conservative ramp back when your energy is not fully yours yet.", tag: "Return", t: "5 min" },
        { n: "07", h: "How to stop using cardio as punishment.", d: "A better way to frame conditioning when food, guilt, or missed workouts start driving.", tag: "Mindset", t: "5 min" },
      ],
    },
  },
  "running": {
    n: "19",
    title: "Running",
    label: "Run steady",
    accent: "keep running",
    image: "https://images.unsplash.com/photo-1502904550040-7534597429ae?w=2400&q=80",
    lede: "Start again, pace the first miles, build a week that does not punish your legs, and make running feel repeatable before it feels impressive.",
    meta: ["28 guides", "Run-walk", "Pacing", "5K", "Treadmill"],
    quote: "A good run leaves enough of you intact to want another one.",
    top: [
      ["01", "How to start running again.", "Run-walk, patience, and the first eight weeks back.", "Return"],
      ["02", "How to use run-walk intervals without feeling silly.", "A grown-up way to build running capacity from the floor.", "Run-walk"],
      ["03", "How to pace your first thirty minute run.", "Start almost too easy, stay boring, finish with something left.", "Pace"],
      ["04", "How to increase running mileage without getting greedy.", "Frequency, easy effort, small jumps, and the last good week.", "Mileage"],
      ["05", "How to come back after a bad run.", "Shrink the next one, keep the habit, leave identity out of it.", "Reset"],
    ],
    sections: [
      ["Start smaller than your lungs want", "The first mistake is letting motivation set the pace. Run-walk keeps the legs, lungs, and calendar in the same conversation."],
      ["Pace is a decision", "Most early running problems are pace problems wearing different clothes. Start slow enough that the final minutes still belong to you."],
      ["Mileage is earned by repeats", "A bigger week should grow from a repeatable week. Add minutes after the body has stopped treating every run like breaking news."],
      ["Surfaces change the work", "Road, trail, treadmill, hills, heat, and shoes all change the cost. The same run is not always the same load."],
    ],
    runningDesk: {
      title: "The running desk.",
      meta: "pace\nmiles",
      word: "first mile / easy pace / next week",
      checks: [
        ["First ten minutes", "Walk, jog, settle. The beginning of a run is allowed to be unimpressive."],
        ["Easy pace", "If the run is supposed to be easy, the final third should still feel owned."],
        ["Mileage", "Add the next small piece only after the current week stops feeling loud."],
        ["Bad run", "One ugly run gets a smaller next run, not a new identity."],
        ["Surface", "Road, trail, treadmill, heat, hills, and shoes all change the cost."],
      ],
      weeks: [
        { h: "Two-run restart", p: "One run-walk, one short easy run, one walk that keeps the habit warm.", d: ["Run-walk", "Easy 20", "Walk"] },
        { h: "Three-run base", p: "Two quiet runs and one longer easy day. Nothing sharp yet.", d: ["Easy", "Easy", "Long easy"] },
        { h: "First 5K shape", p: "One patient long run, one small pace touch, one easy day that protects the week.", d: ["Easy", "Pace touch", "Long easy"] },
      ],
    },
    libraryTitle: "The running library.",
    libraryMeta: "28 guides\nby running need",
    libraryTabs: [
      { id: "start", nm: "Start", ct: 7 },
      { id: "pace", nm: "Pace", ct: 7 },
      { id: "mileage", nm: "Mileage", ct: 7 },
      { id: "tools", nm: "5K & Treadmill", ct: 7 },
    ],
    library: {
      start: [
        { n: "01", h: "How to start running again.", d: "Run-walk, patience, and the first eight weeks back.", tag: "Return", t: "7 min", featured: true },
        { n: "02", h: "How to use run-walk intervals without feeling silly.", d: "The adult way to build running capacity without pretending you are already there.", tag: "Run-walk", t: "5 min" },
        { n: "03", h: "How to choose your first running route.", d: "Flat enough, close enough, boring enough to repeat.", tag: "Route", t: "4 min" },
        { n: "04", h: "How to run when you are starting from walking.", d: "Use the walk as the base, then add small running pieces without drama.", tag: "Walking base", t: "5 min" },
        { n: "05", h: "How to make your first running week realistic.", d: "Two short runs, one walk, and enough space between them to learn something.", tag: "First week", t: "5 min" },
        { n: "06", h: "How to know if you are ready to run more.", d: "Breathing, soreness, sleep, and whether the next run still feels possible.", tag: "Signals", t: "5 min" },
        { n: "07", h: "How to restart running after a long break.", d: "Keep the old identity out of the first month and let the body vote again.", tag: "Restart", t: "6 min" },
      ],
      pace: [
        { n: "01", h: "How to pace your first thirty minute run.", d: "Start almost too easy, stay boring, and finish with something left.", tag: "Pacing", t: "5 min", featured: true },
        { n: "02", h: "How to slow down without feeling like you are failing.", d: "Easy running is not a lesser version of running. It is the version that builds the base.", tag: "Easy", t: "5 min" },
        { n: "03", h: "How to use the talk test while running.", d: "A simple way to keep easy runs easy without staring at a watch.", tag: "Talk test", t: "4 min" },
        { n: "04", h: "How to stop starting every run too fast.", d: "First-mile restraint, route tricks, and the warm-up your ego does not like.", tag: "First mile", t: "5 min" },
        { n: "05", h: "How to handle hills without blowing up.", d: "Shorten the stride, protect the effort, and let pace change on purpose.", tag: "Hills", t: "5 min" },
        { n: "06", h: "How to run by effort instead of pace.", d: "Weather, sleep, terrain, and why the watch should not get the only vote.", tag: "Effort", t: "5 min" },
        { n: "07", h: "How to finish runs feeling better.", d: "Leave a clean final third, cool down simply, and write one useful note.", tag: "Finish", t: "4 min" },
      ],
      mileage: [
        { n: "01", h: "How to increase running mileage without getting greedy.", d: "Frequency, easy pace, small jumps, and why the last good week is the clue.", tag: "Mileage", t: "6 min", featured: true },
        { n: "02", h: "How to build from two runs to three.", d: "Add the third day as easy practice, not a secret race.", tag: "Frequency", t: "5 min" },
        { n: "03", h: "How to make a long run longer.", d: "Add time at the quiet end, not speed at the sharp end.", tag: "Long run", t: "5 min" },
        { n: "04", h: "How to run when your legs feel heavy.", d: "When to shorten, when to walk, and when the best run is tomorrow.", tag: "Fatigue", t: "4 min" },
        { n: "05", h: "How to come back after a bad run.", d: "Do not rewrite the week from one ugly session. Shrink the next one and continue.", tag: "Reset", t: "4 min" },
        { n: "06", h: "How to keep running while lifting.", d: "Protect leg days, keep most runs easy, and avoid stacking all the hard work.", tag: "Hybrid", t: "6 min" },
        { n: "07", h: "How to know when to cut a run short.", d: "Sharp pain, strange fatigue, bad sleep, and the useful art of stopping early.", tag: "Cut short", t: "5 min" },
      ],
      tools: [
        { n: "01", h: "How to choose running shoes without overthinking it.", d: "Comfort, fit, return windows, and the few claims worth ignoring.", tag: "Shoes", t: "5 min", featured: true },
        { n: "02", h: "How to use a treadmill without hating the run.", d: "Incline, pace, boredom, and the settings that make indoor miles less bleak.", tag: "Treadmill", t: "5 min" },
        { n: "03", h: "How to train for a first 5K without making it huge.", d: "Three simple days, one patient long run, and a race you can finish calmly.", tag: "5K", t: "6 min" },
        { n: "04", h: "How to run in warm weather without being reckless.", d: "Shade, pace, timing, water, and the humility heat demands.", tag: "Heat", t: "5 min" },
        { n: "05", h: "How to run in cold weather without overthinking gear.", d: "Layers, hands, first-mile chill, and the difference between cold and unsafe.", tag: "Cold", t: "5 min" },
        { n: "06", h: "How to carry your phone, keys, and water.", d: "Simple setups that do not turn a short run into packing for travel.", tag: "Carry", t: "4 min" },
        { n: "07", h: "How to use music or podcasts without losing the run.", d: "Attention, traffic, rhythm, and when silence is the better tool.", tag: "Audio", t: "4 min" },
      ],
    },
  },
};

const TRAIN_L3_DEEP = {
  "beginner-training": {
    deep: {
      title: "The beginner floor.",
      meta: "first weeks\nby decision",
      label: "Start here",
      word: "show up / learn / repeat",
      rules: ["Small floor", "Clear room", "Repeatable week"],
      checks: [
        ["First session", "Pick fewer movements than your confidence wants. Leave with a clean next step."],
        ["Gym nerves", "Know the first station before you walk in. The room gets easier when the first move is decided."],
        ["Soreness", "A little is information. A lot is usually a sign the first week got too loud."],
        ["Missed week", "Resume the smallest useful version instead of starting the whole identity over."],
        ["Progress", "Repeat the same simple work long enough that next week has something to answer."],
      ],
      cards: [
        { h: "First two weeks", p: "Two or three short sessions, one walk, no complicated split yet.", d: ["Full body", "Walk", "Repeat"] },
        { h: "Gym confidence", p: "Arrive with one machine, one dumbbell movement, and one exit plan.", d: ["Find", "Lift", "Leave"] },
        { h: "Habit save", p: "When the week breaks, cut the session in half and keep the thread alive.", d: ["Short", "Easy", "Done"] },
      ],
    },
    libraryTitle: "The beginner library.",
    libraryMeta: "16 guides\nby first step",
    libraryTabs: [
      { id: "start", nm: "Start", ct: 4 },
      { id: "gym", nm: "Gym", ct: 4 },
      { id: "routine", nm: "Routine", ct: 4 },
      { id: "stick", nm: "Keep Going", ct: 4 },
    ],
    library: {
      start: [
        { n: "01", h: "How to start training when you have no routine.", d: "The first three sessions, two rules, and the one thing not to buy yet.", tag: "Start", t: "6 min", featured: true },
        { n: "02", h: "How to choose your first workout without spiraling.", d: "Pick the version you can repeat before chasing the version that sounds complete.", tag: "Choice", t: "5 min" },
        { n: "03", h: "How to warm up when you are new.", d: "A short ramp that makes the first set feel less strange.", tag: "Warm-up", t: "4 min" },
        { n: "04", h: "How to know if a beginner workout is too much.", d: "Soreness, sleep, appetite, mood, and the useful next-day test.", tag: "Dose", t: "5 min" },
      ],
      gym: [
        { n: "01", h: "How to use a gym for the first time.", d: "What to do before the first set so the room stops feeling like a test.", tag: "Gym", t: "6 min", featured: true },
        { n: "02", h: "How to set up a machine without guessing.", d: "Seat height, range, pins, handles, and when to ask for help.", tag: "Machines", t: "5 min" },
        { n: "03", h: "How to choose a dumbbell weight as a beginner.", d: "Start lighter, make the reps honest, and let the second set decide.", tag: "Weight", t: "4 min" },
        { n: "04", h: "How to train when the gym is crowded.", d: "Simple swaps that keep the session moving without turning it into chaos.", tag: "Crowded", t: "5 min" },
      ],
      routine: [
        { n: "01", h: "How to train three days a week.", d: "The durable weekly floor most adults should try before adding more.", tag: "3-day", t: "6 min", featured: true },
        { n: "02", h: "How to build a beginner full-body workout.", d: "Push, pull, squat, hinge, carry, and leave.", tag: "Full-body", t: "6 min" },
        { n: "03", h: "How to write down workouts without making a spreadsheet.", d: "Lift, weight, reps, and one note. That is enough at first.", tag: "Tracking", t: "4 min" },
        { n: "04", h: "How to add weight when you are new.", d: "Small jumps, clean reps, and why more is not always the next move.", tag: "Progress", t: "5 min" },
      ],
      stick: [
        { n: "01", h: "How to keep going after the first missed week.", d: "Do not restart. Resume. That is the whole trick.", tag: "Habit", t: "5 min", featured: true },
        { n: "02", h: "How to train when motivation drops.", d: "Use the small floor, not a pep talk, to protect the habit.", tag: "Low energy", t: "4 min" },
        { n: "03", h: "How to make soreness less dramatic.", d: "Move lightly, sleep, eat enough, and stop treating soreness like proof.", tag: "Recovery", t: "5 min" },
        { n: "04", h: "How to tell when you are ready for a harder plan.", d: "The current week should feel repeatable before the next week gets bigger.", tag: "Next step", t: "5 min" },
      ],
    },
  },
  "warm-ups": {
    deep: {
      title: "Before the first set.",
      meta: "warm\nrehearse",
      label: "Start the session",
      word: "warm / rehearse / ramp",
      rules: ["Raise heat", "Match the lift", "Start lighter"],
      checks: [
        ["Temperature", "The first job is simple: make the body feel less cold and less surprised."],
        ["Pattern", "Prep should resemble the work. Squat days need squat patterns, not a random circus of drills."],
        ["Ramp sets", "Lighter sets are information. They show whether the first working set belongs today."],
        ["Joint signal", "Stiff is different from sharp. Sharp, worsening, or strange discomfort changes the plan."],
        ["Stop point", "The warm-up ends when the first real set feels approachable, not when every possible drill is done."],
      ],
      cards: [
        { h: "Five-minute floor", p: "Raise heat, rehearse the first lift, take one lighter set, begin.", d: ["Heat", "Pattern", "Set"] },
        { h: "Strength ramp", p: "Use the lift itself to climb toward working weight without wasting the session.", d: ["Empty", "Light", "Work"] },
        { h: "Stiff-day version", p: "Add a little range work, keep loads honest, and let the first sets vote.", d: ["Move", "Check", "Lift"] },
      ],
    },
    libraryTitle: "The warm-up library.",
    libraryMeta: "16 guides\nby prep need",
    libraryTabs: [
      { id: "start", nm: "Start", ct: 4 },
      { id: "lift", nm: "Lift Prep", ct: 4 },
      { id: "mobility", nm: "Mobility", ct: 4 },
      { id: "short", nm: "Short", ct: 4 },
    ],
    library: {
      start: [
        { n: "01", h: "How to warm up before lifting.", d: "Raise temperature, rehearse the pattern, then stop before prep becomes the session.", tag: "Lift", t: "5 min", featured: true },
        { n: "02", h: "How long a warm-up should take.", d: "Five, ten, fifteen minutes, and when more is just delay.", tag: "Timing", t: "4 min" },
        { n: "03", h: "How to know if you are ready for the first hard set.", d: "Breath, range, speed, and whether the movement feels owned.", tag: "Ready", t: "5 min" },
        { n: "04", h: "How to stop overcomplicating warm-ups.", d: "Pick the drills that change the session and leave the rest alone.", tag: "Simple", t: "4 min" },
      ],
      lift: [
        { n: "01", h: "How to use ramp sets.", d: "The simple loading ladder that makes the first work set feel less sudden.", tag: "Ramp", t: "5 min", featured: true },
        { n: "02", h: "How to warm up for squats.", d: "Hips, ankles, bracing, and ramp sets that lead into the first work set.", tag: "Squat", t: "5 min" },
        { n: "03", h: "How to warm up for deadlifts.", d: "Hinge pattern, hamstrings, lats, slack pull, and patient loading.", tag: "Deadlift", t: "5 min" },
        { n: "04", h: "How to warm up for bench press.", d: "Shoulders, upper back, grip, empty bar, and the first honest press.", tag: "Bench", t: "5 min" },
      ],
      mobility: [
        { n: "01", h: "How to use mobility without making it a whole workout.", d: "Range work that serves the lift instead of eating the session.", tag: "Mobility", t: "5 min", featured: true },
        { n: "02", h: "How to open stiff hips before training.", d: "A few useful positions before squats, hinges, and lunges.", tag: "Hips", t: "4 min" },
        { n: "03", h: "How to prep shoulders before upper-body work.", d: "Scapulae, range, light pulls, and pressing that starts quieter.", tag: "Shoulders", t: "4 min" },
        { n: "04", h: "How to warm up ankles for squats and running.", d: "Calves, range, foot pressure, and what actually changes the first reps.", tag: "Ankles", t: "4 min" },
      ],
      short: [
        { n: "01", h: "How to warm up when you are short on time.", d: "The smallest useful version before a busy-day lift.", tag: "Short", t: "4 min", featured: true },
        { n: "02", h: "How to warm up at home.", d: "Floor space, bodyweight patterns, and a first set that does not surprise you.", tag: "Home", t: "4 min" },
        { n: "03", h: "How to warm up in a crowded gym.", d: "Keep the prep close to your station and stop hunting for perfect space.", tag: "Crowded", t: "4 min" },
        { n: "04", h: "How to skip the wrong warm-up drills.", d: "If it does not change the work, it does not need a permanent place.", tag: "Cut", t: "3 min" },
      ],
    },
  },
  "full-body-workouts": {
    deep: {
      title: "Build the week.",
      meta: "three days\nrepeatable",
      label: "Make the week work",
      word: "Day A / Day B / Day C",
      rules: ["Cover the body", "Repeat the week", "Leave recovery"],
      checks: [
        ["Pattern balance", "The day should cover enough of the body without pretending every muscle needs its own speech."],
        ["Exercise order", "Harder, more technical work belongs before fatigue starts making decisions."],
        ["Session length", "A full-body workout should stay useful under real time limits."],
        ["Recovery spacing", "One full-body day changes the next. Leave room for the week to repeat."],
        ["Progression", "Progress the main patterns, not every accessory just because it has a line in the notebook."],
      ],
      cards: [
        { h: "Three-day base", p: "A durable weekly floor built around repeated movement patterns.", d: ["Day A", "Day B", "Day C"] },
        { h: "Thirty-minute version", p: "Two pairings, one carry or core slot, and a clean exit.", d: ["Pair", "Pair", "Carry"] },
        { h: "Beginner version", p: "Machines and dumbbells can teach the patterns before the week gets complicated.", d: ["Learn", "Repeat", "Add"] },
      ],
    },
    libraryTitle: "The full-body library.",
    libraryMeta: "20 guides\nby session shape",
    libraryTabs: [
      { id: "build", nm: "Build", ct: 5 },
      { id: "three", nm: "3-Day", ct: 5 },
      { id: "short", nm: "Short", ct: 5 },
      { id: "progress", nm: "Progress", ct: 5 },
    ],
    library: {
      build: [
        { n: "01", h: "How to build a full-body workout.", d: "Push, pull, squat, hinge, carry, and enough restraint to repeat it.", tag: "Template", t: "6 min", featured: true },
        { n: "02", h: "How to choose exercises for a full-body day.", d: "Patterns before favorites, substitutions before excuses.", tag: "Exercises", t: "6 min" },
        { n: "03", h: "How to order a full-body workout.", d: "Technical lifts, heavier work, accessories, and what can wait.", tag: "Order", t: "5 min" },
        { n: "04", h: "How many exercises a full-body workout needs.", d: "The useful range before the session becomes a catalog.", tag: "Count", t: "4 min" },
        { n: "05", h: "How to add core work to full-body training.", d: "Carry, brace, rotate, resist, and skip the filler finish.", tag: "Core", t: "4 min" },
      ],
      three: [
        { n: "01", h: "How to train full body three days a week.", d: "A simple week that keeps strength, practice, and recovery in the same room.", tag: "3-day", t: "6 min", featured: true },
        { n: "02", h: "How to build Day A and Day B workouts.", d: "Alternate emphasis without turning the plan into a maze.", tag: "A/B", t: "5 min" },
        { n: "03", h: "How to train Monday Wednesday Friday.", d: "A plain rhythm that still survives normal life.", tag: "Schedule", t: "4 min" },
        { n: "04", h: "How to fit cardio around full-body training.", d: "Easy work, hard work, legs, and where conditioning belongs.", tag: "Cardio", t: "5 min" },
        { n: "05", h: "How to recover between full-body workouts.", d: "Spacing, soreness, sleep, and why every day cannot be the hard day.", tag: "Recovery", t: "5 min" },
      ],
      short: [
        { n: "01", h: "How to make a full-body workout shorter.", d: "Pair movements, cut filler, and keep the parts that change the week.", tag: "Efficient", t: "5 min", featured: true },
        { n: "02", h: "How to build a 30-minute full-body workout.", d: "A compact template for busy days that still trains the patterns.", tag: "30 min", t: "5 min" },
        { n: "03", h: "How to use supersets without making a mess.", d: "Pair non-competing movements and keep the hard lifts honest.", tag: "Supersets", t: "5 min" },
        { n: "04", h: "How to train full body with dumbbells.", d: "Goblet, hinge, press, row, carry, and one pair used well.", tag: "Dumbbells", t: "5 min" },
        { n: "05", h: "How to train full body at home.", d: "Floor, chair, dumbbells or bodyweight, and a simple session spine.", tag: "Home", t: "5 min" },
      ],
      progress: [
        { n: "01", h: "How to progress a full-body workout.", d: "Add reps, load, sets, or control without changing everything at once.", tag: "Progress", t: "6 min", featured: true },
        { n: "02", h: "How to know when full-body training is enough.", d: "Strength, energy, soreness, and the week-after test.", tag: "Signals", t: "5 min" },
        { n: "03", h: "How to move from full body to upper/lower.", d: "Change the split when the week earns more focus.", tag: "Next split", t: "5 min" },
        { n: "04", h: "How to deload full-body training.", d: "Reduce enough stress to recover without losing the routine.", tag: "Deload", t: "5 min" },
        { n: "05", h: "How to keep full-body workouts from getting boring.", d: "Small variations that keep the plan alive without hiding the main work.", tag: "Variety", t: "4 min" },
      ],
    },
  },
  "push-workouts": {
    deep: {
      title: "Build the push day.",
      meta: "press\nsupport",
      label: "Pressing order",
      word: "press / angle / recover",
      rules: ["Big press first", "Angles matter", "Elbows count"],
      checks: [
        ["Main press", "Choose the press that matches your body and equipment before adding variations."],
        ["Shoulder angle", "Incline, flat, overhead, and push-up positions all change the cost."],
        ["Triceps slot", "Smaller work should support the press, not turn the end of the session into a dare."],
        ["Pull balance", "Push days still need enough upper-back work across the week to keep shoulders honest."],
        ["Recovery", "Elbows and shoulders are part of the scoreboard."],
      ],
      cards: [
        { h: "Simple push day", p: "Main press, second angle, shoulder slot, triceps, leave.", d: ["Press", "Angle", "Finish"] },
        { h: "Home push day", p: "Push-ups, floor press, pike press, and a triceps slot that fits.", d: ["Floor", "Push-up", "Triceps"] },
        { h: "Shoulder-kind day", p: "Use range, grip, and machine support when joints ask for a calmer version.", d: ["Range", "Grip", "Support"] },
      ],
    },
    libraryTitle: "The push library.",
    libraryMeta: "16 guides\nby push need",
    libraryTabs: [
      { id: "build", nm: "Build", ct: 4 },
      { id: "chest", nm: "Chest", ct: 4 },
      { id: "shoulders", nm: "Shoulders", ct: 4 },
      { id: "finish", nm: "Finish", ct: 4 },
    ],
    library: {
      build: [
        { n: "01", h: "How to build a push workout.", d: "Press, incline, shoulder work, triceps, and enough restraint to recover.", tag: "Template", t: "6 min", featured: true },
        { n: "02", h: "How to choose your main press.", d: "Bench, dumbbells, machine, push-ups, and the version you can repeat.", tag: "Press", t: "5 min" },
        { n: "03", h: "How many pushing exercises are enough.", d: "The useful count before chest, shoulders, and elbows all get taxed twice.", tag: "Volume", t: "5 min" },
        { n: "04", h: "How to order a push day.", d: "Heavy press, second angle, shoulder slot, triceps, and stop.", tag: "Order", t: "5 min" },
      ],
      chest: [
        { n: "01", h: "How to choose between bench, dumbbell press, and push-ups.", d: "Match the press to equipment, shoulders, and skill.", tag: "Press", t: "6 min", featured: true },
        { n: "02", h: "How to use incline press well.", d: "Angle, grip, range, and shoulder position.", tag: "Incline", t: "5 min" },
        { n: "03", h: "How to make push-ups harder without getting sloppy.", d: "Incline, decline, tempo, pauses, and rep quality.", tag: "Push-up", t: "5 min" },
        { n: "04", h: "How to train chest without chasing soreness.", d: "Tension, range, repeatability, and why soreness is not the plan.", tag: "Chest", t: "5 min" },
      ],
      shoulders: [
        { n: "01", h: "How to train shoulders without irritating them.", d: "Range, angle, load, and the difference between work and warning.", tag: "Shoulders", t: "6 min", featured: true },
        { n: "02", h: "How to overhead press without arching.", d: "Ribs, glutes, bar path, and a finish that stays stacked.", tag: "Press", t: "5 min" },
        { n: "03", h: "How to use lateral raises well.", d: "Light load, clean path, and why cheating changes the target.", tag: "Raises", t: "4 min" },
        { n: "04", h: "How to press when shoulders feel cranky.", d: "Change range, angle, grip, or exercise before forcing the rep.", tag: "Swap", t: "5 min" },
      ],
      finish: [
        { n: "01", h: "How to add triceps work without wasting the day.", d: "Pick the slot that helps pressing instead of just adding burn.", tag: "Triceps", t: "5 min", featured: true },
        { n: "02", h: "How to use dips without annoying your shoulders.", d: "Range, torso angle, assistance, and when dips are not the right tool.", tag: "Dips", t: "5 min" },
        { n: "03", h: "How to recover after a hard push day.", d: "Soreness, elbows, shoulders, and when the next press should wait.", tag: "Recovery", t: "5 min" },
        { n: "04", h: "How to pair push and pull days.", d: "Pressing, rows, shoulder balance, and the week order that helps.", tag: "Weekly plan", t: "5 min" },
      ],
    },
  },
  "pull-workouts": {
    deep: {
      title: "Build the pull day.",
      meta: "rows\nhinges",
      label: "Pulling order",
      word: "row / pull / hinge",
      rules: ["Finish the row", "Own the shoulder", "Respect hinges"],
      checks: [
        ["Row choice", "A good row lets the back do the work without the lower back stealing the session."],
        ["Vertical pull", "Pulldowns and pull-ups need patience with shoulder blades, grip, and range."],
        ["Hinge cost", "Deadlifts and RDLs can belong here, but they change the recovery math."],
        ["Rear delts", "Small upper-back work often keeps pressing and pulling cleaner across the week."],
        ["Arm work", "Curls are useful when they fit the day, not when they become the reason the day exists."],
      ],
      cards: [
        { h: "Simple pull day", p: "Row, vertical pull, hinge or back extension, rear delts, curls.", d: ["Row", "Pull", "Finish"] },
        { h: "Back-friendly day", p: "Chest-supported rows and cables when the low back needs a quieter role.", d: ["Support", "Cable", "Control"] },
        { h: "Pull-up path", p: "Pulldowns, negatives, assisted reps, and enough grip work to earn the first rep.", d: ["Pulldown", "Negative", "Rep"] },
      ],
    },
    libraryTitle: "The pull library.",
    libraryMeta: "16 guides\nby pull need",
    libraryTabs: [
      { id: "build", nm: "Build", ct: 4 },
      { id: "rows", nm: "Rows", ct: 4 },
      { id: "vertical", nm: "Pull-Ups", ct: 4 },
      { id: "finish", nm: "Finish", ct: 4 },
    ],
    library: {
      build: [
        { n: "01", h: "How to build a pull workout.", d: "Row, vertical pull, hinge, rear delts, curls, and a reason for each slot.", tag: "Template", t: "6 min", featured: true },
        { n: "02", h: "How to order a pull day.", d: "Heavy pulls, rows, vertical work, hinges, and smaller finishers.", tag: "Order", t: "5 min" },
        { n: "03", h: "How many back exercises are enough.", d: "The useful range before every row becomes the same row.", tag: "Volume", t: "5 min" },
        { n: "04", h: "How to hinge on pull day without wrecking it.", d: "Deadlifts, RDLs, back extensions, and where they belong in the week.", tag: "Hinge", t: "6 min" },
      ],
      rows: [
        { n: "01", h: "How to choose rows for your back day.", d: "Chest-supported, cable, dumbbell, barbell, and the torso cost of each.", tag: "Rows", t: "6 min", featured: true },
        { n: "02", h: "How to row without rounding your back.", d: "Torso position, reach, pause, and a pull that finishes.", tag: "Form", t: "5 min" },
        { n: "03", h: "How to use chest-supported rows.", d: "Setup, angle, range, and why support can make the back work harder.", tag: "Supported", t: "5 min" },
        { n: "04", h: "How to make cable rows count.", d: "Seat setup, reach, ribs, and a finish that does not turn into leaning.", tag: "Cable", t: "5 min" },
      ],
      vertical: [
        { n: "01", h: "How to train for your first pull-up.", d: "Negatives, bands, pulldowns, grip, and enough patience to earn the rep.", tag: "Pull-up", t: "7 min", featured: true },
        { n: "02", h: "How to use lat pulldowns well.", d: "Grip, ribs, shoulder blades, and a bar path that finds the lats.", tag: "Pulldown", t: "5 min" },
        { n: "03", h: "How to use assisted pull-ups.", d: "Assistance that teaches the rep instead of hiding from it.", tag: "Assisted", t: "5 min" },
        { n: "04", h: "How to build grip for pulling.", d: "Carries, hangs, straps, and when grip should stop limiting the back.", tag: "Grip", t: "5 min" },
      ],
      finish: [
        { n: "01", h: "How to finish a pull day without junk volume.", d: "Curls, rear delts, carries, and when the useful work is already done.", tag: "Finish", t: "5 min", featured: true },
        { n: "02", h: "How to train rear delts without guessing.", d: "Angle, light load, control, and why the upper back usually needs this.", tag: "Rear delts", t: "4 min" },
        { n: "03", h: "How to add curls to pull day.", d: "Pick the curl that fits the elbow and leave room for the main work.", tag: "Curls", t: "4 min" },
        { n: "04", h: "How to recover after a hard pull day.", d: "Low back, grip, elbows, and the next session you still need to do.", tag: "Recovery", t: "5 min" },
      ],
    },
  },
  "strength-training": {
    deep: {
      title: "Strength, repeated.",
      meta: "load\nrecovery",
      label: "Strength rules",
      word: "lift / repeat / recover",
      rules: ["Same lifts", "Hard clean sets", "Enough rest"],
      checks: [
        ["Progression", "A stronger week usually starts with the same lift performed a little better."],
        ["Volume", "Enough sets should move the lift forward without making the next session worse."],
        ["Rest", "Heavy work needs time between sets. Being out of breath is not the same as being stronger."],
        ["Failure", "Save true failure for small isolation work, not the lifts that ask the whole body to cooperate."],
        ["Signals", "Numbers matter, but sleep, appetite, joints, and enthusiasm tell you whether the dose is landing."],
      ],
      cards: [
        { h: "Simple strength week", p: "Three main sessions, repeated lifts, and enough room to recover.", d: ["Squat", "Press", "Pull"] },
        { h: "Busy-week floor", p: "Two full-body days that keep the skill and strength thread alive.", d: ["Full", "Rest", "Full"] },
        { h: "Hard day rule", p: "Make the hard work clean, then stop before the week starts charging interest.", d: ["Warm", "Work", "Stop"] },
      ],
    },
    libraryTitle: "The strength library.",
    libraryMeta: "16 guides\nby strength need",
    libraryTabs: [
      { id: "start", nm: "Start", ct: 4 },
      { id: "progress", nm: "Progress", ct: 4 },
      { id: "lifts", nm: "Main Lifts", ct: 4 },
      { id: "recover", nm: "Recover", ct: 4 },
    ],
    library: {
      start: [
        { n: "01", h: "How to get stronger without changing programs every week.", d: "Repeat lifts long enough to learn from them.", tag: "Progress", t: "6 min", featured: true },
        { n: "02", h: "How to start strength training without maxing out.", d: "Build the first month around clean sets, not proof.", tag: "Start", t: "5 min" },
        { n: "03", h: "How to choose the main lifts for your week.", d: "Squat, hinge, push, pull, carry, and the substitutions that count.", tag: "Lifts", t: "6 min" },
        { n: "04", h: "How to track strength training simply.", d: "Lift, load, reps, and one note that helps next week.", tag: "Tracking", t: "4 min" },
      ],
      progress: [
        { n: "01", h: "How to add weight without rushing.", d: "Small jumps, better reps, and the quiet power of one more clean set.", tag: "Load", t: "5 min", featured: true },
        { n: "02", h: "How many sets are enough.", d: "The useful minimum before volume turns into recovery debt.", tag: "Volume", t: "6 min" },
        { n: "03", h: "How to use reps in reserve.", d: "A practical way to work hard without turning every set into a test.", tag: "Effort", t: "5 min" },
        { n: "04", h: "How to break a strength plateau without panic.", d: "Check sleep, sets, technique, and load jumps before changing everything.", tag: "Plateau", t: "6 min" },
      ],
      lifts: [
        { n: "01", h: "How to squat for strength.", d: "Stance, brace, depth, and a repeatable setup.", tag: "Squat", t: "6 min", featured: true },
        { n: "02", h: "How to deadlift without yanking the bar.", d: "Set the back, pull the slack, push the floor.", tag: "Deadlift", t: "6 min" },
        { n: "03", h: "How to bench with your shoulders still liking you.", d: "Setup, contact points, grip, and the spotter conversation.", tag: "Bench", t: "6 min" },
        { n: "04", h: "How to row for strength instead of motion.", d: "Torso position, reach, pause, and a pull that finishes.", tag: "Row", t: "5 min" },
      ],
      recover: [
        { n: "01", h: "How long to rest between heavy sets.", d: "The difference between conditioning fatigue and strength work.", tag: "Rest", t: "5 min", featured: true },
        { n: "02", h: "How to deload strength training.", d: "Cut enough stress to recover without making the week disappear.", tag: "Deload", t: "5 min" },
        { n: "03", h: "How to lift when you slept badly.", d: "Keep the pattern, lower the ambition, and protect the next session.", tag: "Sleep", t: "4 min" },
        { n: "04", h: "How to pair strength work with cardio.", d: "Place easy work where it helps and hard work where it costs least.", tag: "Hybrid", t: "6 min" },
      ],
    },
  },
  "workout-splits": {
    deep: {
      title: "Choose the week.",
      meta: "days\nrecovery",
      label: "Weekly shape",
      word: "days / muscles / missed sessions",
      rules: ["Real days first", "Recoverable order", "Easy to resume"],
      checks: [
        ["Training days", "The right split starts with the number of days you can keep on a normal week."],
        ["Muscle overlap", "A clever split still fails if every hard lower-body choice lands too close together."],
        ["Missed sessions", "The week should bend without making one missed day feel like a collapse."],
        ["Exercise count", "A split is not an invitation to add every movement you have ever liked."],
        ["Upgrade timing", "Move from three to four days only after three days has become boringly consistent."],
      ],
      cards: [
        { h: "Three-day base", p: "Full-body work for adults who need the week to stay simple.", d: ["Full", "Full", "Full"] },
        { h: "Four-day middle", p: "Upper/lower gives the week more focus without asking for a second life.", d: ["Upper", "Lower", "Upper", "Lower"] },
        { h: "PPL reality check", p: "Push/pull/legs works best when the recovery math is honest.", d: ["Push", "Pull", "Legs"] },
      ],
    },
    libraryTitle: "The split library.",
    libraryMeta: "18 guides\nby weekly shape",
    libraryTabs: [
      { id: "choose", nm: "Choose", ct: 5 },
      { id: "three", nm: "3-Day", ct: 4 },
      { id: "upper", nm: "Upper/Lower", ct: 4 },
      { id: "ppl", nm: "PPL", ct: 5 },
    ],
    library: {
      choose: [
        { n: "01", h: "How to choose a workout split.", d: "Match the split to your week before matching it to your ambition.", tag: "Start", t: "6 min", featured: true },
        { n: "02", h: "How to know if your split is too complicated.", d: "The missed-day, recovery, and exercise-count tests.", tag: "Audit", t: "5 min" },
        { n: "03", h: "How many training days are enough.", d: "Two, three, four, and why more days are not automatically more results.", tag: "Frequency", t: "5 min" },
        { n: "04", h: "How to change splits without losing momentum.", d: "Keep the core lifts, change the calendar, and give it a month.", tag: "Switch", t: "5 min" },
        { n: "05", h: "How to deload without losing momentum.", d: "The planned easy week that keeps the next hard week possible.", tag: "Deload", t: "5 min" },
      ],
      three: [
        { n: "01", h: "How to build a three-day split.", d: "The week for people with jobs, families, errands, and a spine.", tag: "3-day", t: "6 min", featured: true },
        { n: "02", h: "How to run three full-body days.", d: "Repeat patterns, rotate emphasis, and leave room between sessions.", tag: "Full-body", t: "6 min" },
        { n: "03", h: "How to train Monday Wednesday Friday.", d: "A simple rhythm that still handles missed days.", tag: "Schedule", t: "4 min" },
        { n: "04", h: "How to make two days work when three will not.", d: "The smallest split that still keeps strength alive.", tag: "2-day", t: "5 min" },
      ],
      upper: [
        { n: "01", h: "How to use an upper/lower split.", d: "A good middle ground when full body feels too broad.", tag: "Upper/lower", t: "6 min", featured: true },
        { n: "02", h: "How to order upper and lower days.", d: "Protect heavy legs, hard pulls, and the days that need more rest.", tag: "Order", t: "5 min" },
        { n: "03", h: "How to build an upper day.", d: "Press, pull, accessory work, and enough restraint to recover.", tag: "Upper", t: "5 min" },
        { n: "04", h: "How to build a lower day.", d: "Squat, hinge, single-leg work, carries, and no filler just because the day has a name.", tag: "Lower", t: "6 min" },
      ],
      ppl: [
        { n: "01", h: "How to run push/pull/legs.", d: "Why six days looks clean on paper and three days often works better.", tag: "PPL", t: "6 min", featured: true },
        { n: "02", h: "How to build a push day.", d: "Pressing, shoulders, triceps, and the shoulder-friendly order.", tag: "Push", t: "5 min" },
        { n: "03", h: "How to build a pull day.", d: "Rows, pulldowns, hinges, curls, and a back day that has a point.", tag: "Pull", t: "5 min" },
        { n: "04", h: "How to build a leg day.", d: "Squat, hinge, single-leg, calves if you must, and recovery that matters.", tag: "Legs", t: "6 min" },
        { n: "05", h: "How to recover on a six-day split.", d: "Sleep, food, exercise restraint, and why six days is not a personality test.", tag: "Recovery", t: "5 min" },
      ],
    },
  },
  "exercise-form": {
    deep: {
      title: "The rep room.",
      meta: "setup\ncues",
      label: "Rep checks",
      word: "setup / brace / repeat",
      rules: ["Set first", "One cue", "Pain changes it"],
      checks: [
        ["Setup", "Feet, grip, bench, bar path, and brace decide more reps than midair correction."],
        ["Tempo", "Control is not slow for its own sake. It is the part that proves the rep belongs to you."],
        ["Range", "Use a range you can own repeatedly, then earn more range with control."],
        ["Video", "Film one working set from a useful angle, pick one cue, and let the rest wait."],
        ["Pain", "Sharp, worsening, or strange pain changes the assignment immediately."],
      ],
      cards: [
        { h: "Self-coach loop", p: "Film one set, pick one cue, repeat it for a week.", d: ["Film", "Cue", "Repeat"] },
        { h: "Big lift check", p: "Set the stance, brace, first rep, and stop the set before form turns into guessing.", d: ["Set", "Brace", "Stop"] },
        { h: "Substitution rule", p: "Swap the movement when the joint keeps arguing, not after the week is ruined.", d: ["Notice", "Swap", "Train"] },
      ],
    },
    libraryTitle: "The form library.",
    libraryMeta: "24 guides\nby movement",
    libraryTabs: [
      { id: "basics", nm: "Basics", ct: 6 },
      { id: "lower", nm: "Lower", ct: 6 },
      { id: "upper", nm: "Upper", ct: 6 },
      { id: "fixes", nm: "Fixes", ct: 6 },
    ],
    library: {
      basics: [
        { n: "01", h: "How to make any lift easier to coach yourself.", d: "Film one set, pick one cue, ignore everything else for a week.", tag: "Self-check", t: "6 min", featured: true },
        { n: "02", h: "How to brace before a lift.", d: "Ribs, breath, pressure, and a torso that stays useful.", tag: "Brace", t: "5 min" },
        { n: "03", h: "How to use tempo without making reps weird.", d: "Control the lowering, own the pause, and move with intent.", tag: "Tempo", t: "4 min" },
        { n: "04", h: "How to choose range of motion.", d: "Use the range that is strong, repeatable, and honest today.", tag: "Range", t: "5 min" },
        { n: "05", h: "How to warm up a movement pattern.", d: "Ramp the exact pattern before loading it hard.", tag: "Warm-up", t: "4 min" },
        { n: "06", h: "How to know when form is good enough.", d: "Repeatable, controlled, pain-free, and close enough to progress.", tag: "Good enough", t: "5 min" },
      ],
      lower: [
        { n: "01", h: "How to squat without guessing at depth.", d: "Feet, knees, hips, brace, and the camera angle that helps.", tag: "Squat", t: "6 min", featured: true },
        { n: "02", h: "How to deadlift without yanking the bar.", d: "Set the back, pull the slack, push the floor.", tag: "Deadlift", t: "6 min" },
        { n: "03", h: "How to hinge without turning it into a squat.", d: "Hips back, soft knees, ribs down, and hamstrings that actually load.", tag: "Hinge", t: "5 min" },
        { n: "04", h: "How to lunge without wobbling through every rep.", d: "Stride, front foot pressure, torso position, and a calmer tempo.", tag: "Lunge", t: "5 min" },
        { n: "05", h: "How to do split squats without hating them.", d: "Set the feet once, own the bottom, and use support when it helps.", tag: "Split squat", t: "5 min" },
        { n: "06", h: "How to use leg machines well.", d: "Seat setup, range, foot position, and controlled reps that count.", tag: "Machines", t: "5 min" },
      ],
      upper: [
        { n: "01", h: "How to bench with your shoulders still liking you.", d: "Setup, contact points, grip, and the spotter conversation.", tag: "Bench", t: "6 min", featured: true },
        { n: "02", h: "How to row without rounding your back.", d: "Torso position, reach, pause, and a pull that finishes.", tag: "Row", t: "5 min" },
        { n: "03", h: "How to overhead press without turning it into a backbend.", d: "Glutes, ribs, bar path, and a finish you can own.", tag: "Press", t: "5 min" },
        { n: "04", h: "How to do push-ups with cleaner reps.", d: "Hands, ribs, depth, and the incline that makes good reps possible.", tag: "Push-up", t: "4 min" },
        { n: "05", h: "How to pull down without shrugging every rep.", d: "Ribs, shoulder blades, grip, and a bar path that finds the lats.", tag: "Pulldown", t: "5 min" },
        { n: "06", h: "How to curl without turning it into a whole-body event.", d: "Shoulders quiet, elbow position steady, and the weight honest.", tag: "Curl", t: "4 min" },
      ],
      fixes: [
        { n: "01", h: "How to fix a lift that feels awkward.", d: "Reduce load, shorten the set, simplify the cue, and try again.", tag: "Fix", t: "5 min", featured: true },
        { n: "02", h: "How to choose a substitute exercise.", d: "Keep the pattern, lower the irritation, and respect the goal.", tag: "Swap", t: "5 min" },
        { n: "03", h: "How to film your lifts without overthinking it.", d: "One angle, one set, one useful note.", tag: "Video", t: "4 min" },
        { n: "04", h: "How to use a mirror without chasing the mirror.", d: "What the mirror can help with and what it cannot tell you.", tag: "Mirror", t: "4 min" },
        { n: "05", h: "How to stop adding cues mid-set.", d: "Think before the set, lift during the set, review after the set.", tag: "Cues", t: "4 min" },
        { n: "06", h: "How to know when to ask a coach.", d: "Pain, fear, repeated confusion, or a lift that keeps getting worse.", tag: "Coach", t: "5 min" },
      ],
    },
  },
  "dumbbell-workouts": {
    deep: {
      title: "One pair, real work.",
      meta: "tool\nsession",
      label: "Dumbbell plan",
      word: "pair / one / bench / floor",
      rules: ["Use the constraint", "Train the patterns", "Progress honestly"],
      checks: [
        ["One pair", "A limited rack can still train hard if the movement choices stop apologizing."],
        ["Single dumbbell", "Offset loading is not a downgrade. It asks the trunk to participate."],
        ["Legs", "Goblets, hinges, split squats, lunges, and carries cover more than people expect."],
        ["Progression", "Tempo, range, density, and unilateral work often come before buying heavier bells."],
        ["Travel", "The best hotel workout uses the rack you actually find, not the one you wished for."],
      ],
      cards: [
        { h: "Home full-body", p: "Five slots, three sets, one pair, and no bench required.", d: ["Squat", "Press", "Row"] },
        { h: "Hotel rack", p: "Pick the heaviest useful pair, then build around unilateral work.", d: ["Split", "Press", "Carry"] },
        { h: "Too-light fix", p: "Slow the rep, extend the range, shorten the rest, or move one side at a time.", d: ["Tempo", "Range", "Density"] },
      ],
    },
    libraryTitle: "The dumbbell library.",
    libraryMeta: "18 guides\nby dumbbell need",
    libraryTabs: [
      { id: "full", nm: "Full Body", ct: 5 },
      { id: "home", nm: "Home", ct: 4 },
      { id: "legs", nm: "Legs", ct: 5 },
      { id: "progress", nm: "Progress", ct: 4 },
    ],
    library: {
      full: [
        { n: "01", h: "How to build a full-body dumbbell workout.", d: "Five slots, three sets, no bench required.", tag: "Full-body", t: "6 min", featured: true },
        { n: "02", h: "How to make dumbbells feel heavy enough.", d: "Tempo, pauses, range, and single-side work before buying more.", tag: "Load", t: "5 min" },
        { n: "03", h: "How to warm up for a dumbbell session.", d: "A short ramp that uses the same movements before the work starts.", tag: "Warm-up", t: "4 min" },
        { n: "04", h: "How to build a 30-minute dumbbell workout.", d: "Three pairs of movements, short rests, and no wasted setup.", tag: "30 min", t: "5 min" },
        { n: "05", h: "How to choose dumbbell weights for a session.", d: "Let the first working set decide whether the weight belongs.", tag: "Weight", t: "5 min" },
      ],
      home: [
        { n: "01", h: "How to do a home dumbbell workout.", d: "Floor, chair, one pair, and a session that still covers the body.", tag: "Home", t: "5 min", featured: true },
        { n: "02", h: "How to do a hotel gym workout.", d: "Use the rack you find, keep the order simple, and leave with the habit intact.", tag: "Travel", t: "5 min" },
        { n: "03", h: "How to use one dumbbell when one is all you have.", d: "Offset loading, carries, rows, and the humility of asymmetry.", tag: "One DB", t: "5 min" },
        { n: "04", h: "How to train without a bench.", d: "Floor presses, supported rows, split squats, hinges, and carries.", tag: "No bench", t: "5 min" },
      ],
      legs: [
        { n: "01", h: "How to train legs with dumbbells.", d: "Goblets, lunges, hinges, split squats, and carries.", tag: "Legs", t: "6 min", featured: true },
        { n: "02", h: "How to do goblet squats well.", d: "Hold, brace, depth, and a weight that does not pull you forward.", tag: "Goblet", t: "5 min" },
        { n: "03", h: "How to do dumbbell Romanian deadlifts.", d: "Hinge, reach, hamstrings, and a back that stays quiet.", tag: "Hinge", t: "5 min" },
        { n: "04", h: "How to do dumbbell split squats.", d: "Foot position, support, range, and the slow rep that makes them count.", tag: "Split squat", t: "5 min" },
        { n: "05", h: "How to use carries in a dumbbell workout.", d: "Grip, ribs, pace, distance, and why carries finish the session well.", tag: "Carry", t: "4 min" },
      ],
      progress: [
        { n: "01", h: "How to progress when dumbbells get too light.", d: "Tempo, range, single-leg work, density, and fewer excuses.", tag: "Progress", t: "6 min", featured: true },
        { n: "02", h: "How to use tempo with dumbbells.", d: "Slower lowering, clean pauses, and tension that does not require more load.", tag: "Tempo", t: "4 min" },
        { n: "03", h: "How to pair dumbbells with bodyweight work.", d: "Push-ups, rows, squats, hinges, and the simple session math.", tag: "Bodyweight", t: "5 min" },
        { n: "04", h: "How to know when to buy heavier dumbbells.", d: "When tempo, range, reps, and unilateral work have stopped being enough.", tag: "Upgrade", t: "5 min" },
      ],
    },
  },
};

Object.keys(TRAIN_L3_DEEP).forEach((key) => {
  Object.assign(TRAIN_L3[key], TRAIN_L3_DEEP[key]);
});

const pageKey = window.TRAIN_L3_PAGE || "beginner-training";
const PAGE = TRAIN_L3[pageKey] || TRAIN_L3["beginner-training"];
const T_BASE = `/en/fitness/train/${pageKey}/`;
const T_SLUG = (title) => window.howToArticleSlug(T_BASE, title);
const useTArticles = window.useHubArticles;
const HAS_MIDDLE = Boolean(PAGE.engine || PAGE.runningDesk || PAGE.deep);

function withFallbackArticle(article, fallback) {
  if (article && article.status === "published") return article;
  return {
    ...(article || {}),
    status: "stub",
    title: fallback?.h || fallback?.[1] || article?.title || null,
    meta_description: fallback?.d || fallback?.[2] || article?.meta_description || "",
  };
}

function EmLastWord({ text }) {
  const words = text.split(" ");
  if (words.length === 1) return <span>{text}</span>;
  return <React.Fragment>{words.slice(0, -1).join(" ")} <span>{words.slice(-1)}</span></React.Fragment>;
}

function TrainL3Header() {
  return (
    <header className="header">
      <div className="header-inner">
        <a className="logo" href="/en/">
          How To<span className="ampersand">:</span> <span style={{fontStyle:"italic"}}>Health</span> <span className="amp-roman">&amp;</span> <span style={{fontStyle:"italic"}}>Fitness</span>
          <small>The How To Co. - Edition 08</small>
        </a>
        <nav className="nav">
          <a href="/en/">Home</a>
          <a href="/en/health/">Health</a>
          <a href="/en/fitness/" className="active">Fitness</a>
          <a href="/en/#program">This Week</a>
          <a href="/en/#contributors">Contributors</a>
        </nav>
        <div className="header-right">
          <span>Search</span>
          <span className="pill">Saved - 04</span>
        </div>
      </div>
    </header>
  );
}
window.TrainL3Header = TrainL3Header;

function TrainL3Crumb() {
  return (
    <div className="tcrumb">
      <div className="tcrumb-inner">
        <div className="tcrumb-trail">
          <a href="/en/">How To: Health &amp; Fitness</a>
          <span className="sep">/</span>
          <a href="/en/fitness/">Fitness</a>
          <span className="sep">/</span>
          <a href="/en/fitness/train/">Train</a>
          <span className="sep">/</span>
          <span className="here">{PAGE.title}</span>
        </div>
        <div>Fitness - Train - {PAGE.title}</div>
      </div>
    </div>
  );
}
window.TrainL3Crumb = TrainL3Crumb;

function TrainL3Hero() {
  return (
    <section className="tl3-hero">
      <div className="tl3-hero-img"><img src={PAGE.image} alt={`${PAGE.title} training guide image`} /></div>
      <div className="tl3-hero-inner">
        <div>
          <div className="tl3-eye"><span className="dot" /><span>Fitness - Train - {PAGE.label}</span></div>
          <h1><EmLastWord text={PAGE.title} /></h1>
          <p>{PAGE.lede}</p>
          <div className="tl3-meta">
            {PAGE.meta.map((m) => <span key={m}>{m}</span>)}
          </div>
        </div>
        <aside>
          <div className="num">No. {PAGE.n}</div>
          <blockquote>{PAGE.quote}</blockquote>
        </aside>
      </div>
    </section>
  );
}
window.TrainL3Hero = TrainL3Hero;

function TrainL3TopLive() {
  const slugs = React.useMemo(() => PAGE.top.map((row) => T_SLUG(row[1])), []);
  const { articles } = useTArticles(slugs);

  return (
    <section className="tl3-top">
      <div className="frame">
        <div className="sec-head">
          <div className="num">No. 01</div>
          <h2 className="title">The first <span className="display italic" style={{color:"var(--accent)"}}>five</span> guides.</h2>
          <div className="meta">Useful starting points<br/>for this topic</div>
        </div>
        <div className="tl3-top-grid">
          {articles.map((article, index) => (
            <FitnessArticleCard
              key={article.slug}
              article={withFallbackArticle(article, PAGE.top[index])}
              rank={PAGE.top[index][0]}
              tag={PAGE.top[index][3]}
              lead={index === 0}
              variant="train"
            />
          ))}
        </div>
      </div>
    </section>
  );
}
window.TrainL3Top = TrainL3TopLive;

function TrainL3Primer() {
  return (
    <section className="tl3-primer">
      <div className="frame">
        <div className="tl3-primer-grid">
          <div>
            <div className="tl3-kicker">Primer</div>
            <h2>How to think about <span>{PAGE.accent}.</span></h2>
          </div>
          <div className="tl3-notes">
            {PAGE.sections.map((s) => (
              <article key={s[0]}>
                <h3>{s[0]}</h3>
                <p>{s[1]}</p>
              </article>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
}
window.TrainL3Primer = TrainL3Primer;

function TrainL3Editorial() {
  if (!PAGE.editorial) return null;
  const edit = PAGE.editorial;
  const titleWords = edit.title.split(" ");
  const titleLead = titleWords.slice(0, -1).join(" ");
  const titleAccent = titleWords.slice(-1).join(" ");

  return (
    <section className="tl3-editorial" id="editorial">
      <div className="frame">
        <div className="tl3-editorial-grid">
          <div className="tl3-editorial-copy">
            <div className="tl3-kicker">{edit.eyebrow}</div>
            <h2>{titleLead} <span>{titleAccent}</span></h2>
            <p className="tl3-editorial-dek">{edit.dek}</p>
            <div className="tl3-editorial-body">
              {edit.body.map((paragraph) => <p key={paragraph}>{paragraph}</p>)}
            </div>
          </div>
          <aside className="tl3-editorial-aside">
            <div className="tl3-kicker">Useful test</div>
            <div className="tl3-editorial-proof">
              {edit.proof.map((item, index) => (
                <article key={item[0]}>
                  <span>{String(index + 1).padStart(2, "0")}</span>
                  <h3>{item[0]}</h3>
                  <p>{item[1]}</p>
                </article>
              ))}
            </div>
            <blockquote>{edit.callout}</blockquote>
          </aside>
        </div>
      </div>
    </section>
  );
}
window.TrainL3Editorial = TrainL3Editorial;

function TrainL3CardioDepth() {
  if (!PAGE.engine || !PAGE.searches || !PAGE.weekShapes) return null;
  const depthWords = PAGE.depthTitle.split(" ");
  const depthLead = depthWords.slice(0, -1).join(" ");
  const depthAccent = depthWords.slice(-1).join(" ");
  const metaLines = PAGE.depthMeta.split("\n");

  return (
    <section className="tl3-depth" id="cardio-map">
      <div className="frame">
        <div className="sec-head">
          <div className="num">No. 03</div>
          <h2 className="title">{depthLead} <span className="display italic" style={{color:"var(--accent)"}}>{depthAccent}</span></h2>
          <div className="meta">{metaLines[0]}<br />{metaLines[1]}</div>
        </div>
        <div className="tl3-depth-grid">
          <div className="tl3-engine-board">
            <div className="tl3-engine-label">Conditioning choices</div>
            <div className="tl3-engine-word">Easy / hard / mode / week</div>
            <div className="tl3-engine-grid">
              {PAGE.engine.map((item) => (
                <article key={item.k} className="tl3-engine-cell">
                  <div className="tl3-engine-top">
                    <span>{item.k}</span>
                    <span>{item.stat}</span>
                  </div>
                  <h3>{item.h}</h3>
                  <p>{item.d}</p>
                </article>
              ))}
            </div>
          </div>
          <div className="tl3-search-stack">
            <div className="tl3-kicker">Start here</div>
            <h3>Six doors into cardio.</h3>
            <div className="tl3-search-list">
              {PAGE.searches.map((item) => (
                <article key={item[0]} className="tl3-search-row">
                  <span>{item[2]}</span>
                  <h4>{item[0]}</h4>
                  <p>{item[1]}</p>
                </article>
              ))}
            </div>
          </div>
        </div>
        <div className="tl3-week-shapes">
          <div>
            <div className="tl3-kicker">Weekly shapes</div>
            <h3>Choose the weekly shape that fits the life around it.</h3>
          </div>
          <div className="tl3-week-grid">
            {PAGE.weekShapes.map((shape) => (
              <article key={shape.h} className="tl3-week-card">
                <h4>{shape.h}</h4>
                <p>{shape.d}</p>
                <div className="tl3-week-days">
                  {shape.days.map((day) => <span key={day}>{day}</span>)}
                </div>
              </article>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
}
window.TrainL3CardioDepth = TrainL3CardioDepth;

function TrainL3DeepHub() {
  if (!PAGE.deep) return null;
  const deep = PAGE.deep;
  const titleWords = deep.title.split(" ");
  const titleLead = titleWords.slice(0, -1).join(" ");
  const titleAccent = titleWords.slice(-1).join(" ");
  const metaLines = deep.meta.split("\n");

  return (
    <section className="tl3-deep" id="deep-board">
      <div className="frame">
        <div className="sec-head">
          <div className="num">No. 03</div>
          <h2 className="title">{titleLead} <span className="display italic" style={{color:"var(--accent)"}}>{titleAccent}</span></h2>
          <div className="meta">{metaLines[0]}<br />{metaLines[1]}</div>
        </div>
        <div className="tl3-deep-grid">
          <div className="tl3-deep-board">
            <div className="tl3-kicker">{deep.label}</div>
            <div className="tl3-deep-word">{deep.word}</div>
            <div className="tl3-deep-rules">
              {deep.rules.map((rule) => <span key={rule}>{rule}</span>)}
            </div>
          </div>
          <div className="tl3-deep-checks">
            <div className="tl3-kicker">How to choose</div>
            {deep.checks.map((item, index) => (
              <article key={item[0]} className="tl3-deep-check">
                <span>{String(index + 1).padStart(2, "0")}</span>
                <div>
                  <h3>{item[0]}</h3>
                  <p>{item[1]}</p>
                </div>
              </article>
            ))}
          </div>
        </div>
        <div className="tl3-deep-cards">
          {deep.cards.map((card) => (
            <article key={card.h}>
              <h3>{card.h}</h3>
              <p>{card.p}</p>
              <div>
                {card.d.map((day, index) => <span key={`${day}-${index}`}>{day}</span>)}
              </div>
            </article>
          ))}
        </div>
      </div>
    </section>
  );
}
window.TrainL3DeepHub = TrainL3DeepHub;

function TrainL3RunningDepth() {
  if (!PAGE.runningDesk) return null;
  const desk = PAGE.runningDesk;
  const titleWords = desk.title.split(" ");
  const titleLead = titleWords.slice(0, -1).join(" ");
  const titleAccent = titleWords.slice(-1).join(" ");
  const metaLines = desk.meta.split("\n");

  return (
    <section className="tl3-run" id="running-desk">
      <div className="frame">
        <div className="sec-head">
          <div className="num">No. 03</div>
          <h2 className="title">{titleLead} <span className="display italic" style={{color:"var(--accent)"}}>{titleAccent}</span></h2>
          <div className="meta">{metaLines[0]}<br />{metaLines[1]}</div>
        </div>
        <div className="tl3-run-grid">
          <div className="tl3-run-board">
            <div className="tl3-kicker">Running choices</div>
            <div className="tl3-run-word">{desk.word}</div>
            <div className="tl3-run-rules">
              <span>Start quiet</span>
              <span>Stay easy</span>
              <span>Build slowly</span>
            </div>
          </div>
          <div className="tl3-run-checks">
            <div className="tl3-kicker">What to watch</div>
            {desk.checks.map((item, index) => (
              <article key={item[0]} className="tl3-run-check">
                <span>{String(index + 1).padStart(2, "0")}</span>
                <div>
                  <h3>{item[0]}</h3>
                  <p>{item[1]}</p>
                </div>
              </article>
            ))}
          </div>
        </div>
        <div className="tl3-run-weeks">
          {desk.weeks.map((week) => (
            <article key={week.h}>
              <h3>{week.h}</h3>
              <p>{week.p}</p>
              <div>
                {week.d.map((day, index) => <span key={`${day}-${index}`}>{day}</span>)}
              </div>
            </article>
          ))}
        </div>
      </div>
    </section>
  );
}
window.TrainL3RunningDepth = TrainL3RunningDepth;

function TrainL3Library() {
  if (!PAGE.library || !PAGE.libraryTabs) return null;
  const [tab, setTab] = React.useState(PAGE.libraryTabs[0].id);
  const rows = PAGE.library[tab] || [];
  const slugs = React.useMemo(() => rows.map((row) => T_SLUG(row.h)), [tab]);
  const { articles } = useTArticles(slugs);
  const active = PAGE.libraryTabs.find((item) => item.id === tab) || PAGE.libraryTabs[0];
  const total = PAGE.libraryTabs.reduce((sum, item) => sum + item.ct, 0);
  const titleWords = PAGE.libraryTitle.split(" ");
  const titleLead = titleWords.slice(0, -1).join(" ");
  const titleAccent = titleWords.slice(-1).join(" ");
  const metaLines = PAGE.libraryMeta.split("\n");

  return (
    <section id="library" className="wlib tl3-library">
      <div className="frame">
        <div className="sec-head">
          <div className="num">{HAS_MIDDLE ? "No. 04" : "No. 03"}</div>
          <h2 className="title">{titleLead} <span className="display italic" style={{color:"var(--accent)"}}>{titleAccent}</span></h2>
          <div className="meta">{metaLines[0]}<br />{metaLines[1]}</div>
        </div>
        <div className="wlib-tabs" role="tablist" aria-label={`${PAGE.title} guide sections`}>
          {PAGE.libraryTabs.map((item) => (
            <button
              key={item.id}
              className={`wlib-tab ${tab === item.id ? "active" : ""}`}
              onClick={() => setTab(item.id)}
              type="button">
              {item.nm}<span className="ct">{item.ct}</span>
            </button>
          ))}
        </div>
        <div className="wlib-list">
          {articles.map((article, index) => (
            <FitnessArticleCard
              key={article.slug}
              article={withFallbackArticle(article, rows[index])}
              rank={rows[index].n}
              tag={rows[index].tag}
              time={rows[index].t}
              featured={Boolean(rows[index].featured)}
              variant="library"
            />
          ))}
        </div>
        <div className="wlib-foot">
          <span>Showing <strong>{rows.length}</strong> of <strong>{total}</strong> guides in <strong>{active.nm}</strong></span>
          <span>General training principles</span>
        </div>
      </div>
    </section>
  );
}
window.TrainL3Library = TrainL3Library;

function TrainL3Start() {
  const startNumber = PAGE.library ? (HAS_MIDDLE ? "No. 05" : "No. 04") : "No. 03";
  return (
    <section className="fstart">
      <div className="frame">
        <div className="sec-head">
          <div className="num">{startNumber}</div>
          <h2 className="title">Keep exploring <span className="display italic" style={{color:"var(--accent)"}}>Train.</span></h2>
          <div className="meta">More ways<br/>to train</div>
        </div>
        <div className="fstart-grid">
          <a className="fstart-tile" href="/en/fitness/train/">
            <div className="s-num"><span>Train</span><span className="arr">-></span></div>
            <h4>Open the <span className="it">Train index.</span></h4>
            <p>Find the training area that fits the question you have next.</p>
          </a>
          <a className="fstart-tile" href="/en/fitness/train/workouts/">
            <div className="s-num"><span>Workouts</span><span className="arr">-></span></div>
            <h4>Open the <span className="it">workout library.</span></h4>
            <p>Pull, push, full-body, conditioning, finishers.</p>
          </a>
          <a className="fstart-tile" href="/en/fitness/">
            <div className="s-num"><span>Fitness</span><span className="arr">-></span></div>
            <h4>Back to <span className="it">Fitness.</span></h4>
            <p>Train, Move, Fuel, Diet, Build, Recover.</p>
          </a>
        </div>
      </div>
    </section>
  );
}
window.TrainL3Start = TrainL3Start;

function TrainL3Footer() {
  const SharedFooter = window.HowToFooter;
  return SharedFooter ? <SharedFooter screenLabel="08 Footer" /> : null;
}
window.TrainL3Footer = TrainL3Footer;
