
@import url('https://fonts.googleapis.com/css2?family=Delius&family=Alegreya:ital,wght@0,400;0,500;0,700;1,400&display=swap');
:root{--bg:#2e2e2e;--band:#272727;--titleband:#414141;--nav:#000;--text:#f4f4f4;--muted:#e4e4e4;--green:#c5d954;--display:'Delius','Comic Sans MS',cursive;--serif:'Alegreya',Georgia,serif;--ui:-apple-system,BlinkMacSystemFont,'Segoe UI',Verdana,sans-serif}
*{box-sizing:border-box;margin:0;padding:0}
/* Light text on a dark background reads thinner than the same size dark-on-light,
   so the body runs a little larger and half a weight heavier to compensate. */
body{font-family:var(--serif);color:var(--text);background:var(--bg);line-height:1.75;font-size:1.08rem;font-weight:500;-webkit-font-smoothing:antialiased}
header{background:var(--nav);padding:0.55rem 1.2rem;position:sticky;top:0;z-index:5}
nav{max-width:1100px;margin:0 auto;display:flex;flex-wrap:wrap;gap:0.3rem 1.15rem;align-items:center}
nav .brand{font-family:var(--display);font-size:1.05rem;font-weight:bold;margin-right:auto}
nav .brand a{color:#fff;text-decoration:none}
nav a{color:#ececec;text-decoration:none;font-family:var(--ui);font-size:0.86rem}
nav a:hover{color:#fff;text-decoration:underline}
nav a.active{font-weight:bold;color:#fff}
.pagetitle{background:var(--titleband);text-align:center;padding:1.1rem 1rem}
.pagetitle h1{font-family:var(--display);font-size:1.5rem;font-weight:normal;letter-spacing:0.5px}
/* Opt-in on pages that lead with the title rather than a notice. */
.pagetitle-lead h1{font-size:2.2rem;font-weight:bold}
/* Centred explicitly: the title band centres its contents, but the global
   p{text-align:left} rule below wins over that inherited alignment. */
.pagesub{font-family:var(--ui);font-size:1.05rem;color:var(--muted);margin:0.5rem auto 0;max-width:46rem;text-align:center}
.hero{background:linear-gradient(rgba(0,0,0,0.08),rgba(0,0,0,0.18)),url('images/hero-lake.jpg') center/cover no-repeat;min-height:82vh;display:flex;flex-direction:column;justify-content:center;align-items:flex-end;padding:3rem 8vw 3rem 1rem;text-align:right}
.hero h1{font-family:var(--display);font-size:3.1rem;font-weight:normal;color:#fff;letter-spacing:2px;text-shadow:0 1px 6px rgba(0,0,0,0.55)}
.hero .portal{font-family:var(--display);font-size:1.3rem;color:#fff;margin-top:0.9rem;text-shadow:0 1px 5px rgba(0,0,0,0.55)}
.hero p{color:#fff;font-size:0.95rem;font-family:var(--ui);margin-top:0.5rem;text-shadow:0 1px 4px rgba(0,0,0,0.6)}
.hero .portal-links{margin-top:1.4rem;display:flex;flex-direction:column;gap:0.45rem}
.hero .portal-links a{color:var(--green);font-family:var(--ui);font-size:0.95rem;text-decoration:none;text-shadow:0 1px 4px rgba(0,0,0,0.6)}
.hero .portal-links a:hover{text-decoration:underline}
section{max-width:980px;margin:0 auto;padding:2.2rem 1.4rem 1.6rem}
.band{background:var(--band)}
h2{font-family:var(--display);font-size:1.3rem;font-weight:normal;color:#fff;margin-bottom:0.9rem}
h3{font-family:var(--display);font-size:1.15rem;font-weight:normal;color:#fff;margin:1.6rem 0 0.5rem}
/* A heading with its instruction on the same line. Wraps to two lines on a
   narrow screen rather than squeezing the sentence, and keeps the h3 and the
   p separate elements so the heading text stays just the heading. */
.headrow{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;text-align:center;gap:0.15rem 0.75rem;margin:1.6rem 0 0.5rem}
.headrow h3{margin:0}
.headrow p{margin:0;font-family:var(--ui);font-size:0.95rem;color:var(--muted)}
/* Left-aligned, not justified. Justification on a narrow measure opens rivers of
   white space between words, which is most of what made this hard to read. */
p{margin:0.7rem 0;text-align:left}
ol,ul{margin:0.7rem 0 0.7rem 1.5rem}
li{margin:0.45rem 0;text-align:left}
a{color:var(--green)}
strong{color:#fff}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1.3rem;margin-top:1rem}
.card{background:#262626;border:1px solid #545454;border-radius:4px;padding:1rem 1.1rem}
.card h3{margin-top:0}
.cardimg{display:block;width:100%;height:auto;aspect-ratio:76/50;object-fit:cover;border-radius:3px;margin:0.15rem 0 0.7rem}
.photo{display:block;margin:1.2rem auto;max-width:100%;border:1px solid #555}
.photo-caption{text-align:center;font-size:0.9rem;color:var(--muted);margin-top:-0.6rem}
.notice{background:#262626;border-left:4px solid var(--green);padding:0.9rem 1.1rem;margin:1rem 0}
form{margin:1.2rem auto;max-width:640px}
label{display:block;margin:1.1rem 0 0.35rem;font-family:var(--ui);font-size:1.05rem;color:#f4f4f4}
input,select,textarea{width:100%;padding:0.65rem 0.7rem;background:#232323;color:var(--text);border:1px solid #5a5a5a;border-radius:4px;font-family:var(--ui);font-size:1rem}
input:focus,select:focus,textarea:focus{outline:2px solid var(--green);outline-offset:1px}
textarea{resize:vertical}
.field-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:0 1rem}
/* Radio group. The global input rule stretches every field to full width, so
   the radios have to opt out of it explicitly. */
.usetype{border:1px solid #5a5a5a;border-radius:4px;padding:0.7rem 1rem 0.9rem;margin:0 auto 0.2rem;max-width:640px}
.usetype legend{font-family:var(--ui);font-size:1.05rem;color:#f4f4f4;padding:0 0.4rem}
.usetype label.radio{display:inline-flex;align-items:center;gap:0.5rem;margin:0.4rem 1.6rem 0.2rem 0;font-family:var(--ui);font-size:1.05rem;color:#f4f4f4;cursor:pointer}
.usetype input[type=radio]{width:auto;margin:0;padding:0;accent-color:var(--green);transform:scale(1.2)}
/* A standalone checkbox. Same opt-out from the full-width input rule as the
   radios above, and the label wraps the box so the text is part of the target. */
label.check{display:flex;align-items:flex-start;gap:0.6rem;margin:1.2rem 0 0.35rem;cursor:pointer}
label.check input[type=checkbox]{width:auto;flex:0 0 auto;margin:0.2rem 0 0;padding:0;accent-color:var(--green);transform:scale(1.2)}
.formnote{font-family:var(--ui);font-size:1rem;color:var(--muted);margin-top:1rem;text-align:left}
button{margin-top:1.2rem;padding:0.8rem 1.6rem;background:var(--green);color:#1c1c1c;border:0;border-radius:4px;font-family:var(--ui);font-size:0.95rem;font-weight:700;cursor:pointer}
button:disabled{opacity:0.6;cursor:default}
a.btn{display:inline-block;margin-top:0.6rem;padding:0.8rem 1.6rem;background:var(--green);color:#1c1c1c;border-radius:4px;font-family:var(--ui);font-size:0.95rem;font-weight:700;text-decoration:none}
a.btn:hover{filter:brightness(1.08)}
input[type=number]{font-family:var(--ui);font-size:1rem}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.formstatus{margin-top:1rem;font-family:var(--ui);font-size:0.95rem;color:var(--muted);min-height:1.2em}
.formstatus.good{color:var(--green)}
.formstatus.warn{color:#e8c46a}
/* Trustee admin */
.adminlist{width:100%;border-collapse:collapse;margin:0.8rem 0;font-family:var(--ui);font-size:0.95rem}
.adminlist td{padding:0.7rem 0.5rem;border-bottom:1px solid #565656;vertical-align:top}
.adminlist td.w{width:34%}
.adminlist td.acts{width:24%;text-align:right;white-space:nowrap}
.adminlist small{color:var(--muted);font-size:0.88rem}
.adminlist small.notes{display:block;margin-top:0.3rem;font-style:italic}
.adminlist .quoted{color:var(--green);font-weight:bold}
button.mini{margin:0 0 0.3rem;padding:0.4rem 0.8rem;font-size:0.85rem}
.rowmsg{display:block;font-family:var(--ui);font-size:0.85rem;color:#e8c46a;margin-top:0.2rem}
.tag{display:inline-block;padding:0.15rem 0.5rem;border-radius:3px;background:#4a4a4a;color:#f0f0f0;font-family:var(--ui);font-size:0.8rem;vertical-align:1px}
.tag.held{background:#6b5a2e;color:#f0e2b8}
.tag.confirmed{background:#3f5c3a;color:#d6ecd2}

/* Small thumbnails in one scrollable row — a carousel, click to enlarge.
   Each thumbnail keeps a fixed width, so however many fit the container's
   width cleanly are shown and the rest scroll in with a swipe; snap points
   keep a thumbnail aligned to the left edge rather than cut mid-picture. */
.photostrip{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:0.7rem;margin:1rem auto 1.4rem;padding-bottom:0.4rem}
.photostrip figure{margin:0;flex:0 0 220px;scroll-snap-align:start}
.photostrip a{display:block;border-radius:3px}
.photostrip a:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.photostrip img{display:block;width:100%;height:auto;aspect-ratio:76/50;object-fit:cover;border:1px solid #555;border-radius:3px;cursor:zoom-in;transition:border-color 0.15s}
.photostrip a:hover img{border-color:var(--green)}
.photostrip figcaption{font-family:var(--ui);font-size:0.9rem;color:var(--muted);text-align:center;margin-top:0.35rem}
/* Portrait on a phone: a fixed 220px thumbnail is most of the screen anyway,
   so let one fill the width and swipe between them. */
@media(orientation:portrait) and (max-width:640px){
  .photostrip figure{flex-basis:85vw}
}

/* The submitted-request popup. */
.sentbox{background:#262626;color:var(--text);border:1px solid #545454;border-radius:6px;padding:1.4rem 1.6rem;max-width:26rem;margin:auto}
.sentbox h3{margin-top:0}
.sentbox::backdrop{background:rgba(0,0,0,0.6)}

/* Enlarged image */
.lightbox{border:0;padding:0;background:transparent;max-width:min(94vw,1100px);max-height:94vh;overflow:visible}
.lightbox::backdrop{background:rgba(0,0,0,0.82)}
.lightbox img{display:block;width:100%;height:auto;max-height:82vh;object-fit:contain;border-radius:4px}
.lightbox-cap{font-family:var(--ui);font-size:1rem;color:#f0f0f0;text-align:center;margin:0.7rem 0 0}
.lightbox-close{position:absolute;top:-0.6rem;right:-0.6rem;margin:0;width:2.2rem;height:2.2rem;padding:0;border-radius:50%;background:#f4f4f4;color:#1c1c1c;font-size:1.5rem;line-height:1;font-weight:400}
.lightbox-close:hover{background:#fff}

/* Live price estimate on the General Reservations page */
.quote{margin:1.6rem 0 0.4rem;padding:1rem 1.1rem;background:#262626;border:1px solid #5a5a5a;border-radius:4px}
.quote-idle{font-family:var(--ui);font-size:1rem;color:var(--muted);margin:0}
.quote-table{width:100%;border-collapse:collapse;font-family:var(--ui);font-size:1rem}
.quote-table caption{font-family:var(--display);font-size:1.15rem;color:#fff;text-align:left;padding-bottom:0.6rem}
.quote-table th,.quote-table td{padding:0.45rem 0;border-bottom:1px solid #454545;text-align:left;vertical-align:top}
.quote-table th{font-weight:normal;color:var(--muted);width:11rem;padding-right:0.8rem}
.quote-table td{color:var(--text)}
.quote-table tr:last-child th,.quote-table tr:last-child td{border-bottom:0}
.quote-table .quote-total th,.quote-table .quote-total td{border-top:2px solid #6a6a6a;padding-top:0.6rem;font-size:1.1rem}
.quote-table .quote-total td strong{color:var(--green)}
.quote-flag{font-size:0.9rem;color:var(--muted);font-style:italic}
.quote-note{font-family:var(--ui);font-size:0.95rem;color:var(--muted);margin:0.9rem 0 0;line-height:1.6}
@media(max-width:520px){.quote-table th{width:auto;display:block;border-bottom:0;padding-bottom:0}.quote-table td{display:block;padding-top:0.15rem}}

/* Availability calendar */
.calendar{margin:1.2rem auto;max-width:640px}
.calhead{display:flex;align-items:center;justify-content:space-between;gap:0.6rem;margin-bottom:0.6rem}
.calnav{margin:0;padding:0.4rem 0.85rem;font-size:1.05rem;line-height:1;background:#454545;color:var(--text);border:1px solid #6a6a6a}
.calnav:hover{background:#4a4a4a}
.calkey{font-family:var(--ui);font-size:0.95rem;color:var(--muted)}
.calkey .k{display:inline-block;width:0.75rem;height:0.75rem;border-radius:2px;vertical-align:-1px;margin:0 0.25rem 0 0.7rem}
.calkey .k.open{background:#454545;border:1px solid #6a6a6a}
.calkey .k.youth{background:#993d33;border:1px solid #c25a4e}
.calkey .k.general{background:#41382f;border:1px solid #6b5d4f}
.calkey .k.family{background:#527b98;border:1px solid #7099b5}
.calkey .k.blocked{background:#1d1c1b;border:1px solid #4d4a47}
.calkey .k.taken{background:#151515;border:1px solid #4a4a4a}
/* align-items:start stops the grid stretching both tables to equal height.
   Without it a 5-row month gets the 6-row month's height spread across fewer
   rows, so the two calendars sat side by side with different week spacing. */
.calgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem;align-items:start}
.calmonth{width:100%;border-collapse:collapse;table-layout:fixed}
.calmonth caption{font-family:var(--ui);font-size:1.1rem;font-weight:600;color:#fff;padding-bottom:0.5rem;text-align:center}
.calmonth th{font-family:var(--ui);font-size:0.9rem;font-weight:normal;color:#cfcfcf;padding:0.3rem 0}
.calmonth th abbr{text-decoration:none;border:0}
.calmonth td{text-align:center;padding:1px;height:2.4rem;font-family:var(--ui);font-size:1.05rem;border:0}
.calmonth td span{display:block;padding:0.5rem 0;border-radius:3px}
.calmonth td.pad{visibility:hidden}
/* Past days keep a faint plate so every week reads as a row of equal cells. */
.calmonth td.past span{color:#8a8a8a;background:#333}
.calmonth td.open span{background:#454545;color:#fff;cursor:pointer}
.calmonth td.open:hover span{background:#5c7040}
/* Every unavailable day is black and struck through. Pages that do not opt in
   to the breakdown stop here, so a visitor sees only that a date is reserved.
   The strike-through means the calendar never relies on colour alone to say a
   date cannot be booked. */
.calmonth td.taken span{background:#151515;color:#e8e8e8;cursor:not-allowed;text-decoration:line-through}
/* The four differ in lightness as well as hue, so they stay distinguishable in
   greyscale and to a colourblind reader. Youth is the only saturated red, and
   is also the only one that carries a marker, because "minors are on the
   property" should not depend on someone perceiving a colour correctly. */
.calmonth td.taken.youth span{background:#993d33;color:#fff;font-weight:700}
.calmonth td.taken.youth span::after{content:"\00a0\25CF";font-size:0.62em;vertical-align:0.28em}
.calmonth td.taken.general span{background:#41382f;color:#fff}
.calmonth td.taken.family span{background:#527b98;color:#fff}
.calmonth td.taken.blocked span{background:#1d1c1b;color:#fff}
.calmonth td.inrange span{background:#4a5535}
.calmonth td.sel span{background:var(--green);color:#1c1c1c;font-weight:bold}
.calnote{font-family:var(--ui);font-size:1rem;color:var(--muted);margin:0.6rem 0 0;min-height:1.1em}
.calnote.warn{color:#e8c46a}

.formcopy{margin:0.9rem 0;padding:0.9rem 1rem;background:#232323;border:1px solid #5a5a5a;border-radius:4px;font-family:Menlo,Consolas,monospace;font-size:0.95rem;color:#f0f0f0;white-space:pre-wrap;word-break:break-word;user-select:all}
button:hover{filter:brightness(1.08)}
/* Member area. */
/* The sign-out link, last in the member and admin navs. Ends the Access
   session at the team domain, so the next visit asks for an email again --
   the only way to switch to a different address. */
nav .signout{opacity:0.85}
nav .usermenu{margin-left:auto;position:relative}
nav .usermenu summary{cursor:pointer;list-style:none;display:inline;color:#ececec;font-family:var(--ui);font-size:0.86rem;text-decoration:underline;opacity:0.85}
nav .usermenu summary::-webkit-details-marker{display:none}
nav .usermenu summary::marker{content:'';display:none}
nav .usermenu summary:hover{color:#fff}
nav .usermenu[open] summary{color:#fff}
nav .usermenu .menu{position:absolute;right:0;top:1.7rem;background:#262626;border:1px solid #545454;border-radius:4px;padding:0.55rem 0.95rem;white-space:nowrap;z-index:6}

.memberbar{font-family:var(--ui);font-size:0.95rem;color:var(--muted);margin:0 0 1.2rem}
.memberbar strong{color:#f4f4f4}
.memberlinks{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem;margin:1.2rem 0}
.memberlinks a{display:block;padding:1rem 1.1rem;background:#262626;border:1px solid #545454;border-radius:4px;text-decoration:none}
.memberlinks a:hover{border-color:var(--green)}
.memberlinks strong{display:block;font-family:var(--ui);font-size:1.05rem;color:#f4f4f4}
.memberlinks span{display:block;margin-top:0.3rem;font-family:var(--ui);font-size:0.92rem;color:var(--muted)}
/* Money reads as money only when the digits line up, so the numeric columns
   are tabular and right-aligned however the bookkeeping formatted them. */
.ledger{width:100%;border-collapse:collapse;margin:1rem 0;font-family:var(--ui);font-size:0.95rem}
.ledger th{text-align:left;font-weight:normal;color:var(--muted);padding:0.5rem;border-bottom:2px solid #6a6a6a}
.ledger td{padding:0.55rem 0.5rem;border-bottom:1px solid #454545;vertical-align:top}
.ledger td.num,.ledger th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.ledger td.neg{color:#e08c7d}
.doclist{list-style:none;padding:0;margin:1rem 0}
.doclist li{padding:0.8rem 0;border-bottom:1px solid #454545}
.doclist a{font-family:var(--ui);font-size:1.05rem}
.doclist small{display:block;margin-top:0.25rem;font-family:var(--ui);font-size:0.88rem;color:var(--muted)}
/* The disclaimer every member page carries. Quieter than .notice — it should
   be readable on every visit without shouting on any of them. */
.disclaimer{margin:2.2rem 0 0;padding:0.9rem 1.1rem;border-top:1px solid #454545;font-family:var(--ui);font-size:0.9rem;color:var(--muted);line-height:1.6}
.contact-box{background:#000;color:#fff;border-radius:4px;padding:1.4rem;margin:1.2rem 0}
.contact-box a{color:var(--green)}
footer{background:var(--nav);color:#b4b4b4;text-align:center;padding:1.5rem 1rem;margin-top:2.5rem;font-size:0.95rem;font-family:Verdana,sans-serif}
.emblem{height:1.5em;width:auto;vertical-align:-0.5em;margin-left:0.5em}
@media(max-width:640px){.hero{min-height:60vh;align-items:center;text-align:center;padding:2rem 1rem}.hero h1{font-size:2.1rem}}
@media(max-width:640px){}
