/* Franklin Heights / direct-booking site styles (public + admin). No external fonts or CDNs. */
:root { --ink:#1f2933; --muted:#5f6b76; --line:#d9dee3; --bg:#f6f7f8; --card:#fff; --accent:#1d6f5f; --accent-ink:#fff; --warn:#a33a1a; --ok:#1d6f3a; }
* { box-sizing: border-box; }
body { margin:0; font:16px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; color:var(--ink); background:var(--bg); }
a { color:var(--accent); }
.wrap { max-width:960px; margin:0 auto; padding:0 1rem; }
.site-header { background:var(--card); border-bottom:1px solid var(--line); padding:.75rem 0; }
.site-header .brand { font-weight:700; text-decoration:none; color:var(--ink); font-size:1.15rem; }
.site-footer { color:var(--muted); font-size:.875rem; padding:2rem 0; }
.hero h1 { margin:1.5rem 0 .25rem; } .lead { color:var(--muted); margin-top:0; }
.facts { padding-left:1.1rem; }
.card { background:var(--card); border:1px solid var(--line); border-radius:10px; padding:1rem 1.25rem; margin:1rem 0; }
.card.success { border-color:var(--ok); }
.small { font-size:.85rem; color:var(--muted); } .note { font-size:.9rem; color:var(--muted); }
label { display:block; margin:.5rem 0; font-weight:500; }
label.check { display:flex; gap:.5rem; align-items:center; font-weight:400; }
input, select, textarea { font:inherit; padding:.45rem .55rem; border:1px solid var(--line); border-radius:6px; width:100%; max-width:28rem; background:#fff; }
input[type=checkbox] { width:auto; }
textarea { max-width:100%; }
form.dates { display:grid; grid-template-columns:repeat(auto-fit, minmax(150px, 1fr)); gap:.25rem 1rem; align-items:end; }
.row { display:grid; grid-template-columns:repeat(auto-fit, minmax(200px, 1fr)); gap:0 1rem; }
.btn, button { font:inherit; background:var(--accent); color:var(--accent-ink); border:0; border-radius:6px; padding:.55rem 1rem; cursor:pointer; }
.btn.secondary, form.inline button { background:#e8eef0; color:var(--ink); }
.alert, .notice { padding:.75rem 1rem; border-radius:8px; margin:1rem 0; background:#eef4f7; }
.alert.error, .notice.err { background:#fbeae5; color:var(--warn); }
.notice.ok { background:#e6f4ea; color:var(--ok); }
.quote, .nightly, table.grid, table.kv { width:100%; border-collapse:collapse; margin:.5rem 0; }
.quote td, .quote th, .nightly td, table.grid td, table.grid th, table.kv td, table.kv th { padding:.4rem .5rem; border-bottom:1px solid var(--line); text-align:left; vertical-align:top; }
.amt { text-align:right !important; white-space:nowrap; } tr.neg td { color:var(--ok); }
.code { font:700 1.4rem/1 ui-monospace, monospace; letter-spacing:.08em; }
/* availability calendar */
.cal { display:grid; grid-template-columns:repeat(auto-fill, minmax(230px, 1fr)); gap:1rem; }
.month h3 { margin:.25rem 0; font-size:1rem; }
.month .grid { display:grid; grid-template-columns:repeat(7, 1fr); gap:2px; }
.month .dow { font-size:.75rem; color:var(--muted); text-align:center; }
.month .day { padding:.35rem 0; min-height:2.1rem; text-align:center; border-radius:4px; font-size:.85rem; background:#eef4f2; color:var(--ink); border:0; }
.month button.day:hover { background:#cfe5de; }
.month .day.past { background:none; color:#b5bcc3; }
.month .day.taken { background:none; color:#b5bcc3; text-decoration:line-through; cursor:not-allowed; }
/* Airbnb-style checkout-only: open (top-left) / blocked (bottom-right). Number sits in the open half. */
.month button.day.handoff, .month .day.handoff {
	background: linear-gradient(to bottom right, #eef4f2 50%, #c5cdd3 50%);
	color: var(--ink);
	text-decoration: none;
	cursor: pointer;
	text-align: left;
	padding: .2rem .3rem;
	font-weight: 600;
	-webkit-tap-highlight-color: rgba(29,111,95,.2);
}
.month button.day.handoff:hover, .month button.day.handoff:focus {
	background: linear-gradient(to bottom right, #cfe5de 50%, #c5cdd3 50%);
	outline: 2px solid var(--accent);
	outline-offset: -2px;
}
.month .day.beyond { background:none; color:#b5bcc3; cursor:not-allowed; text-align:center; font-weight:400; }
.month .day.sel { background:var(--accent); color:#fff; text-decoration:none; text-align:center; font-weight:600; }
.month button.day.handoff.sel {
	background: linear-gradient(to bottom right, var(--accent) 50%, #154e43 50%);
	color:#fff;
}
.month .day.inrange { background:#a9d3c7; text-align:center; }
.cal-hint { min-height:1.3em; margin:.4rem 0 0; font-size:.9rem; color:var(--warn); }
.cal-hint[hidden] { display:none; }
.cal-legend { list-style:none; display:flex; flex-wrap:wrap; gap:.35rem 1.1rem; padding:0; margin:.85rem 0 0; font-size:.85rem; color:var(--muted); }
.cal-legend li { display:flex; align-items:center; gap:.4rem; }
.cal-legend .sw { display:inline-block; width:1.15rem; height:1.15rem; border-radius:3px; border:1px solid var(--line); }
.cal-legend .sw.avail { background:#eef4f2; }
.cal-legend .sw.handoff { background: linear-gradient(to bottom right, #eef4f2 50%, #c5cdd3 50%); }
.cal-legend .sw.taken { background:#f6f7f8; text-decoration:line-through; background-image: linear-gradient(#b5bcc3, #b5bcc3); opacity:.55; }
/* admin */
body.admin { background:#f2f4f5; }
.admin-top { display:flex; flex-wrap:wrap; gap:1rem; align-items:center; background:#1f2933; color:#fff; padding:.5rem 1rem; }
.admin-top a { color:#fff; margin-right:.75rem; text-decoration:none; font-size:.92rem; }
.admin-top .propsel label { display:flex; gap:.5rem; align-items:center; margin:0; color:#fff; }
.admin-top .propsel select { max-width:18rem; }
.admin-main { max-width:1150px; margin:0 auto; padding:1rem; }
.admin-main.narrow, form.narrow { max-width:30rem; }
.admin-main h1 small { font-weight:400; color:var(--muted); font-size:1rem; }
fieldset { border:1px solid var(--line); border-radius:8px; margin:1rem 0; padding:.5rem 1rem 1rem; }
legend { font-weight:700; padding:0 .4rem; }
form.inline { display:inline-flex; gap:.5rem; align-items:end; flex-wrap:wrap; margin:0 .25rem .25rem 0; }
form.inline label { margin:0; }
pre.notes { white-space:pre-wrap; background:#f6f7f8; padding:.75rem; border-radius:6px; font-size:.85rem; }
code { background:#eef1f3; padding:.1rem .3rem; border-radius:4px; word-break:break-all; }
@media (max-width:640px) { table.grid { font-size:.85rem; display:block; overflow-x:auto; } }
/* guest reviews */
.stars { color:#c58a00; letter-spacing:.05em; white-space:nowrap; }
fieldset.stars-pick label.check { margin:.2rem 0; }
.review-form details { margin:.75rem 0; }
.review-form summary { cursor:pointer; color:var(--accent); }
blockquote.review-text { margin:.5rem 0; padding:.5rem .9rem; border-left:3px solid var(--line); background:#fafbfb; }
.review-list { list-style:none; padding:0; margin:0; }
.review-list li { border-top:1px solid var(--line); padding:.75rem 0; }
.review-list li:first-child { border-top:0; }
.review-reply { margin:.4rem 0 0 1rem; font-size:.9rem; color:var(--muted); }
.badge { display:inline-block; padding:.05rem .45rem; border-radius:999px; font-size:.8rem; background:#e8eef0; }
.badge.pending { background:#fff4d6; } .badge.published { background:#e6f4ea; } .badge.hidden { background:#eee; color:#777; }
input[type=radio] { width:auto; }

/* admin: rows that need attention (Extra payments, Payments) and total rows */
table.grid tr.err td { background:#fbeae5; color:var(--warn); }
table.grid tr.block-open-on-site td { background:#e8f5e9; }
table.grid tr.block-reserved td { background:#fbeae5; }
table.grid tr.subtotal th { background:#f4f6f8; }
table.grid tr.grandtotal th { background:#e6f4ea; border-top:2px solid var(--line); }
.payfilters label { margin-right:.5rem; display:inline-block; }

/* admin calendar (Admin > Calendar) */
.calnav { display:flex; gap:1rem; align-items:center; flex-wrap:wrap; margin:.5rem 0 1rem; }
.acal { display:grid; grid-template-columns:repeat(7, minmax(0, 1fr)); gap:3px; }
.acal .dow { font-size:.8rem; color:var(--muted); text-align:center; }
.aday { min-height:6.2rem; padding:.3rem .35rem; border-radius:5px; font-size:.78rem; background:#eef4f2; border:2px solid transparent; cursor:pointer; overflow:hidden; line-height:1.25; }
.aday .dnum { font-weight:700; font-size:.9rem; }
.aday .st { min-height:1.9rem; }
.aday .rt { font-weight:600; }
.aday .mm, .aday .nt { color:var(--muted); font-size:.72rem; }
.aday .ovv { color:#8a4b00; font-weight:700; }
.aday.booked { background:#dbe7fb; }
.aday.hold, .aday.changehold { background:#fff4d6; }
.aday.owner { background:#e4e0ee; }
.aday.imported { background:#f6e1e1; }
.aday.openonsite { background:#e8f5e9; border-color:#2e7d32; border-style:dashed; }
.aday.past { opacity:.55; }
.aday.ov { border-color:#c58a00; }
.aday.picked { outline:3px solid var(--accent); outline-offset:-3px; }
.legend .sw { display:inline-block; min-height:0; width:1rem; height:1rem; padding:0; vertical-align:middle; margin:0 .2rem 0 .7rem; cursor:default; }
label.check.inl { display:inline-flex; margin-right:.8rem; }
@media (max-width:700px) { .aday { min-height:4.5rem; font-size:.66rem; } .aday .mm, .aday .nt { display:none; } }

/* admin: Copy buttons next to calendar links */
.copybtn { padding:.1rem .5rem; font-size:.8rem; margin-left:.25rem; }
.icslinks td p { margin:.25rem 0; }

/* ---- charge breakdown (ChargeBreakdown.cfc), waitlist, CRM link, availability grid (2026-10-31) ---- */
table.charges { width:100%; max-width:640px; border-collapse:collapse; margin:.5rem 0; }
table.charges td, table.charges th { padding:.35rem .5rem; border-bottom:1px solid var(--line); text-align:left; }
table.charges th.amt, table.charges td.amt { text-align:right; }
.charges-wrap h2 { font-size:1.1rem; margin:1rem 0 .25rem; }
.card.waitlist { border-left:4px solid var(--accent, #1d6f5f); }
.crm-badge { font-size:.95em; } .crm-link { white-space:nowrap; }
.avail-wrap { overflow-x:auto; max-width:100%; }
table.avail { border-collapse:collapse; font-size:12px; }
table.avail th, table.avail td { border:1px solid var(--line, #ddd); padding:0; text-align:center; min-width:22px; height:24px; }
table.avail th.prop, table.avail td.prop { text-align:left; padding:2px 6px; min-width:160px; white-space:nowrap; position:sticky; left:0; background:#fff; z-index:1; }
table.avail th.wkend { background:#f3f3f3; } table.avail th.today { outline:2px solid #333; }
table.avail td a { display:block; width:100%; height:100%; line-height:24px; text-decoration:none; color:inherit; }
td.av-open { background:#fff; }
td.av-direct { background:#2e7d32; color:#fff; }
td.av-held { background:#ffb74d; }
td.av-airbnb { background:#e57373; color:#fff; }
td.av-vrbo { background:#5c6bc0; color:#fff; }
td.av-import { background:#9575cd; color:#fff; }
td.av-owner { background:#9e9e9e; color:#fff; }
td.av-openonsite { background:#e8f5e9; color:#1b5e20; border:1px dashed #2e7d32; }
td.av-conflict { background:#b00020 !important; color:#fff; font-weight:bold; }
td.av-past { opacity:.55; }
.av-legend span { display:inline-block; padding:2px 8px; margin:2px 4px 2px 0; border:1px solid #ccc; font-size:12px; }

/* ---- Stage C (2026-11-01): gallery, map, live total, inquiry/quote, owner statement ---- */
.gallery-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(180px, 1fr)); gap:.5rem; }
.gallery-grid figure { margin:0; }
.gallery-grid figure.lead-photo { grid-column:1 / -1; }
.gallery-grid img { display:block; width:100%; height:160px; object-fit:cover; border-radius:6px; background:#eee; }
.gallery-grid figure.lead-photo img { height:auto; max-height:460px; }
.gallery-grid figcaption { font-size:.85rem; color:#555; margin-top:.2rem; }
.map-embed { position:relative; width:100%; padding-top:56%; border-radius:6px; overflow:hidden; background:#eee; }
.map-embed iframe { position:absolute; inset:0; width:100%; height:100%; border:0; }
.live-total { margin:.75rem 0; padding:.5rem .75rem; border:1px solid var(--line, #ddd); border-radius:6px; background:#fafafa; max-width:640px; }
.live-total table.quote { margin:0; }
table.photos img { width:120px; height:80px; object-fit:cover; display:block; }
table.photos td { vertical-align:top; }
.quote-hold { border-left:4px solid #ffb74d; }
.print-statement { max-width:900px; margin:1rem auto; padding:0 1rem; font-size:14px; }
.print-statement table { width:100%; border-collapse:collapse; margin:.5rem 0 1rem; }
.print-statement td, .print-statement th { border-bottom:1px solid #ddd; padding:.25rem .4rem; text-align:left; }
.print-statement td.amt, .print-statement th.amt { text-align:right; white-space:nowrap; }
@media print {
	.noprint, .admin-top, nav { display:none !important; }
	body { background:#fff; }
	.print-statement { margin:0; max-width:none; }
	a[href]:after { content:none; }
}

/* photo carousel (progressive: without JS this stays the existing gallery grid) */
.gallery-grid[data-carousel].is-on { display:block; position:relative; }
.gallery-grid[data-carousel].is-on figure { display:none; margin:0; }
.gallery-grid[data-carousel].is-on figure.is-active,
.gallery-grid[data-carousel].is-on figure.lead-photo.is-active { display:block; grid-column:auto; }
.gallery-grid[data-carousel].is-on img { width:100%; height:auto; max-height:520px; aspect-ratio:3 / 2; object-fit:cover; background:#eee; }
.carousel-nav { position:absolute; top:50%; transform:translateY(-50%); z-index:2; background:rgba(0,0,0,.55); color:#fff; border:0; border-radius:999px; width:2.25rem; height:2.25rem; font-size:1.25rem; line-height:1; padding:0; cursor:pointer; }
.carousel-nav.prev { left:.4rem; }
.carousel-nav.next { right:.4rem; }
.carousel-nav:hover, .carousel-nav:focus { background:rgba(0,0,0,.8); }
.carousel-thumbs { display:flex; flex-wrap:wrap; gap:.35rem; margin-top:.6rem; }
.gallery[data-has-carousel] .carousel-thumbs, .card.gallery .carousel-thumbs:not([hidden]) { display:flex; }
.carousel-thumbs button { border:2px solid transparent; padding:0; background:#eee; border-radius:6px; cursor:pointer; line-height:0; width:96px; }
.carousel-thumbs button[aria-current="true"] { border-color:var(--accent, #1b5c4a); }
.carousel-thumbs img { display:block; width:96px; height:64px; object-fit:cover; border-radius:4px; }
.prop-thumb { width:72px; }
.prop-thumb img { display:block; width:72px; height:52px; object-fit:cover; border-radius:4px; background:#eee; }
.crm-photos { display:flex; flex-wrap:wrap; gap:.4rem; margin:.5rem 0 1rem; }
.crm-photos figure { margin:0; width:140px; }
.crm-photos img { display:block; width:140px; height:96px; object-fit:cover; border-radius:6px; background:#eee; }
.crm-photos figcaption { font-size:.8rem; color:#555; margin-top:.15rem; }

/* admin: Daily Rates tab bar */
.dr-tabs { display:flex; flex-wrap:wrap; gap:.25rem .2rem; margin:0 0 .5rem; border-bottom:1px solid var(--line); padding:0 0 .45rem; }
.dr-tabs a { display:inline-block; padding:.35rem .75rem; border-radius:6px 6px 0 0; text-decoration:none; color:var(--ink); background:#e8eef0; }
.dr-tabs a.on { background:var(--accent); color:#fff; }
.dr-tabs-note { margin:.25rem 0 1rem; }
