/* Tidepool Days: the look of every page.
	"What the ebb uncovers": cut-paper shapes of what a low tide leaves out, on wet-rock ink, a clear
	pool and a shell-white ground. Light only, chosen for reading a phone outdoors in sun.
	Names come from the shore: splash (header), crumbs, pool (the answer), slack (picked days),
	swash (the daylight bar), rim (grade), ripple (months), holdfast (station and limits),
	cove (the calendar), limpet (questions), reef (beaches), flow (buying), berm (phone bar),
	wrack (footer). */

@font-face {
	font-family: 'Tilt Warp';
	src: url('/tide/tiltwarp-regular.f18055c38b.woff2') format('woff2');
	font-weight: 400;
	font-display: swap;
}
@font-face {
	font-family: 'Familjen Grotesk';
	src: url('/tide/familjengrotesk-variable.414d5dfe5f.woff2') format('woff2');
	font-weight: 400 700;
	font-display: swap;
}

:root {
	color-scheme: light;
	/* each colour has one job */
	--shell: #f4f5ef; /* ground */
	--ink: #16211d; /* wet rock: text, rules, the buy button */
	--wet: #4c5852; /* secondary text on shell, foam and white only */
	--pool: #3fcfb4; /* the answer field, the window in the daylight bar */
	--foam: #ddf5ee; /* quiet fields, the season months */
	--pool-deep: #0b6e62; /* hover and focus ring */
	--ochre: #f2622a; /* sea star: the very-low pebble, never text */
	--coralline: #f7a1be; /* the calendar object */
	--rock-grey: #c9d2cc; /* small text on ink */
	--rule: rgba(22, 33, 29, 0.16);

	--display: 'Tilt Warp', 'Familjen Grotesk', ui-rounded, sans-serif;
	--text: 'Familjen Grotesk', ui-sans-serif, system-ui, sans-serif;

	--cols: 4;
	--gap: 12px;
	--margin: 20px;
	--max: 1184px;

	--s1: 4px;
	--s2: 8px;
	--s3: 12px;
	--s4: 16px;
	--s5: 24px;
	--s6: 32px;
	--s7: 48px;
	--s8: 64px;
	--s9: 96px;
	--radius: 20px;
	--tap: 44px;
}

@media (min-width: 960px) {
	:root {
		--cols: 12;
		--gap: 24px;
		--margin: 48px;
	}
}

*,
*::before,
*::after {
	box-sizing: border-box;
}
html {
	-webkit-text-size-adjust: 100%;
	background: var(--ink);
}
body {
	margin: 0;
	min-height: 100vh;
	display: flex;
	flex-direction: column;
	background: var(--shell);
	color: var(--ink);
	font: 400 18px/1.5 var(--text);
	text-rendering: optimizeLegibility;
	overflow-wrap: break-word;
}
main {
	flex: 1 0 auto;
}
[hidden] {
	display: none !important;
}
img,
svg {
	display: block;
	max-width: 100%;
}
img {
	height: auto;
}
button,
input {
	font-family: inherit;
	font-size: inherit;
	color: inherit;
}
h1,
h2,
h3,
p,
ol,
ul,
dl,
dd,
figure {
	margin: 0;
}
ol,
ul {
	padding: 0;
	list-style: none;
}
h1,
h2,
h3 {
	text-wrap: balance;
	font-weight: 400;
}
p,
li,
dd {
	text-wrap: pretty;
}
a {
	color: inherit;
	text-decoration-thickness: 1.5px;
	text-underline-offset: 0.18em;
}
a:hover {
	color: var(--pool-deep);
}
:focus-visible {
	outline: 3px solid var(--pool-deep);
	outline-offset: 3px;
	border-radius: 6px;
}
[tabindex='-1']:focus {
	outline: none;
}
code {
	font-size: 0.9em;
	overflow-wrap: anywhere;
}
.icon {
	width: 1.25em;
	height: 1.25em;
	flex: none;
}
.quiet {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}
.skip {
	position: absolute;
	left: -9999px;
	z-index: 30;
	padding: var(--s3) var(--s4);
	background: var(--ink);
	color: var(--shell);
}
.skip:focus {
	left: var(--s2);
	top: var(--s2);
}

/* ---------- the grid ---------- */
.shelf {
	display: grid;
	grid-template-columns: repeat(var(--cols), minmax(0, 1fr));
	column-gap: var(--gap);
	width: 100%;
	max-width: calc(var(--max) + 2 * var(--margin));
	margin-inline: auto;
	padding-inline: var(--margin);
}
.shelf > * {
	grid-column: 1 / -1;
	min-width: 0;
}
.shelf + .shelf {
	margin-top: var(--s8);
}
@media (min-width: 960px) {
	.shelf + .shelf {
		margin-top: var(--s9);
	}
}

/* type roles */
.tide-h2 {
	font: 400 28px/1.08 var(--display);
	letter-spacing: -0.01em;
}
.tide-h3 {
	font: 700 19px/1.25 var(--text);
}
.tide-lead {
	font-size: 19px;
	line-height: 1.45;
	max-width: 40ch;
}
.spray {
	font-size: 15px;
	line-height: 1.45;
	color: var(--wet);
}
.leaf-h1 {
	font: 400 36px/1.06 var(--display);
	letter-spacing: -0.012em;
}
@media (min-width: 960px) {
	body {
		font-size: 19px;
	}
	.tide-h2 {
		font-size: 40px;
	}
	.tide-lead {
		font-size: 21px;
	}
	.leaf-h1 {
		font-size: 64px;
		grid-column: 1 / span 9;
	}
}

