/* Story sections: countdown board and festival poster.
   Loaded after styles.css. ID-scoped selectors (#countdown, #festival) deliberately out-rank the
   older generic rules and their media-query copies in styles.css. */

:root{
  --story-torn-top:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 260 16' preserveAspectRatio='none'%3E%3Cpath d='M0 16V4.6L12 7.1L25 3.4L37 3.7L49 4.3L62 1.5L70 2.3L77 7.7L90 5.4L102 6.7L109 10.4L115 2.3L127 3.9L136 8.7L143 6.4L149 1.8L162 6.8L167 2.5L178 2.5L190 4.3L197 2.1L202 1.7L215 8L221 3.5L226 10.3L231 2L239 5.1L247 8.2L252 5.5L260 4.6V16Z'/%3E%3C/svg%3E");
  --story-torn-bottom:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 260 16' preserveAspectRatio='none'%3E%3Cpath d='M0 0V11.4L12 8.9L25 12.6L37 12.3L49 11.7L62 14.5L70 13.7L77 8.3L90 10.6L102 9.3L109 5.6L115 13.7L127 12.1L136 7.3L143 9.6L149 14.2L162 9.2L167 13.5L178 13.5L190 11.7L197 13.9L202 14.3L215 8L221 12.5L226 5.7L231 14L239 10.9L247 7.8L252 10.5L260 11.4V0Z'/%3E%3C/svg%3E");
  --story-burn-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='520' height='90'%3E%3Cfilter id='n' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.014 .08' numOctaves='3' seed='4' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 -1.1'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  --story-char-top:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 30' preserveAspectRatio='none'%3E%3Cpath fill='%23591212' d='M0 0L0 21.2 6 21.9 10 23.0 17 19.3 21 17.6 28 18.3 35 20.7 42 19.0 48 21.1 51 17.8 56 20.3 60 21.1 67 18.1 70 19.4 74 15.9 77 14.8 81 10.9 86 9.8 90 10.3 95 13.3 101 11.0 104 12.6 110 13.2 114 14.2 117 13.4 124 16.5 128 17.8 133 18.2 137 15.0 141 16.2 146 16.3 150 17.3 153 15.4 157 19.0 163 16.5 169 17.3 174 19.4 178 22.2 182 22.3 185 25.3 188 24.6 192 23.6 196 22.3 200 20.4 204 19.0 208 18.6 212 20.0 216 20.3 222 15.6 229 12.5 236 15.3 240 15.0 244 15.8 251 15.7 255 16.0 260 15.4 264 13.6 267 13.5 271 12.5 276 15.1 280 11.6 284 11.8 288 11.9 291 9.4 295 12.0 299 14.5 305 16.8 311 19.4 314 17.6 320 19.2 327 19.7 330 21.2L330 0Z'/%3E%3C/svg%3E");
  --story-char-bottom:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 30' preserveAspectRatio='none'%3E%3Cpath fill='%23591212' d='M0 30L0 8.8 6 8.1 10 7.0 17 10.7 21 12.4 28 11.7 35 9.3 42 11.0 48 8.9 51 12.2 56 9.7 60 8.9 67 11.9 70 10.6 74 14.1 77 15.2 81 19.1 86 20.2 90 19.7 95 16.7 101 19.0 104 17.4 110 16.8 114 15.8 117 16.6 124 13.5 128 12.2 133 11.8 137 15.0 141 13.8 146 13.7 150 12.7 153 14.6 157 11.0 163 13.5 169 12.7 174 10.6 178 7.8 182 7.7 185 4.7 188 5.4 192 6.4 196 7.7 200 9.6 204 11.0 208 11.4 212 10.0 216 9.7 222 14.4 229 17.5 236 14.7 240 15.0 244 14.2 251 14.3 255 14.0 260 14.6 264 16.4 267 16.5 271 17.5 276 14.9 280 18.4 284 18.2 288 18.1 291 20.6 295 18.0 299 15.5 305 13.2 311 10.6 314 12.4 320 10.8 327 10.3 330 8.8L330 30Z'/%3E%3C/svg%3E");
  --story-glow-top:url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 330 30%27 preserveAspectRatio=%27none%27%3E%3Cfilter id=%27g%27 filterUnits=%27userSpaceOnUse%27 x=%27-40%27 y=%27-15%27 width=%27410%27 height=%2760%27%3E%3CfeGaussianBlur stdDeviation=%271.6%27/%3E%3C/filter%3E%3Cg fill=%27none%27 stroke-linecap=%27round%27 stroke-dasharray=%2722 31 7 44 36 19 12 58 26 75%27%3E%3Cg filter=%27url(%23g)%27 stroke=%27%23c18350%27 stroke-width=%273.2%27%3E%3Cpath pathLength=%27330%27 d=%27M0 21.2 6 21.9 10 23.0 17 19.3 21 17.6 28 18.3 35 20.7 42 19.0 48 21.1 51 17.8 56 20.3 60 21.1 67 18.1 70 19.4 74 15.9 77 14.8 81 10.9 86 9.8 90 10.3 95 13.3 101 11.0 104 12.6 110 13.2 114 14.2 117 13.4 124 16.5 128 17.8 133 18.2 137 15.0 141 16.2 146 16.3 150 17.3 153 15.4 157 19.0 163 16.5 169 17.3 174 19.4 178 22.2 182 22.3 185 25.3 188 24.6 192 23.6 196 22.3 200 20.4 204 19.0 208 18.6 212 20.0 216 20.3 222 15.6 229 12.5 236 15.3 240 15.0 244 15.8 251 15.7 255 16.0 260 15.4 264 13.6 267 13.5 271 12.5 276 15.1 280 11.6 284 11.8 288 11.9 291 9.4 295 12.0 299 14.5 305 16.8 311 19.4 314 17.6 320 19.2 327 19.7 330 21.2%27 transform=%27translate(-330 0)%27/%3E%3Cpath pathLength=%27330%27 d=%27M0 21.2 6 21.9 10 23.0 17 19.3 21 17.6 28 18.3 35 20.7 42 19.0 48 21.1 51 17.8 56 20.3 60 21.1 67 18.1 70 19.4 74 15.9 77 14.8 81 10.9 86 9.8 90 10.3 95 13.3 101 11.0 104 12.6 110 13.2 114 14.2 117 13.4 124 16.5 128 17.8 133 18.2 137 15.0 141 16.2 146 16.3 150 17.3 153 15.4 157 19.0 163 16.5 169 17.3 174 19.4 178 22.2 182 22.3 185 25.3 188 24.6 192 23.6 196 22.3 200 20.4 204 19.0 208 18.6 212 20.0 216 20.3 222 15.6 229 12.5 236 15.3 240 15.0 244 15.8 251 15.7 255 16.0 260 15.4 264 13.6 267 13.5 271 12.5 276 15.1 280 11.6 284 11.8 288 11.9 291 9.4 295 12.0 299 14.5 305 16.8 311 19.4 314 17.6 320 19.2 327 19.7 330 21.2%27/%3E%3Cpath pathLength=%27330%27 d=%27M0 21.2 6 21.9 10 23.0 17 19.3 21 17.6 28 18.3 35 20.7 42 19.0 48 21.1 51 17.8 56 20.3 60 21.1 67 18.1 70 19.4 74 15.9 77 14.8 81 10.9 86 9.8 90 10.3 95 13.3 101 11.0 104 12.6 110 13.2 114 14.2 117 13.4 124 16.5 128 17.8 133 18.2 137 15.0 141 16.2 146 16.3 150 17.3 153 15.4 157 19.0 163 16.5 169 17.3 174 19.4 178 22.2 182 22.3 185 25.3 188 24.6 192 23.6 196 22.3 200 20.4 204 19.0 208 18.6 212 20.0 216 20.3 222 15.6 229 12.5 236 15.3 240 15.0 244 15.8 251 15.7 255 16.0 260 15.4 264 13.6 267 13.5 271 12.5 276 15.1 280 11.6 284 11.8 288 11.9 291 9.4 295 12.0 299 14.5 305 16.8 311 19.4 314 17.6 320 19.2 327 19.7 330 21.2%27 transform=%27translate(330 0)%27/%3E%3C/g%3E%3Cg stroke=%27%23c18350%27 stroke-width=%27.9%27%3E%3Cpath pathLength=%27330%27 d=%27M0 21.2 6 21.9 10 23.0 17 19.3 21 17.6 28 18.3 35 20.7 42 19.0 48 21.1 51 17.8 56 20.3 60 21.1 67 18.1 70 19.4 74 15.9 77 14.8 81 10.9 86 9.8 90 10.3 95 13.3 101 11.0 104 12.6 110 13.2 114 14.2 117 13.4 124 16.5 128 17.8 133 18.2 137 15.0 141 16.2 146 16.3 150 17.3 153 15.4 157 19.0 163 16.5 169 17.3 174 19.4 178 22.2 182 22.3 185 25.3 188 24.6 192 23.6 196 22.3 200 20.4 204 19.0 208 18.6 212 20.0 216 20.3 222 15.6 229 12.5 236 15.3 240 15.0 244 15.8 251 15.7 255 16.0 260 15.4 264 13.6 267 13.5 271 12.5 276 15.1 280 11.6 284 11.8 288 11.9 291 9.4 295 12.0 299 14.5 305 16.8 311 19.4 314 17.6 320 19.2 327 19.7 330 21.2%27 transform=%27translate(-330 0)%27/%3E%3Cpath pathLength=%27330%27 d=%27M0 21.2 6 21.9 10 23.0 17 19.3 21 17.6 28 18.3 35 20.7 42 19.0 48 21.1 51 17.8 56 20.3 60 21.1 67 18.1 70 19.4 74 15.9 77 14.8 81 10.9 86 9.8 90 10.3 95 13.3 101 11.0 104 12.6 110 13.2 114 14.2 117 13.4 124 16.5 128 17.8 133 18.2 137 15.0 141 16.2 146 16.3 150 17.3 153 15.4 157 19.0 163 16.5 169 17.3 174 19.4 178 22.2 182 22.3 185 25.3 188 24.6 192 23.6 196 22.3 200 20.4 204 19.0 208 18.6 212 20.0 216 20.3 222 15.6 229 12.5 236 15.3 240 15.0 244 15.8 251 15.7 255 16.0 260 15.4 264 13.6 267 13.5 271 12.5 276 15.1 280 11.6 284 11.8 288 11.9 291 9.4 295 12.0 299 14.5 305 16.8 311 19.4 314 17.6 320 19.2 327 19.7 330 21.2%27/%3E%3Cpath pathLength=%27330%27 d=%27M0 21.2 6 21.9 10 23.0 17 19.3 21 17.6 28 18.3 35 20.7 42 19.0 48 21.1 51 17.8 56 20.3 60 21.1 67 18.1 70 19.4 74 15.9 77 14.8 81 10.9 86 9.8 90 10.3 95 13.3 101 11.0 104 12.6 110 13.2 114 14.2 117 13.4 124 16.5 128 17.8 133 18.2 137 15.0 141 16.2 146 16.3 150 17.3 153 15.4 157 19.0 163 16.5 169 17.3 174 19.4 178 22.2 182 22.3 185 25.3 188 24.6 192 23.6 196 22.3 200 20.4 204 19.0 208 18.6 212 20.0 216 20.3 222 15.6 229 12.5 236 15.3 240 15.0 244 15.8 251 15.7 255 16.0 260 15.4 264 13.6 267 13.5 271 12.5 276 15.1 280 11.6 284 11.8 288 11.9 291 9.4 295 12.0 299 14.5 305 16.8 311 19.4 314 17.6 320 19.2 327 19.7 330 21.2%27 transform=%27translate(330 0)%27/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
  --story-glow-bottom:url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 330 30%27 preserveAspectRatio=%27none%27%3E%3Cfilter id=%27g%27 filterUnits=%27userSpaceOnUse%27 x=%27-40%27 y=%27-15%27 width=%27410%27 height=%2760%27%3E%3CfeGaussianBlur stdDeviation=%271.6%27/%3E%3C/filter%3E%3Cg fill=%27none%27 stroke-linecap=%27round%27 stroke-dasharray=%2722 31 7 44 36 19 12 58 26 75%27%3E%3Cg filter=%27url(%23g)%27 stroke=%27%23c18350%27 stroke-width=%273.2%27%3E%3Cpath pathLength=%27330%27 d=%27M0 8.8 6 8.1 10 7.0 17 10.7 21 12.4 28 11.7 35 9.3 42 11.0 48 8.9 51 12.2 56 9.7 60 8.9 67 11.9 70 10.6 74 14.1 77 15.2 81 19.1 86 20.2 90 19.7 95 16.7 101 19.0 104 17.4 110 16.8 114 15.8 117 16.6 124 13.5 128 12.2 133 11.8 137 15.0 141 13.8 146 13.7 150 12.7 153 14.6 157 11.0 163 13.5 169 12.7 174 10.6 178 7.8 182 7.7 185 4.7 188 5.4 192 6.4 196 7.7 200 9.6 204 11.0 208 11.4 212 10.0 216 9.7 222 14.4 229 17.5 236 14.7 240 15.0 244 14.2 251 14.3 255 14.0 260 14.6 264 16.4 267 16.5 271 17.5 276 14.9 280 18.4 284 18.2 288 18.1 291 20.6 295 18.0 299 15.5 305 13.2 311 10.6 314 12.4 320 10.8 327 10.3 330 8.8%27 transform=%27translate(-330 0)%27/%3E%3Cpath pathLength=%27330%27 d=%27M0 8.8 6 8.1 10 7.0 17 10.7 21 12.4 28 11.7 35 9.3 42 11.0 48 8.9 51 12.2 56 9.7 60 8.9 67 11.9 70 10.6 74 14.1 77 15.2 81 19.1 86 20.2 90 19.7 95 16.7 101 19.0 104 17.4 110 16.8 114 15.8 117 16.6 124 13.5 128 12.2 133 11.8 137 15.0 141 13.8 146 13.7 150 12.7 153 14.6 157 11.0 163 13.5 169 12.7 174 10.6 178 7.8 182 7.7 185 4.7 188 5.4 192 6.4 196 7.7 200 9.6 204 11.0 208 11.4 212 10.0 216 9.7 222 14.4 229 17.5 236 14.7 240 15.0 244 14.2 251 14.3 255 14.0 260 14.6 264 16.4 267 16.5 271 17.5 276 14.9 280 18.4 284 18.2 288 18.1 291 20.6 295 18.0 299 15.5 305 13.2 311 10.6 314 12.4 320 10.8 327 10.3 330 8.8%27/%3E%3Cpath pathLength=%27330%27 d=%27M0 8.8 6 8.1 10 7.0 17 10.7 21 12.4 28 11.7 35 9.3 42 11.0 48 8.9 51 12.2 56 9.7 60 8.9 67 11.9 70 10.6 74 14.1 77 15.2 81 19.1 86 20.2 90 19.7 95 16.7 101 19.0 104 17.4 110 16.8 114 15.8 117 16.6 124 13.5 128 12.2 133 11.8 137 15.0 141 13.8 146 13.7 150 12.7 153 14.6 157 11.0 163 13.5 169 12.7 174 10.6 178 7.8 182 7.7 185 4.7 188 5.4 192 6.4 196 7.7 200 9.6 204 11.0 208 11.4 212 10.0 216 9.7 222 14.4 229 17.5 236 14.7 240 15.0 244 14.2 251 14.3 255 14.0 260 14.6 264 16.4 267 16.5 271 17.5 276 14.9 280 18.4 284 18.2 288 18.1 291 20.6 295 18.0 299 15.5 305 13.2 311 10.6 314 12.4 320 10.8 327 10.3 330 8.8%27 transform=%27translate(330 0)%27/%3E%3C/g%3E%3Cg stroke=%27%23c18350%27 stroke-width=%27.9%27%3E%3Cpath pathLength=%27330%27 d=%27M0 8.8 6 8.1 10 7.0 17 10.7 21 12.4 28 11.7 35 9.3 42 11.0 48 8.9 51 12.2 56 9.7 60 8.9 67 11.9 70 10.6 74 14.1 77 15.2 81 19.1 86 20.2 90 19.7 95 16.7 101 19.0 104 17.4 110 16.8 114 15.8 117 16.6 124 13.5 128 12.2 133 11.8 137 15.0 141 13.8 146 13.7 150 12.7 153 14.6 157 11.0 163 13.5 169 12.7 174 10.6 178 7.8 182 7.7 185 4.7 188 5.4 192 6.4 196 7.7 200 9.6 204 11.0 208 11.4 212 10.0 216 9.7 222 14.4 229 17.5 236 14.7 240 15.0 244 14.2 251 14.3 255 14.0 260 14.6 264 16.4 267 16.5 271 17.5 276 14.9 280 18.4 284 18.2 288 18.1 291 20.6 295 18.0 299 15.5 305 13.2 311 10.6 314 12.4 320 10.8 327 10.3 330 8.8%27 transform=%27translate(-330 0)%27/%3E%3Cpath pathLength=%27330%27 d=%27M0 8.8 6 8.1 10 7.0 17 10.7 21 12.4 28 11.7 35 9.3 42 11.0 48 8.9 51 12.2 56 9.7 60 8.9 67 11.9 70 10.6 74 14.1 77 15.2 81 19.1 86 20.2 90 19.7 95 16.7 101 19.0 104 17.4 110 16.8 114 15.8 117 16.6 124 13.5 128 12.2 133 11.8 137 15.0 141 13.8 146 13.7 150 12.7 153 14.6 157 11.0 163 13.5 169 12.7 174 10.6 178 7.8 182 7.7 185 4.7 188 5.4 192 6.4 196 7.7 200 9.6 204 11.0 208 11.4 212 10.0 216 9.7 222 14.4 229 17.5 236 14.7 240 15.0 244 14.2 251 14.3 255 14.0 260 14.6 264 16.4 267 16.5 271 17.5 276 14.9 280 18.4 284 18.2 288 18.1 291 20.6 295 18.0 299 15.5 305 13.2 311 10.6 314 12.4 320 10.8 327 10.3 330 8.8%27/%3E%3Cpath pathLength=%27330%27 d=%27M0 8.8 6 8.1 10 7.0 17 10.7 21 12.4 28 11.7 35 9.3 42 11.0 48 8.9 51 12.2 56 9.7 60 8.9 67 11.9 70 10.6 74 14.1 77 15.2 81 19.1 86 20.2 90 19.7 95 16.7 101 19.0 104 17.4 110 16.8 114 15.8 117 16.6 124 13.5 128 12.2 133 11.8 137 15.0 141 13.8 146 13.7 150 12.7 153 14.6 157 11.0 163 13.5 169 12.7 174 10.6 178 7.8 182 7.7 185 4.7 188 5.4 192 6.4 196 7.7 200 9.6 204 11.0 208 11.4 212 10.0 216 9.7 222 14.4 229 17.5 236 14.7 240 15.0 244 14.2 251 14.3 255 14.0 260 14.6 264 16.4 267 16.5 271 17.5 276 14.9 280 18.4 284 18.2 288 18.1 291 20.6 295 18.0 299 15.5 305 13.2 311 10.6 314 12.4 320 10.8 327 10.3 330 8.8%27 transform=%27translate(330 0)%27/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
  --story-grain:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23591212' filter='url(%23g)' d='M0 0h180v180H0z'/%3E%3C/svg%3E");
}

