/* Shared Garage L3 pages generated from the approved editorial room-first pattern. */
const GARAGE_L3_PAGES = {
  "repair": {
    "active": "Repair",
    "count": 31,
    "title": "Garage Repair Guides - Door Openers, Springs, Sensors, Slabs and Seals",
    "desc": "31 garage repair guides for garage door openers, photo-eye sensors, weather seals, cracked slabs, oil-damaged concrete, water at the threshold, outlets, tracks, rollers, and shop wear.",
    "headline": "Repair the parts that keep the garage working.",
    "deck": "Garage repair is mechanical, structural, and messy: door openers, sensors, tracks, rollers, springs, cracked slabs, water at the threshold, outlets that trip, and concrete that takes every mistake personally.",
    "rule": "Door first",
    "topLabel": "Top 5 Garage Repair Searches",
    "photoLabel": "Photo Spread / Garage Repair Notes",
    "essayTitle": "Garage repair starts with movement.",
    "essay": [
      "The garage fails in motion first. The door hesitates, the opener clicks, the sensor blinks, the track drifts, the roller grinds, and the room announces that the heaviest moving thing in the house is not happy.",
      "The second failure is the slab: cracks, spalls, stains, and water trails that tell you where the room is taking abuse. A garage can tolerate wear, but it should not normalize damage.",
      "Repair work in a garage is not cosmetic. It protects access, load, weather, power, and the car-sized opening that makes the room useful."
    ],
    "top": [
      [
        "01",
        "how to repair a garage door opener",
        "135,000",
        "Intermediate",
        "1-2 hrs",
        "$0-$120",
        "https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=1500&q=84",
        "The opener is the symptom machine: remote, trolley, travel limits, safety sensors, chain tension, and the motor that should not be forced to lift a bad door.",
        "Read the opener repair guide",
        "/en/garage/repair/how-to-repair-a-garage-door-opener/"
      ],
      [
        "02",
        "how to fix garage door sensors",
        "110,000",
        "Beginner",
        "20 min",
        "$0-$35",
        "https://images.unsplash.com/photo-1504148455328-c376907d081c?w=1500&q=84",
        "Most sensor failures are alignment, dirt, wiring, or sunlight. Fix the eye line before replacing the opener.",
        "Read the sensor guide",
        "/en/garage/repair/how-to-fix-garage-door-sensors/"
      ],
      [
        "03",
        "how to repair cracked garage floor concrete",
        "90,500",
        "Intermediate",
        "1 day",
        "$40-$180",
        "https://images.unsplash.com/photo-1517581177682-a085bb7ffb38?w=1500&q=84",
        "Garage floor cracks need cleaning, routing, filler, and a reason. If water is moving under the slab, filler alone is theater.",
        "Read the slab crack guide",
        "/en/garage/repair/how-to-repair-cracked-garage-floor-concrete/"
      ],
      [
        "04",
        "how to replace a garage door bottom seal",
        "74,000",
        "Beginner",
        "45 min",
        "$20-$70",
        "https://images.unsplash.com/photo-1513694203232-719a280e022f?w=1500&q=84",
        "The bottom seal keeps water, leaves, cold air, and rodents out. The track style decides the replacement, not wishful thinking.",
        "Read the bottom seal guide",
        "/en/garage/repair/how-to-replace-a-garage-door-bottom-seal/"
      ],
      [
        "05",
        "how to repair garage door tracks and rollers",
        "60,500",
        "Intermediate",
        "1-2 hrs",
        "$25-$120",
        "https://images.unsplash.com/photo-1503387762-592deb58ef4e?w=1500&q=84",
        "Noisy rollers and bent track turn a door into a liability. Alignment and hardware matter before lubricant does.",
        "Read the track and roller guide",
        "/en/garage/repair/how-to-repair-garage-door-tracks-and-rollers/"
      ]
    ],
    "tools": [
      "Socket set",
      "Locking pliers",
      "Winding bar caution",
      "Level",
      "Concrete crack chaser",
      "Shop vac",
      "Multimeter",
      "Silicone spray"
    ],
    "matrix": [
      "Opener diagnosis",
      "Photo-eye sensors",
      "Bottom seal",
      "Track alignment",
      "Rollers",
      "Slab crack",
      "Concrete spall",
      "Outlet reset",
      "Weatherstrip",
      "Threshold water"
    ],
    "mistakes": [
      "Adjusting torsion springs without the right tools",
      "Forcing the opener to lift a heavy door",
      "Lubricating sensors instead of aligning them",
      "Patching a slab crack without cleaning it",
      "Ignoring water trails at the threshold",
      "Calling every door problem an opener problem"
    ]
  },
  "install": {
    "active": "Install",
    "count": 33,
    "title": "Garage Install Guides - Slatwall, Overhead Racks, Openers, Lighting and EV Prep",
    "desc": "33 garage install guides for slatwall, overhead racks, garage door openers, LED shop lights, wall storage, utility sinks, outlets, heaters, cameras, and EV charger prep.",
    "headline": "Install the systems that give the garage capacity.",
    "deck": "Garage install is about capacity: slatwall, overhead racks, openers, LED shop lights, outlets, heaters, utility sinks, cameras, and the equipment that gets gear off the floor and power where work happens.",
    "rule": "Studs and joists",
    "topLabel": "Top 5 Garage Install Searches",
    "photoLabel": "Photo Spread / Garage Install Notes",
    "essayTitle": "Installation turns garage walls into infrastructure.",
    "essay": [
      "A garage install should add capability, not clutter. The best projects use the walls, ceiling, and power plan so the floor can stay open for the car, the bench, and the work.",
      "Every serious garage install starts with structure. Find the studs, find the joists, respect weight ratings, and understand what load is going to pull away from the wall after the hooks are full.",
      "Slatwall, overhead racks, lighting, outlets, and openers are not decorative upgrades. They change how the room works every day."
    ],
    "top": [
      [
        "01",
        "how to install slatwall in a garage",
        "120,000",
        "Intermediate",
        "1 day",
        "$180-$450",
        "https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=1500&q=84",
        "Slatwall turns the most visible wall into a working surface. Stud layout, panel seams, and load rating decide whether it lasts.",
        "Read the slatwall guide",
        "/en/garage/install/how-to-install-slatwall-in-a-garage/"
      ],
      [
        "02",
        "how to install overhead garage storage racks",
        "110,000",
        "Intermediate",
        "2-4 hrs",
        "$100-$300",
        "https://images.unsplash.com/photo-1504148455328-c376907d081c?w=1500&q=84",
        "The ceiling is storage, but only if the rack lands in joists and clears the door, the car hatch, and your head.",
        "Read the overhead rack guide",
        "/en/garage/install/how-to-install-overhead-garage-storage-racks/"
      ],
      [
        "03",
        "how to install a garage door opener",
        "90,500",
        "Intermediate",
        "3-5 hrs",
        "$180-$450",
        "https://images.unsplash.com/photo-1517581177682-a085bb7ffb38?w=1500&q=84",
        "A new opener works only if the door is balanced first. Rail, bracket, travel limits, sensors, and force settings all matter.",
        "Read the opener install guide",
        "/en/garage/install/how-to-install-a-garage-door-opener/"
      ],
      [
        "04",
        "how to install garage LED shop lights",
        "74,000",
        "Beginner",
        "1-2 hrs",
        "$60-$250",
        "https://images.unsplash.com/photo-1513694203232-719a280e022f?w=1500&q=84",
        "A working garage needs even light, not one tired bulb over the opener. Layout the bench, door, and storage zones first.",
        "Read the shop light guide",
        "/en/garage/install/how-to-install-garage-led-shop-lights/"
      ],
      [
        "05",
        "how to install an EV charger in a garage",
        "60,500",
        "Advanced",
        "Pro circuit",
        "$500-$2,500",
        "https://images.unsplash.com/photo-1503387762-592deb58ef4e?w=1500&q=84",
        "The charger mount is simple. The circuit, load calculation, permit, and panel work are the real install.",
        "Read the EV charger guide",
        "/en/garage/install/how-to-install-an-ev-charger-in-a-garage/"
      ]
    ],
    "tools": [
      "Stud finder",
      "Impact driver",
      "Laser level",
      "Socket set",
      "Lag bolts",
      "Voltage tester",
      "Stepladder",
      "Masonry bit"
    ],
    "matrix": [
      "Slatwall",
      "Overhead racks",
      "Door opener",
      "LED shop lights",
      "EV charger prep",
      "Utility sink",
      "Wall cabinets",
      "Security camera",
      "Ceiling fan",
      "Garage heater"
    ],
    "mistakes": [
      "Mounting heavy storage into drywall",
      "Ignoring the garage door travel path",
      "Installing lights before planning work zones",
      "Treating EV charging as a plug swap",
      "Buying racks before measuring car clearance",
      "Skipping labels while the wall is open"
    ]
  },
  "clean": {
    "active": "Clean",
    "count": 14,
    "title": "Garage Cleaning Guides - Oil Stains, Concrete Dust, Rust Rings and Seasonal Cleanouts",
    "desc": "14 garage cleaning guides for oil stains, concrete floors, rust rings, salt residue, sawdust, shelves, tool benches, drains, bins, and seasonal cleanouts.",
    "headline": "Clean the room that takes the hit.",
    "deck": "Garage cleaning is concrete, oil, salt, dust, rust rings, sawdust, cobwebs, shelf grit, mystery spills, and the seasonal cleanout that decides whether the garage is a room or a dumping ground.",
    "rule": "Dry sweep first",
    "topLabel": "Top 5 Garage Clean Searches",
    "photoLabel": "Photo Spread / Garage Cleaning Notes",
    "essayTitle": "Garage cleaning is floor chemistry plus discipline.",
    "essay": [
      "The garage is the room that absorbs every dirty job. Oil, road salt, soil, sawdust, wet leaves, paint drips, and cardboard dust all land on the same slab.",
      "Good garage cleaning starts dry: remove the debris, sweep the corners, vacuum the dust, then treat stains by chemistry. Water too early turns dust into paste and spreads oil.",
      "A clean garage does not have to look precious. It has to be safe underfoot, low-dust, easy to work in, and ready for the next project without making the next project dirtier."
    ],
    "top": [
      [
        "01",
        "how to clean oil stains from garage floor",
        "135,000",
        "Beginner",
        "1-2 hrs",
        "$15-$60",
        "https://images.unsplash.com/photo-1517581177682-a085bb7ffb38?w=1500&q=84",
        "Oil needs absorbent, degreaser, dwell time, and agitation. Rinsing first drives it wider.",
        "Read the oil stain guide",
        "/en/garage/clean/how-to-clean-oil-stains-from-garage-floor/"
      ],
      [
        "02",
        "how to clean a garage floor",
        "110,000",
        "Beginner",
        "2-3 hrs",
        "$20-$80",
        "https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=1500&q=84",
        "Sweep, vacuum, degrease, scrub, rinse, squeegee, dry. The order matters more than the product.",
        "Read the floor cleaning guide",
        "/en/garage/clean/how-to-clean-a-garage-floor/"
      ],
      [
        "03",
        "how to remove rust stains from concrete",
        "74,000",
        "Intermediate",
        "1 hr",
        "$12-$45",
        "https://images.unsplash.com/photo-1513694203232-719a280e022f?w=1500&q=84",
        "Rust rings need the right acid cleaner, not more pressure. Test first so you do not etch a clean halo into the slab.",
        "Read the rust stain guide",
        "/en/garage/clean/how-to-remove-rust-stains-from-concrete/"
      ],
      [
        "04",
        "how to clean garage shelves",
        "49,500",
        "Beginner",
        "2 hrs",
        "$0-$30",
        "https://images.unsplash.com/photo-1504148455328-c376907d081c?w=1500&q=84",
        "Shelves hold the dust record of every project. Empty, vacuum, wipe, relabel, and do not put the same dead paint cans back.",
        "Read the shelf guide",
        "/en/garage/clean/how-to-clean-garage-shelves/"
      ],
      [
        "05",
        "how to clean road salt off garage floor",
        "40,500",
        "Beginner",
        "1 hr",
        "$10-$35",
        "https://images.unsplash.com/photo-1503387762-592deb58ef4e?w=1500&q=84",
        "Salt residue holds moisture against concrete and metal. Dry removal first, then rinse and squeegee so the slab dries fast.",
        "Read the road salt guide",
        "/en/garage/clean/how-to-clean-road-salt-off-garage-floor/"
      ]
    ],
    "tools": [
      "Push broom",
      "HEPA shop vac",
      "Degreaser",
      "Stiff deck brush",
      "Squeegee",
      "Absorbent granules",
      "Nitrile gloves",
      "Box fan"
    ],
    "matrix": [
      "Oil stains",
      "Concrete floor",
      "Road salt",
      "Rust rings",
      "Shelves",
      "Workbench dust",
      "Cobwebs",
      "Paint spills",
      "Floor drain",
      "Seasonal purge"
    ],
    "mistakes": [
      "Rinsing oil before absorbing it",
      "Using a household vacuum on concrete dust",
      "Mixing cleaners on the slab",
      "Putting wet bins back on shelves",
      "Pressure washing without a drying plan",
      "Cleaning around trash instead of removing it"
    ]
  },
  "decorate": {
    "active": "Decorate",
    "count": 4,
    "title": "Garage Decorating Guides - Epoxy Floors, Paint, Wall Color and Shop Finish",
    "desc": "4 garage decorating guides for epoxy floors, paint color, workshop walls, trim, lighting temperature, and finishing the garage so it feels intentional without becoming precious.",
    "headline": "Decorate the garage without making it fragile.",
    "deck": "Garage decorating is a short lane, but it matters: epoxy floor coating, wall paint, workshop color, lighting temperature, trim, and the finish choices that make the room feel intentional while still taking abuse.",
    "rule": "Durable first",
    "topLabel": "Top 5 Garage Decorate Searches",
    "photoLabel": "Photo Spread / Garage Finish Notes",
    "essayTitle": "A good garage finish still works hard.",
    "essay": [
      "The garage is not a living room, and the finish should not pretend it is. The best decorating choices here are durable, cleanable, restrained, and honest about dust, tools, tires, bikes, and weather.",
      "Epoxy floors, warmer shop lights, painted drywall, a darker lower wall, and one organized tool wall can make the garage feel finished without making it delicate.",
      "This lane is short because garage decorating should be edited. Fewer moves, better materials, no fake showroom nonsense."
    ],
    "top": [
      [
        "01",
        "how to epoxy coat a garage floor",
        "165,000",
        "Intermediate",
        "2 days",
        "$250-$700",
        "https://images.unsplash.com/photo-1517581177682-a085bb7ffb38?w=1500&q=84",
        "The transformation is real, but the prep is the project. Degrease, etch, dry, mix, roll, broadcast, cure.",
        "Read the epoxy floor guide",
        "/en/garage/decorate/how-to-epoxy-coat-a-garage-floor/"
      ],
      [
        "02",
        "how to paint garage walls",
        "90,500",
        "Beginner",
        "1 weekend",
        "$80-$240",
        "https://images.unsplash.com/photo-1513694203232-719a280e022f?w=1500&q=84",
        "Garage walls need washable paint and color that can live with tools, tires, and dust.",
        "Read the garage wall paint guide",
        "/en/garage/decorate/how-to-paint-garage-walls/"
      ],
      [
        "03",
        "how to choose garage lighting color temperature",
        "49,500",
        "Beginner",
        "30 min",
        "$30-$180",
        "https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=1500&q=84",
        "Too cold feels clinical, too warm hides detail. A garage needs work light with enough warmth to make the room tolerable.",
        "Read the lighting temperature guide",
        "/en/garage/decorate/how-to-choose-garage-lighting-color-temperature/"
      ],
      [
        "04",
        "how to make a garage look finished",
        "40,500",
        "Beginner",
        "1 weekend",
        "$150-$600",
        "https://images.unsplash.com/photo-1504148455328-c376907d081c?w=1500&q=84",
        "Finished means coordinated surfaces, clear zones, and no random leftovers. It does not mean fragile.",
        "Read the finished garage guide",
        "/en/garage/decorate/how-to-make-a-garage-look-finished/"
      ],
      [
        "05",
        "how to paint garage trim and doors",
        "22,200",
        "Beginner",
        "1 day",
        "$40-$120",
        "https://images.unsplash.com/photo-1503387762-592deb58ef4e?w=1500&q=84",
        "Trim and service doors take the fingerprints and scuffs. Semi-gloss, prep, and a tough color do the work.",
        "Read the trim guide",
        "/en/garage/decorate/how-to-paint-garage-trim-and-doors/"
      ]
    ],
    "tools": [
      "Moisture test kit",
      "Degreaser",
      "Floor roller",
      "Paint pole",
      "Painter tape",
      "Work light",
      "Respirator",
      "Chip brush"
    ],
    "matrix": [
      "Epoxy floor",
      "Wall paint",
      "Lighting temperature",
      "Finished look",
      "Trim paint",
      "Tool wall color",
      "Cabinet finish",
      "Floor mats",
      "Door paint",
      "Ceiling paint"
    ],
    "mistakes": [
      "Painting before degreasing",
      "Choosing showroom finishes for a working room",
      "Using cold blue shop lights everywhere",
      "Skipping moisture tests before floor coating",
      "Ignoring tire pickup on cheap coatings",
      "Making the garage too precious to use"
    ]
  }
};
const GARAGE_L3_ORDER = [
  "repair",
  "install",
  "build",
  "clean",
  "organize",
  "decorate"
];
const GARAGE_L3_COUNTS = {
  "repair": 31,
  "install": 33,
  "build": 38,
  "clean": 14,
  "organize": 28,
  "decorate": 4
};
const grlBg = (url) => ({ backgroundImage: 'url("' + url + '")' });