/* ---------- splash: the header ---------- */
.splash {
	padding-block: var(--s3);
}
.splash-in {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--s3);
}
.splash-mark {
	display: block;
	padding-block: var(--s2);
}
.splash-mark img {
	height: 28px;
	width: auto;
}
.splash-nav {
	display: flex;
	align-items: center;
	gap: var(--s2);
	font-size: 16px;
	font-weight: 600;
}
.splash-nav a {
	display: inline-flex;
	align-items: center;
	gap: var(--s2);
	min-height: var(--tap);
	padding: 0 14px;
	border-radius: 999px;
	text-decoration: none;
	white-space: nowrap;
}
.splash-nav a:hover {
	background: var(--foam);
	color: var(--ink);
}
.splash-find {
	border: 2px solid var(--ink);
}
.splash-find[aria-current] {
	background: var(--foam);
}
.splash-cal {
	display: none !important;
}
@media (max-width: 959px) {
	.splash-find span {
		position: absolute;
		width: 1px;
		height: 1px;
		overflow: hidden;
		clip-path: inset(50%);
	}
	.splash-nav .splash-find {
		width: var(--tap);
		padding: 0;
		justify-content: center;
	}
}
@media (min-width: 960px) {
	.splash {
		padding-block: var(--s5);
	}
	.splash-mark img {
		height: 38px;
	}
	.splash-cal {
		display: inline-flex !important;
		max-width: 26em;
		overflow: hidden;
		text-overflow: ellipsis;
	}
	.splash-nav .splash-cal {
		background: var(--ink);
		color: var(--shell);
	}
	.splash-nav .splash-cal:hover {
		background: #24332d;
		color: var(--shell);
	}
}

/* crumbs: where you are */
.shelf.crumbs {
	margin-top: 0;
}
.crumbs ol {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	font-size: 15px;
	color: var(--wet);
}
.crumbs li {
	display: inline-flex;
	align-items: center;
	min-width: 0;
}
.crumbs li + li::before {
	content: '/';
	padding-inline: var(--s2);
	color: var(--rule);
}
.crumbs a,
.crumbs span {
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
}
.crumbs [aria-current] {
	color: var(--ink);
	font-weight: 600;
}
.tide {
	padding-top: var(--s4);
}
@media (min-width: 960px) {
	.tide {
		padding-top: var(--s5);
	}
}

/* ---------- pool: the answer ---------- */
.ebb {
	row-gap: var(--s6);
	align-items: start;
}
.pool {
	position: relative;
	background: var(--pool);
	padding: var(--s5) var(--s5) var(--s6);
	/* a rock pool, not a box */
	border-radius: 34px 58px 46px 72px / 44px 40px 70px 52px;
}
.pool-name {
	display: flex;
	align-items: center;
	gap: var(--s2);
	font: 700 17px/1.2 var(--text);
	padding-right: 56px;
}
.pool-name .icon {
	width: 20px;
	height: 20px;
}
.pool-region {
	margin-top: var(--s1);
	font-size: 15px;
	font-weight: 600;
}
.ebb-answer {
	position: relative;
	z-index: 1;
	margin-top: var(--s3);
	font: 400 28px/1.12 var(--display);
	letter-spacing: -0.012em;
	text-wrap: balance;
}
/* the day and time sit on an uncovered patch of shell */
.ebb-answer [data-fill='day'],
.ebb-answer [data-fill='time'] {
	background: var(--shell);
	padding: 0 0.16em;
	border-radius: 0.22em;
	-webkit-box-decoration-break: clone;
	box-decoration-break: clone;
}
.pool-source,
.pool-app {
	position: relative;
	z-index: 1;
	margin-top: var(--s4);
	font-size: 15px;
	font-weight: 600;
	max-width: 34ch;
}
.pool-source a {
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
}
.pool-art {
	position: absolute;
	pointer-events: none;
}
.pool-star {
	width: 74px;
	right: -6px;
	bottom: -30px;
	transform: rotate(14deg);
}
.pool-anemone {
	width: 46px;
	right: 18px;
	top: -16px;
}
.pool-mussels {
	display: none;
}
.pool--month .ebb-answer {
	font-size: 24px;
}
@media (min-width: 960px) {
	.pool {
		grid-column: 1 / span 7;
		padding: var(--s7) var(--s7) var(--s9);
		min-height: 520px;
		border-radius: 64px 120px 90px 150px / 90px 84px 140px 110px;
	}
	.pool--month {
		min-height: 360px;
	}
	.pool-name {
		font-size: 20px;
	}
	.pool-region {
		font-size: 17px;
	}
	.ebb-answer {
		font-size: 50px;
		line-height: 1.06;
		margin-top: var(--s5);
		max-width: 14.5em;
	}
	.pool--month .ebb-answer {
		font-size: 40px;
	}
	.pool-star {
		width: 150px;
		right: -36px;
		bottom: -44px;
	}
	.pool-anemone {
		width: 96px;
		right: 64px;
		top: -40px;
	}
	.pool-mussels {
		display: block;
		width: 150px;
		left: 36px;
		bottom: -40px;
		transform: rotate(-6deg);
	}
	.pool-source,
	.pool-app {
		font-size: 17px;
		margin-top: var(--s6);
	}
	.slack {
		grid-column: 8 / span 5;
	}
}