/* ============================================================
   1. Countdown strip: a split-flap board on a torn red band
   ============================================================ */
.countdown-strip{
  --flap:clamp(4.4rem,8.4vw,8.6rem);
  position:relative;z-index:1;isolation:isolate;overflow:clip;
  display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;
  gap:clamp(24px,4vw,72px);
  padding:clamp(52px,5.6vw,82px) 6%;
  background:var(--red);color:var(--paper);
  box-shadow:inset 0 24px 22px -16px var(--brand-deep),inset 0 -24px 22px -16px var(--brand-deep);
  -webkit-mask:var(--story-torn-top) 0 0/260px 16px repeat-x,linear-gradient(var(--brand-deep) 0 0) 0 15px/100% calc(100% - 30px) no-repeat,var(--story-torn-bottom) 0 100%/260px 16px repeat-x;
  mask:var(--story-torn-top) 0 0/260px 16px repeat-x,linear-gradient(var(--brand-deep) 0 0) 0 15px/100% calc(100% - 30px) no-repeat,var(--story-torn-bottom) 0 100%/260px 16px repeat-x;
}
/* risograph halftone at the edges + a dark pool behind the board */
.countdown-strip::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(circle,rgb(var(--brand-deep-rgb) / 0.251) 0 1.1px,transparent 1.7px) 0 0/6px 6px;-webkit-mask:linear-gradient(90deg,var(--brand-deep),transparent 34%,transparent 66%,var(--brand-deep));mask:linear-gradient(90deg,var(--brand-deep),transparent 34%,transparent 66%,var(--brand-deep))}
.countdown-strip::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(ellipse 34% 95% at 50% 52%,rgb(var(--brand-deep-rgb) / 0.8),rgb(var(--brand-wine-rgb) / 0) 72%),var(--story-grain) 0 0/180px;opacity:.9;mix-blend-mode:multiply}

