/* ============================================================
   Florist & Home Samantha
   Design system — palette and motifs taken from the shop logo:
   watercolour bicycle, olive serif wordmark, berry-pink script,
   soft paper ground.
   ============================================================ */

:root {
  /* Paper & ground */
  --paper: #faf7f1;
  --paper-warm: #f4ede0;
  --sand: #eadfc9;
  --white: #fffdf9;

  /* Botanical greens */
  --olive: #6b7a45;
  --olive-deep: #4c5730;
  --forest: #2f3a1e;
  --sage-soft: #b8c39a;

  /* Berry / blossom */
  --berry: #b93a5d;
  --berry-deep: #8e2a46;
  --blush: #f2d7e0;
  --lilac: #8b6ba8;

  /* Detail */
  --gold: #c9b98a;
  --ink: #443f35;
  --ink-soft: #6f6857;

  /* Type */
  --display: "Cormorant Garamond", Georgia, serif;
  --script: "Parisienne", cursive;
  --body: "Jost", "Helvetica Neue", sans-serif;

  /* Layout */
  --container: 1200px;
  --gutter: 24px;
  --radius: 12px;
  --arch: 50% 50% 8px 8px / 34% 34% 8px 8px;
  --shadow-sm: 0 6px 18px -10px rgba(47, 58, 30, 0.35);
  --shadow: 0 18px 44px -22px rgba(47, 58, 30, 0.45);
  --shadow-lg: 0 34px 70px -30px rgba(47, 58, 30, 0.5);
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
  --alert-h: 38px;
}