/* ---------- slack: the picked days ---------- */
.slack-head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: var(--s1) var(--s3);
	flex-wrap: wrap;
}
.slack-head .tide-h2 {
	font-size: 26px;
}
.slack-list {
	margin-top: var(--s3);
	border-top: 2px solid var(--ink);
}
.pool-day {
	display: grid;
	grid-template-columns: 52px minmax(0, 1fr) auto;
	grid-template-areas: 'date time rim' 'date win win' 'date swash swash';
	column-gap: var(--s3);
	row-gap: 2px;
	padding-block: var(--s3) var(--s4);
	border-bottom: 1px solid var(--rule);
}
.pool-date {
	grid-area: date;
}
.pool-date time {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	line-height: 1;
}
.pool-date .wk {
	font: 700 13px/1 var(--text);
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
.pool-date .dd {
	font: 400 34px/1 var(--display);
	margin-top: 3px;
}
.pool-date .mo {
	font: 600 14px/1 var(--text);
	margin-top: 3px;
}
.pool-time {
	grid-area: time;
	display: flex;
	align-items: baseline;
	flex-wrap: wrap;
	column-gap: var(--s3);
	font-variant-numeric: tabular-nums;
}
.pool-time .t {
	font: 700 22px/1.2 var(--text);
}
.pool-time .h {
	font: 600 17px/1.2 var(--text);
}
.pool-window {
	grid-area: win;
	font-size: 16px;
	line-height: 1.35;
	font-variant-numeric: tabular-nums;
}
.pool-cut {
	display: block;
	color: var(--wet);
	font-size: 14px;
}
.rim {
	grid-area: rim;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font: 700 15px/1 var(--text);
	white-space: nowrap;
	align-self: start;
	padding-top: 4px;
}
.rim .icon {
	width: 20px;
	height: 20px;
}
.rim--low .icon {
	color: var(--ink);
}
/* very low: the whole rock is out, an ochre pebble with an ink edge */
.rim--very-low .icon {
	color: var(--ochre);
}
.rim--very-low .icon use {
	stroke: var(--ink);
	stroke-width: 1.5px;
}

/* swash: daylight from sunrise to sunset, the window to be there, the low as a tick */
.swash {
	grid-area: swash;
	margin-top: var(--s2);
}
.swash-track {
	width: 100%;
	height: 18px;
	overflow: visible;
}
.swash-day {
	fill: var(--foam);
	stroke: var(--rule);
	stroke-width: 1;
}
.swash-win {
	fill: var(--pool);
	stroke: var(--ink);
	stroke-width: 1.5;
}
.swash-low {
	fill: var(--ink);
}
.swash-sun {
	display: flex;
	justify-content: space-between;
	margin-top: 2px;
	font-size: 14px;
	color: var(--wet);
	font-variant-numeric: tabular-nums;
}
.swash-sun > span {
	display: inline-flex;
	align-items: center;
	gap: 4px;
}
.swash-sun .icon {
	width: 16px;
	height: 16px;
}
.slack-key,
.slack-gap,
.slack-none {
	margin-top: var(--s3);
}
.slack-months-h {
	margin-top: var(--s5);
}
.slack-months {
	margin-block: var(--s2);
	border-top: 2px solid var(--ink);
}
.slack-months a {
	display: flex;
	align-items: center;
	gap: var(--s2);
	min-height: var(--tap);
	padding-block: var(--s2);
	border-bottom: 1px solid var(--rule);
	font-weight: 600;
	text-decoration: none;
}
.slack-months .icon {
	width: 20px;
	height: 20px;
}
.slack-more {
	margin-top: var(--s4);
	font-size: 16px;
}
.slack-more a {
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
}
@media (min-width: 960px) {
	.slack-head .tide-h2 {
		font-size: 30px;
	}
	.pool-day {
		grid-template-columns: 64px minmax(0, 1fr) auto;
		padding-block: var(--s4) var(--s5);
	}
	.pool-date .dd {
		font-size: 40px;
	}
	.pool-time .t {
		font-size: 24px;
	}
}

/* ---------- ripple: best months as pebbles ---------- */
.ripple {
	row-gap: var(--s5);
}
.ripple-say p {
	margin-top: var(--s3);
	max-width: 52ch;
}
.ripple-say p:first-of-type {
	font-size: 19px;
	line-height: 1.45;
}
.ripple-chart {
	display: grid;
	grid-template-columns: repeat(12, minmax(0, 1fr));
	gap: 3px;
	align-items: end;
	padding: var(--s4) 0 var(--s2);
	border-bottom: 2px solid var(--ink);
}
.ripple-month {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 6px;
	min-width: 0;
	border-radius: 12px 12px 0 0;
	padding: 6px 0 var(--s2);
}
.ripple-month.is-season {
	background: var(--foam);
}
.ripple-n {
	font: 700 14px/1 var(--text);
	font-variant-numeric: tabular-nums;
}
.ripple-stack {
	width: 12px;
	height: auto;
	overflow: visible;
}
.pebble {
	fill: none;
	stroke: var(--ink);
	stroke-width: 1.6;
}
.pebble-deep {
	fill: var(--ochre);
	stroke: var(--ink);
	stroke-width: 1.2;
}
.ripple-none {
	width: 10px;
	height: 10px;
	border-radius: 50%;
	box-shadow: inset 0 0 0 1.5px var(--wet);
}
.ripple-label {
	font: 700 13px/1 var(--text);
	text-transform: uppercase;
	letter-spacing: 0.04em;
}
.ripple-key {
	display: flex;
	flex-wrap: wrap;
	gap: var(--s2) var(--s4);
	margin-top: var(--s3);
	font-size: 15px;
	color: var(--wet);
}
.ripple-key > span {
	display: inline-flex;
	align-items: center;
	gap: 6px;
}
.key-season {
	width: 14px;
	height: 14px;
	border-radius: 4px;
	background: var(--foam);
	box-shadow: inset 0 0 0 1px var(--rule);
}
.key-mark {
	width: 12px;
	height: 12px;
}
.key-deep circle {
	fill: var(--ochre);
	stroke: var(--ink);
	stroke-width: 1.2;
}
.key-low circle {
	fill: none;
	stroke: var(--ink);
	stroke-width: 1.6;
}
@media (min-width: 960px) {
	.ripple-say {
		grid-column: 1 / span 4;
	}
	.ripple-fig {
		grid-column: 6 / span 7;
	}
	.ripple-chart {
		gap: 8px;
		padding-inline: var(--s3);
	}
	.ripple-stack {
		width: 14px;
	}
	.ripple-n {
		font-size: 17px;
	}
	.ripple-label {
		font-size: 14px;
	}
}

/* ---------- holdfast: station and limits ---------- */
.holdfast {
	row-gap: var(--s5);
}
.holdfast-station {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: var(--s3);
	align-items: start;
	padding: var(--s5);
	border-radius: var(--radius);
	background: var(--foam);
}
.holdfast-station .icon {
	width: 28px;
	height: 28px;
	margin-top: 2px;
}
.holdfast-station .tide-h3 {
	margin-bottom: var(--s1);
}
.holdfast-station p {
	font-size: 17px;
}
.holdfast-station p + p {
	margin-top: var(--s2);
}
.holdfast-station .spray a {
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
	font-weight: 600;
	color: var(--ink);
}
.holdfast-limits {
	border-left: 4px solid var(--ink);
	padding-left: var(--s4);
}
.holdfast-limits .tide-h3 {
	margin-bottom: var(--s2);
}
.holdfast-limits p,
.holdfast-limits li {
	max-width: 62ch;
}
.holdfast-limits p + p,
.holdfast-list li + li {
	margin-top: var(--s3);
}
.holdfast-list {
	list-style: disc;
	padding-left: 1.2em;
}
@media (min-width: 960px) {
	.holdfast > :first-child {
		grid-column: 1 / span 5;
	}
	.holdfast > .holdfast-limits {
		grid-column: 7 / span 6;
	}
	.holdfast--front > .holdfast-limits {
		grid-column: 4 / span 9;
	}
}

/* ---------- cove: the calendar, an object on the ground ---------- */
.cove-in {
	display: grid;
	row-gap: var(--s6);
	background: var(--coralline);
	border-radius: 28px 40px 32px 48px;
	padding: var(--s6) var(--s5) var(--s7);
}
.cove-in > * {
	min-width: 0;
}
.cove-sample {
	position: relative;
	max-width: 340px;
	margin-inline: auto;
	width: 100%;
}
.cove-page {
	width: 100%;
	border-radius: 6px;
	transform: rotate(-2deg);
	background: #fff;
	box-shadow: 0 1px 0 rgba(22, 33, 29, 0.25), 0 14px 30px -12px rgba(22, 33, 29, 0.45);
}
.cove-star {
	position: absolute;
	width: 64px;
	right: 4px;
	top: -26px;
	transform: rotate(-18deg);
	pointer-events: none;
}
.cove-sample figcaption {
	margin-top: var(--s4);
	font-size: 15px;
	font-weight: 600;
}
.cove-text .tide-h2 {
	margin-bottom: var(--s3);
}
.cove-text p {
	max-width: 42ch;
}
.cove-honest {
	margin-top: var(--s4);
	font-size: 16px;
	line-height: 1.45;
}
/* the one key action: wet rock and shell, 15:1 */
.ochre {
	margin-top: var(--s4);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--s2);
	min-height: 56px;
	max-width: 100%;
	padding: var(--s2) var(--s5);
	border: 0;
	border-radius: 999px;
	background: var(--ink);
	color: var(--shell);
	font: 700 18px/1.15 var(--text);
	text-align: center;
	text-decoration: none;
	cursor: pointer;
}
.ochre:hover {
	color: var(--shell);
	background: #24332d;
}
.ochre .icon {
	width: 22px;
	height: 22px;
}
@media (max-width: 959px) {
	.cove .ochre,
	.flow .ochre {
		width: 100%;
	}
}
@media (min-width: 960px) {
	.cove-in {
		grid-template-columns: repeat(12, minmax(0, 1fr));
		column-gap: var(--gap);
		padding: var(--s7) 0;
	}
	.cove-sample {
		grid-column: 2 / span 5;
		max-width: none;
	}
	.cove-text {
		grid-column: 8 / span 4;
		align-self: center;
	}
	.cove-star {
		width: 110px;
		right: -30px;
		top: -40px;
	}
}