const GarageL3Hero = ({ page }) => (
  <section className="grl-hero">
    <div className="img" style={grlBg(page.top[0][6].replace('w=1500', 'w=2400'))} />
    <div className="grl-mast">
      <span className="crumb"><a href="/">Home</a> / <a href="/en/garage/">Garage</a> / {page.active}</span>
      <span className="ctr">The Garage {page.active} Edition</span>
      <span className="right">No. 08 / Spring 2026</span>
    </div>
    <div className="grl-cover">
      <div>
        <div className="eyebrow">{page.active} / Garage / Field Guide</div>
        <h1>{page.headline}</h1>
      </div>
      <div>
        <p className="deck">{page.deck}</p>
        <div className="meta">
          <div><span className="k">Section</span><span className="v">Garage / {page.active}</span></div>
          <div><span className="k">Guides</span><span className="v">{page.count} total</span></div>
          <div><span className="k">First rule</span><span className="v">{page.rule}</span></div>
          <div><span className="k">Updated</span><span className="v">May 2026</span></div>
        </div>
      </div>
    </div>
  </section>
);

const GarageL3Top5 = ({ page }) => (
  <section className="grl-top5">
    <div className="grl-wrap">
      <div className="section-folio"><span>The Charts / {page.topLabel}</span><span className="pg">PG. 02</span></div>
      <div className="grl-head">
        <div>
          <h2>The five projects that decide the garage.</h2>
          <p className="deck">This room works only when the floor stays open, the walls carry their load, and the systems are serviceable after the weekend is over.</p>
        </div>
        <div className="legend">
          <span><i style={{ background: 'var(--grlcopper)' }} /> Difficulty</span>
          <span><i style={{ background: 'var(--grlblue)' }} /> Time</span>
          <span><i style={{ background: 'var(--grlmoss)' }} /> Materials</span>
        </div>
      </div>
      <div className="grl-top-list">
        {page.top.map((t) => (
          <article className="grl-top-row" key={t[0]}>
            <div className="rank">No. {t[0]}</div>
            <a className="grl-top-photo" href={t[9]} style={grlBg(t[6])} aria-label={t[1]}></a>
            <div className="query">
              <h3>{t[1]}</h3>
              <p>{t[7]}</p>
              <a href={t[9]} className="read">{t[8]}</a>
            </div>
            <div className="stats">
              <div className="stat"><span className="k">Monthly searches</span><span className="v">{t[2]}</span></div>
              <div className="stat"><span className="k">Difficulty</span><span className="v">{t[3]}</span></div>
              <div className="stat"><span className="k">Time</span><span className="v">{t[4]}</span></div>
              <div className="stat"><span className="k">Materials</span><span className="v">{t[5]}</span></div>
            </div>
          </article>
        ))}
      </div>
    </div>
  </section>
);