*, *::before, *::after { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  font-family: var(--body);
  font-weight: 300;
  font-size: 17px;
  line-height: 1.7;
  color: var(--ink);
  background-color: var(--paper);
  /* faint paper grain */
  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAQAAABIkb+zAAAsNklEQVR42i2c5VpczRKF5+++J9yd4BacCe7uFiQQLLgFd3e3oJd13lrfeeYBZvfuLllVbdXVuIadHGfFCXGinHcn3pl1wpwHp8oJdGKdPWfLiXQanThn2wl30pxaflvNGifYyXB6eZvlfDipzoBT5CQ6Jc487b+cCGpVOHfOm7Pj/HbOnGNnxul3mqnT5Hzj2z/n1hl3Dp0eOKY6T1D5wXOOc8O3ICeaNuPOJO2P4R3ndDoXojhIi5/OX2fC8XVOnSkn30mBTrhT7bh6nHTIrzjLNPoGsUNnFTG6nUxnV383nWln0amHRYxTyO96Pt7ONQK1Q9LTyYbxmzPnDDnfEScUxstQW+V3onPF33BUi3QqnX3H7SQjXCjlHtB5dxKAyw81Kp0FnlsQbhZx0xDtGsUvaT0Izyzqj8PrkvbPiF/hvAJJtvNJ21cAccU5bbyYRfRpMH4D03tnlG+lYL/q1DnlvL3lnT+fbuec2qWwOgSlWRSugXwdpWXOH0hfIdolb2PAdomWl6i854xhzRVwW6U8D+y+QykHEbMRd9LJBaYvQPQFlkTsk0mLUnzAH5WqsPM9cozA9ROg0oFjyjlBoi3K05E2x3H9cx4dH/ApAs0cpwCNL2AfTqNnNLxyknCqZlDswsAJuNcRpCOcA94/gHg55UdQeEPYB+q9wKoc9TKxXBpWOMAlohBhh99Vzi/KclE8C+EyUaEGp1sBbzeAubH4k7MGEFvAMY1F46jpw/MJ0vngPqNI1EedCCxZh7Ix2KXTcQUheifabMN6TaZ9AvERUOtG9CLKo5wOCMTyPgaWkTRLw1G8IL3Jm3R6xD9ETEaEdnpIEQoM0i9esUgvqtxjhU6s4oPQgaDsg6Il8LigTxwCzy7cPlH1gTbVCDaO+JlIMoGzpVM/ymmljhtZYnDlB9y2CTWCUasYe3Y4rkPM3o6uoxhymJcBsK8GgSLKx2gSA6tuxCgH3wesFEftWDBcxSLLGL4fXOup9Qq2Syh+Cwg/cY9ghNyhRSbqPSB2HXX8aZOBByfi9Uco64Plmui+7fCyTnsPfHHUj4BnCx263WkAhnqEvUWSaKzcA90yvmUjbyucMxyXN24Sjhk7cJBqiPViqB489oxPKkqVqytdwKwXQtFyog5EreQTDbssGLYjVDqO1I0dZmF4B71lOlkegt1Qfw1WWdhrAsF/Q3WU8hEsuML3MlDuRdx5xF6GbjS0dnDMEKglYoUeAGmG4x70f2us2wEIG2gq6IMhjmsDBplUu+bhiw6WT5fcxJA/wbZVbtUI+yuIp9LR3TCoBKk76tbQcoyfHdp/0fGaUKeAlnH4byPjkvUGX2cD791ASRtrOhE6nLbdCPkdKq9AZkNlM3VWcahdwPLlTQCOe4HqHjjQMrXOeNeMu9Vi5Rz6WRJQxmBND+q66vHMX3xpoeIeCCbQyEbrUtBoo4kH3v5OjRPY/kbIC941IHAzOGzgt2GwLEWoLfBoxVG2Eb0OkweoO86AchmO14vlIsHsVhYtxUrWhdvx5iTKiuFzDWxhuMYyqFdhPbNYKOoWU3IE52QN8qPYoBgJzuTqC9jDNcpIkQ8ZDyp08zMJ2zTwWqQfDIJJLJa5QIh5BthDWA9rtDbhm7FOEEQCcDibbFp5G4HYM2A6hq+2Y4kuwPCg1A+Rk2h3BtYt6rjpKF0EOL/AtAGHGgKiGfg/wWsZ52t21mkXgO0/eevGzolA2w7ylYxdW7Q+xN71jisDTU8g8Y7YfXy68bd5OU8Zw1cz+jbxNheXKoFQBIi2UPIACvVY6xT7JYLwBU+HtAuCQj3OFkLtUtxtHoEKedNGnSTAqab+HG6WhYIVcAnktxd016lZDGDRPAeg3heCR1CaAL8vuL/ham6+d1L2E7ubdQaBeNNxbdI9Z6X1Go09caM83CCFBmuUn9DMBrNQWK5gjTlEz8fQk5Bx4435OEYSqN5AwRwxGMa/qb1EXTdOskb5BUhXo9oqw0MedaeByjpmKWWBWNQmvWPEHADXAcq3eZ7TALyP8r4aCM4A8RBpCqG2CsdIeE1jyVmbiQ8Q6hFiQYgaA/tHDBlK2QKDlJ+mjVLe3NDRfyBSBMK3IMgw7nGMWq0wusSs7bRowBHmEaoMkddQoBtsF1CyHUBescoM3vyCxVqw9zI123k7Bxwz+PY35KhDwBBs+EyNQSTxwBo1KNuLqJvYcpa3JkkdQPkiowfzsusX+rygzRsdaUMja4W8PI9v3jhLDkzjETsb863C0ouuNgkzW2A0o5IHxMJp7YfIxaiQx/tEWpah3IYWIg8wLwCWQaj0I8Il4nsi+h64foN6AZwTcTIbTtLoPe2IZsPmizp5NaA+QC+fGg3QywMUG2BGGekWoeQ6Z9h8haAfTeoxYRXYRMtNAihLRj0343eW1kJBDJhBmC8YUWYh9sbfv9RoRukK6gbwicVSl/huOj8VCDBEt7ZZ3he1W3G8EDAfxmoX1LOhwB++z9SdQI4QBLKBtQf+e0DzDx49qONJ2xtgvAGiW2o+QS8PWlXWie9A0YaoG1AYwRLx4Gzevo3484jwCxx2GAnuIbqoWfE7ggdAcgSMckFwmDen+Gsrb7+D4ClIPYBSB21z+TSr5iRA2GhTAvNEeCZio7/YN5ta/YjbxXMSn254LkEjANRXKa+Bcx/PvnLXNZRpwqG2cKM6HDXNcR3z+BuiCRQ20SQP/9umKx7TZB1simDqBckbiAfy7hOM3HKNSdocM7hWgOYTQ8EcYo6D6TE9wkbvJ8hP41AtCLeohbU3tt3iMwUoNi39ovQfIi4jYBVKpWPdUixRi1pTUDpDdJtcz3mqA5AFaO1A21a93dBugoJrGINfUxxDV8ql4K+WTSM4yyvG8kb4SsbfPpomgEE9zY8oz6V0DUv8wOBfIFiGaato8Q1LpDCutCNmPTQuKA+D4Rltb7CF2fsDFN3Y7YynPn7b4mAL1YqQwB/YgvHvePrMFXJlYYkq+tB3HNG2W+OaSCtxnz2+byOVK5Q+3ouGtwg0hrk6Mf+E5kxbs5Tiw/00j9UwuAb+IfztBz9PGJVALpw2n2CTjdpV1DqhUyYgTCBCJQDAHGoMYuFfqL6FOEOIuItf32GvIHhsQfUQ5L2xci70NgDElsrnUMuhdAdOXtgyFsunYaNzbN0F9kfQC7Fh1Bj3Qe4EDwuFgZdM/Q1yg3x+gEI4LjYHsuc8ZYPvDPhtYre/ELE5txdzhvPXG4aDMGxGnSV+6nn/E2MPY48O0MpD4B4wzUaALzhOYMEY7HGNg5VTexBbrWARm+C8oH7Cu1i69RRDRT1vbK/x4gxr51EOeFXAG+e4ihBgBn9aw6ttegkG+3kQnscvv4HJb8w6gYi2nYtHwQoYVkGqG1HjwS5d8+kfSBYhtC2ZDYY52F9r3k6FSSu41yPMA95eRJs83jfg+wW0bEXAcFqFQPMJtwnDbtnU98Qt+4EtEeCGtTZYwgLz1Fhk0NhnEM0CsjPHVQqRPIjZtJ8J8Xh09+XpCKGGYXsJ5raHGqWObXCOIL+Pqh0Y39ZDuYxWndhwDPu0qasP0Y2vaJWLQGEoa6v4VAQoh84udRoRPh5xerGjbVT6oO6j6XQcz8/kmw2gPbjIDJ4exFBSjc2KeFOEBepQuwxoYwG6i++uCl6UMv6XY7YIKqxD8hnMxzD/Leh5U3LJpNahddEs6rpR1RObvaDus2ILNh4Mg0w4Qtnq8hDRbcv9Tjtf3sUyrhRp6Byk2/kjbjw82/h7CpVGRE5kTItnHg4GjDRwvaVn2e4ijc8aEn5o2Mym/gp0fFB/CyUDeaITz4D1KmTG0HeYb6HaD9tAZusSL4ROQphiOtoICJaDlC8CZUJiBayDwSgA9TphEoj5W2D5gtp74Gw+nww4EzC1ffYT9WIQ701WTAPvdPBfp1aX1Pzk2zGW/guXL63Evuj8lzjRIGo3IWGNtqOf1FiBxxRguhoRegTTd4J4NeRsfZ+HsJOwCEeRJf5Oablh24lNlJ1CeNvMP4PZBSJ9x5VsRWrjRyqdcwUH2xR+izjcCUJNaZxbBrO/cPOkziKo9wOK7TSyUXZBfWRUm9oR+tkOwPnRL1qp20+tQX5sxn4GQpvmpgFnEupejisSsnUgZwvae/DPRcctOuAqgo+DfBxdZga/nqVfDKJ9AYL1yVu3UPQfoj0yLttGfQM3CUfVKYhvQNoD7D0RcEXDqT+eW4A4HeD/hNeXUScN4fMQ6pFW/tSyJcyL1p67GguHqdcAvS7KA7TptaVkKYL/1WKuxlwoGEFDcaBmEA6GXAHjjieG/IWALfhiJJgsUXUD8VdR7D+fLoCkBbyKtdtaQcUUDPwG4TF8NgLRtmFlLUsQ5ydO1ACCAdjFD+Vz4ZcONGXY/RMLHlCnUWPTFF6whj0qwf0CWCoA94i6bUg5B33bRD0yMHyHwxMUPhxXJ0z9QWJQU0ksHakezUu05p7BJv3aZw2qI/bQcBVxbNA9hWwXtf2xzSTq+VHSzNspTWO9KNSJ2kHatVnMp0wro0WeBmlVp4msFaUmsVQylINwmCa+BWLtShSOxQ2XodCNleOotY2a48hjUahQOdkT0tw4rhJwbwPRTy22PvnejPkM3wnEitMeNpPR5JqhsQGcPGl4wPMkqmVgYuv8Fr3Ypk0uSti2KAUFvFH/mu+22O5G+DKEswinxY9GhPkMtfIZxYJxtzPqxtAHbI10g1o3QPgJkF7IYavTFkVWM4HLD3tn48Rz2hvnOy4b2kbkDBYNq+NFBj8tCBYGKkkIFIJZbxHwDiP3QyaLWm6N16taYuwzTpRQZ14bkEdqZmGlKNpb6PYP9ttHkEJGogUYe9JuEnXONQsP0wNOQPMN5VehHY4S/bSaA65Mvlkv9Id6DarHIPg8dpmhrBGaK4Cd4rjqFEv7ApkaxI6n8it/bddzgtN8UP4E4XUE2ke1e2o+0OyJcecEE3+CQSneGge7eURew0oh2ht746kniJBKqx0ULaeVRZVtQeaF86QhhO2Y/wHcDVYw15uG+oj2FU2aoUsR21fLQ18slIwMbQBtO7RFhSffLTJ3ACs/BbivEe+KxoFaGS5rV3bI3zpQita2z+I4gwomVmlsOqPsjJ4zpY4/RusxavvihCfUyYaJ9bBObHCPc0zTPhP68Sizg7gz2KmBOlE42DhPj4g9iQq2qAzXOuCKdnMKKkwiX4b27Mda/K3QJh+6WbalHECXcciUgHQhL6YQahoWkag0RO/oAo1PxPqBvg38rdaK9BAxfsIgAXcwd0un9BtUxmHkCa1O8LGB0B9lbabxg5qFbguou4l6sYh5C51W+o1BOAQI9mYU2OKYa23BnqVhfBrltumR75SNAlAbLmtRoS+U6XZcM4wGrwiZjhpeoG7I5FBtlab+CJMGGrYfq8AqbThADkq65Zk2TB7QM6ogvgTmJqgfvcYbZFZ5Gw6VBZxvAVe0YLkvVthD2XogqkClbdj3074akS8BJ4Onn5rOPFG2GS5DjDlVjDmVyBSsCPqeeoZtdXOQNsM2NDkIN4VZ87XOiNNcuwI6AdpCe+NQGXh9PQNhIiKEQNTiFKmwyMB/d+i4heor2VIzGdWmECpaMaBaLNLJe28tqCMVmH2ExjoCdSgeFASKn4j9hdgblK2i1hDUtrTdXOL3OnbwRO17bLXA3zJ6RCzShWBPG81cX5juGDEuGBcecYBPOkgDVacUbP0H0WHE+ESYdj52JPECXjWQjUDYWWrYmYl1zkbcI1exm2At7SxIm4YAuaC/gPqzWgC+gNoRInQBU6+G1SPoFWgx74kfzNKlX5Dgvw3qIm19ANID64dBeQBJuqDeCrd2bBJnBxy3GiO+o3sv40IwWi1AJkjLrF2NBo0gkc6YYBHkCrCKwtsPIW4KboK3Oc4pnz2eLmAToUHuBhs9gXM91FdB1SiOytlsj2ALeDuTudNe6xjxyjUMhGGNTRxlHYyzEXWM/vSMarZu6lKoJRbI/yJXPzweHdcWPjYAKs0ItAebVi2t0+V579rW3IC2DX7lsAmlsRejdiQMhnGvLgTZR/Fyatv4cKAAS5i8NQ0RMlHWYqDeDAF31O3Dp9/w+WxqWTDlTGNSHDU3sXEr7bexWBiqB2kMtEDlECW2KR1BtSqd0i3jQjZ35cLZVYtRbFVyyqtiEB8DrRREm1KI9x+fKKrd4Do+iGAz87Vm1g/ZLRPH66Sz9kMyAUNPYKccha8KoGTrxSugGQWAQpylH8WPEdlm42XFVQMQ9ImSDSDbhKdtq9w4Xz6crDNfKvjbRo0k/MA2SXca3+x0dAT1mxyXm8cgummrIqQ/tRT4TuU3Ha/Fg10SuN+gTB0i23KhnTFlGwGeEaQXQjG4QD2knhh3mlD3D6oEUVag8T0GQS0KPYSQ6wp8NYH/IxbJQd1MuJVhmVFUswPCQAT8p6cIym3TvqGVkBtHv8MuFhwIRfAfWPgvHPsd1xt6RdJV6tXDLU59S0M7KrUutAbDOkTa0dK4H0V8EPtC28l+ameD8yeGjdF636L2vTqV7MSaBwj8DtVUhXYXKFlSECAHhH/gMJO0GECsIS3G3epRtggvoGc0YakWzc5PitG2YJ9ovtthQAeONUPLBXpEuEXmbnUaGAajBbzO1vw5iGZeZusRT5hmweCR7r0M8W5E6tUp7RY+ua6jt1sIdtMn3FL+Tcha6CuckgHFsAfBrR/MZlCjkyc7cRim96xh3zZKl1HjL+7YATwVON49lPPob8HI0g0M5wAWTY9b1pHJK8u7NNod4R+uIBgOoOsMrtGELb7kkbYR/IHfpsJiGVus6iD8D6gVo84bQm1AJAPsbbG2oQM6D6y3S/0qTYs5OIaN3mm4ZQBK2oH6X95EAkUndWpRI15HGjPML7a3TgOyaqicKLjQRdtw/lovece2ycBZq62ULWnqqGnhrXfH5U9xAV79oNiNDZRduEAyIi9hi3XehlH6RrMWmNj2fhfzHmOTcX6SEfgHhOww41nnzWV82sG/D7F8oGaz7iZIvVNqe9jf/B7ASYLhOoUV/aFlZ/FJOkE+17L6D/a4oCcmaWH5qCPFKc3lpQrwmP+7+Z2Bqi5vhLChbRFSXoh+qrOTN4QdhtCp1vQWUK2AxCKsEiBcjqDH/ETiGOc4iIUELMqdpT3xImI3gpEnVqulWzZpqPTg25lWUY3KtthAoSCEPkPNS+jGy7avCPYE5yTEXtQhnz8K2fFrNLw+dVK6AuVKXLgY0E8cV6WGyx3UsKjAi5YVsTBJ0HlMF71+EDSz8e4x9PfE5NGwT0HpF3A4xkaVlPkqOGXWsTmgj67Wqq7Xj9P5a8yOR7QDfi546mJo9UaFd9qNM3x8Mkfb0WsjT98Az41CgdhqGwhngcOOv+ysyKKvoTw1Kewcy7OSPbzpDrtgVwim5g7LkB9HAH8GsEreZYF0JKW/ED2Cb+86P5/hKQu1b8HK0g0KUblVW/h1nOMAgU+gMozl/HGBWjCtRJkxXMAL14uCfR7QtKNuMHSuqB+m+TVWWTERgOCtPIApVPiAeqa2WXPK6niBrx2u9ACM+kCpYjGzcoR2UA5BmAWF/37C/hzFrsE8GZFudHZmS7lLnRHuKPiSqoyUDpQ6oHYjuIUh4iNUr8BogZbhQPSP0kaNSXZkXQWPGKi040QnCGqxwCEditgpciQ0L2jdioKPqGyBsnM69LuO0TORNRtYhnFC1xxV6vDDEx332CliD0JZtO4XbMq1NPZDW9vjXtE8AqbzEL2RAS2ab7vmY0aWWggGgH+hTgl8Nac24hi5WPEYcb4AKVOhxVRstsk4lYk6GbQKg349DvNDMqyDdK2Cl+vYJZTOmqg8gSgkK1BALQpXWsA9n2xLeYhH3VFgq79SKkfTfBGlWsF/Q6vNVu1vLdxtRx0HiDLO+zOe6nWOXImJ11Ezg+c51FzUzPId/Ks1rgeibgZ2szOAc1QZo76FDPYAqABQfDSJzSkUYAkEzYxjc8DXSnmEYn+WjvCGNJ34QyQeUoDtmvW3znEVKKXCB5RTKI6lcg5sxhDajoWGFIK9BLcxHXy0KyclDsKh/E2n61mo40ZTXShYb4Nyn1I7BqFwruPBHN4doXA97c61JfEGqmolDDRC+Z5WLxqowxCwDklqwLYXwI6pV4xKtpRLp8+EY5lTHHSQnvabNpYn4PqN0H14/QiNGpQx1EQlf82UqQxUL2B6gYXsENpiRUuIcKXFx5OyJYZQb0szxaFOiBNha6k6GSCfjvi2vLBF3LjOHWOUTBCvELxNhK/QjKKdm/br9A7bUyzRs+y8Pw1JTnRi3QYsFwhfTJsz2pdrcW+R8CfH9UdZD618PUf8YZl1XOHFMPy3HlNbDMGOpEdAZwinmMW881r7LNDJLfnIhsQmhMqHgu2wHzRw7vE9A5E+1KknoDukOHOIdrN/4GcnY7adb0bRBK0v/fhYaCcKle+gWKZMr0FAWuD3ORQm+Gux2mdqXAGay2bJOiXPzEDc9Lbch10IpYNEnMJHvag3DQs7IahRlD9P+TubYDGCOqO8LwYR21R64U4LdMciLftmECJMsVNf3lXTG05xtCrq5DJU2KrWVphdALXF2yfwDYWnJ2r9UPqDnXw+a7wrgFcyravpCduKzlk2C1vKWDTZhKAlW+Tz+hNs1sGzTOGrdQTf02Tm5t2hkvBKsVIaIvUhtPUPG2QvEOIcVmXamGbrULYeHKcwfiQdOIFv2/Qjs5vly30hZBBtp6i9CiD9QGIJhLM8jQDSOM8WYCnCaVKUMTAsTnaoMYsr+ioA80Zd16XCsq1KrrGj0iXFRG2y6qK8hyZuELUzm1KQDMcJLI5aJ2vsKf0sCaViEWtP2Q93iLwNioWMQ79wvBjquakVCI0R1DIU3bQpUmZcGbxSaTmCYjZ8HqL2FeIWyIY5im0c0lMCEP4LmY7466uwg8EUAmSuLFgWwNQQuMeInpDcpA8sQnBMyY6/UaAE36/inaXFtEMgD0vdoGKMomo5OqbdxCYPOlWMBTNLK+sCnD0tK2wPPUfnDQSQfihF6JRtjhHmEa4W3eimXwyBv6UcBiv6GYpL20y8QB9pg3IAlC5RLhZqAfjDKdb+5rh6MVcxDFP5fU/FP8rLqlWvb+E5HKzdYGlJBW+QsBl0k6a/efMXvE5B7BUk25S9kooQtj7N1OLuFrXnqH9HL3HDJ56nRWyQSclPyv6CaqGOEYdQ5URL72PNJVdQ/ATYGaArQeU+nDqCfvLfqXUFQD/AqwFarIUSML0HrEIUw+zWtv0JIScR2Lbj5Yr8JDq27OvQWvEvQvrhatsQ6KQkm5azmNYP1HZ0SmDnaLPAMo04FtfLoiQPS+Xo3MtWQfeoc8fodcpbb9ysAWqZ/LYY0LTyhS81oI4BZRAghmib04gNzfkilUM5irwMo99oOoBeT47NyrnoPUC3GtEouwOawTBKUxbKT/QOgmQI6rxol7aGV9sYtqvlQhwMzgCjVqcyZTihnfP2oMqYEvfspDMQN9mkfiScYjTHfwJgO/UXNSW28JSgg8JeZS9+12LyClf8riV0ML0xGRAbdULT4bgmFZRax1/ddBBLMfLQ6cknTBq0jknhs6hIjq1rgvDKGFQcwp3eEHKQjmQ5u39gMK9RpUZpmpbU54vRd8X0DSfowuiW1fWMWM3U+8C7bYXfh0oB2OkKsarAeRrqlnEdy0+lliut2vR24nDhmjcsOLBHzxmwpcS4ppQk2FyD65yOfa5hma6kvX3w29Jxdy6my0PAbsUeRkGyQA6zrUCKLe9S5VD7fFuBpa+SKItR3Yu3KQpRWT5iCer6IlYfOJcrUmoH2WmaKJ+B6VF9oQFV9gHHTgNsnkqBo22FtnVW2YjqgfiAnWG6OiBwieEtrWwRj7SD5HNeLSFuos6m4iBkc6aH8sltapvDU3fx3weQ6qWvPFOSj0CPdOdbmM1T+gF6NVCZhmEXzhej5dqsxu5MxEkBIEtZ8EXEGoTz4KlMC5IZHLNNU9cJDjyvFdICdYaVbHuH1SxX+4P3kXbQXazlVMb/V+m9mh4yMGcyv7sQ/Rc4fdL8QPnps/LOLwjbeaQNZ9aFLXBbqOnFlnH7GP8YKo06OvmNoH6yp+23o6hjKYF5yrDop2YF9bsBJBxb1+EUcfDOAsoPQFuATplcshPpmpFoAOsG08fiGUbt2O/UcT2C4D1O4wdWq6CWx2rjDgzsCNVWl8Xo+0B5GQRsu9mOWpMY+QpUFyDzW7lVtvjNVNpsL3UsmWyPTwlWycVSlnCWAwA1lC0hTo4OAku0wXzHBfclQYLCuAfKg7RT4Wr5eAHyzFNyifp5lFio+Iu64cBgMrkqMG4rhbGIdgPZFsTpR7NamjXBPIVvXvLBJDrYjU7pbXNoe9Yl3r9p627eauPYPoxftbAopKut43ghmnKa1Ee+gdku1GwTe404th1KV75WBagvw9liGYvKjX/Bif4oO9EOTixnuk+xabfWp5E6JZiDi2sF7S1VPpUmpxRf09zy4PbQ3tJghrUStECinb0H4UAWNLGl2BJiWpLUM7hvg2onXS8NFDflWgdYZR/UEnVQ+EsJ4Ava6FwAlu0/7GSihrpxKGJxoUztPfZ1wPgbseMRd11rfssn3oFWNTLcUasY6Xw16bEW6scgXeATQ4NnXQ+pU3cb0iTfC4F5DLUBul0QNudoBa8MpYJ5K93Y5ku7FrEKAAVQ6UfoYu0htpQUtcxnW7m/PaiyCqUVSpfA/AmMz7DlNyhHi04HHfeCbj+oY9RPEM5H3VxoWdbLH12RyKVlLR7RAywxNgpVKHHC0usWNRrtg5QHgtTBztDwU4buFhjGoYrdfqlSsCsAvO308ItubCkK1u068NhVzFxC3TEt73pBKQQo5mlvwZIxZQV3aZN/iFNanvwQGBcAWjOgVAJOpYI4Jfwc0teCda5WwPdoXOdI2S5XGgNj+e2yzLYQvjSg3wA+vok6dhHIS/F/y06pUTaWnwIf29SwhKgEJdJ742xtynG+Q/x/Ooe54d2aDi52oWIb1XOQCgaALp0DNdN/zlTTlmuj8usGlPanvgWLLaD+Rn07KrcDDpt1/Bn1bOO7CPKvAJIFj2aAfoa/yxL4LI26B6P58LoTAUPB1g27Fd1KGtGZjKUJZOhcIEhhpgfIXCvynKvRwoNWFscvgvALbdJxgd84T7binC20K6L9PJ7fhN3SAMbi3QOImIA3n/E+j36TpGD6KnXdWrbZhQu7e/Mdge14ZR0LpKDQig5czKVRwMZsy+e3rYddrvqpqH+VVukHSvq+QvBFDJZKc7s/s4Mb3CLuCjjW4x559Jdd6nkqIWwcfNNguizVNpTT0AOtQ8S0pNhM4LKEZR9lWHQxZN6hWBVUfamxQW+Jg1eN0uvL8Yh551hZ0ktK1YyE5jNKHFLTMu1dtpF+QP8dhW//gppNVXbQ8EjvCNUibkIpBtUY0bJ3DmC5jtLR2CICYSphuKiO9kshqSyE3YFVGo7wDSuN0FvWGD/mtV3pwDJnWpYcQzcDNSNQ3Vp2QbMBe4xpmT6klM8DRJ/n7R0lNfC2AfySGcuy87ywxKfjWkLkO17s4S6VeHAgPlsN03OdDPYqJ6ICO7wp8bdMIY1xJQD2KXcnGxU2tPGb53s8zCxeYTGcY1pZiNJbJzB1OEsZ4rRT5geVn5Q/USsT7GdpbUn5qYBWhPI2Kx0i1YDiUs8ANQ7WFoa80N4iAze0VN0Gm8iawadMtzLSQfZWt+hs/VGqWJmtHC2fZRwiMZqDLayYA+tXDZl2OLqgzWM1yNkO6VIbvkrdubvhU66tyT3tLPcigbc5uvc3pLMBy/X6gL4dfpzqvG0cWnZ8UkLbQmpUQGmbpwhdNAqGlw/SXmu+6MIGLsPqFfE60etU0Qk7w/LX1axrGMxgiT0FWR40tlgGUAaK3qBAtm5+pSPeli5OxOgg7gTcEnS37AnMnlEtE6Z2aFePtet0ernFmwBtWq6wwDpC21x8qtzUIESuVBKP3f9L4u8Yw8Kz9sAd9LNbZ0tXtEaV8euKxKyNvJ7hZ1l7qzYs0A9xu342jEAr6hUFELKcxUYluIYqxDSsnVQjb1thfUA3S1FysrnEpAbFcNCrpl9YQNLy2b1guY7h7eSmTklt5q5xSiN4RiQb8ywc06IV1D3vA6Cepih3Pi71Lut3wK+L8lzc2GXn3ZZ4XQqTdL6N0XCFqmuwXNGpSYhylAsx3BhkFmWr7yh8omQZS9ssxDE+dRtsV9mNbYhUBXZ9ytAdQWBbe9rVthRdXbAMU8uz3tWFR4snjSsGOoBgqXCdBsAExQZ/ImgnPaKet3YaN6llxB8lgf5Qtp2rTye4dshkV6eedMcuA5zOZMx5rVuGMK+fbhSZt9vNowdGkXXNvn3KaMkAD7tIapGc70ohz9C2bw2asQg7qvPhdyXAxoOi5SeuQ9muhNrKdAuVhnSLqUv5uRPKrDtW2s4f6A0jV4LyWaagtqYMliPqZjquKPSOAYldXUJ5RWebcjZ0py4DPRP/n0vbAH62LrVt5oKuYeZRewUvttW8efcv+kwAFrPdqyXqveqo+gYr5Oji4iW15wHqFqHScLloVFtVdnAbqn/T8HygS4wfKHCNc+1SZ0P5pRPQ/MATKnVA1ajQly+tuywqEYZX28KrHx/u10W4Y7pTj/Y/8fJ0O43yV7etx6BzWMxEm8KgS3z/w5MtCbJ0ZSeCth+oYxcX7OLtPILYrNGmecauqkTz2+7+ReESrVhhgsnKD0u2KrAWgqUbkOcE3n+o80b5pFL/oyk74l0hZZa1Oq4Li651fC0GAh/oH6aMWosTraN5Hx3aAi62wU8HActkKNBllVnM7aNTl3Z1Ytsp2MXEOr7VabDcR7ERnQBcsChYBZQ8ZbAcKmkjAeGOsESibrrOQTsGfhZJWsDelp1XLAjtyDcPxeeh2aCF5DKw3EL3HYUsJXPCLsLZRm9ARzpFWht64GNR2jTb8sCPjmrnkpbDOIKY0yj1oT2BJyTtNkwYdfuVkuCHRf4pFDCNgkcwscTyU9SwdNcz7NOj+9o+dPQo4PBUtksyzhUH/w4lfsZR8xlxV7Chxas9eNqkf73ihjFKCrVj4RHoLAMhCuwpAHKnvM4XSJZjuA2dlltGfxBPS2i6Tre0q5+WdDGIAmm6exmrdPxAKNjRs+VSN2pBnaNbwAXa/DwieLgmOkvgtlXVLEJ90CZKiYZ2FdqtCKwnpZYTtvj/q9VtSkO2i3rmcCOAla3LvIPUtsD/Nyx2YlvKKyWW3eP5qRAZwnwfIL+AUJE0sCz+aIa/fBCb4G85DLoVSlzjaRNCdiS1gVtsK0XcDTXb9WbpqsgteOYjUCNvsnU/6lznPrG6kfaqnVk8olhApxEIXkF2HiC2kcHSUGyOrkD5H5TtK0Z0Tsso+uOOMrx+mQXaNS7Y2mMaNew00K30g36t7q9gGqUrBwdaSN3TgV5llwz0t4vSs4xcOXTpITDagJbdDE+H7RzGXlUENF1r9yAcYwx7ZSnfaEA5oDcKDTxQ9790cluyXStNzTZKKUBwrnOIB53UpSo18xa6/y1aLGzpykFw2zjbzaQ7WNcqAe9Mdx9X1EkfYZLEVBQC1j/AKZMx+QTxz3WYYWlRdmpi972G8PdIHGUJwkcMt62IkKmL1NU82/0BS2+zZNcF+lsxNbqxo7dOiW2ts62wst3St+zTYcCJhtaLslYCaGVD6SPfL4Db5m+7d+5K1d3EP7Bv0JXyMaU6XeimdaqOUtNRJgNhvbRvtcy5SrzXBjlLRLZQq203n8E2Rac4hYojJClh2IKHq6B2gQCN2hCGgdseii4ibhFch3lnixNfaLSh4BswnindOAUA7Jq1v24Z/qW8USf6LdpY2U7dDhJddirVjzAHCNavw4xZpTadgEQK4j9DJoAGNxh1S3eInlHxpw6iQnVz2675TKGGzdmPGP4CNpY0Gcs7fxhZhsU9Thqoa0Mv1LIL6xO6mfSpRUwsNj/F/eyWaxGtPYEuQvdnRngeRT3L4KjWv2iIVkx1Bnm+wbfAcX1QfEvhiNLoahC8S7dKP3TElMdscKWRIRLPvGQ86eBdkmIY1zoUtKD8FTZ5gZUdrH4HF8tdf9RFku/K9J9U1norZVHgnwfzRiCwlOI8pS99KF/OCxXmlMLQoQTwT+ofKaFkmnbZ2MFug7cpFWFc5zRddkpZrgyUaZhG639KpCkMNcvLUOUPVeGF2wpz/KPULidXyZlu+Smh5F4u8N/x0xAE7cptulLIp3j/hRqFClBZ+lQ5XK7oM+G6q31KmTnlNBxmqfGm5fOXIPwHWDZVZTNgPADXGuOP5cGv06eCFQdp0yI+yXGdarU/QpUXRZ6fYJtOlUn9A4wg/b+NImyzi+BDMH/DvN0gtIFpe0HjGEFtXW630SwpKVsrxiJloVgmnU2OlqhtZwG3upW5r/8YcaGYdZTWQxF8H1QquOUEVWK3CNBv0G74x/9PTEsVV+pQKNNm62xktCM/LJCmO2F9+tcXduU/F3XCdIfsGqUqlO32hOOU4i712p4EKBD2oYE3WevXIfw9UJ05WP8BJRgXKaZlKKh/UD8Dd3zQ7SNf3UpO1rF3oe5I3cC3Choxuqu3hgynujpxrEPvK8p3dGUxmFFxTqc0bfq/Kqko8cdxveo/pRwrj3YXZtW6R9oIkXjMZ5cQA8E5TiERiyLMIEgy9TapUUxJMU8HWi9dYQv7BzH2nyE+dDPyTP+eJJueYQkDY6hqm59NbdKX4bIF+rU6fTmn9q1S9ifB+VOXryuwQxy/p4EyDtfM0r7xUV13AD85AM5kx5UMEpap9aWEvy8Yv2o5XYzmOZotN1HBIjePoPeKtSJB1pKQo3nKYYqzk0wvTDur5IJy3CJAR6ulSt1JQ6hp3tq1ZgvlTsD4vywjmx5v4dCAwnk6o7aDjhrGszGAGoHP3P/PaXpoO6XdRTv2r8WhfeD8qU2s67/00id+LMPHjpTalGbm1r9OmNXxnyVqJytyeq5bS4difoc4dtvY8ut89S9ELEDwgeCWzzAMhv94c6d9k110NsPnaeyIVvThWbc5+hSbntSKKRpRW/GGHOVXbGgF/MT7eaA6QuAJyRFLu3beJlG/2fkfjKV/lT862UYAAAAASUVORK5CYII=");
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

img { max-width: 100%; height: auto; display: block; }

.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.container-narrow { max-width: 860px; }

/* ---------- Typography ---------- */
h1, h2, h3, h4 {
  font-family: var(--display);
  font-weight: 500;
  color: var(--forest);
  line-height: 1.1;
  margin: 0 0 0.5em;
  letter-spacing: -0.01em;
}
h1 { font-size: clamp(2.8rem, 6vw, 5rem); text-wrap: balance; }
h2 { font-size: clamp(2.1rem, 4vw, 3.4rem); text-wrap: balance; }
h3 { font-size: clamp(1.3rem, 2vw, 1.65rem); }
h4 { font-size: 1.15rem; }

p { margin: 0 0 1.1em; color: var(--ink-soft); }
a { color: var(--berry); text-decoration: none; transition: color 0.2s var(--ease); }
a:hover { color: var(--berry-deep); }

.script {
  font-family: var(--script);
  font-weight: 400;
  color: var(--berry);
  letter-spacing: 0.01em;
}
.eyebrow {
  font-family: var(--script);
  font-size: clamp(1.35rem, 2.2vw, 1.75rem);
  color: var(--berry);
  display: block;
  margin-bottom: 0.15em;
  line-height: 1.2;
}
.overline {
  font-family: var(--body);
  font-size: 0.72rem;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--olive);
  font-weight: 500;
  display: block;
  margin-bottom: 1em;
}
.lead { font-size: 1.15rem; color: var(--ink-soft); }
.center { text-align: center; }
.center p, .center .lead { margin-inline: auto; }
.measure { max-width: 62ch; }
.measure-sm { max-width: 48ch; }