/* ---------- limpet: questions and words ---------- */
.limpet {
	row-gap: var(--s5);
}
.limpet-qa {
	display: grid;
	row-gap: var(--s5);
}
.limpet-qa > div {
	border-top: 2px solid var(--ink);
	padding-top: var(--s3);
	min-width: 0;
	scroll-margin-top: var(--s4);
}
.limpet-qa dt {
	font: 700 19px/1.3 var(--text);
}
.limpet-qa dd {
	margin-top: var(--s2);
	max-width: 58ch;
}
@media (min-width: 960px) {
	.limpet > .tide-h2 {
		grid-column: 1 / span 3;
	}
	.limpet-qa {
		grid-column: 5 / span 8;
		grid-template-columns: repeat(2, minmax(0, 1fr));
		column-gap: var(--gap);
	}
	.limpet--words .limpet-qa {
		grid-column: 1 / -1;
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

/* ---------- reef: beaches, the rules box ---------- */
.reef {
	row-gap: var(--s6);
}
.reef-rules {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: var(--s3);
	align-items: start;
	padding: var(--s5);
	border-radius: var(--radius);
	border: 2px solid var(--ink);
}
.reef-rules .icon {
	width: 28px;
	height: 28px;
}
.reef-rules a {
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
	margin-top: -10px;
	font: 700 21px/1.25 var(--text);
}
.reef-rules p {
	margin-top: var(--s1);
	font-size: 16px;
}
.reef-protected {
	font-weight: 600;
}
.reef-list {
	margin-top: var(--s3);
	border-top: 2px solid var(--ink);
}
.reef-list a {
	display: flex;
	align-items: center;
	gap: var(--s2) var(--s3);
	min-height: 52px;
	padding: var(--s3) 0;
	border-bottom: 1px solid var(--rule);
	text-decoration: none;
	font-weight: 700;
}
.reef-list a > .icon:last-child {
	margin-left: auto;
}
.reef-name {
	display: inline-flex;
	align-items: flex-start;
	gap: var(--s2);
	min-width: 0;
}
.reef-name .icon {
	margin-top: 2px;
}
.reef-region {
	display: block;
	font-size: 14px;
	font-weight: 600;
	color: var(--wet);
}
.reef-away {
	font-weight: 400;
	white-space: nowrap;
}
.reef-list--coast a {
	flex-wrap: wrap;
}
.reef-list--coast .reef-name {
	flex: 1 1 14em;
}
.reef-next {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--s1) var(--s3);
	flex: 1 1 16em;
	font-size: 16px;
	font-weight: 400;
}
.reef-next .rim {
	padding-top: 0;
}
.reef-state + .reef-state {
	margin-top: var(--s6);
}
@media (min-width: 960px) {
	.reef-rules {
		grid-column: 1 / span 5;
		align-self: start;
	}
	.reef-near {
		grid-column: 7 / span 6;
	}
	.reef--all {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
	.reef--all > .reef-state {
		grid-column: auto;
	}
	.reef-state + .reef-state {
		margin-top: 0;
	}
}

/* ---------- pages that open with a plain heading ---------- */
.leaf-top {
	row-gap: var(--s4);
}
.leaf-top .spray {
	max-width: 60ch;
}
.prose {
	row-gap: var(--s4);
}
.prose p,
.prose li {
	max-width: 66ch;
}
.prose .tide-h2 {
	margin-bottom: var(--s1);
}
.prose-list {
	list-style: disc;
	padding-left: 1.2em;
}
.prose-list li + li {
	margin-top: var(--s2);
}
.prose-aside {
	display: flex;
	gap: var(--s3);
	align-items: flex-start;
	padding: var(--s4) var(--s5);
	border-radius: var(--radius);
	background: var(--foam);
}
.prose-aside .icon {
	width: 24px;
	height: 24px;
	margin-top: 2px;
}
.steps {
	counter-reset: step;
	border-top: 2px solid var(--ink);
}
.steps li {
	counter-increment: step;
	display: grid;
	grid-template-columns: 44px minmax(0, 1fr);
	gap: var(--s3);
	padding-block: var(--s4);
	border-bottom: 1px solid var(--rule);
}
.steps li::before {
	content: counter(step);
	display: grid;
	place-items: center;
	width: 44px;
	height: 44px;
	border-radius: 46% 54% 50% 50%;
	background: var(--foam);
	box-shadow: inset 0 0 0 1.5px var(--ink);
	font: 400 20px/1 var(--display);
}
.note-body h2 {
	font: 400 28px/1.1 var(--display);
	margin-top: var(--s5);
}
.note-body h3 {
	font: 700 19px/1.25 var(--text);
	margin-top: var(--s4);
}
.note-body ul,
.note-body ol {
	padding-left: 1.2em;
	list-style: revert;
}
.note-body table {
	border-collapse: collapse;
	display: block;
	max-width: 100%;
	overflow-x: auto;
}
.note-body th,
.note-body td {
	text-align: left;
	padding: var(--s2) var(--s3) var(--s2) 0;
	border-bottom: 1px solid var(--rule);
}
.notes-list li {
	border-top: 2px solid var(--ink);
	padding-block: var(--s4);
}
.notes-list li p + p {
	margin-top: var(--s2);
}
.notes-empty {
	display: grid;
	gap: var(--s4);
	justify-items: start;
	padding: var(--s5);
	border-radius: var(--radius);
	background: var(--foam);
}
.notes-empty img {
	width: 120px;
}
.data-files {
	border-top: 2px solid var(--ink);
}
.data-files li {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: var(--s3);
	padding-block: var(--s4);
	border-bottom: 1px solid var(--rule);
}
.data-files .icon {
	width: 24px;
	height: 24px;
	margin-top: 2px;
}
.data-files a {
	display: inline-block;
	min-height: var(--tap);
	padding-block: 10px;
	font-weight: 700;
}
.prose-mail .ochre {
	margin-top: 0;
}
@media (min-width: 960px) {
	.prose > *,
	.leaf-top > .tide-lead,
	.leaf-top > .spray {
		grid-column: 1 / span 8;
	}
}

/* lowest days: a grade mark, a date and the beach */
.deeps-wrap {
	row-gap: var(--s3);
}
.deeps-wrap .tide-h2 a {
	display: inline-flex;
	min-height: var(--tap);
	align-items: center;
	gap: var(--s2);
	text-decoration: none;
}
.deeps {
	border-top: 2px solid var(--ink);
}
.deeps-day {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	grid-template-areas: 'when rim' 'line line';
	column-gap: var(--s3);
	row-gap: 2px;
	padding-block: var(--s3);
	border-bottom: 1px solid var(--rule);
}
.deeps-when {
	grid-area: when;
	font-weight: 700;
}
.deeps-line {
	grid-area: line;
	font-variant-numeric: tabular-nums;
}
.deeps-line a {
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
}
@media (min-width: 960px) {
	.deeps {
		display: grid;
		grid-template-columns: repeat(2, minmax(0, 1fr));
		column-gap: var(--gap);
	}
}

/* ---------- front page ---------- */
.front-hero {
	row-gap: var(--s5);
	align-items: center;
}
.front-say {
	font: 400 34px/1.1 var(--display);
	letter-spacing: -0.012em;
}
.front-lede {
	margin-top: var(--s4);
	max-width: 44ch;
}
.ebb-search {
	display: flex;
	gap: var(--s2);
	margin-top: var(--s5);
	max-width: 560px;
}
.ebb-field {
	flex: 1;
	min-width: 0;
	display: flex;
	align-items: center;
	gap: var(--s2);
	min-height: 56px;
	padding: 0 var(--s3) 0 var(--s4);
	border: 2px solid var(--ink);
	border-radius: 999px;
	background: #fff;
}
.ebb-field input {
	flex: 1;
	min-width: 0;
	min-height: 48px;
	border: 0;
	background: transparent;
	font-size: 17px;
	outline: none;
	padding: 0;
}
.ebb-field input::placeholder {
	color: var(--wet);
	opacity: 1;
}
.ebb-field:focus-within {
	outline: 3px solid var(--pool-deep);
	outline-offset: 2px;
}
.ebb-go {
	flex: none;
	min-height: 56px;
	padding: 0 var(--s4);
	border: 0;
	border-radius: 999px;
	background: var(--ink);
	color: var(--shell);
	font-weight: 700;
	cursor: pointer;
}
.ebb-hint {
	margin-top: var(--s2);
	font-size: 15px;
	color: var(--wet);
}
.sounding-none {
	margin-top: var(--s3);
	font-weight: 700;
}
.front-art {
	position: relative;
	height: 210px;
}
.front-art .art-pool {
	position: absolute;
	inset: 18px 6% 10px 8%;
	background: var(--pool);
	border-radius: 44% 56% 48% 52% / 58% 46% 54% 42%;
}
.front-art img {
	position: absolute;
}
.front-art .a-star {
	width: 34%;
	max-width: 150px;
	left: 40%;
	top: 22%;
	transform: rotate(10deg);
}
.front-art .a-anem {
	width: 22%;
	max-width: 100px;
	left: 12%;
	top: 6%;
}
.front-art .a-muss {
	width: 30%;
	max-width: 140px;
	right: 0;
	bottom: 0;
	transform: rotate(-12deg);
}
.front-art .a-coral {
	width: 20%;
	max-width: 90px;
	left: 4%;
	bottom: 0;
}
.front-art .a-rock {
	width: 40%;
	max-width: 180px;
	right: 0;
	top: -2%;
}
@media (min-width: 960px) {
	.front-say-wrap {
		grid-column: 1 / span 7;
	}
	.front-say {
		font-size: 60px;
		line-height: 1.04;
	}
	.front-lede {
		font-size: 21px;
	}
	.front-art {
		grid-column: 8 / span 5;
		height: 440px;
	}
	.front-art .a-star {
		max-width: none;
	}
	.front-art .a-anem,
	.front-art .a-muss,
	.front-art .a-coral,
	.front-art .a-rock {
		max-width: none;
	}
	.ebb-search {
		margin-top: var(--s6);
	}
	.ebb-go {
		padding: 0 var(--s5);
	}
}

.front-days {
	row-gap: var(--s4);
}
.front-days-list {
	border-top: 2px solid var(--ink);
}
.front-day {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	gap: 2px var(--s3);
	padding-block: var(--s3) var(--s4);
	border-bottom: 1px solid var(--rule);
}
.front-day .beach {
	font: 700 19px/1.25 var(--text);
}
.front-day .beach a {
	text-decoration: none;
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
}
.front-day .state {
	display: block;
	font-size: 14px;
	font-weight: 600;
	color: var(--wet);
}
.front-day .when {
	grid-column: 1 / -1;
	font-size: 17px;
	font-variant-numeric: tabular-nums;
}
.front-day .rim {
	grid-column: 2;
	grid-row: 1;
	padding-top: 14px;
}
@media (min-width: 960px) {
	.front-days-list {
		display: grid;
		grid-template-columns: repeat(3, minmax(0, 1fr));
		column-gap: var(--gap);
	}
	.front-day {
		padding-block: var(--s4) var(--s5);
	}
}

.front-states {
	row-gap: var(--s4);
}
.front-state-list {
	display: grid;
	row-gap: var(--s6);
}
.front-state {
	display: grid;
	gap: var(--s2);
	align-content: start;
}
.front-state .state-name {
	font: 400 34px/1 var(--display);
	text-decoration: none;
	display: inline-flex;
	align-items: center;
	gap: var(--s2);
	min-height: var(--tap);
}
.front-state .state-name .icon {
	width: 26px;
	height: 26px;
}
.front-state p:not(.season) {
	max-width: 36ch;
}
.season {
	display: grid;
	grid-template-columns: repeat(12, minmax(0, 1fr));
	gap: 3px;
	margin-top: var(--s1);
	max-width: 420px;
}
.season span {
	font: 700 12px/1 var(--text);
	text-align: center;
	padding: 7px 0;
	border-radius: 6px;
	box-shadow: inset 0 0 0 1px var(--rule);
	color: var(--wet);
}
.season span.on {
	background: var(--pool);
	color: var(--ink);
	box-shadow: inset 0 0 0 1.5px var(--ink);
}
@media (min-width: 960px) {
	.front-states > .tide-h2 {
		grid-column: 1 / span 3;
	}
	.front-state-list,
	.front-states-key {
		grid-column: 4 / span 9;
	}
	.front-state-list {
		grid-template-columns: repeat(3, minmax(0, 1fr));
		column-gap: var(--gap);
	}
	.front-state .state-name {
		font-size: 40px;
	}
}

.howto {
	row-gap: var(--s5);
}
.howto-list {
	display: grid;
	row-gap: var(--s5);
}
.howto-list li {
	display: grid;
	grid-template-columns: 44px minmax(0, 1fr);
	gap: var(--s3);
}
.howto-list .tide-h3 {
	margin-bottom: var(--s1);
}
.howto-mark {
	width: 44px;
	height: 44px;
	display: grid;
	place-items: center;
	border-radius: 46% 54% 50% 50%;
	background: var(--foam);
	box-shadow: inset 0 0 0 1.5px var(--ink);
}
.howto-mark .icon {
	width: 24px;
	height: 24px;
}
.howto-more a {
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
	font-weight: 600;
}
@media (min-width: 960px) {
	.howto > .tide-h2 {
		grid-column: 1 / span 3;
	}
	.howto-list,
	.howto-more {
		grid-column: 4 / span 9;
	}
	.howto-list {
		grid-template-columns: repeat(3, minmax(0, 1fr));
		column-gap: var(--gap);
	}
	.howto-list li {
		grid-template-columns: minmax(0, 1fr);
	}
}
.holdfast--front {
	margin-top: var(--s7) !important;
}

/* coast pages */
.leaf-top .season {
	margin-top: var(--s2);
}

/* ---------- flow: buying a calendar, one step at a time ---------- */
/* the first step sits right under the title */
.shelf.flow {
	margin-top: var(--s5);
}
.flow {
	row-gap: var(--s5);
	align-items: start;
}
.flow-step {
	display: grid;
	gap: var(--s4);
	align-content: start;
	min-width: 0;
}
.flow-count {
	font: 700 14px/1.2 var(--text);
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--wet);
}
.flow-step .tide-h2 {
	font-size: 28px;
}
.flow-step .ebb-search {
	margin-top: 0;
}
.flow-warn {
	padding: var(--s3) var(--s4);
	border-radius: var(--radius);
	border: 2px solid var(--ink);
	background: #fff;
	font-weight: 700;
}
.flow-coast {
	margin-top: var(--s3);
}
.flow-picks {
	margin-top: 0;
}
.flow-picks a[aria-current] {
	background: var(--foam);
	box-shadow: inset 4px 0 0 var(--ink);
	padding-left: var(--s3);
}
.flow-get {
	display: grid;
	gap: var(--s4);
}
.flow-get li {
	display: grid;
	grid-template-columns: 28px minmax(0, 1fr);
	gap: var(--s3);
}
.flow-get .icon {
	width: 28px;
	height: 28px;
}
.flow-step .cove-sample {
	margin: var(--s4) auto var(--s2);
	max-width: 300px;
}
.flow-sample {
	background: #fff;
	border-radius: 10px;
	padding: var(--s4);
	box-shadow: inset 0 0 0 1px var(--rule);
}
.flow-sample-head {
	border-bottom: 2px solid var(--ink);
	padding-bottom: var(--s2);
}
.flow-sample-head b {
	font: 400 22px/1.15 var(--display);
}
.flow-sample table {
	width: 100%;
	border-collapse: collapse;
	font-size: 15px;
	font-variant-numeric: tabular-nums;
}
.flow-sample th {
	text-align: left;
	font-size: 12px;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	font-weight: 700;
	padding: var(--s2) 6px var(--s1) 0;
}
.flow-sample tbody th {
	font-size: 15px;
	text-transform: none;
	letter-spacing: 0;
}
.flow-sample td,
.flow-sample tbody th {
	padding: 7px 6px 7px 0;
	border-bottom: 1px solid var(--rule);
	vertical-align: top;
}
.flow-sample .rim {
	font-size: 14px;
	white-space: normal;
	padding-top: 0;
}
.flow-sample .rim .icon {
	width: 14px;
	height: 14px;
}
.wide-only {
	display: none;
}
.flow-pay {
	position: relative;
	background: var(--coralline);
	border-radius: 28px 40px 32px 48px;
	padding: var(--s5);
}
.flow-pay .cove-star {
	width: 64px;
	right: -4px;
	top: -26px;
	transform: rotate(12deg);
}
.flow-pay .flow-count {
	color: var(--ink);
}
.flow-sum {
	display: grid;
	gap: var(--s2);
	list-style: disc;
	padding-left: 1.2em;
}
.flow-permission {
	font-size: 16px;
}
.flow-till {
	border-top: 2px solid var(--ink);
	padding-top: var(--s4);
}
.cove-price {
	font: 400 44px/1 var(--display);
}
.flow-rows li {
	padding-top: var(--s2);
}
.flow-rows li + li {
	margin-top: var(--s3);
	border-top: 1px solid var(--rule);
}
.flow-row-name {
	font-weight: 700;
}
.flow-soon {
	margin-top: var(--s2);
	font-weight: 700;
	padding: var(--s3) var(--s4);
	border-radius: 14px;
	background: var(--shell);
}
.flow-moves {
	display: flex;
	flex-wrap: wrap;
	gap: var(--s3);
	align-items: center;
}
.flow-moves .ochre {
	margin-top: 0;
	flex: 1 1 12em;
}
.flow-back {
	min-height: 56px;
	padding: 0 var(--s5);
	border: 2px solid var(--ink);
	border-radius: 999px;
	background: transparent;
	font-weight: 700;
	cursor: pointer;
}
.flow-back:hover {
	background: var(--foam);
}
@media (min-width: 960px) {
	.flow > * {
		grid-column: 1 / span 8;
	}
	.flow-step .tide-h2 {
		font-size: 40px;
	}
	.wide-only {
		display: table-cell;
	}
	.flow-pay {
		padding: var(--s6);
	}
	.flow-pay .cove-star {
		width: 100px;
		right: -30px;
		top: -40px;
	}
	.cove-price {
		font-size: 64px;
	}
	.flow-moves .ochre {
		flex: 0 1 auto;
	}
}

/* the 404 page */
.lost .ochre {
	margin-right: var(--s4);
}
.lost-links {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--s2) var(--s4);
	margin-top: var(--s4);
}
.lost-twin {
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
	font-weight: 600;
}
.front-art--lost .a-star {
	left: 34%;
	top: 26%;
}
.front-art--lost .a-rock {
	width: 52%;
	max-width: 240px;
	left: 0;
	right: auto;
	top: auto;
	bottom: 0;
}