const GarageL3PhotoSpread = ({ page }) => (
  <section className="grl-photo-spread">
    <div className="grl-wrap">
      <div className="section-folio"><span>{page.photoLabel}</span><span className="pg">PG. 07</span></div>
      <div className="grl-photo-grid">
        {page.top.slice(0, 4).map((item, i) => (
          <article className={'grl-photo-card c' + (i + 1)} key={item[0]}>
            <a className="photo" href={item[9]} style={grlBg(item[6].replace('w=1500', 'w=1900'))} aria-label={item[1]}></a>
            <div className="copy">
              <span>{item[1]}</span>
              <h3>{item[8]}</h3>
              <p>{item[7]}</p>
            </div>
          </article>
        ))}
      </div>
    </div>
  </section>
);

const GarageL3Essay = ({ page }) => (
  <section className="grl-essay">
    <div className="grl-essay-wrap">
      <div className="section-folio"><span>Editor's Note / Garage, {page.active}</span><span className="pg">PG. 08</span></div>
      <div className="grl-essay-grid">
        <aside className="grl-essay-side">
          <h2>{page.essayTitle}</h2>
          <div className="by">By the Editors / 5 min read</div>
          <div className="stat-list">
            <div className="row"><span>Guides</span><strong>{page.count}</strong></div>
            <div className="row"><span>Most searched</span><strong>{page.top[0][1].replace('how to ', '')}</strong></div>
            <div className="row"><span>First rule</span><strong>{page.rule}</strong></div>
            <div className="row"><span>Room</span><strong>Workshop bay</strong></div>
          </div>
        </aside>
        <div className="grl-essay-body">
          <p className="dropcap">{page.essay[0]}</p>
          <p>{page.essay[1]}</p>
          <div className="pull">A garage should stay useful after the project is done looking good.</div>
          <p>{page.essay[2]}</p>
        </div>
      </div>
    </div>
  </section>
);