.countdown-meta{display:grid;gap:12px;justify-items:start;min-width:0}
.countdown-strip .countdown-meta .eyebrow{margin:0;font-size:.75rem;letter-spacing:.18em;color:var(--paper);opacity:.86}
/* Sunday sits on the date line in the date's own type, not with the venue */
.countdown-when{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 .75em;white-space:nowrap}
.countdown-when-sep{opacity:.55}
.countdown-sub{font-family:var(--serif);font-size:clamp(1.35rem,2.1vw,2.1rem);line-height:1.02;text-transform:uppercase;letter-spacing:.01em;color:var(--paper)}

#countdown{display:flex;justify-content:flex-end;align-items:center;flex-wrap:nowrap;gap:clamp(14px,2vw,30px);min-width:0}
#countdown p{display:flex;align-items:center;gap:clamp(12px,1.4vw,22px);margin:0}
#countdown strong{display:block;font-family:var(--serif);font-size:var(--flap);font-weight:400;line-height:1;letter-spacing:0;color:var(--paper)}
#countdown p>span{display:block;width:min-content;font-family:var(--serif);font-size:calc(var(--flap)*.255);font-weight:400;line-height:.98;letter-spacing:.03em;text-transform:uppercase;color:var(--paper)}
#countdown .countdown-message{display:block;font-family:var(--serif);font-size:clamp(1.8rem,4vw,3.4rem);font-weight:400;line-height:1;text-transform:uppercase;text-align:center;color:var(--paper)}
/* Without JS the number is still a single printed tile with a seam */
#countdown strong:not(.is-flapped){padding:.06em .1em .02em;border-radius:.05em;background:linear-gradient(180deg,var(--brand-deep) 0 49.4%,var(--brand-deep) 49.4% 50.8%,var(--brand-deep) 50.8%);box-shadow:0 .045em 0 var(--brand-deep),0 .16em .22em -.08em rgb(var(--brand-deep-rgb) / 0.8)}

