{"product_id":"our-perfect-storm-hardcover","title":"Our Perfect Storm (Hardcover)","description":"\u003cstyle\u003e\n  .fc2-wrap {\n    font-family: 'Helvetica Neue', Arial, sans-serif;\n    color: #2b2b2b;\n    max-width: 600px;\n    line-height: 1.6;\n  }\n\n  \/* Tagline *\/\n  .fc2-tagline {\n    font-style: italic;\n    font-size: 15px;\n    color: #7a5c6e;\n    margin: 0 0 16px 0;\n    font-weight: 400;\n    letter-spacing: 0.01em;\n  }\n\n  \/* Metadata row: trope + spice badges *\/\n  .fc2-meta {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 16px;\n  }\n\n  .fc2-badge {\n    display: inline-block;\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: 0.04em;\n    text-transform: uppercase;\n    padding: 4px 10px;\n    border-radius: 20px;\n    line-height: 1.4;\n  }\n\n  .fc2-badge-trope {\n    background-color: #f5e6ec;\n    color: #7a2e4e;\n    border: 1px solid #e8c5d3;\n  }\n\n  .fc2-badge-genre {\n    background-color: #eef3f9;\n    color: #2e4d6e;\n    border: 1px solid #c5d4e8;\n  }\n\n  \/* Spice level *\/\n  .fc2-spice-row {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    background-color: #fdf6f0;\n    border: 1px solid #f0ddd0;\n    border-radius: 8px;\n    padding: 8px 14px;\n    margin-bottom: 18px;\n    width: fit-content;\n  }\n\n  .fc2-spice-label {\n    font-size: 12px;\n    color: #7a5c6e;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n  }\n\n  .fc2-pips {\n    display: flex;\n    gap: 5px;\n  }\n\n  .fc2-pip {\n    width: 10px;\n    height: 10px;\n    border-radius: 50%;\n    display: inline-block;\n  }\n\n  .fc2-pip-on  { background-color: #c4546e; }\n  .fc2-pip-off { background-color: #e8d0d8; }\n\n  .fc2-spice-text {\n    font-size: 12px;\n    color: #c4546e;\n    font-weight: 700;\n  }\n\n  \/* Pull quotes *\/\n  .fc2-quotes {\n    margin-bottom: 18px;\n  }\n\n  .fc2-quote {\n    font-style: italic;\n    font-size: 13.5px;\n    color: #5a3a4a;\n    border-left: 3px solid #c4546e;\n    padding: 6px 0 6px 14px;\n    margin: 0 0 10px 0;\n    background-color: #fdf6f8;\n    border-radius: 0 6px 6px 0;\n  }\n\n  .fc2-quote cite {\n    font-style: normal;\n    font-weight: 600;\n    font-size: 12px;\n    color: #9a6070;\n    display: block;\n    margin-top: 3px;\n  }\n\n  \/* Divider *\/\n  .fc2-divider {\n    border: none;\n    border-top: 1px solid #ecdde5;\n    margin: 18px 0;\n  }\n\n  \/* Synopsis \/ teaser *\/\n  .fc2-teaser {\n    font-size: 14.5px;\n    color: #2b2b2b;\n    line-height: 1.75;\n    margin-bottom: 16px;\n  }\n\n  \/* Accordion *\/\n  .fc2-accordion {\n    border-top: 1px solid #ecdde5;\n  }\n\n  .fc2-acc-item {\n    border-bottom: 1px solid #ecdde5;\n  }\n\n  .fc2-acc-btn {\n    width: 100%;\n    background: none;\n    border: none;\n    padding: 12px 2px;\n    text-align: left;\n    font-size: 13.5px;\n    font-weight: 600;\n    color: #2b2b2b;\n    cursor: pointer;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    font-family: inherit;\n    letter-spacing: 0.01em;\n  }\n\n  .fc2-acc-btn:hover {\n    color: #c4546e;\n  }\n\n  .fc2-acc-icon {\n    font-size: 18px;\n    line-height: 1;\n    color: #c4546e;\n    font-weight: 300;\n    transition: transform 0.2s;\n  }\n\n  .fc2-acc-content {\n    display: none;\n    font-size: 13.5px;\n    color: #5a4a50;\n    line-height: 1.75;\n    padding-bottom: 14px;\n  }\n\n  \/* Digital links *\/\n  .fc2-digital {\n    display: flex;\n    gap: 10px;\n    flex-wrap: wrap;\n    margin-top: 18px;\n  }\n\n  .fc2-digital-btn {\n    display: inline-block;\n    font-size: 12.5px;\n    font-weight: 600;\n    color: #c4546e;\n    background-color: #fdf0f3;\n    border: 1px solid #e8c5ce;\n    border-radius: 20px;\n    padding: 7px 16px;\n    text-decoration: none;\n    letter-spacing: 0.02em;\n    transition: background-color 0.15s, color 0.15s;\n  }\n\n  .fc2-digital-btn:hover {\n    background-color: #c4546e;\n    color: #ffffff;\n    border-color: #c4546e;\n    text-decoration: none;\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"fc2-wrap\"\u003e\n\n  \u003c!-- Tagline --\u003e\n  \u003cp class=\"fc2-tagline\"\u003eBest friends have one week in paradise to fix their friendship or fall apart  \u003c\/p\u003e\n\n  \u003c!-- Trope \u0026 Genre Badges --\u003e\n  \u003cdiv class=\"fc2-meta\"\u003e\n    \u003cspan class=\"fc2-badge fc2-badge-trope\"\u003eFriends to Lovers\u003c\/span\u003e\n    \u003cspan class=\"fc2-badge fc2-badge-trope\"\u003eHe Falls First\u003c\/span\u003e\n    \u003cspan class=\"fc2-badge fc2-badge-genre\"\u003eContemporary Romance\u003c\/span\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Spice Level --\u003e\n  \u003cdiv class=\"fc2-spice-row\"\u003e\n    \u003cspan class=\"fc2-spice-label\"\u003eSpice\u003c\/span\u003e\n    \u003cdiv class=\"fc2-pips\"\u003e\n      \u003cspan class=\"fc2-pip fc2-pip-on\"\u003e\u003c\/span\u003e\n      \u003cspan class=\"fc2-pip fc2-pip-on\"\u003e\u003c\/span\u003e\n      \u003cspan class=\"fc2-pip fc2-pip-on\"\u003e\u003c\/span\u003e\n      \u003cspan class=\"fc2-pip fc2-pip-off\"\u003e\u003c\/span\u003e\n      \u003cspan class=\"fc2-pip fc2-pip-off\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cspan class=\"fc2-spice-text\"\u003e3\/ 5\u003c\/span\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Pull Quotes --\u003e\n  \u003cdiv class=\"fc2-quotes\"\u003e\n    \u003cblockquote class=\"fc2-quote\"\u003e\n      \"A dream of a love story \"\n      \u003ccite\u003e— Rosie Walsh   \u003c\/cite\u003e\n    \u003c\/blockquote\u003e\n    \u003cblockquote class=\"fc2-quote\"\u003e\n      \"A gorgeous story of childhood friendship shifting into something more \"\n      \u003ccite\u003e—  Holly Gramazio  \u003c\/cite\u003e\n    \u003c\/blockquote\u003e\n  \u003c\/div\u003e\n\n  \u003chr class=\"fc2-divider\"\u003e\n\n  \u003c!-- Short teaser --\u003e\n  \u003cp class=\"fc2-teaser\"\u003e\n  Frankie and George have been best friends since they were eight years old. Both passionate, impulsive, and headstrong--they've always clashed . . . and come back together. Until now. It's the eve of Frankie's wedding weekend, and she doesn't know where they stand or even if George will show up as her best man. \n  \u003c\/p\u003e\n\n  \u003c!-- Accordion --\u003e\n  \u003cdiv class=\"fc2-accordion\"\u003e\n\n    \u003cdiv class=\"fc2-acc-item\"\u003e\n      \u003cbutton class=\"fc2-acc-btn\" onclick=\"fc2Toggle(this)\"\u003e\n        Full synopsis \u003cspan class=\"fc2-acc-icon\"\u003e+\u003c\/span\u003e\n      \u003c\/button\u003e\n      \u003cdiv class=\"fc2-acc-content\"\u003e\n        \u003cp\u003eNAMED A MOST ANTICIPATED BOOK OF 2026 BY THE NEW YORK TIMES, TODAY, WOMAN'S WORLD, TOWN \u0026amp; COUNTRY, BRITT \u0026amp; CO., AND MORE! \u003c\/p\u003e\n        \u003cp\u003eBest friends have one week in paradise to fix their friendship or fall apart in this heart-stopping, utterly romantic new novel from the #1 New York Times bestselling author of Every Summer After and One Golden Summer. \u003c\/p\u003e\n        \u003cp\u003eFrankie and George have been best friends since they were eight years old. Both passionate, impulsive, and headstrong--they've always clashed . . . and come back together. Until now. It's the eve of Frankie's wedding weekend, and she doesn't know where they stand or even if George will show up as her best man. \u003c\/p\u003e\n        \u003cp\u003eThen, at the start of the festivities, in walks George. For one glorious evening, surrounded by her loved ones, Frankie's life is finally perfect. But it all comes crashing down when her fiancé dumps her the next morning, leaving only a note as an explanation.  \u003c\/p\u003e\n       \u003cp\u003eCrushed and confused, Frankie returns to her family's home to wallow. But George has a different idea and a plan for healing Frankie's broken heart. He wants her to go on her honeymoon. With him. For one week, to the lush rainforests and misty beaches of Tofino. \u003c\/p\u003e\n       \u003cp\u003eFrankie agrees, seeing the trip for what it really is: one last chance to repair their friendship. Even if it means unearthing secrets and long buried feelings neither knows how to handle. Even if it means falling apart for good. \u003c\/p\u003e\n    \n     \n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"fc2-acc-item\"\u003e\n      \u003cbutton class=\"fc2-acc-btn\" onclick=\"fc2Toggle(this)\"\u003e\n        About the author \u003cspan class=\"fc2-acc-icon\"\u003e+\u003c\/span\u003e\n      \u003c\/button\u003e\n      \u003cdiv class=\"fc2-acc-content\"\u003e\n        \u003cp\u003eCarley Fortune is the #1 New York Times bestselling author of Every Summer After, Meet Me at the Lake, This Summer Will Be Different, and One Golden Summer. She is an award-winning Canadian journalist who's worked as an editor for Refinery29, The Globe and Mail, Chatelaine, and Toronto Life. She lives in Toronto with her husband and two sons. \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"fc2-acc-item\"\u003e\n      \u003cbutton class=\"fc2-acc-btn\" onclick=\"fc2Toggle(this)\"\u003e\n        Also available digitally \u003cspan class=\"fc2-acc-icon\"\u003e+\u003c\/span\u003e\n      \u003c\/button\u003e\n      \u003cdiv class=\"fc2-acc-content\"\u003e\n        \u003cp\u003ePrefer to read or listen on the go? Grab the digital version:\u003c\/p\u003e\n        \u003cdiv class=\"fc2-digital\"\u003e\n        \u003ca class=\"fc2-digital-btn\" href=\"https:\/\/bookshop.org\/p\/books\/untitled-5-carley-fortune\/a9035a9fd0ede378?ean=9780593953235\u0026amp;digital=t\" target=\"_blank\"\u003e📖 Get the ebook\u003c\/a\u003e\n      \n          \u003ca class=\"fc2-digital-btn\" href=\"https:\/\/libro.fm\/audiobooks\/9798217282524-our-perfect-storm?bookshop=fromcovertocovers\" target=\"_blank\"\u003e🎧 Get the audiobook\u003c\/a\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  function fc2Toggle(btn) {\n    var content = btn.nextElementSibling;\n    var icon = btn.querySelector('.fc2-acc-icon');\n    var isOpen = content.style.display === 'block';\n    content.style.display = isOpen ? 'none' : 'block';\n    icon.textContent = isOpen ? '+' : '−';\n  }\n\u003c\/script\u003e\n","brand":"From Cover to Covers","offers":[{"title":"Default Title","offer_id":49903650865429,"sku":null,"price":30.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0736\/2068\/5077\/files\/ourperfect.png?v=1777921496","url":"https:\/\/fromcovertocovers.com\/products\/our-perfect-storm-hardcover","provider":"From Cover to Covers","version":"1.0","type":"link"}