const GarageL3Tools = ({ page }) => (
  <section className="grl-tools">
    <div className="grl-wrap">
      <div className="section-folio"><span>The Kit / What earns wall space</span><span className="pg">PG. 10</span></div>
      <div className="grl-tools-head">
        <h2>Eight tools that make garage {page.active.toLowerCase()} work less like improvising.</h2>
        <p>Garage work is load-bearing, dust-heavy, clearance-sensitive, and almost always happening around a car door, a slab, or a wall full of storage.</p>
      </div>
      <div className="grl-tools-grid">
        {page.tools.map((tool, i) => (
          <div className="grl-tool" key={tool}>
            <span>{String(i + 1).padStart(2, '0')}</span>
            <h3>{tool}</h3>
            <p>Useful because garage work fails when load, clearance, dust, or access gets treated as an afterthought.</p>
          </div>
        ))}
      </div>
    </div>
  </section>
);

const GarageL3Matrix = ({ page }) => (
  <section className="grl-matrix">
    <div className="grl-wrap">
      <div className="section-folio"><span>The Menu / Ranked by payoff</span><span className="pg">PG. 12</span></div>
      <div className="grl-matrix-head">
        <h2>Ten garage {page.active.toLowerCase()} projects, ranked.</h2>
        <p>The first jobs protect the working envelope. The later jobs make the room cleaner, safer, and easier to use.</p>
      </div>
      <div className="grl-matrix-table">
        <div className="grl-matrix-row head"><span>Project</span><span>Risk</span><span>Time</span><span>Payoff</span><span></span></div>
        {page.matrix.map((project, i) => (
          <div className="grl-matrix-row" key={project}>
            <span className="proj"><b>{String(i + 1).padStart(2, '0')}</b>{project}</span>
            <span>{i < 3 ? 'High' : i < 7 ? 'Medium' : 'Low'}</span>
            <span>{i < 3 ? 'Today' : i < 7 ? 'Weekend' : 'Later'}</span>
            <span className="dots"><i></i><i></i><i></i><i className={i > 4 ? '' : 'off'}></i><i className={i > 7 ? '' : 'off'}></i></span>
            <span><a href={'/en/garage/' + page.active.toLowerCase() + '/'}>Open</a></span>
          </div>
        ))}
      </div>
    </div>
  </section>
);