/* the board (built by js/story.mjs; aria-hidden, the real value sits beside it in .sr-only) */
#countdown .flap-board{position:relative;display:inline-flex;gap:.06em;font-size:inherit;letter-spacing:0;opacity:1;translate:none;transition:none}
#countdown .flap-glow{position:absolute;inset:-35% -25%;z-index:-1;border-radius:50%;background:radial-gradient(closest-side,rgb(var(--brand-clay-rgb) / 0.851),rgb(var(--brand-clay-rgb) / 0.251) 55%,rgb(var(--brand-clay-rgb) / 0));opacity:0;pointer-events:none}
#countdown .flap{position:relative;display:block;width:.68em;height:1.04em;perspective:3.4em;font-style:normal;border-radius:.06em;background:var(--brand-deep);box-shadow:0 .045em 0 var(--brand-deep),0 .16em .22em -.08em rgb(var(--brand-deep-rgb) / 0.8),inset 0 0 0 1px rgb(var(--brand-sand-rgb) / 0.0392)}
#countdown .flap i{font-style:normal}
#countdown .flap-half,#countdown .flap-face{position:absolute;left:0;right:0;overflow:hidden}
#countdown .flap-top{top:0;height:50%;border-radius:.06em .06em 0 0;background:linear-gradient(180deg,var(--brand-deep),var(--brand-deep))}
#countdown .flap-bottom{bottom:0;height:50%;border-radius:0 0 .06em .06em;background:linear-gradient(180deg,var(--brand-deep),var(--brand-deep))}
#countdown .flap-leaf{position:absolute;left:0;right:0;top:0;height:50%;z-index:2;transform-origin:50% 100%;transform-style:preserve-3d;will-change:transform}
#countdown .flap-face{inset:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}
#countdown .flap-front{border-radius:.06em .06em 0 0;background:linear-gradient(180deg,var(--brand-deep),var(--brand-deep))}
#countdown .flap-back{border-radius:0 0 .06em .06em;background:linear-gradient(180deg,var(--brand-deep),var(--brand-deep));transform:rotateX(180deg)}
#countdown .flap b{position:absolute;left:0;right:0;top:0;height:200%;display:flex;align-items:center;justify-content:center;font-weight:400;line-height:1;padding-top:.035em;color:var(--paper);text-shadow:0 .015em 0 rgb(var(--brand-deep-rgb) / 0.5333)}
#countdown .flap-bottom b,#countdown .flap-back b{top:-100%}
#countdown .flap-shade{position:absolute;inset:0;background:var(--brand-deep);opacity:0;pointer-events:none}
/* seam + hinge pins */
#countdown .flap::after{content:"";position:absolute;left:0;right:0;top:50%;z-index:3;height:max(2px,.018em);transform:translateY(-50%);background:var(--brand-deep);box-shadow:0 1px 0 rgb(var(--brand-sand-rgb) / 0.0784)}
#countdown .flap::before{content:"";position:absolute;z-index:4;top:50%;left:-.03em;right:-.03em;height:.1em;transform:translateY(-50%);pointer-events:none;background:radial-gradient(circle at .03em 50%,var(--brand-deep) 0 .022em,var(--brand-deep) .026em .036em,transparent .042em),radial-gradient(circle at calc(100% - .03em) 50%,var(--brand-deep) 0 .022em,var(--brand-deep) .026em .036em,transparent .042em)}