::selection { background: var(--blush); color: var(--berry-deep); }

/* ---------- Buttons ---------- */
.btn {
  --btn-bg: var(--berry);
  --btn-fg: #fff;
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 15px 34px;
  border: 1px solid transparent;
  border-radius: 999px;
  background: var(--btn-bg);
  color: var(--btn-fg);
  font-family: var(--body);
  font-size: 0.82rem;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  cursor: pointer;
  overflow: hidden;
  transition: transform 0.35s var(--ease), box-shadow 0.35s var(--ease), background 0.3s var(--ease), color 0.3s var(--ease);
}
.btn:hover { transform: translateY(-2px); box-shadow: var(--shadow); color: var(--btn-fg); }
.btn svg { width: 17px; height: 17px; flex: none; }

.btn-outline {
  --btn-bg: transparent;
  --btn-fg: var(--olive-deep);
  border-color: var(--olive);
}
.btn-outline:hover { --btn-bg: var(--olive); --btn-fg: #fff; }

.btn-light {
  --btn-bg: transparent;
  --btn-fg: var(--paper);
  border-color: rgba(250, 247, 241, 0.55);
}
.btn-light:hover { --btn-bg: var(--paper); --btn-fg: var(--forest); }

.btn-wa { --btn-bg: #25d366; --btn-fg: #fff; }
.btn-wa:hover { --btn-bg: #1eb857; }

.btn-sm { padding: 11px 24px; font-size: 0.72rem; }
.btn-lg { padding: 18px 44px; font-size: 0.85rem; }

.link-arrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--olive-deep);
}
.link-arrow::after {
  content: "";
  width: 26px; height: 1px;
  background: currentColor;
  transition: width 0.3s var(--ease);
}
.link-arrow:hover { color: var(--berry); }
.link-arrow:hover::after { width: 40px; }

/* ---------- Ornaments ---------- */
.laurel {
  display: block;
  width: 190px;
  margin: 0 auto 22px;
  opacity: 0.95;
}
.rule {
  width: 64px; height: 1px;
  background: var(--gold);
  border: 0;
  margin: 26px 0;
}
.center .rule { margin-inline: auto; }

.bike-divider {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 22px;
  padding: 8px var(--gutter);
  color: var(--gold);
}
.bike-divider::before,
.bike-divider::after {
  content: "";
  height: 1px;
  flex: 1;
  max-width: 260px;
  background: linear-gradient(90deg, transparent, var(--gold));
}
.bike-divider::after { background: linear-gradient(270deg, transparent, var(--gold)); }
.bike-divider img { width: 96px; opacity: 0.85; }

/* ---------- Top strip: what the shop does, on a slow loop ---------- */
.alert-bar {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 260;
  height: var(--alert-h);
  display: flex;
  align-items: center;
  background: var(--berry);
  color: #fff;
  overflow: hidden;
  white-space: nowrap;
}
.alert-track {
  display: inline-flex;
  align-items: center;
  gap: 58px;
  padding-left: 58px;
  animation: marquee 70s linear infinite;
  will-change: transform;
}
.alert-track span {
  font-size: 0.72rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  font-weight: 400;
  display: inline-flex;
  align-items: center;
  gap: 58px;
}
.alert-track span::after { content: "✿"; opacity: 0.7; letter-spacing: 0; }

/* ---------- Header ---------- */
.site-header {
  position: fixed;
  top: var(--alert-h);
  left: 0; right: 0;
  z-index: 200;
  padding: 10px 0;
  transition: background 0.4s var(--ease), box-shadow 0.4s var(--ease), padding 0.4s var(--ease);
}
.site-header::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(250, 247, 241, 0.95), rgba(250, 247, 241, 0));
  pointer-events: none;
}
.site-header.scrolled {
  background: rgba(250, 247, 241, 0.97);
  box-shadow: 0 1px 0 rgba(107, 122, 69, 0.14);
  padding: 4px 0;
}
.site-header.scrolled::before { opacity: 0; }

.site-header .container { max-width: none; padding-inline: clamp(20px, 2.4vw, 44px); }
.header-inner {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
}
.brand { display: flex; align-items: center; flex: none; }
.brand img {
  height: 88px;
  width: auto;
  transition: height 0.4s var(--ease);
}
.site-header.scrolled .brand img { height: 62px; }

.main-nav { display: flex; align-items: center; gap: 28px; }
.main-nav a {
  position: relative;
  font-size: 0.78rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  font-weight: 400;
  color: var(--forest);
  padding: 6px 0;
  white-space: nowrap;
}
.main-nav a::after {
  content: "";
  position: absolute;
  left: 0; bottom: 0;
  width: 0; height: 1px;
  background: var(--berry);
  transition: width 0.32s var(--ease);
}
.main-nav a:hover, .main-nav a[aria-current="page"] { color: var(--berry); }
.main-nav a:hover::after, .main-nav a[aria-current="page"]::after { width: 100%; }