const GarageL3Mistakes = ({ page }) => (
  <section className="grl-mistakes">
    <div className="grl-wrap">
      <div className="section-folio"><span>Do Not Skip / Garage failure points</span><span className="pg">PG. 14</span></div>
      <div className="grl-mistakes-head">
        <h2>The mistakes that make the garage worse later.</h2>
        <span>{page.mistakes.length}</span>
      </div>
      <div className="grl-mistakes-grid">
        {page.mistakes.map((m, i) => (
          <article className="grl-mistake" key={m}>
            <div className="n">{String(i + 1).padStart(2, '0')}</div>
            <h3>{m}</h3>
            <p>If the floor, wall, door, or power plan is wrong, the project becomes clutter with better lighting.</p>
          </article>
        ))}
      </div>
    </div>
  </section>
);

const GarageL3Related = ({ page, lane }) => (
  <section className="grl-related">
    <div className="grl-related-wrap">
      <div className="grl-related-col">
        <h3>Other things to do in the garage.</h3>
        <div className="grl-related-list">
          {GARAGE_L3_ORDER.map((key, i) => (
            <a href={'/en/garage/' + key + '/'} className={'row ' + (key === lane ? 'current' : '')} key={key}><span className="n">{String(i + 1).padStart(2, '0')}</span><span className="t">{key} in the garage</span><span className="ct">{GARAGE_L3_COUNTS[key]} guides</span></a>
          ))}
        </div>
      </div>
      <div className="grl-related-col">
        <h3>{page.active} in other rooms.</h3>
        <div className="grl-related-list">
          {['kitchen', 'bathroom', 'bedroom', 'living-room', 'basement'].map((room, i) => (
            <a href={'/en/' + lane + '/' + room + '/'} className="row" key={room}><span className="n">{String(i + 1).padStart(2, '0')}</span><span className="t">{room.replace('-', ' ')}</span><span className="ct">room lane</span></a>
          ))}
        </div>
      </div>
    </div>
  </section>
);

const GarageL3Colophon = ({ page }) => (
  <section className="grl-colophon">
    <span>HowTo: Home Edition / Garage</span>
    <h2>{page.count} ways to {page.active.toLowerCase()} the most flexible square footage you own.</h2>
    <p>Built as a static editorial L3 page with a full crawler body, visible photography, and a real garage menu.</p>
    <a href="/en/garage/" className="go">Back to Garage</a>
  </section>
);

const GarageL3 = ({ lane }) => {
  const page = GARAGE_L3_PAGES[lane] || GARAGE_L3_PAGES.repair;
  return (
    <>
      <GarageL3Hero page={page} />
      <GarageL3Top5 page={page} />
      <GarageL3PhotoSpread page={page} />
      <GarageL3Essay page={page} />
      <GarageL3Tools page={page} />
      <GarageL3Matrix page={page} />
      <GarageL3Mistakes page={page} />
      <GarageL3Related page={page} lane={lane} />
      <GarageL3Colophon page={page} />
    </>
  );
};

window.GarageL3 = GarageL3;
