/* The Hard Choice — single-page redesign Literary & moody. Built around real text only — opening passage, author bio facts, retailer list. No fabricated reviews. */ const { useState, useEffect, useRef, useMemo } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": "moss", "typePair": "cormorant", "density": "regular", "coverTreatment": "raw", "showGrain": true }/*EDITMODE-END*/; /* ────────────────────────────────────────────────────────── Content ────────────────────────────────────────────────────────── */ // The synopsis — rewritten for a more literary register, but faithful to facts. const SYNOPSIS = `Joe is a block mason. Forty-something, broke, a wife at home and a back that aches every morning before the coffee is hot. He is not built to be a thief, and he knows it. But when his cousin John comes back to the hollow with a roll of bills thick enough to choke a dog, the arithmetic begins to do itself.`; const SYNOPSIS_2 = `The Hard Choice follows seven years of Joe's life inside the marijuana trade — a quiet, frequently ugly, often lonesome business that nobody puts on the family Christmas card. It is not a glamour story. It is a story about money and pride and the small daily mathematics of staying out of prison.`; // Real opening passage (verbatim from the published sample). const OPENING_PAGES = [ { page: "I", label: "The Pipeline", body: [ `The sun was warm on Joe's face as he drove the four-wheeler swiftly across the grassy pipeline trail. The fresh mountain air flowed over his body as a giant wave that cooled his sweat-soaked T-shirt.`, `This was what life was all about, Joe thought as he rode along — the trees, the birds, the fresh air and best of all, the freedom.`, ], }, { page: "II", label: "Overhead", body: [ `He was unaware that cruising high overhead at that moment was a Drug Task Force helicopter, or that his carefree ride through the woods had attracted someone's unwanted attention.`, ], }, { page: "III", label: "A Few Years Back", body: [ `But I'm getting ahead of myself.`, `Let's go back a few years to where this adventure begins…`, ], }, ]; // Excerpts presented as a "From the Pages" carousel — these are real lines // from the opening passage (no fabricated reviews). const EXCERPTS = [ { quote: "This was what life was all about — the trees, the birds, the fresh air and best of all, the freedom.", cite: "Chapter One", }, { quote: "Cruising high overhead at that moment was a Drug Task Force helicopter.", cite: "Chapter One", }, { quote: "He stumbles through the sometimes unglamorous world of a pot grower.", cite: "Jacket copy", }, { quote: "But I'm getting ahead of myself; let's go back a few years to where this adventure begins.", cite: "Chapter One", }, ]; // Author bio — lightly rewritten for cadence; all facts from the original site. const BIO = [ `He spent his early twenties as a guard inside a maximum-security juvenile prison in Ohio — a job that ended after thirteen months, two riots, and several dozen fights with the inmates. He went south to Florida, where he built motels and shopping malls, then came back to corrections at a Federal halfway house in West Virginia. That is where he learned what he knows about marijuana cultivation.`, `He began writing in middle age, while recovering from a broken ankle. He had no formal training. He had the good fortune of living next door to Russell Rice — longtime sports information director at the University of Kentucky, a published author and Pulitzer Prize nominee — who read the early drafts and gave the work direction.`, `The Hard Choice is his first novel.`, ]; const RETAILERS = [ { name: "Amazon", note: "Paperback & Kindle", href: "https://www.amazon.com/dp/1604745649" }, { name: "Barnes & Noble", note: "Paperback", href: "http://search.barnesandnoble.com/booksearch/isbninquiry.asp?r=1&ean=9781604745641" }, { name: "Target", note: "Paperback", href: "http://www.target.com/Hard-Choice-Breeden-Danny-Lee/dp/1604745649" }, { name: "Kinokuniya", note: "International", href: "http://bookweb.kinokuniya.co.jp/guest/cgi-bin/booksea.cgi?ISBN=1604745649" }, { name: "Van Stockum", note: "Netherlands", href: "http://www.vanstockum.nl/product/10683422/The-Hard-Choice.html" }, { name: "Eruditor", note: "Low-cost", href: "http://www.eruditor.com/exec/books/item/9781604745641.html.en?currency=USD" }, ]; /* ────────────────────────────────────────────────────────── Tweak presets ────────────────────────────────────────────────────────── */ const PALETTES = { ember: { label: "Ember", css: { "--bg": "oklch(0.135 0.012 55)", "--bg-deep": "oklch(0.10 0.010 55)", "--surface": "oklch(0.18 0.012 50)", "--hairline": "oklch(0.32 0.010 55)", "--hairline-soft":"oklch(0.24 0.010 55)", "--ink": "oklch(0.93 0.018 80)", "--ink-dim": "oklch(0.78 0.018 75)", "--muted": "oklch(0.58 0.015 70)", "--accent": "oklch(0.62 0.15 32)", "--accent-deep": "oklch(0.48 0.13 30)", }, swatches: ["#0f0a07", "#e8dfcd", "#c46a3a"], }, sodium: { label: "Sodium", css: { "--bg": "oklch(0.13 0.014 80)", "--bg-deep": "oklch(0.09 0.012 80)", "--surface": "oklch(0.18 0.014 75)", "--hairline": "oklch(0.34 0.014 80)", "--hairline-soft":"oklch(0.24 0.012 75)", "--ink": "oklch(0.93 0.030 90)", "--ink-dim": "oklch(0.78 0.028 85)", "--muted": "oklch(0.58 0.020 80)", "--accent": "oklch(0.78 0.16 78)", "--accent-deep": "oklch(0.62 0.14 76)", }, swatches: ["#0b0905", "#ece1c4", "#e5b35a"], }, moss: { label: "Moss", css: { "--bg": "oklch(0.135 0.014 150)", "--bg-deep": "oklch(0.10 0.012 150)", "--surface": "oklch(0.18 0.014 145)", "--hairline": "oklch(0.32 0.012 150)", "--hairline-soft":"oklch(0.24 0.012 145)", "--ink": "oklch(0.93 0.018 95)", "--ink-dim": "oklch(0.78 0.018 95)", "--muted": "oklch(0.58 0.015 130)", "--accent": "oklch(0.62 0.10 145)", "--accent-deep": "oklch(0.48 0.09 145)", }, swatches: ["#0a0f0a", "#dfe6d4", "#6f8e6a"], }, paper: { label: "Paper", css: { "--bg": "oklch(0.94 0.012 80)", "--bg-deep": "oklch(0.90 0.012 80)", "--surface": "oklch(0.97 0.010 80)", "--hairline": "oklch(0.62 0.010 70)", "--hairline-soft":"oklch(0.78 0.010 75)", "--ink": "oklch(0.20 0.014 55)", "--ink-dim": "oklch(0.35 0.014 55)", "--muted": "oklch(0.48 0.014 60)", "--accent": "oklch(0.48 0.16 32)", "--accent-deep": "oklch(0.38 0.14 30)", }, swatches: ["#f0eadb", "#221a14", "#a8431d"], }, }; const TYPE_PAIRS = { cormorant: { label: "Cormorant / EB", css: { "--f-display": "\"Cormorant Garamond\", Georgia, serif", "--f-body": "\"EB Garamond\", Georgia, serif", }, }, playfair: { label: "Playfair / Source", css: { "--f-display": "\"Playfair Display\", Georgia, serif", "--f-body": "\"Source Serif 4\", Georgia, serif", }, }, spectral: { label: "Spectral / Crimson", css: { "--f-display": "\"Spectral\", Georgia, serif", "--f-body": "\"Crimson Pro\", Georgia, serif", }, }, }; /* ────────────────────────────────────────────────────────── Small building blocks ────────────────────────────────────────────────────────── */ function Marker({ children, n }) { // mono small caps with a thin red dot — used as section labels return (
{n && {n}} {children}
); } function HairRule({ vertical = false, style }) { return ( ); } function TopNav({ onJump }) { const items = [ ["story", "The Story"], ["pages", "Opening Pages"], ["voices", "From the Pages"], ["author", "The Author"], ]; return ( ); } /* ────────────────────────────────────────────────────────── HERO ────────────────────────────────────────────────────────── */ function Hero({ coverTreatment }) { const coverClass = coverTreatment === "raw" ? "cover-raw" : coverTreatment === "mono" ? "cover-mono" : "cover-vignette"; return (
{/* Title block */}

A Novel by Danny Lee Breeden

The
Hard
Choice

Marijuana Cultivation in Appalachia

Seven years inside a quiet, sometimes ugly business that nobody puts on the family Christmas card.

{/* Cover */}
The Hard Choice — cover
); } /* ────────────────────────────────────────────────────────── THE STORY (synopsis, literary) ────────────────────────────────────────────────────────── */ function Story() { return (
The Story

He wasn't built to be a thief.
But the math kept doing itself.

{SYNOPSIS}

{SYNOPSIS_2}

{[ ["Seven", "years"], ["236", "pages"], ["1949", "born in WV"], ].map(([num, label], i) => (
{num}
{label}
))}
); } /* ────────────────────────────────────────────────────────── OPENING PAGES — paginated reader ────────────────────────────────────────────────────────── */ function Reader() { const [idx, setIdx] = useState(0); const total = OPENING_PAGES.length; const current = OPENING_PAGES[idx]; const go = (d) => setIdx((i) => Math.max(0, Math.min(total - 1, i + d))); // keyboard nav when reader is in view const containerRef = useRef(null); useEffect(() => { const onKey = (e) => { if (!containerRef.current) return; const rect = containerRef.current.getBoundingClientRect(); const inView = rect.top < window.innerHeight && rect.bottom > 0; if (!inView) return; if (e.key === "ArrowRight") { e.preventDefault(); go(1); } if (e.key === "ArrowLeft") { e.preventDefault(); go(-1); } }; window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, []); return (
Opening Pages

Chapter One — first three pages.

Download full sample (PDF) ↓
{/* Book frame */}
{/* spine indicator */}
{/* running header */}
The Hard Choice Chapter One · {current.label} {current.page}
{/* content */}
{current.body.map((p, i) => (

{p}

))} {idx === total - 1 && ( )}
{/* footer */}
{OPENING_PAGES.map((_, i) => (

← → keyboard arrows to turn the page

); } /* ────────────────────────────────────────────────────────── FROM THE PAGES — quote carousel ────────────────────────────────────────────────────────── */ function Excerpts() { const [idx, setIdx] = useState(0); const [paused, setPaused] = useState(false); const total = EXCERPTS.length; useEffect(() => { if (paused) return; const t = setInterval(() => setIdx((i) => (i + 1) % total), 6500); return () => clearInterval(t); }, [paused, total]); return (
From the Pages
setPaused(true)} onMouseLeave={() => setPaused(false)} style={{position:"relative",minHeight:340}} >
{EXCERPTS.map((q, i) => (

{q.quote}

— {q.cite}
))}
{String(idx + 1).padStart(2,"0")} / {String(total).padStart(2,"0")}
{EXCERPTS.map((_, i) => (
); } /* ────────────────────────────────────────────────────────── THE AUTHOR ────────────────────────────────────────────────────────── */ function Author() { return (
The Author

Danny Lee Breeden

Danny Breeden was born in Charleston, West Virginia, in 1949.

{BIO.map((p, i) => (

{p}

))}
{[ ["Born", "Charleston, WV · 1949"], ["Day jobs", "Corrections · Construction"], ].map(([k,v]) => (
{k}
{v}
))}
Danny Lee Breeden
Danny Lee Breeden Photograph
); } /* ────────────────────────────────────────────────────────── BUY ────────────────────────────────────────────────────────── */ function Buy() { return (
Where to Find It

Carry it home. Paperback or e-book.

Available at the usual booksellers and a few of the less usual ones. The Kindle edition reads cleanest on a long bus ride.

{RETAILERS.map((r) => ( { e.currentTarget.style.background = "var(--surface)"; e.currentTarget.querySelector(".arrow").style.color = "var(--accent)"; e.currentTarget.querySelector(".arrow").style.transform = "translateX(4px)"; }} onMouseLeave={e => { e.currentTarget.style.background = "transparent"; e.currentTarget.querySelector(".arrow").style.color = "var(--muted)"; e.currentTarget.querySelector(".arrow").style.transform = "translateX(0)"; }} >
{r.name}
{r.note}
))}
); } /* ────────────────────────────────────────────────────────── FOOTER ────────────────────────────────────────────────────────── */ function Footer() { return ( ); } /* ────────────────────────────────────────────────────────── APP ────────────────────────────────────────────────────────── */ function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); // apply palette / typepair to :root useEffect(() => { const pal = PALETTES[t.palette] || PALETTES.ember; const pair = TYPE_PAIRS[t.typePair] || TYPE_PAIRS.cormorant; const root = document.documentElement; Object.entries(pal.css).forEach(([k,v]) => root.style.setProperty(k, v)); Object.entries(pair.css).forEach(([k,v]) => root.style.setProperty(k, v)); document.body.dataset.density = t.density; document.body.style.setProperty("--grain-opacity", t.showGrain ? "0.6" : "0"); }, [t.palette, t.typePair, t.density, t.showGrain]); // toggle grain via inline style override useEffect(() => { let style = document.getElementById("__grain-toggle"); if (!style) { style = document.createElement("style"); style.id = "__grain-toggle"; document.head.appendChild(style); } style.textContent = t.showGrain ? "" : "body::before{display:none!important}"; }, [t.showGrain]); const jump = (id) => { const el = document.getElementById(id); if (el) el.scrollIntoView({behavior:"smooth", block:"start"}); }; return ( <>