.fetch-status {
  display: block;
  margin: -10px 0 16px;
  color: #35443c;
  font-size: 12px;
  line-height: 1.5;
  text-align: center;
}

/* Free days need no extra source message below the day-off explanation. */
.app .sheet:has(.free-day) .source-foot { display: none; }

@media (max-width: 700px) {
  .app .bottom-nav {
    gap: 8px;
    padding: 10px 12px max(12px, env(safe-area-inset-bottom));
  }
  .app .bottom-nav button {
    flex: 1 1 0;
    min-width: 0;
    height: auto;
    min-height: 64px;
    padding: 10px 8px;
    border-radius: 18px;
    gap: 8px;
    line-height: 1.35;
    align-items: center;
    justify-content: center;
  }
  .app .content { padding-bottom: calc(110px + env(safe-area-inset-bottom, 0px)); }
}

@media print { .fetch-status { display: none; } }
.fetch-status::before { content:""; display:inline-block; width:7px; height:7px; margin-right:8px; border-radius:50%; background:#85918b; vertical-align:1px; }
.fetch-status.is-online::before { background:#548c54; animation:fetch-status-pulse 2.5s ease-in-out infinite; }
.fetch-status.is-warning::before { background:#b58129; }
@keyframes fetch-status-pulse { 0%,100% { box-shadow:0 0 0 0 #548c5428; } 50% { box-shadow:0 0 0 4px #548c5400; } }
@media(prefers-reduced-motion:reduce) { .fetch-status.is-online::before { animation:none; } }
.fetch-status.is-error { color:#9f1f2b; font-weight:600; }
.fetch-status.is-error::before { background:#cf2631; box-shadow:0 0 0 3px #cf26311f; }