/* time mode (only if a start time is ever confirmed): four smaller groups */
#countdown:has(p+p){--flap:clamp(2.6rem,5.4vw,5rem);flex-wrap:wrap}
#countdown:has(p+p) p{flex-direction:column;gap:10px}
#countdown:has(p+p) p>span{width:auto;font-size:.75rem;font-family:var(--sans);letter-spacing:.14em}

@media(max-width:1080px){
  .countdown-strip{--flap:clamp(4.2rem,9vw,6.8rem);gap:28px}
}
@media(max-width:900px){
  .countdown-strip{--flap:clamp(4.6rem,12vw,7rem);padding-block:58px 54px}
}
/* Phones: venue and date on top, the board below on the right */
@media(max-width:600px){
  .countdown-strip{--flap:clamp(4.4rem,25vw,6.6rem);grid-template-columns:minmax(0,1fr);row-gap:26px;padding:54px 7% 50px}
  .countdown-sub{font-size:1.5rem}
  #countdown{justify-self:end}
  #countdown:has(p+p){--flap:clamp(2.2rem,11vw,3.2rem);gap:14px 18px}
}

/* ============================================================
   2. Festival poster: scorched paper, stamped words, LOUD. speaker
   ============================================================ */
.gig-notice{position:relative}
/* the sheet: its burnt top and bottom edges are drawn only by the char layer below (page-coloured, with the ember line on
   its boundary). A separate torn mask here would add a second, different jagged edge. */