.header-actions { position: relative; z-index: 2; display: flex; align-items: center; gap: 12px; flex: none; }
.header-phone {
  display: flex;
  flex-direction: column;
  line-height: 1.15;
  text-align: right;
  color: var(--forest);
  font-size: 0.95rem;
  letter-spacing: 0.04em;
}
.header-phone small {
  font-size: 0.62rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--olive);
}

/* Open / closed indicator */
.shop-status {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 7px 15px 7px 12px;
  border: 1px solid rgba(201, 185, 138, 0.8);
  border-radius: 999px;
  background: rgba(255, 253, 249, 0.7);
  font-size: 0.68rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-soft);
  white-space: nowrap;
}
.shop-status .dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--ink-soft);
  flex: none;
}
.shop-status.is-open { color: var(--olive-deep); border-color: rgba(107, 122, 69, 0.5); }
.shop-status.is-open .dot {
  background: #3f9e57;
  box-shadow: 0 0 0 0 rgba(63, 158, 87, 0.6);
  animation: pulse 2.4s infinite;
}
.shop-status.is-closed .dot { background: #c2566e; }
.shop-status b { font-weight: 500; }
.shop-status .detail { opacity: 0.72; }
@keyframes pulse {
  70% { box-shadow: 0 0 0 7px rgba(63, 158, 87, 0); }
  100% { box-shadow: 0 0 0 0 rgba(63, 158, 87, 0); }
}

.nav-toggle {
  display: none;
  width: 46px; height: 46px;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 6px;
  background: none;
  border: 1px solid var(--gold);
  border-radius: 50%;
  cursor: pointer;
}
.nav-toggle span {
  display: block;
  width: 18px; height: 1.5px;
  background: var(--forest);
  transition: transform 0.3s var(--ease), opacity 0.2s var(--ease);
}
.nav-open .nav-toggle span:nth-child(1) { transform: translateY(7.5px) rotate(45deg); }
.nav-open .nav-toggle span:nth-child(2) { opacity: 0; }
.nav-open .nav-toggle span:nth-child(3) { transform: translateY(-7.5px) rotate(-45deg); }

/* ---------- Sections ---------- */
.section { padding: clamp(70px, 9vw, 130px) 0; position: relative; }
.section-tight { padding: clamp(50px, 6vw, 80px) 0; }
.bg-paper { background: var(--paper); }
.bg-warm { background: var(--paper-warm); }
.bg-white { background: var(--white); }
.bg-forest {
  background:
    radial-gradient(circle at 15% 20%, rgba(107, 122, 69, 0.55), transparent 55%),
    linear-gradient(160deg, #3a4626, #26301a);
  color: var(--paper);
}
.bg-forest h1, .bg-forest h2, .bg-forest h3 { color: var(--paper); }
.bg-forest p { color: rgba(250, 247, 241, 0.75); }
.bg-forest .overline { color: var(--sage-soft); }
.bg-forest .eyebrow { color: #eab3c4; }

.section-head { margin-bottom: clamp(40px, 5vw, 64px); }

/* ---------- Hero ---------- */
.hero {
  position: relative;
  min-height: 100svh;
  display: flex;
  align-items: center;
  padding: calc(150px + var(--alert-h)) 0 90px;
  overflow: hidden;
  background:
    radial-gradient(ellipse at 78% 18%, rgba(242, 215, 224, 0.75), transparent 58%),
    radial-gradient(ellipse at 8% 82%, rgba(184, 195, 154, 0.45), transparent 55%),
    linear-gradient(165deg, var(--paper) 10%, var(--paper-warm) 70%, var(--sand) 100%);
}
.hero-grid {
  position: relative;
  display: grid;
  grid-template-columns: 1.02fr 0.98fr;
  gap: clamp(32px, 5vw, 70px);
  align-items: center;
}
.hero h1 { margin-bottom: 0.3em; text-wrap: balance; }
.hero h1 em {
  font-style: normal;
  font-family: var(--script);
  color: var(--berry);
  font-size: 1.08em;
  display: inline-block;
  transform: rotate(-2deg);
}
.hero-sub { font-size: 1.18rem; max-width: 46ch; }
.hero-actions { display: flex; flex-wrap: wrap; gap: 14px; margin: 32px 0 30px; }

.hero-media { position: relative; }
.hero-media .arch {
  border-radius: var(--arch);
  overflow: hidden;
  box-shadow: var(--shadow-lg);
  aspect-ratio: 6/7;
  background: var(--sand);
}
.hero-media .arch img { width: 100%; height: 100%; object-fit: cover; object-position: center 45%; }
.hero-media::after {
  content: "";
  position: absolute;
  inset: 18px -18px -18px 18px;
  border: 1px solid var(--gold);
  border-radius: var(--arch);
  z-index: -1;
}

.badge-float {
  position: absolute;
  left: -34px; bottom: 42px;
  background: var(--white);
  border-radius: 999px;
  padding: 14px 24px 14px 16px;
  display: flex;
  align-items: center;
  gap: 12px;
  box-shadow: var(--shadow);
  z-index: 2;
}
.badge-float .stars { color: var(--berry); letter-spacing: 2px; font-size: 0.85rem; }
.badge-float strong { display: block; font-family: var(--display); font-size: 1.5rem; color: var(--forest); line-height: 1; }
.badge-float small { font-size: 0.68rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-soft); }

/* ---------- Marquee ribbon ---------- */
.ribbon {
  background: var(--olive-deep);
  color: var(--paper);
  padding: 16px 0;
  overflow: hidden;
  white-space: nowrap;
}
.ribbon-track {
  display: inline-flex;
  align-items: center;
  gap: 44px;
  animation: marquee 34s linear infinite;
  will-change: transform;
}
.ribbon-track span {
  font-family: var(--display);
  font-size: 1.15rem;
  letter-spacing: 0.06em;
  display: inline-flex;
  align-items: center;
  gap: 44px;
}
.ribbon-track span::after {
  content: "✿";
  color: var(--blush);
  font-size: 0.85rem;
}
@keyframes marquee {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

/* ---------- Split ---------- */
.split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(34px, 5vw, 76px);
  align-items: center;
}
.split-reverse .split-media { order: 2; }
.split-media img {
  width: 100%;
  height: auto;
  aspect-ratio: 4/5;
  object-fit: cover;
  object-position: center 45%;
  border-radius: var(--radius);
  box-shadow: var(--shadow);
}
.split-media.arch-media img { border-radius: var(--arch); }

.stat-row {
  display: flex;
  flex-wrap: wrap;
  gap: clamp(24px, 4vw, 52px);
  margin-top: 34px;
  padding-top: 28px;
  border-top: 1px solid rgba(201, 185, 138, 0.55);
}
.stat-row div { min-width: 90px; }
.stat-row strong {
  display: block;
  font-family: var(--display);
  font-size: 2.1rem;
  font-weight: 500;
  color: var(--berry);
  line-height: 1;
}
.stat-row span {
  font-size: 0.68rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

/* ---------- Cards ---------- */
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 26px; }
.grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 30px; }
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; }

.card {
  position: relative;
  background: var(--white);
  border: 1px solid rgba(201, 185, 138, 0.4);
  border-radius: var(--radius);
  padding: 38px 30px 34px;
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease), border-color 0.4s var(--ease);
}
.card:hover { transform: translateY(-6px); box-shadow: var(--shadow); border-color: var(--gold); }
.card h3 { margin-bottom: 0.4em; }
.card p { font-size: 0.95rem; margin-bottom: 0; }
.card-num {
  font-family: var(--display);
  font-size: 0.95rem;
  letter-spacing: 0.2em;
  color: var(--gold);
  display: block;
  margin-bottom: 16px;
}

/* Image-led occasion card */
.tile {
  position: relative;
  display: block;
  margin: 0;
  border-radius: var(--radius);
  overflow: hidden;
  aspect-ratio: 4/5;
  box-shadow: var(--shadow-sm);
  background: var(--sand);
}
.tile img {
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: center 42%;
  transition: transform 0.9s var(--ease);
}
.tile:hover img { transform: scale(1.06); }
.tile-body {
  position: absolute;
  inset: auto 0 0 0;
  padding: 28px 24px 24px;
  background: linear-gradient(0deg, rgba(35, 43, 24, 0.88), rgba(35, 43, 24, 0.45) 55%, transparent);
  color: var(--paper);
}
.tile-body h3 { color: var(--paper); margin-bottom: 0.2em; font-size: 1.4rem; }
.tile-body p { color: rgba(250, 247, 241, 0.82); font-size: 0.9rem; margin: 0; }

/* ---------- Gallery ---------- */
.masonry { columns: 3; column-gap: 18px; }
.masonry figure {
  margin: 0 0 18px;
  break-inside: avoid;
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
}
.masonry img { width: 100%; transition: transform 0.8s var(--ease); }
.masonry figure:hover img { transform: scale(1.05); }

/* ---------- Testimonials ---------- */
.quote-card {
  background: var(--white);
  border-radius: var(--radius);
  padding: 46px 34px 34px;
  position: relative;
  border: 1px solid rgba(201, 185, 138, 0.4);
  margin: 0;
}
.quote-card::before {
  content: "”";
  position: absolute;
  top: 6px; left: 26px;
  font-family: var(--display);
  font-size: 5rem;
  line-height: 1;
  color: var(--blush);
}
.quote-card p {
  font-family: var(--display);
  font-size: 1.28rem;
  font-style: italic;
  color: var(--forest);
  line-height: 1.45;
  position: relative;
}
.quote-card cite {
  font-style: normal;
  font-size: 0.72rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--berry);
}
.quote-card .stars { display: block; color: var(--gold); letter-spacing: 3px; margin-bottom: 14px; font-size: 0.8rem; }

/* ---------- Page banner (inner pages) ---------- */
.page-banner {
  position: relative;
  padding: calc(clamp(150px, 20vw, 220px) + var(--alert-h)) 0 clamp(60px, 8vw, 96px);
  text-align: center;
  overflow: hidden;
  background:
    radial-gradient(ellipse at 50% 0%, rgba(242, 215, 224, 0.6), transparent 60%),
    linear-gradient(170deg, var(--paper), var(--paper-warm));
}
.page-banner h1 { margin-bottom: 0.2em; }
.page-banner p { max-width: 58ch; margin-inline: auto; }
.page-banner .bike-ghost {
  position: absolute;
  right: -40px; bottom: -30px;
  width: 340px;
  opacity: 0.12;
  pointer-events: none;
}

/* breadcrumbs */
.crumbs {
  font-size: 0.68rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-bottom: 18px;
}
.crumbs a { color: var(--olive); }
.crumbs span { color: var(--gold); margin: 0 8px; }

/* ---------- Price list ---------- */
.price-list { list-style: none; margin: 0; padding: 0; }
.price-list li {
  display: flex;
  align-items: baseline;
  gap: 14px;
  padding: 16px 0;
  border-bottom: 1px dashed rgba(201, 185, 138, 0.6);
}
.price-list .name { font-family: var(--display); font-size: 1.25rem; color: var(--forest); }
.price-list .dots { flex: 1; border-bottom: 1px dotted rgba(111, 104, 87, 0.4); transform: translateY(-4px); }
.price-list .price { font-family: var(--display); font-size: 1.2rem; color: var(--berry); white-space: nowrap; }
.price-list .note { display: block; font-size: 0.85rem; color: var(--ink-soft); }