/* ---------- wrack: the footer, what the tide leaves at the top of the beach ---------- */
.wrack {
	margin-top: var(--s9);
	background: var(--ink);
	color: var(--shell);
	padding-block: var(--s7) var(--s6);
}
.wrack-in {
	row-gap: var(--s6);
}
.wrack a {
	color: var(--shell);
}
.wrack a:hover {
	color: var(--pool);
}
.wrack-mark img {
	height: 34px;
	width: auto;
}
.wrack-links {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 0 var(--gap);
	font-weight: 600;
}
.wrack-links a {
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
	text-decoration: none;
}
.wrack-links a[aria-current] {
	text-decoration: underline;
}
.wrack-side {
	display: grid;
	gap: var(--s4);
	justify-items: start;
}
.wrack-small {
	font-size: 15px;
	line-height: 1.5;
	color: var(--rock-grey);
}
.wrack-small p + p {
	margin-top: var(--s2);
}
.wrack-lang {
	display: inline-flex;
	border: 2px solid var(--shell);
	border-radius: 999px;
	overflow: hidden;
	font-weight: 700;
	font-size: 16px;
}
.wrack-lang a,
.wrack-lang span {
	display: inline-flex;
	align-items: center;
	min-height: var(--tap);
	padding: 0 18px;
	text-decoration: none;
}
.wrack-lang [aria-current] {
	background: var(--shell);
	color: var(--ink);
}
@media (min-width: 960px) {
	.wrack-mark {
		grid-column: 1 / span 3;
	}
	.wrack-nav {
		grid-column: 4 / span 5;
	}
	.wrack-links {
		grid-template-columns: repeat(3, auto);
		justify-content: start;
		column-gap: var(--s6);
	}
	.wrack-side {
		grid-column: 9 / span 4;
	}
}