.gig-paper{clip-path:none;-webkit-mask:none;mask:none}
/* scorched edges: a charred rim, then a blotchy singe stain fading into the paper */
.gig-scorch{position:absolute;left:0;right:0;z-index:4;height:clamp(64px,7vw,104px);pointer-events:none}
.gig-scorch--top{top:0}
.gig-scorch--bottom{bottom:0}
.gig-scorch::before{content:"";position:absolute;z-index:1;left:0;right:0;height:30px;background-repeat:repeat-x;background-size:330px 30px}
.gig-scorch--top::before{top:0;background-image:var(--story-char-top)}
.gig-scorch--bottom::before{bottom:0;background-image:var(--story-char-bottom);background-position:120px 0}
.gig-scorch::after{content:"";position:absolute;inset:0;mix-blend-mode:multiply}
.gig-scorch--top::after{background:linear-gradient(180deg,var(--brand-deep) 0 14px,rgb(var(--brand-wine-rgb) / 0.702) 24px,rgb(var(--brand-clay-rgb) / 0.4) 48%,rgb(var(--brand-clay-rgb) / 0));-webkit-mask:linear-gradient(180deg,var(--brand-deep) 0 20px,rgb(var(--brand-deep-rgb) / 0) 42px),var(--story-burn-noise) 0 0/520px 100%;mask:linear-gradient(180deg,var(--brand-deep) 0 20px,rgb(var(--brand-deep-rgb) / 0) 42px),var(--story-burn-noise) 0 0/520px 100%}
.gig-scorch--bottom::after{background:linear-gradient(0deg,var(--brand-deep) 0 14px,rgb(var(--brand-wine-rgb) / 0.702) 24px,rgb(var(--brand-clay-rgb) / 0.4) 48%,rgb(var(--brand-clay-rgb) / 0));-webkit-mask:linear-gradient(0deg,var(--brand-deep) 0 20px,rgb(var(--brand-deep-rgb) / 0) 42px),var(--story-burn-noise) 260px 0/520px 100%;mask:linear-gradient(0deg,var(--brand-deep) 0 20px,rgb(var(--brand-deep-rgb) / 0) 42px),var(--story-burn-noise) 260px 0/520px 100%}
/* smouldering: a broken ember line traced along the char boundary, flickering */
.gig-embers{position:absolute;inset:0;z-index:5;pointer-events:none}
.gig-embers::before,.gig-embers::after{content:"";position:absolute;left:0;right:0;height:30px;background-size:330px 30px;background-repeat:repeat-x;mix-blend-mode:screen}
.gig-embers::before{top:0;background-image:var(--story-glow-top);animation:story-ember 2.7s ease-in-out infinite alternate}
.gig-embers::after{bottom:0;background-image:var(--story-glow-bottom);background-position:120px 0;opacity:.7;animation:story-ember 3.5s ease-in-out -1.6s infinite alternate}
@keyframes story-ember{0%{opacity:.3}38%{opacity:1}62%{opacity:.55}100%{opacity:.9}}

