    :root {
      --c-panel: var(--c-bg-card);
      --c-muted: #888;
    }
    * { box-sizing: border-box; }
    body { font-family: system-ui, -apple-system, sans-serif; background: var(--c-bg); color: var(--c-text); margin:0; padding:0; min-height:100vh; }
    .mirror-page {
      padding-top: calc(56px + 40px);
      min-height: 100vh;
      display: flex;
      flex-direction: column;
    }
    /* When used as a kiosk/display (or on short viewports), lock to viewport and prevent page scroll.
       The photo will size to remaining space. */
    .mirror-page.fit,
    body.kiosk .mirror-page {
      height: 100dvh;
      min-height: 100dvh;
      overflow: hidden;
    }

    /* Sub nav (consistent) */

    .mirror-wrap {
      flex: 1;
      min-height: 0;
      display: flex;
      flex-direction: column;
      max-width: 1400px;
      margin: 0 auto;
      width: 100%;
      padding: 12px 12px 12px;
      gap: 10px;
    }

    /* Top bar: clock + greeting */
    .mirror-top {
      display:flex; align-items:flex-end; justify-content:space-between; gap:16px; padding:8px 12px 4px;
    }
    .clock { font-size: clamp(3.2rem, 9vw, 5.8rem); font-weight:400; letter-spacing:0.06em; line-height:1; font-variant-numeric: tabular-nums; }
    .clock-sub { font-size:1.05rem; color:#777; font-weight:400; letter-spacing:0.08em; margin-top:-6px; }
    .greeting { font-size:1.35rem; color:var(--c-text-secondary); font-weight:400; text-align:right; max-width:420px; line-height:1.3; }

    /* Main content grid */
    .mirror-grid {
      flex: 1;
      min-height: 0;
      display: grid;
      grid-template-columns: 380px 1fr;
      gap: 12px;
      /* No hard min-height — we size the photo-panel explicitly via JS to fit the viewport.
         The grid row height will be driven by the photo panel's height. */
    }
    @media (max-width: 900px) {
      .mirror-grid { grid-template-columns: 1fr; }
      .mirror-grid .calendar-panel { order: 2; }
      .mirror-grid .photo-panel { order: 1; }
    }

    /* Calendar panel */
    .calendar-panel {
      background: var(--c-panel); border:1px solid var(--c-border); border-radius:20px; padding:18px 20px; display:flex; flex-direction:column;
    }
    .calendar-panel h3 { font-size:0.85rem; font-weight:400; letter-spacing:0.12em; text-transform:uppercase; color: var(--c-text-secondary); margin:0 0 12px; }
    .week-list { flex:1; display:flex; flex-direction:column; gap:6px; overflow-y:auto; }
    .day { padding:8px 12px; border-radius:12px; border:1px solid transparent; }
    .day.today { background:var(--c-border); border-color:var(--c-border-hover); }
    .day-header { display:flex; align-items:baseline; gap:8px; margin-bottom:4px; }
    .day-name { font-weight:500; font-size:0.95rem; }
    .day-date { font-size:0.75rem; color: var(--c-text-secondary); }
    .events { display:flex; flex-direction:column; gap:2px; }
    .event { font-size:0.82rem; color:#ccc; padding:2px 0; display:flex; gap:6px; }
    .event .time { font-variant-numeric:tabular-nums; color:var(--c-muted); min-width:42px; }
    .event .title { flex:1; }
    .event .loc { color: var(--c-text-secondary); font-size:0.72rem; margin-left:4px; }
    .no-events { font-size:0.8rem; color: var(--c-text-secondary); font-style:italic; padding:4px 0; }

    /* Photo slideshow */
    .photo-panel {
      background:#000; border:1px solid var(--c-border); border-radius:20px; position:relative; overflow:hidden;
      display:flex; align-items:center; justify-content:center;
      box-shadow: 0 8px 30px rgba(0,0,0,0.5);
      /* Height is set dynamically by fitPhotoToScreen() based on viewport + chrome so the whole view fits without page scroll. */
      min-height: 260px; /* soft floor only */
    }
    #photo-stage { position:absolute; inset:0; }
    #photo-stage img {
      position:absolute; inset:0; width:100%; height:100%; object-fit:contain; opacity:0; transition: opacity 650ms ease;
    }
    #photo-stage img.active { opacity:1; }
    .photo-overlay {
      position:absolute; inset:0; background: linear-gradient(to bottom, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 28%, rgba(0,0,0,0.0) 72%, rgba(0,0,0,0.35) 100%);
      pointer-events:none;
    }
    .photo-meta {
      position:absolute; bottom:18px; left:18px; right:18px; font-size:0.78rem; color:#ddd; display:flex; justify-content:space-between; align-items:flex-end; gap:12px;
      text-shadow: 0 1px 4px rgba(0,0,0,0.6);
    }
    .photo-source { font-weight:400; letter-spacing:0.04em; }
    .photo-controls {
      position:absolute; bottom:14px; right:14px; display:flex; gap:6px; opacity:0.85;
    }
    .photo-controls button {
      background:rgba(255,255,255,0.1); border:1px solid rgba(255,255,255,0.25); color:var(--c-text); width:42px; height:42px; border-radius:999px; font-size:1.1rem; display:flex; align-items:center; justify-content:center; cursor:pointer; transition:.2s;
      touch-action: manipulation;
    }
    .photo-controls button:hover, .photo-controls button:active { background:rgba(255,255,255,0.2); }

    .photo-hint {
      position:absolute; top:14px; right:14px; font-size:0.65rem; letter-spacing:0.1em; color: var(--c-text-secondary); background:rgba(0,0,0,0.4); padding:2px 9px; border-radius:999px; pointer-events:none;
    }

    /* Bottom bar */
    .mirror-bottom {
      display:flex; align-items:center; justify-content:space-between; gap:12px; padding:8px 4px 0; font-size:0.9rem; color:#777;
    }
    .quote {
      font-style: italic;
      font-weight:400;
      font-size: 1.05rem;
      line-height: 1.55;
      max-width: 820px;
      color: #aaa;
      transition: opacity 1.6s ease;
      cursor: pointer;
      letter-spacing: 0.01em;
    }
    .quote:hover { color: #ccc; }
    .status { font-size:0.7rem; color: #777; letter-spacing:0.08em; }

    /* Floating actions */
    .fab {
      position:fixed; bottom:18px; right:18px; z-index:120;
      display:flex; flex-direction:column; gap:8px; align-items:flex-end;
    }
    .fab button {
      background:var(--c-bg-card); border:1px solid var(--c-border-hover); color:var(--c-text); padding:10px 18px; border-radius:999px; font-size:0.85rem; cursor:pointer; display:flex; align-items:center; gap:8px; box-shadow:0 4px 16px rgba(0,0,0,0.4);
      touch-action:manipulation;
    }
    .fab button.primary { background:var(--c-text); color:var(--c-bg); font-weight:500; }
    .fab button:active { transform:scale(0.985); }

    /* Google-style connect button */
    .google-btn {
      background: #4285f4;
      color: white;
      border: none;
      font-weight: 500;
      padding: 12px 20px;
      border-radius: 999px;
      display: flex;
      align-items: center;
      gap: 10px;
      font-size: 0.9rem;
      box-shadow: 0 2px 8px rgba(66,133,244,0.3);
    }
    .google-btn:hover, .google-btn:active { background: #3367d6; }

    /* Settings sheet */
    .sheet {
      position:fixed; inset:0; z-index:200; display:none; align-items:flex-end; justify-content:center; background:rgba(0,0,0,0.6);
    }
    .sheet.open { display:flex; }
    .sheet-content {
      width:100%; max-width:720px; background:var(--c-bg-card); border:1px solid #222; border-radius:20px 20px 0 0; padding:22px 20px 28px; max-height:82vh; overflow:auto;
    }
    .sheet-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:16px; }
    .sheet-header h2 { font-size:1.15rem; font-weight:700; margin:0; }
    .sheet label { display:block; font-size:0.72rem; letter-spacing:0.08em; color: var(--c-text-secondary); margin:12px 0 4px; text-transform:uppercase; }
    .sheet input, .sheet textarea {
      width:100%; background:var(--c-bg); border:1px solid #222; color:var(--c-text); border-radius:10px; padding:10px 12px; font-size:0.9rem; font-family:inherit;
    }
    .sheet textarea { min-height:82px; resize:vertical; }
    .collections { display:flex; flex-wrap:wrap; gap:6px; margin:8px 0; }
    .pill { background:var(--c-border); border:1px solid var(--c-border-hover); padding:4px 11px; border-radius:999px; font-size:0.78rem; display:inline-flex; align-items:center; gap:6px; }
    .pill .x { cursor:pointer; opacity:0.6; }
    .big-btn {
      margin-top:14px; width:100%; padding:14px; background:var(--c-text); color:var(--c-bg); border:none; border-radius:12px; font-weight:600; font-size:0.95rem; cursor:pointer;
    }
    .big-btn.secondary { background:transparent; border:1px solid var(--c-text-faint); color:#ccc; }

    .help { font-size:0.72rem; color: var(--c-text-secondary); line-height:1.4; margin-top:4px; }
    .preview-box { background:var(--c-bg); border:1px solid #222; border-radius:10px; padding:10px; margin-top:8px; font-size:0.82rem; max-height:160px; overflow:auto; white-space:pre-wrap; }

    /* Kiosk / full screen mode - hide most UI chrome but keep fullscreen control and page dots */
    body.kiosk nav,
    body.kiosk .sub-nav,
    body.kiosk footer {
      display: none !important;
    }
    body.kiosk .fab > button:not(.kiosk-btn) {
      display: none !important;
    }
    body.kiosk .fab {
      display: flex !important;
      opacity: 0.85;
    }
    body.kiosk .mirror-page {
      padding-top: 0;
    }
    /* In true kiosk/display use, be ruthless about vertical space so the photo can fill without scroll */
    body.kiosk .quote,
    body.kiosk #status,
    body.kiosk .page-dots {
      display: none !important;
    }
    body.kiosk .mirror-top {
      padding: 4px 8px 2px;
      gap: 8px;
    }
    body.kiosk .mirror-top .greeting {
      font-size: 0.95rem;
    }
    body.kiosk .calendar-panel {
      max-height: 38vh;
      overflow: auto;
      font-size: 0.9em;
    }
    body.kiosk .calendar-panel h3 {
      font-size: 0.7rem;
      margin-bottom: 6px;
    }
    body.kiosk .photo-panel {
      min-height: 0;
    }

    .page-dots .dot {
      width: 6px;
      height: 6px;
      background: var(--c-text-faint);
      border-radius: 50%;
      transition: all 0.2s ease;
      display: inline-block;
      cursor: pointer;
    }
    .page-dots .dot.active {
      background: var(--c-text);
      width: 7px;
      height: 7px;
      box-shadow: 0 0 0 1px rgba(224,224,224,0.3);
    }
    .page-dots .dot:hover {
      background: #777;
    }

    .mirror-hint { font-size:0.65rem; color: #777; text-align:center; padding:4px 0 10px; }

    /* Map page styles */
    .map-toggle {
      background: var(--c-border);
      border: 1px solid var(--c-border-hover);
      color: #aaa;
      padding: 6px 14px;
      border-radius: 999px;
      font-size: 0.75rem;
      white-space: nowrap;
    }
    .map-toggle.active {
      background: var(--c-text);
      color: var(--c-bg);
      border-color: var(--c-text);
    }
    #where-map .leaflet-popup-content-wrapper {
      background: var(--c-bg-card);
      color: var(--c-text);
      border: 1px solid var(--c-border-hover);
    }

    /* Weather */
    .weather {
      display: flex;
      align-items: center;
      gap: 8px;
      font-size: 0.95rem;
      color: #ccc;
      margin-top: 4px;
    }
    .weather-icon { font-size: 1.3rem; line-height: 1; }
    .weather-temp { font-size: 1.35rem; font-weight: 400; color: var(--c-text); }
    .weather-desc { color: var(--c-text-secondary); font-size: 0.82rem; }
    .weather-hilo { font-size: 0.75rem; color: var(--c-text-secondary); margin-left: 6px; }

    /* Weather target container lives at end of .mirror-wrap and was in flow; hide it.
       (Weather values are still rendered into the inner spans when loadWeather runs; if we want it visible
       we can later float it into the top bar instead of leaving it as a bottom element.) */
    #weather { display: none !important; }

    /* Keep long calendars scrollable inside the dashboard on every screen. */
    .calendar-panel { min-width:0; min-height:0; overflow:hidden; }
    #calendar-list { min-height:0; overflow-wrap:anywhere; }
    #calendar-list .title, #calendar-list .loc { min-width:0; }

    /* Header and scrolling body form one usable bottom sheet on small screens. */
    .sheet { flex-direction:column; align-items:center; justify-content:flex-end; }
    .sheet > .sheet-header { width:100%; max-width:720px; margin:0; padding:16px 20px; background:var(--c-bg-card); border:1px solid #222; border-bottom:0; border-radius:20px 20px 0 0; }
    .sheet > .sheet-content { border-radius:0; max-height:calc(90vh - 64px); max-height:calc(90dvh - 64px); }
    .sheet input, .sheet select, .sheet textarea { min-width:0; }