/* ---------- berm: the phone's bottom bar, one buy button ---------- */
.berm {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 20;
	padding: 10px var(--margin) calc(10px + env(safe-area-inset-bottom, 0px));
	background: rgba(244, 245, 239, 0.96);
	border-top: 1px solid var(--rule);
	box-shadow: 0 -8px 24px -16px rgba(22, 33, 29, 0.5);
}
.berm-go {
	display: flex;
	width: 100%;
	margin-top: 0;
	min-height: 52px;
	font-size: 17px;
}
.berm-go span {
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
}
@media (max-width: 959px) {
	/* the footer keeps room so the bar never covers it */
	.shore--barred .wrack {
		padding-bottom: calc(var(--s6) + 80px + env(safe-area-inset-bottom, 0px));
	}
}
@media (min-width: 960px) {
	.berm {
		display: none;
	}
}

/* ---------- print: the words, no navigation, no bar ---------- */
@media print {
	html,
	body {
		background: #fff;
		color: #000;
	}
	body {
		font-size: 11pt;
		display: block;
	}
	.splash-nav,
	.crumbs,
	.berm,
	.skip,
	.wrack-nav,
	.wrack-lang,
	.ebb-search,
	.ebb-hint,
	.flow-moves,
	.pool-art,
	.front-art,
	.cove-star,
	.cove .ochre,
	.slack-more {
		display: none !important;
	}
	.pool,
	.cove-in,
	.flow-pay,
	.holdfast-station,
	.ripple-month.is-season {
		background: none;
		box-shadow: none;
	}
	.pool {
		border: 2px solid #000;
		min-height: 0;
	}
	.wrack {
		background: none;
		color: #000;
		margin-top: var(--s6);
		padding-block: var(--s4) 0;
		border-top: 2px solid #000;
	}
	.wrack a,
	.wrack-small {
		color: #000;
	}
	.wrack-mark {
		display: none;
	}
	.rim--very-low .icon,
	.pebble-deep,
	.key-deep circle {
		color: #000;
		fill: #000;
	}
	.swash-win {
		fill: #bbb;
	}
	.shelf + .shelf {
		margin-top: var(--s6);
	}
	.pool-day,
	.limpet-qa > div,
	.deeps-day {
		break-inside: avoid;
	}
}

/* A step is one column: nothing inside it may claim grid lines of its own. */
.flow-step > * {
	grid-column: 1 / -1;
}