/* ---------- Fabric swatches ---------- */
.swatch-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
}
.swatch {
  aspect-ratio: 1/1;
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  position: relative;
  overflow: hidden;
  display: grid;
  align-content: end;
  padding: 14px;
}
.swatch span {
  position: relative;
  z-index: 2;
  font-size: 0.62rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #fff;
}
/* keeps the white label readable on the pale swatches too */
.swatch::before {
  content: "";
  position: absolute;
  inset: auto 0 0 0;
  height: 55%;
  background: linear-gradient(0deg, rgba(38, 44, 28, 0.55), transparent);
  z-index: 1;
}
.swatch::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: repeating-linear-gradient(45deg, rgba(255,255,255,0.14) 0 2px, transparent 2px 6px);
  mix-blend-mode: overlay;
}
.sw-linen { background: #d8cdb6; }
.sw-sage { background: #8c9a6b; }
.sw-berry { background: #a8385a; }
.sw-olive { background: #5c6a3a; }
.sw-blush { background: #e2b9c6; }
.sw-stone { background: #b8ae9c; }
.sw-ink { background: #3c4430; }
.sw-gold { background: #c2ab72; }

/* ---------- Steps ---------- */
.steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 30px; counter-reset: step; }
.step { position: relative; padding-top: 56px; }
.step::before {
  counter-increment: step;
  content: "0" counter(step);
  position: absolute;
  top: 0; left: 0;
  font-family: var(--display);
  font-size: 2.6rem;
  color: var(--blush);
  line-height: 1;
}
.step h3 { font-size: 1.3rem; }
.step p { font-size: 0.95rem; }

/* ---------- CTA band ---------- */
.cta-band { text-align: center; }
.cta-band .btn-row { display: flex; justify-content: center; gap: 16px; flex-wrap: wrap; margin-top: 30px; }

/* ---------- Contact ---------- */
.info-list { list-style: none; margin: 0; padding: 0; }
.info-list li {
  display: flex;
  gap: 16px;
  padding: 20px 0;
  border-bottom: 1px solid rgba(201, 185, 138, 0.45);
}
.info-list .ico {
  flex: none;
  width: 42px; height: 42px;
  border-radius: 50%;
  border: 1px solid var(--gold);
  display: grid;
  place-items: center;
  color: var(--olive);
}
.info-list .ico svg { width: 18px; height: 18px; }
.info-list strong {
  display: block;
  font-size: 0.68rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--olive);
  margin-bottom: 3px;
  font-weight: 500;
}
.info-list a, .info-list span { color: var(--ink); font-size: 1.02rem; }

.hours-table { width: 100%; border-collapse: collapse; }
.hours-table td { padding: 13px 0; border-bottom: 1px solid rgba(201, 185, 138, 0.4); font-size: 0.98rem; }
.hours-table td:first-child { color: var(--forest); }
.hours-table td:last-child { text-align: right; color: var(--ink-soft); }
.hours-table tr.today td { color: var(--berry); }

.map-frame {
  width: 100%;
  min-height: 420px;
  height: 100%;
  border: 0;
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  filter: saturate(0.85);
}

/* ---------- Footer ---------- */
.site-footer {
  background: linear-gradient(170deg, #34401f, #222b14);
  color: rgba(250, 247, 241, 0.72);
  padding: 76px 0 32px;
}
.footer-grid {
  display: grid;
  grid-template-columns: 1.3fr 1fr 1fr 1.2fr;
  gap: 44px;
  padding-bottom: 46px;
  border-bottom: 1px solid rgba(250, 247, 241, 0.14);
}
.footer-logo {
  width: 190px;
  height: auto;
  background: var(--paper);
  border-radius: var(--radius);
  padding: 12px 16px;
  margin-bottom: 20px;
}
.site-footer h4 {
  color: var(--paper);
  font-size: 0.72rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  font-family: var(--body);
  font-weight: 500;
  margin-bottom: 18px;
}
.site-footer p { color: rgba(250, 247, 241, 0.68); font-size: 0.93rem; }
.footer-nav { list-style: none; margin: 0; padding: 0; display: grid; gap: 11px; }
.footer-nav a { color: rgba(250, 247, 241, 0.72); font-size: 0.93rem; }
.footer-nav a:hover { color: var(--blush); }
.footer-social { display: flex; gap: 12px; margin-top: 18px; }
.footer-social a {
  width: 40px; height: 40px;
  border: 1px solid rgba(250, 247, 241, 0.28);
  border-radius: 50%;
  display: grid; place-items: center;
  color: var(--paper);
  transition: background 0.3s var(--ease), border-color 0.3s var(--ease), transform 0.3s var(--ease);
}
.footer-social a:hover { background: var(--berry); border-color: var(--berry); transform: translateY(-2px); }
.footer-social svg { width: 17px; height: 17px; }
.footer-bottom {
  padding-top: 26px;
  display: flex;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  font-size: 0.78rem;
  color: rgba(250, 247, 241, 0.5);
}

/* ---------- Floating WhatsApp ---------- */
.wa-float {
  position: fixed;
  right: 22px; bottom: 22px;
  z-index: 300;
  display: flex;
  align-items: center;
  gap: 0;
  background: #25d366;
  color: #fff;
  border-radius: 999px;
  padding: 15px;
  box-shadow: 0 14px 34px -10px rgba(37, 211, 102, 0.75);
  transition: gap 0.35s var(--ease), padding 0.35s var(--ease), transform 0.3s var(--ease);
}
.wa-float svg { width: 28px; height: 28px; flex: none; }
.wa-float span {
  max-width: 0;
  overflow: hidden;
  white-space: nowrap;
  font-size: 0.78rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  transition: max-width 0.4s var(--ease);
}
.wa-float:hover { gap: 10px; padding-right: 24px; color: #fff; }
.wa-float:hover span { max-width: 190px; }

/* ---------- Reveal ---------- */
.js .reveal { opacity: 0; transform: translateY(18px); transition: opacity 0.6s var(--ease), transform 0.6s var(--ease); }
.reveal.in { opacity: 1; transform: none; }
.reveal-d1 { transition-delay: 0.07s; }
.reveal-d2 { transition-delay: 0.14s; }
.reveal-d3 { transition-delay: 0.21s; }

@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
  .ribbon-track, .alert-track { animation: none; }
  html { scroll-behavior: auto; }
}

/* ============================================================
   Responsive
   ============================================================ */
/* Header width budget, measured in-browser at 1024-1920 (see tools/check.py):
   logo · 8-item nav · open/closed · phone · order · language. The phone block
   and the "until 18:00" detail only appear when there is genuinely room, and
   below 1200px the nav moves behind the menu button. */
.header-phone { display: none; }
.shop-status .detail { display: none; }
@media (min-width: 1800px) { .header-phone { display: flex; } }
@media (min-width: 1500px) { .shop-status .detail { display: inline; } }
@media (max-width: 1700px) { .main-nav { gap: 20px; } .main-nav a { font-size: 0.72rem; letter-spacing: 0.12em; } }
@media (max-width: 1400px) { .main-nav { gap: 15px; } .main-nav a { font-size: 0.69rem; letter-spacing: 0.1em; } .brand img { height: 76px; } }

@media (max-width: 1200px) {
  .nav-toggle { display: flex; }
  .main-nav {
    position: fixed;
    inset: var(--alert-h) 0 0 0;
    flex-direction: column;
    justify-content: center;
    gap: 8px;
    background: linear-gradient(170deg, var(--paper), var(--paper-warm));
    padding: 90px 30px 40px;
    clip-path: circle(0% at calc(100% - 46px) 46px);
    transition: clip-path 0.6s var(--ease);
    pointer-events: none;
  }
  .nav-open .main-nav { clip-path: circle(150% at calc(100% - 46px) 46px); pointer-events: auto; }
  .main-nav a {
    font-family: var(--display);
    font-size: 1.9rem;
    letter-spacing: 0.02em;
    text-transform: none;
    padding: 10px 0;
    opacity: 0;
    transform: translateY(14px);
    transition: opacity 0.4s var(--ease), transform 0.4s var(--ease);
  }
  .nav-open .main-nav a { opacity: 1; transform: none; }
  .nav-open .main-nav a:nth-child(1) { transition-delay: 0.12s; }
  .nav-open .main-nav a:nth-child(2) { transition-delay: 0.18s; }
  .nav-open .main-nav a:nth-child(3) { transition-delay: 0.24s; }
  .nav-open .main-nav a:nth-child(4) { transition-delay: 0.30s; }
  .nav-open .main-nav a:nth-child(5) { transition-delay: 0.36s; }
  .nav-open .main-nav a:nth-child(6) { transition-delay: 0.42s; }
  .nav-open .main-nav a:nth-child(7) { transition-delay: 0.48s; }
  .nav-open .main-nav a:nth-child(8) { transition-delay: 0.54s; }
  .main-nav a::after { display: none; }
  .nav-toggle { position: relative; z-index: 2; }
  .brand { position: relative; z-index: 2; }
}

@media (max-width: 1080px) {
  .grid-4 { grid-template-columns: repeat(2, 1fr); }
  .swatch-grid { grid-template-columns: repeat(4, 1fr); }
  .footer-grid { grid-template-columns: 1fr 1fr; }
}

@media (max-width: 900px) {
  body { font-size: 16px; }

  .nav-toggle { display: flex; }
  .main-nav {
    position: fixed;
    inset: var(--alert-h) 0 0 0;
    flex-direction: column;
    justify-content: center;
    gap: 8px;
    background: linear-gradient(170deg, var(--paper), var(--paper-warm));
    padding: 90px 30px 40px;
    clip-path: circle(0% at calc(100% - 46px) 46px);
    transition: clip-path 0.6s var(--ease);
    pointer-events: none;
  }
  .nav-open .main-nav { clip-path: circle(150% at calc(100% - 46px) 46px); pointer-events: auto; }
  .main-nav a {
    font-family: var(--display);
    font-size: 1.9rem;
    letter-spacing: 0.02em;
    text-transform: none;
    padding: 10px 0;
    opacity: 0;
    transform: translateY(14px);
    transition: opacity 0.4s var(--ease), transform 0.4s var(--ease);
  }
  .nav-open .main-nav a { opacity: 1; transform: none; }
  .nav-open .main-nav a:nth-child(1) { transition-delay: 0.12s; }
  .nav-open .main-nav a:nth-child(2) { transition-delay: 0.18s; }
  .nav-open .main-nav a:nth-child(3) { transition-delay: 0.24s; }
  .nav-open .main-nav a:nth-child(4) { transition-delay: 0.30s; }
  .nav-open .main-nav a:nth-child(5) { transition-delay: 0.36s; }
  .nav-open .main-nav a:nth-child(6) { transition-delay: 0.42s; }
  .nav-open .main-nav a:nth-child(7) { transition-delay: 0.48s; }
  .main-nav a::after { display: none; }
  .nav-toggle { position: relative; z-index: 2; }
  .brand { position: relative; z-index: 2; }

  .hero { min-height: auto; padding: calc(130px + var(--alert-h)) 0 70px; }
  .hero-grid { grid-template-columns: 1fr; }
  .hero-media { order: -1; max-width: 480px; margin-inline: auto; width: 100%; margin-bottom: 30px; }
  .hero-media .arch { aspect-ratio: 1/1; }
  .hero-media::after { display: none; }
  .badge-float { left: auto; right: 10px; bottom: -18px; }
  .hero-sub { max-width: none; }

  .split { grid-template-columns: 1fr; }
  .split-reverse .split-media { order: -1; }
  /* portrait and square sources are mixed, so 4/5 crops both gently, and the
     framing favours the blooms over the vase */
  .split-media img { aspect-ratio: 4/5; object-position: center 38%; }
  /* a shallower arch on small screens stops the curve eating the top of the bouquet */
  .split-media.arch-media img { border-radius: 38% 38% 8px 8px / 16% 16% 8px 8px; }

  .grid-3, .steps { grid-template-columns: 1fr; }
  .grid-2 { grid-template-columns: 1fr; }
  .swatch-grid { grid-template-columns: repeat(2, 1fr); }
  .main-nav a { font-size: 1.7rem; padding: 7px 0; }
  .masonry { columns: 2; }
  .footer-grid { grid-template-columns: 1fr; gap: 34px; }
  .brand img { height: 68px; }
  .site-header.scrolled .brand img { height: 54px; }
  .shop-status { padding: 6px 12px 6px 10px; font-size: 0.6rem; }
}

@media (max-width: 620px) {
  /* the sticky WhatsApp bubble already covers ordering, so the header button goes */
  .header-actions .btn-wa { display: none; }
  .header-actions { gap: 8px; }
}

@media (max-width: 540px) {
  .grid-4 { grid-template-columns: 1fr; }
  .masonry { columns: 1; }
  .tile { aspect-ratio: 1/1; }
  .btn { width: 100%; }
  .hero-actions .btn, .cta-band .btn { width: 100%; }
  .badge-float { padding: 10px 18px 10px 12px; }
  .badge-float strong { font-size: 1.25rem; }
  .bike-divider::before, .bike-divider::after { max-width: 70px; }
}

/* ---------- Lightbox ---------- */
.lightbox {
  position: fixed;
  inset: 0;
  z-index: 400;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 5vh 5vw;
  background: rgba(32, 38, 22, 0.93);
  backdrop-filter: blur(6px);
  opacity: 0;
  transition: opacity 0.3s var(--ease);
}
.lightbox.open { display: flex; opacity: 1; }
.lightbox img {
  max-width: 100%;
  max-height: 78vh;
  border-radius: var(--radius);
  box-shadow: var(--shadow-lg);
}
.lightbox figcaption {
  margin-top: 16px;
  text-align: center;
  color: var(--paper);
  font-family: var(--display);
  font-size: 1.2rem;
}
.lightbox figure { margin: 0; display: grid; justify-items: center; }
.lightbox button {
  position: absolute;
  background: rgba(250, 247, 241, 0.12);
  border: 1px solid rgba(250, 247, 241, 0.35);
  color: var(--paper);
  width: 46px; height: 46px;
  border-radius: 50%;
  cursor: pointer;
  font-size: 1.2rem;
  line-height: 1;
  display: grid;
  place-items: center;
  transition: background 0.25s var(--ease);
}
.lightbox button:hover { background: rgba(250, 247, 241, 0.28); }
.lb-close { top: calc(var(--alert-h) + 16px); right: 20px; }
.lb-prev { left: 16px; top: 50%; transform: translateY(-50%); }
.lb-next { right: 16px; top: 50%; transform: translateY(-50%); }
.gallery-zoom { cursor: zoom-in; }

@media (max-width: 540px) {
  .lightbox { padding: 8vh 4vw; }
  .lb-prev { left: 8px; }
  .lb-next { right: 8px; }
}

/* ---------- Modal (delivery prices) ---------- */
.modal {
  position: fixed;
  inset: 0;
  z-index: 400;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(32, 38, 22, 0.72);
  backdrop-filter: blur(5px);
  opacity: 0;
  transition: opacity 0.28s var(--ease);
}
.modal[hidden] { display: none; }
.modal.open { opacity: 1; }
.modal-panel {
  position: relative;
  width: 100%;
  max-width: 520px;
  max-height: 86vh;
  overflow-y: auto;
  background: var(--paper);
  border-radius: var(--radius);
  border: 1px solid var(--gold);
  padding: 40px 38px 34px;
  box-shadow: var(--shadow-lg);
  transform: translateY(14px) scale(0.98);
  transition: transform 0.34s var(--ease);
}
.modal.open .modal-panel { transform: none; }
.modal-panel h3 { font-size: clamp(1.6rem, 3vw, 2.1rem); margin-bottom: 0.3em; }
.modal-close {
  position: absolute;
  top: 14px; right: 14px;
  width: 38px; height: 38px;
  border-radius: 50%;
  border: 1px solid rgba(201, 185, 138, 0.7);
  background: transparent;
  color: var(--ink-soft);
  cursor: pointer;
  display: grid;
  place-items: center;
  transition: background 0.2s var(--ease), color 0.2s var(--ease);
}
.modal-close:hover { background: var(--berry); color: #fff; border-color: var(--berry); }

.delivery-table { width: 100%; border-collapse: collapse; margin: 20px 0 18px; }
.delivery-table td { padding: 11px 0; border-bottom: 1px dashed rgba(201, 185, 138, 0.6); font-size: 0.97rem; }
.delivery-table td:first-child { color: var(--forest); }
.delivery-table td:last-child {
  text-align: right;
  font-family: var(--display);
  font-size: 1.15rem;
  color: var(--berry);
  white-space: nowrap;
}
.modal-note {
  font-size: 0.85rem;
  background: var(--paper-warm);
  border-left: 2px solid var(--gold);
  padding: 12px 16px;
  margin-bottom: 20px;
}
.modal-note strong { color: var(--forest); font-weight: 500; }

/* stock list */
.stock-list {
  list-style: none;
  padding: 0;
  margin: 22px 0 0;
  display: flex;
  flex-wrap: wrap;
  gap: 9px;
}
.stock-list li {
  border: 1px solid rgba(201, 185, 138, 0.8);
  border-radius: 999px;
  padding: 7px 17px;
  font-size: 0.82rem;
  letter-spacing: 0.04em;
  color: var(--olive-deep);
  background: var(--white);
}
.stock-list li.seasonal { border-style: dashed; color: var(--ink-soft); }

@media (max-width: 540px) {
  .modal-panel { padding: 36px 22px 26px; }
}

/* ---------- Language switch (nav bar) ---------- */
.lang-switch {
  display: flex;
  gap: 2px;
  padding: 3px;
  border-radius: 999px;
  border: 1px solid rgba(201, 185, 138, 0.8);
  background: rgba(255, 253, 249, 0.7);
  flex: none;
}
.lang-switch a {
  border: 0;
  background: transparent;
  color: var(--ink-soft);
  font-family: var(--body);
  font-size: 0.64rem;
  font-weight: 500;
  letter-spacing: 0.14em;
  padding: 5px 11px;
  border-radius: 999px;
  cursor: pointer;
  line-height: 1.5;
  transition: background 0.25s var(--ease), color 0.25s var(--ease);
}
.lang-switch a:hover { color: var(--berry); }
.lang-switch a[aria-current="true"] {
  background: var(--berry);
  color: #fff;
}


/* ============================================================
   Flower seasonality calendar
   ============================================================ */
.season-controls {
  position: sticky;
  top: calc(var(--alert-h) + 84px);
  z-index: 90;
  background: rgba(250, 247, 241, 0.97);
  border-block: 1px solid rgba(201, 185, 138, 0.5);
  padding: 18px 0;
  margin-bottom: 44px;
}
.month-strip {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 6px;
  margin-bottom: 16px;
}
.month-strip button {
  border: 1px solid rgba(201, 185, 138, 0.8);
  background: var(--white);
  color: var(--ink-soft);
  font-family: var(--body);
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 9px 15px;
  border-radius: 999px;
  cursor: pointer;
  transition: all 0.25s var(--ease);
}
.month-strip button:hover { border-color: var(--berry); color: var(--berry); }
.month-strip button[aria-pressed="true"] {
  background: var(--berry);
  border-color: var(--berry);
  color: #fff;
}

.season-filters {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 10px;
}
.season-search {
  flex: 1 1 240px;
  max-width: 300px;
  border: 1px solid rgba(201, 185, 138, 0.8);
  border-radius: 999px;
  background: var(--white);
  padding: 10px 20px;
  font-family: var(--body);
  font-size: 0.92rem;
  color: var(--ink);
}
.season-search:focus { outline: none; border-color: var(--berry); }
.season-search::placeholder { color: var(--ink-soft); opacity: 0.7; }

.chip {
  border: 1px solid rgba(201, 185, 138, 0.8);
  background: transparent;
  color: var(--ink-soft);
  font-family: var(--body);
  font-size: 0.68rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 9px 18px;
  border-radius: 999px;
  cursor: pointer;
  transition: all 0.25s var(--ease);
}
.chip:hover { border-color: var(--olive); color: var(--olive-deep); }
.chip[aria-pressed="true"] {
  background: var(--olive-deep);
  border-color: var(--olive-deep);
  color: var(--paper);
}

.season-count {
  text-align: center;
  font-size: 0.8rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-bottom: 28px;
}

.flower-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(310px, 1fr));
  gap: 20px;
}
.flower {
  background: var(--white);
  border: 1px solid rgba(201, 185, 138, 0.45);
  border-radius: var(--radius);
  padding: 24px 24px 22px;
  transition: border-color 0.3s var(--ease), transform 0.3s var(--ease), box-shadow 0.3s var(--ease);
}
.flower:hover { transform: translateY(-3px); box-shadow: var(--shadow); border-color: var(--gold); }
.flower.is-out { opacity: 0.55; }
.flower-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 4px;
}
.flower h3 { font-size: 1.3rem; margin: 0 0 2px; }
.flower .latin {
  display: block;
  font-family: var(--display);
  font-style: italic;
  font-size: 0.92rem;
  color: var(--ink-soft);
  margin-bottom: 14px;
}
.badge {
  flex: none;
  font-size: 0.6rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 5px 11px;
  border-radius: 999px;
  white-space: nowrap;
  font-weight: 500;
}
.badge-peak { background: var(--berry); color: #fff; }
.badge-in { background: #e4ecd6; color: var(--olive-deep); }
.badge-year { background: var(--paper-warm); color: var(--ink-soft); }
.badge-out { background: transparent; color: var(--ink-soft); border: 1px solid rgba(111, 104, 87, 0.35); }

.months {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 3px;
  margin: 14px 0 14px;
}
.months span {
  aspect-ratio: 1/1.35;
  display: grid;
  place-items: center;
  border-radius: 4px;
  font-size: 0.58rem;
  font-weight: 500;
  letter-spacing: 0;
  background: var(--paper-warm);
  color: rgba(111, 104, 87, 0.55);
}
.months span.on { background: #cfdcb8; color: var(--olive-deep); }
.months span.peak { background: var(--berry); color: #fff; }
.months span.now { outline: 2px solid var(--forest); outline-offset: 1px; }

.flower .note { font-size: 0.88rem; margin: 0; line-height: 1.55; }
.flower .cat {
  display: block;
  font-size: 0.62rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--olive);
  margin-top: 12px;
}

.season-legend {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 20px;
  margin-top: 44px;
  font-size: 0.76rem;
  color: var(--ink-soft);
}
.season-legend span { display: inline-flex; align-items: center; gap: 7px; }
.season-legend i {
  width: 13px; height: 13px;
  border-radius: 3px;
  display: inline-block;
}
.legend-peak { background: var(--berry); }
.legend-on { background: #cfdcb8; }
.legend-off { background: var(--paper-warm); }

.season-empty { text-align: center; padding: 60px 0; }

@media (max-width: 900px) {
  .season-controls { top: calc(var(--alert-h) + 64px); }
  .month-strip button { padding: 8px 11px; font-size: 0.66rem; }
}
@media (max-width: 540px) {
  .flower-grid { grid-template-columns: 1fr; }
  .month-strip { gap: 4px; }
  .month-strip button { padding: 7px 9px; font-size: 0.6rem; letter-spacing: 0.08em; }
}


/* the casket spray is a wide arrangement — keep it centred in the portrait tile */
.tile-sympathy img { object-position: center 50%; }

/* ---------- Landscape photos inside portrait frames ---------- */
.tile img.obj-right, .split-media img.obj-right { object-position: 60% 50%; }
.tile img.obj-left, .split-media img.obj-left { object-position: 30% 50%; }

/* ---------- Full-width photo band ---------- */
.photo-band { margin: 0; line-height: 0; }
.photo-band img {
  width: 100%;
  height: clamp(300px, 46vw, 640px);
  object-fit: cover;
  object-position: 38% 60%;
}

/* Blur is expensive on fixed elements during scroll; only devices with a pointer get it. */
@media (hover: hover) and (min-width: 901px) {
  .site-header.scrolled { background: rgba(250, 247, 241, 0.9); backdrop-filter: blur(12px); }
  .season-controls { background: rgba(250, 247, 241, 0.92); backdrop-filter: blur(10px); }
}


/* the status dot's box-shadow pulse forces repaints; a transform ring is composited */
.shop-status.is-open .dot { animation: none; box-shadow: none; position: relative; }
.shop-status.is-open .dot::after {
  content: ""; position: absolute; inset: -1px; border-radius: 50%;
  border: 2px solid rgba(63, 158, 87, 0.55); animation: ring 2.4s ease-out infinite;
}
@keyframes ring { 0% { transform: scale(1); opacity: 1; } 100% { transform: scale(2.4); opacity: 0; } }
@media (prefers-reduced-motion: reduce) { .shop-status.is-open .dot::after { animation: none; } }

/* ============================================================
   Gallery: filters, natural-shape masonry, richer lightbox
   ============================================================ */
.gallery-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 14px 40px;
  justify-content: center;
  margin-bottom: 18px;
}
.filter-group { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 8px; }
.filter-label {
  font-size: 0.62rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--olive);
  margin-right: 4px;
}
.chip::before {
  content: "";
  display: none;
  width: 9px; height: 9px;
  border-radius: 50%;
  margin-right: 7px;
  vertical-align: -1px;
  box-shadow: inset 0 0 0 1px rgba(0,0,0,0.08);
}
.chip-pinks::before, .chip-whites::before, .chip-brights::before, .chip-purples::before, .chip-reds::before { display: inline-block; }
.chip-pinks::before { background: #e9a7bd; }
.chip-whites::before { background: #fbf7ee; }
.chip-brights::before { background: linear-gradient(135deg, #f2b32d, #f26a3d); }
.chip-purples::before { background: #8b6ba8; }
.chip-reds::before { background: #b8213b; }
#galleryCount { margin-bottom: 26px; }

/* photos keep their own shape - nothing is cropped in the grid */
.gallery-grid { columns: 4; column-gap: 18px; }
.gallery-grid .tile {
  aspect-ratio: auto;
  margin: 0 0 18px;
  break-inside: avoid;
  display: block;
  cursor: zoom-in;
}
.gallery-grid .tile img { width: 100%; height: auto; object-position: center; }
.gallery-grid .tile[hidden] { display: none; }
.gallery-grid .tile:focus-visible { outline: 2px solid var(--berry); outline-offset: 3px; }
.gallery-grid .tile-body { padding: 44px 18px 16px; }
.gallery-grid .tile-body h3 { font-size: 1.15rem; }
.gallery-grid .tile-body p { font-size: 0.82rem; }

/* lightbox */
.lightbox[hidden] { display: none; }
.lightbox figure { max-width: min(96vw, 1100px); width: 100%; }
.lb-stage {
  display: grid;
  place-items: center;
  max-height: 72vh;
  width: 100%;
}
.lightbox img { max-height: 72vh; width: auto; max-width: 100%; }
.lightbox img.slide-left { animation: lb-in-left 0.32s var(--ease); }
.lightbox img.slide-right { animation: lb-in-right 0.32s var(--ease); }
@keyframes lb-in-left { from { opacity: 0; transform: translateX(28px); } to { opacity: 1; transform: none; } }
@keyframes lb-in-right { from { opacity: 0; transform: translateX(-28px); } to { opacity: 1; transform: none; } }
.lightbox figcaption {
  display: grid;
  grid-template-columns: auto 1fr auto;
  grid-template-areas: "count title cta" "count sub cta";
  align-items: center;
  column-gap: 18px;
  row-gap: 2px;
  width: 100%;
  margin-top: 14px;
  text-align: left;
  font-family: var(--body);
  font-size: 0.9rem;
}
.lb-count { grid-area: count; font-family: var(--display); font-size: 1rem; color: rgba(250,247,241,0.6); white-space: nowrap; }
.lb-title { grid-area: title; font-family: var(--display); font-weight: 500; font-size: 1.35rem; color: var(--paper); }
.lb-sub { grid-area: sub; color: rgba(250,247,241,0.72); }
.lb-cta { grid-area: cta; white-space: nowrap; }
@media (prefers-reduced-motion: reduce) { .lightbox img.slide-left, .lightbox img.slide-right { animation: none; } }

@media (max-width: 1080px) { .gallery-grid { columns: 3; } }
@media (max-width: 760px) {
  .gallery-grid { columns: 2; column-gap: 12px; }
  .gallery-grid .tile { margin-bottom: 12px; }
  .gallery-grid .tile-body { padding: 34px 12px 12px; }
  .gallery-grid .tile-body h3 { font-size: 1rem; }
  .gallery-grid .tile-body p { display: none; }
  .lightbox { padding: 6vh 3vw; }
  .lightbox figcaption { grid-template-columns: auto 1fr; grid-template-areas: "count title" "count sub" "cta cta"; row-gap: 8px; }
  .lb-cta { width: 100%; justify-content: center; margin-top: 4px; }
  .lb-prev, .lb-next { display: none; }   /* swipe instead */
}
@media (max-width: 440px) { .gallery-grid { columns: 2; } .filter-group { gap: 6px; } .chip { padding: 8px 13px; } }

/* ============================================================
   Legal pages, click-to-load map, footer legal links
   ============================================================ */
.prose { max-width: 760px; margin: 0 auto; }
.prose h2 { font-size: clamp(1.5rem, 2.4vw, 1.9rem); margin-top: 2.2em; }
.prose h2:first-of-type { margin-top: 0; }
.prose h3 { font-size: 1.15rem; margin-top: 1.6em; color: var(--olive-deep); }
.prose p, .prose li { font-size: 0.98rem; }
.prose ul { padding-left: 1.2em; color: var(--ink-soft); }
.prose li { margin-bottom: 0.4em; }
.prose table { width: 100%; border-collapse: collapse; margin: 1em 0 1.6em; font-size: 0.93rem; }
.prose th, .prose td { text-align: left; vertical-align: top; padding: 10px 12px 10px 0; border-bottom: 1px solid rgba(201, 185, 138, 0.5); }
.prose th { color: var(--olive); font-weight: 500; font-size: 0.7rem; letter-spacing: 0.16em; text-transform: uppercase; }
.prose .updated { font-size: 0.78rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-soft); }
.prose mark {
  background: var(--blush);
  color: var(--berry-deep);
  padding: 0 4px;
  border-radius: 3px;
}

.map-lazy {
  min-height: 420px;
  height: 100%;
  border-radius: var(--radius);
  border: 1px dashed rgba(201, 185, 138, 0.9);
  background:
    radial-gradient(circle at 30% 30%, rgba(184, 195, 154, 0.35), transparent 55%),
    var(--paper-warm);
  display: grid;
  place-items: center;
  text-align: center;
  padding: 32px;
}
.map-lazy-inner { display: grid; justify-items: center; gap: 12px; max-width: 320px; }
.map-lazy-inner svg { width: 34px; height: 34px; color: var(--berry); }
.map-lazy-addr { color: var(--forest); font-family: var(--display); font-size: 1.2rem; margin: 0; }
.map-lazy-inner small { font-size: 0.74rem; color: var(--ink-soft); }

.footer-legal { display: flex; flex-wrap: wrap; gap: 4px 18px; width: 100%; margin-bottom: 4px; }
.footer-legal a { color: rgba(250, 247, 241, 0.5); font-size: 0.78rem; }
.footer-legal a:hover { color: var(--paper); }

/* customers print the calendar: strip chrome, keep the data */
@media print {
  .alert-bar, .site-header, .site-footer, .wa-float, .season-controls, .bike-divider, .cta-band, .btn, .lightbox { display: none !important; }
  body { background: #fff; color: #000; font-size: 11pt; }
  .page-banner { padding: 0 0 12pt; background: none; }
  .flower { break-inside: avoid; border: 1px solid #bbb; box-shadow: none; }
  .flower-grid { grid-template-columns: repeat(3, 1fr); gap: 8pt; }
  .months span.on { background: #cfdcb8 !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .months span.peak { background: #b93a5d !important; color: #fff !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  a[href]::after { content: none; }
}

/* ============================================================
   Phase 3: forms, delivery checker, mobile action bar, a11y, transitions
   ============================================================ */
.enquiry {
  background: var(--white);
  border: 1px solid rgba(201, 185, 138, 0.5);
  border-radius: var(--radius);
  padding: 30px 28px 28px;
  box-shadow: var(--shadow-sm);
  display: grid;
  gap: 16px;
}
.field { display: grid; gap: 6px; }
.field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.field label {
  font-size: 0.68rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--olive);
  font-weight: 500;
}
.field input, .field textarea, .field select, .area-row input {
  width: 100%;
  font: inherit;
  font-size: 0.98rem;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid rgba(201, 185, 138, 0.9);
  border-radius: 10px;
  padding: 12px 14px;
  transition: border-color 0.2s var(--ease), box-shadow 0.2s var(--ease);
}
.field textarea { resize: vertical; min-height: 120px; }
.field select { appearance: none; background-image: linear-gradient(45deg, transparent 50%, var(--olive) 50%), linear-gradient(135deg, var(--olive) 50%, transparent 50%); background-position: calc(100% - 20px) 50%, calc(100% - 14px) 50%; background-size: 6px 6px; background-repeat: no-repeat; padding-right: 36px; }
.field input:focus, .field textarea:focus, .field select:focus, .area-row input:focus { outline: none; border-color: var(--berry); box-shadow: 0 0 0 3px rgba(185, 58, 93, 0.14); }
.enquiry .btn { justify-self: start; }
.form-note { font-size: 0.85rem; }
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.area-check { margin: 8px 0 18px; }
.area-label { display: block; font-size: 0.68rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--olive); font-weight: 500; margin-bottom: 6px; }
.area-row { display: flex; gap: 10px; }
.area-row input { flex: 1; }
.area-result { margin: 10px 0 0; font-size: 0.95rem; min-height: 1.4em; }
.area-result.is-hit { color: var(--olive-deep); }
.area-result.is-hit strong { color: var(--berry); font-weight: 500; }
.area-result.is-miss { color: var(--ink-soft); }

/* skip link + consistent keyboard focus everywhere */
.skip-link { position: absolute; left: 12px; top: -60px; z-index: 500; background: var(--berry); color: #fff; padding: 10px 16px; border-radius: 8px; font-size: 0.85rem; }
.skip-link:focus { top: calc(var(--alert-h) + 8px); outline: none; }
a:focus-visible, button:focus-visible, .chip:focus-visible, .lang-switch a:focus-visible, .month-strip button:focus-visible { outline: 2px solid var(--berry); outline-offset: 3px; border-radius: 6px; }

/* back to top */
.to-top {
  position: fixed;
  right: 22px; bottom: 92px;
  z-index: 290;
  width: 44px; height: 44px;
  border-radius: 50%;
  border: 1px solid var(--gold);
  background: rgba(255, 253, 249, 0.92);
  color: var(--olive-deep);
  display: grid; place-items: center;
  cursor: pointer;
  opacity: 0; transform: translateY(8px); pointer-events: none;
  transition: opacity 0.3s var(--ease), transform 0.3s var(--ease);
}
.to-top.show { opacity: 1; transform: none; pointer-events: auto; }
.to-top svg { width: 16px; height: 16px; }

/* phone action bar: Order · Call · Directions */
.action-bar { display: none; }
@media (max-width: 760px) {
  .action-bar {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 300;
    display: grid; grid-template-columns: 1.3fr 1fr 1fr;
    background: rgba(250, 247, 241, 0.96);
    backdrop-filter: blur(8px);
    border-top: 1px solid rgba(201, 185, 138, 0.6);
    padding: 8px 10px calc(8px + env(safe-area-inset-bottom));
    gap: 8px;
  }
  .action-bar a {
    display: flex; align-items: center; justify-content: center; gap: 8px;
    padding: 11px 8px; border-radius: 999px;
    font-size: 0.7rem; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 500;
    color: var(--forest); border: 1px solid rgba(201, 185, 138, 0.8); background: var(--white);
  }
  .action-bar a svg { width: 16px; height: 16px; }
  .action-bar .ab-order { background: #25d366; color: #fff; border-color: #25d366; }
  body { padding-bottom: 72px; }
  .wa-float { display: none; }            /* the bar covers it */
  .to-top { bottom: 84px; }
}

/* language suggestion (never a redirect) */
.lang-hint {
  position: fixed; left: 50%; bottom: 20px; transform: translateX(-50%);
  z-index: 310;
  background: var(--forest); color: var(--paper);
  border-radius: 999px; padding: 10px 14px 10px 18px;
  display: flex; align-items: center; gap: 12px;
  font-size: 0.85rem; box-shadow: var(--shadow-lg);
  max-width: calc(100vw - 32px);
}
.lang-hint a { color: #fff; font-weight: 500; text-decoration: underline; text-underline-offset: 3px; white-space: nowrap; }
.lang-hint button { background: transparent; border: 0; color: rgba(250,247,241,0.7); cursor: pointer; font-size: 1.1rem; line-height: 1; padding: 4px; }
@media (max-width: 760px) { .lang-hint { bottom: 84px; } }

/* cross-page fade where the browser supports it */
@view-transition { navigation: auto; }
::view-transition-old(root), ::view-transition-new(root) { animation-duration: 0.22s; }
@media (prefers-reduced-motion: reduce) { ::view-transition-old(root), ::view-transition-new(root) { animation: none; } }

@media (max-width: 540px) { .field-row { grid-template-columns: 1fr; } .enquiry { padding: 22px 18px; } .area-row { flex-direction: column; } .area-row .btn { width: 100%; } }

/* ============================================================
   Phase 4: visual finish - same identity, tighter execution
   ============================================================ */
/* the hero photo drifts very slowly, like a still with a breath in it */
.hero-media .arch { position: relative; }
.hero-media .arch img { animation: hero-drift 18s ease-in-out infinite alternate; transform-origin: 55% 45%; }
@keyframes hero-drift { from { transform: scale(1); } to { transform: scale(1.06); } }

/* on very wide screens the hero copy used to float in empty space */
@media (min-width: 1700px) {
  .hero .container { max-width: 1440px; }
  .hero-grid { grid-template-columns: 1.1fr 0.9fr; gap: 90px; }
  .hero h1 { font-size: 5.6rem; }
  .hero-sub { font-size: 1.28rem; max-width: 52ch; }
  .hero-media { max-width: 640px; justify-self: end; }
  .badge-float { left: -48px; bottom: 56px; }
}

/* one hover language: lift + gold edge, on every card type */
.card, .quote-card, .flower, .enquiry { transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease), border-color 0.4s var(--ease); }
.quote-card:hover, .flower:hover { transform: translateY(-4px); box-shadow: var(--shadow); border-color: var(--gold); }
.tile { transition: transform 0.5s var(--ease), box-shadow 0.5s var(--ease); }
.tile:hover { transform: translateY(-4px); box-shadow: var(--shadow); }
.tile-body h3 { transition: transform 0.5s var(--ease); }
.tile:hover .tile-body h3 { transform: translateY(-2px); }
.btn:active { transform: translateY(0) scale(0.985); }
.area-list li, .stock-list li, .month-strip button, .chip { transition: transform 0.25s var(--ease), background 0.25s var(--ease), color 0.25s var(--ease), border-color 0.25s var(--ease); }

/* section rhythm: a little more air before each major heading on desktop */
@media (min-width: 1100px) { .section-head { margin-bottom: clamp(48px, 5.5vw, 72px); } }

/* header wordmark settles more precisely on its baseline */
.brand img { transform: translateY(2px); }

/* selection and scrollbar in brand colours (Chromium / WebKit) */
::-webkit-scrollbar { width: 12px; }
::-webkit-scrollbar-track { background: var(--paper-warm); }
::-webkit-scrollbar-thumb { background: var(--gold); border-radius: 999px; border: 3px solid var(--paper-warm); }
::-webkit-scrollbar-thumb:hover { background: var(--olive); }

@media (prefers-reduced-motion: reduce) {
  .hero-media .arch img { animation: none; }
  .tile:hover, .card:hover, .quote-card:hover, .flower:hover { transform: none; }
}

/* ============================================================
   Redesign, step 1: type system, accent discipline, editorial home
   ============================================================ */
:root { --space: clamp(72px, 9vw, 140px); }
.section { padding: var(--space) 0; }
h1 { font-size: clamp(2.9rem, 6.4vw, 6.2rem); line-height: 1.0; letter-spacing: -0.025em; font-weight: 500; }
h2 { font-size: clamp(2rem, 3.6vw, 3.1rem); line-height: 1.08; letter-spacing: -0.02em; max-width: 22ch; }
.center h2, .cta-band h2 { margin-inline: auto; }
h3 { font-size: clamp(1.25rem, 1.7vw, 1.5rem); }
p { line-height: 1.75; }
.lead, .hero-sub { font-size: clamp(1.05rem, 1.3vw, 1.2rem); }

/* the logo pairs olive small caps with the berry script; overlines and eyebrows do the same */
.eyebrow { margin-bottom: 0.3em; }
.overline { margin-bottom: 1.1em; }
.section-head { margin-bottom: clamp(36px, 4.5vw, 56px); }
.section-head-row { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
.section-head-row h2 { margin-bottom: 0; }
.section-head-row .link-arrow { margin-bottom: 8px; }

.stars, .quote-card .stars, .badge-float .stars { color: var(--gold); }
.stat-row strong { color: var(--berry); }
.card-num { color: var(--berry); }
.bg-forest .overline { color: var(--sage-soft); }
.bg-forest .eyebrow { color: var(--blush); }
.cutoff::before { background: var(--berry); }
.cutoff.is-closed::before { background: var(--ink-soft); }
.bg-forest .reviews-source { color: rgba(250, 247, 241, 0.6); font-size: 0.8rem; letter-spacing: 0.14em; text-transform: uppercase; margin-top: 34px; }

/* ---------- editorial hero: copy left, photo bleeding to the right edge ---------- */
.hero-editorial {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);
  align-items: stretch;
  min-height: min(88vh, 900px);
  padding: 0;
  background: var(--paper);
}
.hero-ed-copy {
  padding: calc(120px + var(--alert-h)) clamp(24px, 4vw, 64px) 72px clamp(24px, 6vw, 120px);
  display: flex; flex-direction: column; justify-content: center;
  max-width: 720px;
}
.hero-ed-copy h1 { margin-bottom: 0.45em; }
.hero-ed-copy .hero-sub { max-width: 46ch; margin-bottom: 1.6em; }
.hero-ed-copy .hero-actions { margin: 0 0 22px; align-items: center; gap: 26px; }
.hero-ed-media { position: relative; overflow: hidden; }
.hero-ed-media picture, .hero-ed-media img { position: absolute; inset: 0; width: 100%; height: 100%; }
.hero-ed-media img { object-fit: cover; object-position: 50% 45%; animation: hero-drift 22s ease-in-out infinite alternate; transform-origin: 55% 45%; }
.hero-ed-media::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, var(--paper) 0, transparent 14%); pointer-events: none; }
.cutoff { font-size: 0.82rem; letter-spacing: 0.04em; color: var(--ink-soft); margin: 0; display: flex; align-items: center; gap: 10px; min-height: 1.4em; }
.cutoff::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--olive); flex: none; }
.cutoff.is-closed::before { background: var(--berry); }

/* ---------- occasions: three editorial columns ---------- */
.occasion-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(20px, 3vw, 44px); }
.occasion { display: block; color: inherit; }
.occasion picture { display: block; overflow: hidden; border-radius: 6px; margin-bottom: 22px; aspect-ratio: 4/5; }
.occasion img { width: 100%; height: 100%; object-fit: cover; object-position: center 40%; transition: transform 1.1s var(--ease); }
.occasion:hover img { transform: scale(1.04); }
.occasion h3 { margin-bottom: 0.35em; }
.occasion p { font-size: 0.98rem; margin-bottom: 0.9em; }
.occasion .link-arrow { color: var(--olive-deep); }
.occasion:hover .link-arrow { color: var(--berry); }

/* ---------- priced area list ---------- */
.area-list-priced { justify-content: flex-start; gap: 10px; }
.area-list-priced li { display: flex; align-items: baseline; gap: 12px; font-size: 1.05rem; padding: 10px 18px; }
.area-list-priced b { font-family: var(--body); font-size: 0.8rem; font-weight: 500; color: var(--ink-soft); }

/* ---------- recent work: four photos, no captions ---------- */
.work-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
.work { margin: 0; overflow: hidden; border-radius: 6px; aspect-ratio: 4/5; }
.work img { width: 100%; height: 100%; object-fit: cover; transition: transform 1s var(--ease); }
.work:hover img { transform: scale(1.04); }

/* softer defaults so the arch is a signature, not a template */
.split-media img { border-radius: 6px; }
.tile, .card, .quote-card, .enquiry { border-radius: 8px; }

@media (max-width: 900px) {
  .hero-editorial { grid-template-columns: 1fr; min-height: auto; }
  .hero-ed-media { order: -1; height: min(62vh, 520px); margin-top: calc(var(--alert-h) + 80px); }
  .hero-ed-media picture, .hero-ed-media img { position: absolute; }
  .hero-ed-media::after { background: linear-gradient(0deg, var(--paper) 0, transparent 18%); }
  .hero-ed-copy { padding: 36px 24px 56px; max-width: none; }
  .occasion-row { grid-template-columns: 1fr; gap: 36px; }
  .occasion picture { aspect-ratio: 1/1; }
  .work-row { grid-template-columns: repeat(2, 1fr); gap: 10px; }
  .work { aspect-ratio: 1/1; }
}
@media (max-width: 540px) { .hero-ed-copy .hero-actions { align-items: stretch; } }

/* the header always has its own ground now that photos can sit directly beneath it */
.site-header { background: rgba(250, 247, 241, 0.94); }
.site-header::before { display: none; }

/* centred headings keep their width cap but sit centred; contact map aligns to the top and follows the scroll */
h2.center, .container-narrow h2 { margin-inline: auto; }
.container-narrow.center h2, .container-narrow h2.center { text-align: center; }
#contact-split { align-items: start; }
#contact-split .split-media { position: sticky; top: calc(var(--alert-h) + 110px); }

/* ---------- inner pages: editorial banner, same language as the home hero ---------- */
.page-banner.has-photo {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
  align-items: stretch;
  min-height: min(64vh, 640px);
  padding: 0;
  text-align: left;
  background: var(--paper);
}
.page-banner.has-photo .pb-copy {
  padding: calc(120px + var(--alert-h)) clamp(24px, 4vw, 64px) 64px clamp(24px, 6vw, 120px);
  display: flex; flex-direction: column; justify-content: center;
  max-width: 680px;
}
.page-banner.has-photo h1 { margin-bottom: 0.35em; }
.page-banner.has-photo p { margin-inline: 0; max-width: 46ch; }
.page-banner.has-photo .crumbs { margin-bottom: 22px; }
.pb-media { position: relative; overflow: hidden; }
.pb-media picture, .pb-media img { position: absolute; inset: 0; width: 100%; height: 100%; }
.pb-media img { object-fit: cover; }
.pb-media::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, var(--paper) 0, transparent 12%); pointer-events: none; }
@media (max-width: 900px) {
  .page-banner.has-photo { grid-template-columns: 1fr; min-height: auto; }
  .pb-media { order: -1; height: min(46vh, 420px); margin-top: calc(var(--alert-h) + 80px); }
  .pb-media::after { background: linear-gradient(0deg, var(--paper) 0, transparent 20%); }
  .page-banner.has-photo .pb-copy { padding: 28px 24px 44px; max-width: none; }
}

/* ---------- calendar spotlight + date planner ---------- */
.spot-group { margin-top: 22px; }
.spot-label { display: block; font-size: 0.66rem; letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink-soft); margin-bottom: 10px; }
.spot-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.spot-chip { border: 1px solid rgba(201, 185, 138, 0.8); background: var(--white); border-radius: 999px; padding: 8px 16px; font-family: var(--display); font-size: 1.05rem; color: var(--forest); }
.spot-chip.is-peak { background: var(--berry); border-color: var(--berry); color: #fff; }
.spot-none { font-size: 0.9rem; color: var(--ink-soft); }
.planner { background: var(--white); border: 1px solid rgba(201, 185, 138, 0.5); border-radius: 8px; padding: 30px 28px; box-shadow: var(--shadow-sm); }
.planner h3 { margin-bottom: 1.2em; }
.planner-label { display: block; font-size: 0.68rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--olive); font-weight: 500; margin-bottom: 6px; }
.planner input[type="date"] { width: 100%; font: inherit; font-size: 1rem; color: var(--ink); background: var(--paper); border: 1px solid rgba(201, 185, 138, 0.9); border-radius: 10px; padding: 12px 14px; margin-bottom: 14px; }
.planner input[type="date"]:focus { outline: none; border-color: var(--berry); box-shadow: 0 0 0 3px rgba(185, 58, 93, 0.14); }
.planner-out { font-size: 0.95rem; min-height: 2.6em; }
.planner-out strong { color: var(--forest); font-weight: 500; }


/* ---------- Contact: map card with a static preview, interactive map on request ---------- */
.map-card {
  position: relative; padding: 0; border: 0; overflow: hidden; place-items: initial; display: block;
  aspect-ratio: 4 / 3; height: auto; min-height: 420px; box-shadow: var(--shadow); background: var(--paper-warm);
}
.map-view { position: absolute; inset: 0; }
.map-card picture, .map-card img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.map-pin { position: absolute; width: 38px; height: 38px; transform: translate(-50%, -100%); color: var(--berry); filter: drop-shadow(0 4px 6px rgba(47, 58, 30, 0.35)); }
.map-pin svg { width: 100%; height: 100%; fill: var(--paper); }
.map-pin::after {
  content: ""; position: absolute; left: 50%; bottom: -6px; width: 14px; height: 14px; border-radius: 50%;
  transform: translateX(-50%); background: rgba(185, 58, 93, 0.35); animation: pin-pulse 2.4s ease-out infinite;
}
@keyframes pin-pulse { 0% { transform: translateX(-50%) scale(0.6); opacity: 0.9; } 100% { transform: translateX(-50%) scale(3); opacity: 0; } }
.map-card-bar {
  position: absolute; inset: auto 0 0 0; padding: 22px 22px 16px; text-align: left;
  background: linear-gradient(to top, rgba(250, 247, 241, 0.98) 0%, rgba(250, 247, 241, 0.92) 70%, rgba(250, 247, 241, 0));
}
.map-card-bar .map-lazy-addr { font-size: 1.25rem; margin-bottom: 10px; }
.map-card-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 22px; margin-bottom: 8px; }
.map-card-bar small { display: block; font-size: 0.7rem; color: var(--ink-soft); }
.map-card-bar small a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { .map-pin::after { animation: none; } }

/* ---------- Delivery: the coast as a route, priced ---------- */
.coast-map{width:100%;height:auto;display:block;border-radius:var(--radius);box-shadow:var(--shadow)}
.coast-map-tall{display:none;max-width:420px;margin-inline:auto}
@media (max-width:700px){.coast-map-wide{display:none}.coast-map-tall{display:block}}
.cm-name{font-family:var(--body);font-size:12.5px;letter-spacing:0.14em;text-transform:uppercase;fill:#2f3a1e;font-weight:500}
.cm-price{font-family:var(--display);font-size:24px;fill:#b93a5d;font-weight:600;letter-spacing:0}
.cm-shop{font-size:14px}.cm-sub{font-family:var(--script);font-size:20px;fill:#6b7a45;text-transform:none;letter-spacing:0}
.coast-map-tall .cm-name{font-size:14px}.coast-map-tall .cm-price{font-size:20px}
.cm-compass{font-family:var(--display);font-size:16px;fill:#6f6857;font-style:italic}.cm-sea{font-family:var(--script);font-size:22px;fill:#faf7f1;opacity:.9}
.coast-figure { margin: 0 0 clamp(36px, 5vw, 56px); }
#delivery-areas .coast-figure { margin-bottom: 0; }
#delivery-areas .section-head-row { margin-bottom: clamp(28px, 3.5vw, 44px); }
.section-head-row .measure { margin-top: 14px; margin-bottom: 0; }
.coast-figure figcaption { margin-top: 16px; text-align: center; font-size: 0.9rem; color: var(--ink-soft); max-width: 62ch; margin-inline: auto; }
.delivery-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(32px, 5vw, 72px); align-items: start; }
.delivery-grid h3 { font-size: 1.5rem; margin-bottom: 14px; }
.delivery-list { list-style: none; margin: 0; padding: 0; columns: 2; column-gap: 32px; }
.delivery-list li { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 10px 0; border-bottom: 1px dashed rgba(201, 185, 138, 0.6); break-inside: avoid; }
.delivery-list li span { color: var(--forest); font-size: 0.98rem; }
.delivery-list li b { font-family: var(--display); font-weight: 600; font-size: 1.25rem; color: var(--berry); }
.modal-panel .delivery-list { margin: 18px 0 16px; }
@media (max-width: 860px) { .delivery-grid { grid-template-columns: 1fr; } }
@media (max-width: 520px) {
  .delivery-list { columns: 1; }
  .map-card { aspect-ratio: auto; min-height: 0; }
  .map-view { position: relative; aspect-ratio: 4 / 3; }
  .map-card-bar { position: static; background: var(--paper-warm); padding: 18px 18px 14px; }
}

/* ---------- Flowers: style tiles link straight to WhatsApp ---------- */
.tile-cta { display: inline-block; margin-top: 10px; font-size: 0.72rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--paper); border-bottom: 1px solid rgba(250, 247, 241, 0.5); padding-bottom: 2px; transition: border-color 0.3s var(--ease); }
.tile:hover .tile-cta { border-color: var(--paper); }
.occasion-row-4 { grid-template-columns: repeat(4, 1fr); }
.occasion .overline { margin-bottom: 6px; }
@media (max-width: 1000px) { .occasion-row-4 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .occasion-row-4 { grid-template-columns: 1fr; } }
.cta-band p { margin-inline: auto; }

/* ---------- desktop hero and banners: the whole photo, arched, clear of the header ---------- */
@media (min-width: 901px) {
  .hero-ed-media, .pb-media {
    overflow: visible; display: flex; align-items: center; justify-content: center;
    padding: calc(var(--alert-h) + 118px) clamp(24px, 4vw, 72px) 44px clamp(12px, 2vw, 32px);
  }
  .hero-ed-media::after, .pb-media::after { display: none; }
  .hero-ed-media picture, .pb-media picture {
    position: relative; inset: auto; height: auto; overflow: hidden;
    border-radius: var(--arch); box-shadow: var(--shadow-lg); background: var(--paper-warm);
  }
  .hero-ed-media picture { width: min(100%, calc(min(88vh, 900px) - var(--alert-h) - 162px)); aspect-ratio: 1 / 1; }
  .page-banner.has-photo { min-height: min(76vh, 780px); }
  .pb-media picture { width: min(100%, calc((min(76vh, 780px) - var(--alert-h) - 162px) * 0.8)); aspect-ratio: 4 / 5; }
  .hero-ed-media img, .pb-media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
}

/* ---------- the same banner, seven ways: side, shape, mount and tint vary per page ---------- */
.page-banner.pb-warm { background: linear-gradient(170deg, var(--paper), var(--paper-warm)); }
.page-banner.pb-glow { background: radial-gradient(ellipse at 78% 35%, rgba(242, 215, 224, 0.6), transparent 55%), var(--paper); }
@media (min-width: 901px) {
  .page-banner.pb-flip { grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr); }
  .page-banner.pb-flip .pb-media { order: -1; padding-left: clamp(24px, 4vw, 72px); padding-right: clamp(12px, 2vw, 32px); }
  .page-banner.pb-flip .pb-copy { padding-left: clamp(24px, 4vw, 64px); padding-right: clamp(24px, 6vw, 120px); }
  .pb-mat .pb-media picture, .pb-mat-sage .pb-media picture { --mat: var(--sand); box-shadow: 20px 20px 0 0 var(--mat), var(--shadow-lg); }
  .pb-mat-sage .pb-media picture { --mat: var(--sage-soft); }
  .pb-oval .pb-media picture { border-radius: 50%; }
  .pb-square .pb-media picture { border-radius: 6px; }
  .pb-wide .pb-media picture { aspect-ratio: 4 / 3; width: min(100%, calc((min(76vh, 780px) - var(--alert-h) - 162px) * 1.3)); border-radius: 6px; }
  .pb-ring .pb-media picture { outline: 1px solid var(--gold); outline-offset: 14px; }
  .pb-print .pb-media picture { aspect-ratio: 100 / 112; border-radius: 3px; border: 16px solid var(--white); border-bottom-width: 54px; transform: rotate(-1.5deg); }
}

/* ---------- interiors: recent work grid ---------- */
.igrid { display: grid; grid-template-columns: repeat(3, 1fr); grid-auto-rows: clamp(200px, 22vw, 300px); gap: 16px; }
.ig { margin: 0; overflow: hidden; border-radius: 6px; position: relative; }
.ig picture, .ig img { position: absolute; inset: 0; width: 100%; height: 100%; }
.ig img { object-fit: cover; transition: transform 1s var(--ease); }
.ig:hover img { transform: scale(1.04); }
.ig-wide { grid-column: span 2; }
.ig-tall { grid-row: span 2; }
.ig-cta { display: flex; flex-direction: column; justify-content: center; gap: 10px; padding: clamp(20px, 2.4vw, 32px); background: var(--paper-warm); color: var(--ink); border: 1px solid rgba(201, 185, 138, 0.5); }
.ig-cta strong { font-family: var(--display); font-weight: 500; font-size: clamp(1.2rem, 1.6vw, 1.5rem); line-height: 1.25; color: var(--forest); }
.ig-cta .eyebrow { margin-bottom: 0; }
.ig-cta:hover .link-arrow { color: var(--berry); }
@media (max-width: 700px) {
  .igrid { grid-template-columns: 1fr 1fr; grid-auto-rows: 44vw; }
  .ig-wide { grid-column: span 2; }
}

/* ============================================================
   Review carousel: native scroll-snap track, paged by the buttons
   ============================================================ */
.rev-carousel { --rev-gap: 24px; position: relative; }
.rev-track {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: calc((100% - 2 * var(--rev-gap)) / 3);
  gap: var(--rev-gap);
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  /* room for the hover lift and shadow without the track clipping them */
  padding: 10px 4px 24px;
  margin: -10px -4px -24px;
}
.rev-track::-webkit-scrollbar { display: none; }
.rev-track:focus-visible { outline: 2px solid var(--gold); outline-offset: 6px; border-radius: 8px; }
.rev-track-2 { grid-auto-columns: calc((100% - var(--rev-gap)) / 2); }
.rev-card { scroll-snap-align: start; display: flex; flex-direction: column; }
.rev-card p { flex: 1; font-size: 1.16rem; margin-bottom: 18px; }
.rev-card cite { display: block; }
.rev-controls { display: flex; align-items: center; justify-content: center; gap: 22px; margin-top: 30px; color: var(--forest); }
.bg-forest .rev-controls { color: var(--paper); }
.rev-btn {
  width: 44px; height: 44px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: transparent; color: inherit; cursor: pointer;
  border: 1px solid rgba(201, 185, 138, 0.8);
  transition: background 0.3s var(--ease), color 0.3s var(--ease), border-color 0.3s var(--ease);
}
.rev-btn svg { width: 18px; height: 18px; }
.rev-btn:hover { background: var(--gold); color: var(--forest); border-color: var(--gold); }
.rev-btn:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; }
.rev-dots { display: flex; gap: 8px; }
.rev-dots button {
  width: 8px; height: 8px; padding: 0; border: 0; border-radius: 50%;
  background: currentColor; opacity: 0.28; cursor: pointer;
  transition: opacity 0.3s var(--ease), transform 0.3s var(--ease);
}
.rev-dots button[aria-current="true"] { opacity: 1; background: var(--gold); transform: scale(1.3); }
.rev-dots button:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; opacity: 1; }
.reviews-source {
  display: flex; flex-wrap: wrap; justify-content: center; column-gap: 26px; row-gap: 6px;
  margin-top: 30px; color: var(--ink-soft); font-size: 0.8rem; letter-spacing: 0.14em; text-transform: uppercase;
}
.reviews-source a { color: var(--berry); text-decoration: none; border-bottom: 1px solid rgba(185, 58, 93, 0.35); }
.reviews-source a:hover { border-color: var(--berry); }
.bg-forest .reviews-source a { color: var(--blush); border-color: rgba(242, 215, 224, 0.4); }
.bg-forest .reviews-source a:hover { border-color: var(--blush); }
@media (max-width: 1080px) {
  .rev-track { grid-auto-columns: calc((100% - var(--rev-gap)) / 2); }
}
@media (max-width: 640px) {
  .rev-carousel { --rev-gap: 16px; }
  .rev-track, .rev-track-2 { grid-auto-columns: 100%; }
  .rev-dots { max-width: 140px; flex-wrap: wrap; justify-content: center; }
}

/* flowers: the two large orchid / dried tiles sit square, so the photo is not cropped to a sliver */
#plants .tile { aspect-ratio: 1 / 1; }
#plants .tile img { object-position: center 50%; }