.gig-word{position:relative;display:inline-block;will-change:transform}
.gig-hindustani{display:block}
.gig-ink{display:inline-block;transform-origin:50% 62%}
.gig-loud{transform:none;margin-left:.5%}
.gig-loud .gig-ink{translate:0 13px;rotate:1.5deg}
/* the printed speaker cone behind LOUD. */
.gig-cone{position:absolute;left:50%;top:56%;z-index:-1;width:1.55em;height:1.55em;margin:-.775em 0 0 -.775em;border-radius:50%;pointer-events:none;background:radial-gradient(circle,rgb(var(--brand-red-rgb) / 0.2) 0 .07em,transparent .075em),repeating-radial-gradient(circle,transparent 0 .085em,rgb(var(--brand-red-rgb) / 0.1412) .085em .1em);-webkit-mask:radial-gradient(circle,var(--brand-deep) 55%,transparent 71%);mask:radial-gradient(circle,var(--brand-deep) 55%,transparent 71%)}
.gig-cone i{position:absolute;inset:6%;border-radius:50%;border:.03em solid var(--red);opacity:0;transform:scale(.4)}

/* stamp / slam entrance (armed by JS only when motion is allowed) */
.gig-notice.is-armed .gig-ink{opacity:0}
.gig-notice.is-stamped .gig-ink{opacity:1;animation:story-slam .62s both;animation-delay:var(--d,0s)}
@keyframes story-slam{
  0%{opacity:0;transform:scale(2.3) rotate(-4deg);filter:blur(5px);animation-timing-function:cubic-bezier(.55,0,.9,.4)}
  46%{opacity:1;transform:scale(.93) rotate(.4deg);filter:blur(0);animation-timing-function:cubic-bezier(.2,.7,.3,1)}
  66%{transform:scale(1.035) rotate(-.2deg)}
  84%{transform:scale(.995)}
  100%{opacity:1;transform:none;filter:none}
}

/* layout: the headline on the left with the copy beside it, the ticket sticker centred underneath */
#festival .gig-head{display:flex;align-items:center;justify-content:space-between;gap:clamp(32px,5vw,90px)}
#festival .gig-title{flex:0 0 auto;white-space:nowrap}
#festival .gig-copy{flex:0 1 420px;max-width:420px;margin:0;padding-top:clamp(0px,2vw,28px)}
#festival .gig-bottom{display:flex;justify-content:center;padding:0;margin-top:clamp(48px,5.5vw,80px)}
#festival .gig-ticket{flex:0 1 460px;width:100%;max-width:460px;margin:0}
@media(max-width:1180px){
  #festival .gig-head{display:block}
  #festival .gig-title{white-space:normal}
  #festival .gig-copy{max-width:540px;margin:30px 4% 0 0;padding:0}
  #festival .gig-bottom{margin-top:38px}
}
@media(max-width:700px){
  #festival .gig-ticket{width:90%;max-width:450px}
}

/* the four seals (PSD art, assets/seals) printed like ink stamps on the paper, two either side of the ticket */
#festival .gig-bottom{position:relative}
.gig-seals{position:absolute;inset:0;pointer-events:none}
.gig-seal{position:absolute;width:clamp(100px,11vw,170px);aspect-ratio:1;background:var(--black);opacity:.9;mix-blend-mode:multiply;-webkit-mask:var(--seal) center/contain no-repeat;mask:var(--seal) center/contain no-repeat}
.gig-seal--bull{--seal:url(../assets/seals/seal-bull.webp);left:3%;top:-6px;rotate:-7deg}
.gig-seal--yogi{--seal:url(../assets/seals/seal-yogi.webp);left:13%;top:46%;rotate:5deg}
.gig-seal--tigers{--seal:url(../assets/seals/seal-tigers.webp);right:13%;top:-24px;rotate:6deg}
.gig-seal--buffalo{--seal:url(../assets/seals/seal-buffalo.webp);right:3%;top:40%;rotate:-4deg}
/* stamped in by js/story.mjs (motion allowed only): each seal drops onto the paper, lands, and its ink settles from soft to crisp */
.gig-notice.seals-armed .gig-seal{opacity:0}
.gig-notice.seals-armed .gig-seal.is-stamped{opacity:.9;animation:story-seal .62s both}
@keyframes story-seal{
  0%{opacity:0;transform:scale(1.85) rotate(8deg);filter:blur(5px);animation-timing-function:cubic-bezier(.55,0,.9,.4)}
  38%{opacity:1;transform:scale(.95) rotate(-.6deg);filter:none;animation-timing-function:cubic-bezier(.2,.7,.3,1)}
  52%{transform:scale(1.025);filter:blur(1.3px)}
  100%{opacity:.9;transform:none;filter:none}
}
/* touch and small screens: the same drop without the ink blur, which repaints the masked seals every frame */
@media (hover:none),(max-width:700px){
  .gig-notice.seals-armed .gig-seal.is-stamped{animation-name:story-seal-calm}
}
@keyframes story-seal-calm{
  0%{opacity:0;transform:scale(1.7) rotate(8deg);animation-timing-function:cubic-bezier(.55,0,.9,.4)}
  45%{opacity:1;transform:scale(.96) rotate(-.6deg);animation-timing-function:cubic-bezier(.2,.7,.3,1)}
  100%{opacity:.9;transform:none}
}
/* once the headline stacks, there's no room beside the ticket: a row of four underneath */
@media(max-width:1180px){
  #festival .gig-bottom{flex-wrap:wrap}
  .gig-seals{position:static;width:100%;display:flex;justify-content:center;gap:5%;margin-top:34px}
  .gig-seal{position:static;width:min(20%,112px)}
}

/* ticket stub: base tilt moves to `rotate` so JS can own `transform` for the 3D spring */
.gig-ticket{transform:none;rotate:2deg}
:root[data-motion="full"].js .gig-ticket[data-reveal]:not(.is-in){rotate:9deg}
.gig-ticket dd span{display:inline-block;margin-top:2px;font-size:.75rem;line-height:1.5}
.gig-glare{position:absolute;inset:0;z-index:3;overflow:hidden;pointer-events:none;mix-blend-mode:soft-light}
.gig-glare i{position:absolute;left:-50%;top:-50%;width:200%;height:200%;background:radial-gradient(circle at 50% 50%,rgb(var(--brand-sand-rgb) / 0.8784) 0,rgb(var(--brand-sand-rgb) / 0.3137) 15%,rgb(var(--brand-sand-rgb) / 0) 38%);opacity:0}

@media(max-width:700px){
  .gig-loud{margin-left:4%}
  .gig-loud .gig-ink{translate:0 9px}
  .gig-ticket{rotate:1.4deg}
  .gig-scorch{height:58px}
}

/* ============================================================
   Reduced motion: static, finished states (the global rule in styles.css stops every animation)
   ============================================================ */
:root[data-motion="reduce"] .gig-ink{opacity:1}
:root[data-motion="reduce"] .gig-embers::before{opacity:.8}
:root[data-motion="reduce"] .gig-embers::after{opacity:.6}
