/* カレンダー。左は俯瞰の暦、右は暦で選んだ所の記録(狭い画面では上下)。押しても暦は動かない。
   claim:calendar-overview-kept-day-rises-from-below / claim:calendar-levels-whole-range-select-narrows */
.calendar-panel {
  flex: 1;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  background: var(--white);
  position: relative;
}

/* 一覧へ切り替えている間も、暦の送り位置をブラウザーに持たせる。 */
.calendar-panel.calendar-away {
  position: absolute;
  inset: 0;
  visibility: hidden;
  pointer-events: none;
}

/* ---- 暦の操作(共用見出しの下) ---- */
.calendar-level-controls {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-left: auto;
}
.calendar-level-controls > .calendar-today {
  flex-shrink: 0;
  white-space: nowrap;
}
.calendar-filter-label {
  flex-basis: 100%;
}
.calendar-header {
  flex-shrink: 0;
  padding: 20px 24px 12px;
  border-bottom: var(--frame-hair) solid var(--line);
}
.calendar-title-row,
.calendar-nav,
.calendar-filters,
.calendar-segments {
  display: flex;
  align-items: center;
  gap: 8px;
}
.calendar-title-row h1 {
  margin-right: auto;
  font-size: var(--text-title);
  white-space: nowrap;
}
/* 種類と印の絞り込みが並ぶので、入りきらない幅では段の切り替えを次の行へ送る(題を縦に潰さない)。 */
.calendar-title-row {
  flex-wrap: wrap;
}
.calendar-segments {
  padding: 3px;
  border: var(--frame-hair) solid var(--line);
  border-radius: var(--frame-radius);
  background: var(--paper);
}
.calendar-segments button {
  border: 0;
  border-radius: var(--frame-radius);
  padding: 7px 14px;
  background: transparent;
  color: var(--muted);
}
.calendar-segments button.active {
  background: var(--white);
  color: var(--ink);
  font-weight: 600;
  box-shadow: none;
}
.calendar-button,
.calendar-arrow,
.calendar-menu {
  min-height: 34px;
  border: 1px solid var(--field-line);
  border-radius: var(--frame-radius);
  padding: 7px 11px;
  background: var(--white);
  color: var(--ink);
}
.calendar-menu {
  display: none;
}
.calendar-nav {
  margin-top: 0;
  flex-wrap: wrap;
}
.calendar-arrow {
  border: 0;
  font-size: 28px;
  min-width: 44px;
  min-height: 44px;
  padding: 0;
}
.calendar-arrow:disabled {
  opacity: 0.3;
}
.calendar-nav.is-year .calendar-arrow,
.calendar-nav.is-year .calendar-date-menu {
  display: none;
}
.calendar-period-stat {
  color: var(--muted);
  font-size: var(--text-caption);
  font-variant-numeric: tabular-nums;
}
.calendar-date-menu {
  position: relative;
  min-width: 0;
}
.calendar-period {
  display: block;
  cursor: pointer;
  min-height: 44px;
  align-content: center;
  font-size: var(--text-heading);
  font-weight: 700;
  list-style: none;
}
.calendar-period::after {
  content: "⌄";
  margin-left: 6px;
  color: var(--muted);
}
.calendar-period::-webkit-details-marker,
.calendar-filter-menu > summary::-webkit-details-marker {
  display: none;
}
.calendar-date-picker {
  min-height: 44px;
  border: 1px solid var(--field-line);
  border-radius: var(--frame-radius);
  padding: 6px 9px;
  background: var(--white);
  color: var(--ink);
}
.calendar-date-menu[open] .calendar-date-picker {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 5;
  box-shadow: none;
}
.calendar-filters {
  margin-top: 8px;
  flex-wrap: nowrap;
  position: relative;
}
.calendar-filters .search-wrap input {
  min-width: 0;
  width: 100%;
  min-height: 24px;
  border: 0;
  padding: 0;
  background: none;
}
.calendar-filter-menu {
  flex-shrink: 0;
}
.calendar-filter-menu > summary {
  list-style: none;
  cursor: pointer;
  min-width: 72px;
  min-height: 44px;
}
.calendar-filter-options {
  position: absolute;
  right: 0;
  top: 100%;
  z-index: 5;
  display: grid;
  gap: 12px;
  padding: 16px;
  border: var(--frame-hair) solid var(--line);
  border-radius: var(--frame-radius);
  background: var(--white);
  box-shadow: none;
}
.calendar-filter-options select {
  min-height: 44px;
  width: 100%;
  border: 1px solid var(--field-line);
  border-radius: var(--frame-radius);
  padding: 7px 10px;
  background: var(--white);
  color: var(--ink);
}
.calendar-filter-options .tag-filters {
  margin: 0;
  padding: 0;
}
.calendar-panel .tag-filters {
  flex-basis: 100%;
}
.calendar-level-controls > .calendar-today {
  flex-shrink: 0;
  white-space: nowrap;
}
.calendar-filter-label {
  line-height: 1.5;
  height: 1.5em;
  margin-top: 8px;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  color: var(--muted);
  font-size: var(--text-caption);
}
.calendar-banner {
  margin-top: 10px;
  padding: 9px 12px;
  border: var(--frame-hair) solid var(--line);
  border-radius: var(--frame-radius);
  background: var(--soft);
  color: var(--muted);
  font-size: var(--text-caption);
}
.calendar-banner.error {
  border-color: var(--red);
  background: var(--danger-bg);
  color: var(--red);
}

/* ---- 本体: 左に暦、右に記録 ---- */
.calendar-body {
  flex: 1;
  min-height: 0;
}
.calendar-body.split {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(320px, 420px);
}
.calendar-body.stack {
  display: flex;
  flex-direction: column;
}
.calendar-map {
  position: relative;
  overflow: auto;
  padding: 12px 24px 40px;
  background: var(--paper);
}
.calendar-pane {
  position: relative;
  overflow: auto;
  border-left: var(--frame-hair) solid var(--line);
  background: var(--white);
}

/* 日の枠(芝生)。濃さは件数、選んだ日は輪、今日は外側の枠 */
.calendar-cell {
  position: relative;
  min-width: 0;
  border: 0;
  padding: 0;
  background: var(--soft);
  color: var(--ink);
  cursor: pointer;
}
.calendar-cell.level-1 {
  background: var(--calendar-1);
}
.calendar-cell.level-2 {
  background: var(--calendar-2);
}
.calendar-cell.level-3 {
  background: var(--calendar-3);
}
.calendar-cell.filtered-out {
  box-shadow: none;
}
.calendar-cell:disabled {
  opacity: 1;
  cursor: default;
}
.calendar-cell:not(:disabled):hover {
  filter: brightness(0.96);
}
.calendar-cell.selected {
  outline: 2.5px solid var(--ink);
  outline-offset: 1.5px;
  z-index: 2;
}
.calendar-cell:focus-visible {
  outline: 3px solid var(--blue);
  outline-offset: 2px;
  z-index: 3;
}
.calendar-day-number {
  font-variant-numeric: tabular-nums;
}

/* 年: 12か月の普通のカレンダーを縦に並べる */
.calendar-year {
  display: flex;
  flex-direction: column;
  gap: 18px;
}
.calendar-year-head {
  position: sticky;
  top: -12px;
  z-index: 3;
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin: 0;
  padding: 12px 0 8px;
  background: var(--paper);
}
.calendar-year-head h2 {
  margin: 0;
  font-size: var(--text-title);
}
.calendar-year-stat {
  color: var(--muted);
  font-size: var(--text-caption);
  font-variant-numeric: tabular-nums;
}
.calendar-months {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(168px, 1fr));
  gap: 18px 22px;
}
.calendar-mcard {
  display: flex;
  flex-direction: column;
  min-width: 0;
  border-radius: var(--frame-radius);
}
.calendar-mcard.selected {
  outline: 2.5px solid var(--ink);
  outline-offset: 5px;
}
.calendar-mcard.outside .calendar-mini {
  opacity: 0.45;
}
.calendar-mhead {
  display: flex;
  align-items: baseline;
  gap: 6px;
  width: 100%;
  margin: 0 0 4px -4px;
  padding: 3px 4px;
  border: 0;
  border-radius: var(--frame-radius);
  background: none;
  color: var(--ink);
  text-align: left;
  cursor: pointer;
}
.calendar-mhead:hover:not(:disabled) {
  background: var(--soft);
}
.calendar-mhead:disabled {
  color: var(--muted);
  cursor: default;
}
.calendar-mname {
  font-weight: 700;
}
.calendar-mhead.current .calendar-mname {
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 2px;
}
.calendar-mcount {
  color: var(--muted);
  font-size: var(--text-caption);
}
.calendar-mini {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 3px;
  margin-bottom: auto;
}
.calendar-mini .calendar-blank {
  display: block;
}
.calendar-cell.xs {
  aspect-ratio: 1;
  border-radius: var(--frame-radius);
}
.calendar-cell.xs .calendar-day-number {
  display: none;
}
.calendar-mtags {
  min-height: 16px;
  margin-top: 5px;
  overflow: hidden;
  color: var(--muted);
  font-size: var(--text-caption);
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 月: 格子とその日の題 */
.calendar-weekdays,
.calendar-month-grid {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 6px;
}
.calendar-weekdays {
  margin-bottom: 4px;
}
.calendar-weekdays span {
  text-align: center;
  color: var(--muted);
  font-size: var(--text-caption);
}
.calendar-weekdays .sunday {
  color: var(--weekend-sunday);
}
.calendar-weekdays .saturday {
  color: var(--weekend-saturday);
}
.calendar-cell.m {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-content: flex-start;
  gap: 3px;
  min-height: 92px;
  padding: 6px 7px;
  border-radius: var(--frame-radius);
  text-align: left;
  overflow: hidden;
}
.calendar-cell.m .calendar-day-number {
  align-self: flex-start;
  font-size: var(--text-body);
  font-weight: 600;
}
.calendar-cell.m .calendar-mark-count {
  margin-left: auto;
  font-size: var(--text-caption);
  opacity: 0.8;
}
.calendar-mark-title {
  flex-basis: 100%;
  display: -webkit-box;
  overflow: hidden;
  font-size: var(--text-caption);
  line-height: 1.4;
  overflow-wrap: anywhere;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
}

/* 週: 7マス */
.calendar-week-strip-wrap {
  flex-shrink: 0;
  overflow: hidden;
  padding: 12px 24px 14px;
  border-bottom: var(--frame-hair) solid var(--line);
  touch-action: pan-y;
}
.calendar-week-strip {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 8px;
  max-width: 860px;
  margin: 0 auto;
}
.calendar-cell.w {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  padding: 6px 2px 8px;
  border-radius: var(--frame-radius);
}
.calendar-week-month,
.calendar-cell.w .calendar-mark-count {
  min-height: 14px;
  font-size: var(--text-caption);
  opacity: 0.85;
}
.calendar-weekday {
  font-size: var(--text-caption);
}
.calendar-cell.w .calendar-day-number {
  font-size: var(--text-heading);
  font-weight: 600;
  line-height: 1.3;
}

/* PC: 日にポインタを載せたときの吹き出し(一覧は変えない) */
.calendar-tip {
  position: absolute;
  z-index: 20;
  display: flex;
  flex-direction: column;
  gap: 4px;
  width: 260px;
  padding: 10px 12px;
  border-radius: var(--frame-radius);
  background: var(--ink);
  color: var(--white);
  font-size: var(--text-caption);
  pointer-events: none;
  box-shadow: none;
}
.calendar-tip span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.calendar-tip .more {
  opacity: 0.7;
}

/* ---- 記録: 見出し(範囲か、選んだ所)と一覧 ---- */
.calendar-scope {
  position: sticky;
  top: 0;
  z-index: 4;
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 52px;
  padding: 10px 20px;
  border-bottom: var(--frame-hair) solid var(--line);
  background: var(--white);
}
.calendar-scope.on {
  background: var(--soft);
}
.calendar-scope-title {
  margin: 0;
  font-size: var(--text-body);
}
.calendar-scope-count {
  color: var(--muted);
  font-size: var(--text-caption);
}
.calendar-scope-close {
  width: 32px;
  height: 32px;
  margin-left: auto;
  border: 1px solid var(--field-line);
  border-radius: var(--frame-radius);
  background: var(--white);
  color: var(--ink);
  font-size: var(--text-body);
  line-height: 1;
  cursor: pointer;
}
.calendar-scope-close:hover {
  background: var(--ink);
  color: var(--white);
}
.calendar-month-separator,
.calendar-week-separator {
  padding: 14px 20px 5px;
  border-bottom: var(--frame-hair) solid var(--line);
  background: var(--paper);
  color: var(--muted);
  font-size: var(--text-caption);
  font-weight: 700;
}
.calendar-month-separator {
  position: sticky;
  top: 52px;
  z-index: 3;
}
.calendar-day-heading {
  display: flex;
  align-items: baseline;
  gap: 8px;
  width: 100%;
  margin: 0;
  padding: 10px 20px 6px;
  border: 0;
  border-bottom: var(--frame-hair) solid var(--line);
  background: var(--white);
  color: var(--ink);
  font-size: var(--text-body);
  font-weight: 700;
  text-align: left;
  cursor: pointer;
}
.calendar-day-heading:hover {
  background: var(--soft);
}
.calendar-scope-title.today::after,
.calendar-day-heading.today > span:first-child::after {
  content: " 今日";
  /* 今日の枠と同じ色(墨は朱、ほかはテーマの濃い色)。赤は意味の赤だけに使う。 */
  color: var(--today-frame);
  font-size: var(--text-caption);
}
.calendar-day-count {
  color: var(--muted);
  font-size: var(--text-caption);
  font-weight: 400;
}
.calendar-week-list .calendar-day-heading {
  position: sticky;
  top: 0;
  z-index: 2;
}
.calendar-entry {
  display: grid;
  grid-template-columns: max(50px, calc(var(--text-caption) * 3)) minmax(0, 1fr);
  gap: 10px;
  width: 100%;
  padding: 12px 20px;
  border: 0;
  border-bottom: var(--frame-hair) solid var(--line);
  background: var(--white);
  color: var(--ink);
  text-align: left;
}
button.calendar-entry {
  cursor: pointer;
}
button.calendar-entry:hover,
.calendar-cluster-title:hover {
  background: var(--soft);
}
.calendar-entry-time {
  white-space: nowrap;
  padding-top: 2px;
  color: var(--muted);
  /* 数字だけの時刻は等幅(見た目の決まり3章)。 */
  font-family: "SFMono-Regular", Menlo, monospace;
  font-variant-numeric: tabular-nums;
  font-size: var(--text-caption);
  font-variant-numeric: tabular-nums;
}
.calendar-entry-main {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
}
.calendar-entry-title {
  display: block;
  font-size: var(--text-body);
  font-weight: 600;
  line-height: 1.45;
  overflow-wrap: anywhere;
}
.calendar-entry-preview {
  overflow: hidden;
  color: var(--muted);
  font-size: var(--text-caption);
  text-overflow: ellipsis;
  white-space: nowrap;
}
.calendar-entry-body {
  display: -webkit-box;
  overflow: hidden;
  font-size: var(--text-body);
  line-height: 1.85;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  -webkit-line-clamp: 14;
  -webkit-box-orient: vertical;
}
.calendar-entry.read {
  padding: 16px 20px;
}
.calendar-entry.read.quote .calendar-entry-title {
  font-size: var(--text-heading);
}
.calendar-entry-tags {
  color: var(--muted);
  font-size: var(--text-caption);
  overflow-wrap: anywhere;
}
.calendar-quote-badge {
  display: inline-block;
  margin-right: 6px;
  padding: 0;
  border: 0;
  border-radius: var(--frame-radius);
  color: var(--muted);
  font-size: var(--text-caption);
  vertical-align: 1px;
}
.calendar-cluster-title {
  display: block;
  width: 100%;
  min-height: 40px;
  padding: 8px 0;
  border: 0;
  border-top: 1px dashed var(--line);
  background: transparent;
  color: var(--ink);
  text-align: left;
  cursor: pointer;
}
.calendar-cluster-title .calendar-entry-title {
  font-weight: 400;
}
.calendar-empty,
.calendar-empty-week {
  margin: 0;
  padding: 16px 20px;
  color: var(--muted);
}
.calendar-retry {
  padding: 0 20px 12px;
}
.calendar-entry.flash {
  animation: calendar-flash 1.1s ease;
}

/* 週の一覧・日を読む */
.calendar-week-list,
.calendar-day-view {
  position: relative;
  flex: 1;
  min-height: 0;
  overflow: auto;
  overscroll-behavior-y: contain;
  overflow-anchor: none;
}
.calendar-week-list > *,
.calendar-day-view > * {
  max-width: 820px;
  margin-left: auto;
  margin-right: auto;
}
.calendar-day-view .calendar-day-read {
  padding-top: 8px;
}

/* 1日: 24時間の帯(書いた時刻に印) */
.calendar-day-read {
  padding-bottom: 24px;
}
.calendar-strip24 {
  padding: 30px 20px 6px;
}
.calendar-strip-lane {
  position: relative;
  height: 34px;
  border-bottom: 1.5px solid var(--field-line);
}
.calendar-strip-grid {
  position: absolute;
  bottom: 0;
  width: 1px;
  height: 8px;
  background: var(--field-line);
}
.calendar-strip-mark {
  min-width: 0;
  min-height: 0;
  position: absolute;
  bottom: 0;
  width: 6px;
  height: 26px;
  padding: 0;
  border: 0;
  border-radius: var(--frame-radius);
  background: var(--grass);
  transform: translateX(-50%);
  cursor: pointer;
}
.calendar-strip-mark.quote:not(.many) {
  width: 12px;
  height: 16px;
  background: var(--ink);
  border-radius: 0;
  clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
}
.calendar-strip-mark.quote.many::before {
  content: "◆";
  margin-right: 2px;
}
.calendar-strip-mark.many {
  bottom: 30px;
  z-index: 2;
  width: auto;
  min-width: 22px;
  height: 22px;
  padding: 0 5px;
  border-radius: var(--frame-radius);
  background: var(--calendar-2);
  color: var(--calendar-on-2);
  font-size: 11px;
  font-weight: 700;
}
/* 現在時刻: 朱の縦線と上の小さな升(Apple のカレンダーの今の線と同じ定石。色は朱肉)。 */
.calendar-strip-now {
  position: absolute;
  top: -4px;
  bottom: -1.5px;
  z-index: 3;
  width: 1.5px;
  background: var(--current);
  transform: translateX(-50%);
  pointer-events: none;
}
.calendar-strip-now::before {
  content: "";
  position: absolute;
  top: -3px;
  left: 50%;
  width: 6px;
  height: 6px;
  border-radius: var(--frame-radius);
  background: var(--current);
  transform: translateX(-50%);
}
.calendar-strip-axis {
  position: relative;
  height: 18px;
}
.calendar-strip-hour {
  position: absolute;
  top: 3px;
  transform: translateX(-50%);
  color: var(--muted);
  font-family: var(--frame-sans);
  font-size: 11px;
}
.compact .calendar-strip24 {
  padding: 16px 20px 2px;
}
.compact .calendar-strip-lane {
  height: 18px;
}
.compact .calendar-strip-mark {
  height: 14px;
  width: 5px;
}
.compact .calendar-strip-mark.many {
  bottom: 0;
  height: 16px;
  min-width: 18px;
  font-size: 10px;
  border-radius: var(--frame-radius);
}
.calendar-day-empty {
  padding: 16px 20px;
}
.calendar-day-empty p {
  margin: 0 0 12px;
  color: var(--muted);
}
.calendar-near {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}
.calendar-near-button {
  min-height: 36px;
  padding: 6px 14px;
  border: 1px solid var(--field-line);
  border-radius: var(--frame-radius);
  background: var(--white);
  color: var(--ink);
  cursor: pointer;
}
.calendar-near-button:hover {
  background: var(--soft);
}

/* 動き: 押すとその日が下から出る(透けさせない。前の一覧はすぐ替わる) */
.calendar-rise {
  animation: calendar-rise 0.24s cubic-bezier(0.2, 0.8, 0.2, 1);
}
.calendar-from-right {
  animation: calendar-from-right 0.22s ease;
}
.calendar-from-left {
  animation: calendar-from-left 0.22s ease;
}
@keyframes calendar-rise {
  from {
    transform: translateY(18px);
  }
}
@keyframes calendar-from-right {
  from {
    transform: translateX(24px);
  }
}
@keyframes calendar-from-left {
  from {
    transform: translateX(-24px);
  }
}
@keyframes calendar-flash {
  0%,
  40% {
    background: var(--calendar-1);
  }
}
@media (prefers-reduced-motion: reduce) {
  .calendar-rise,
  .calendar-from-right,
  .calendar-from-left,
  .calendar-entry.flash {
    animation: none;
  }
}

/* ---- 狭い PC: 右の区画を詰める ---- */
@media (max-width: 1100px) {
  .calendar-body.split {
    grid-template-columns: minmax(0, 1fr) 320px;
  }
  .calendar-cell.m {
    min-height: 76px;
  }
}

/* ---- スマホの幅: 上に暦、下に記録 ---- */
@media (max-width: 900px) {
  .calendar-body.split {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: minmax(0, auto) minmax(0, 1fr);
  }
  .calendar-map {
    max-height: 58%;
    padding: 8px 12px 16px;
    border-bottom: var(--frame-hair) solid var(--line);
  }
  .calendar-pane {
    border-left: 0;
  }
  .calendar-mark-title {
    display: none;
  }
  .calendar-cell.m {
    flex-direction: column;
    flex-wrap: nowrap;
    align-content: normal;
    align-items: center;
    justify-content: center;
    min-height: 46px;
    padding: 4px 2px;
  }
  .calendar-cell.m .calendar-day-number {
    align-self: center;
  }
  .calendar-cell.m .calendar-mark-count {
    margin-left: 0;
  }
  .calendar-months {
    grid-template-columns: 1fr 1fr;
    gap: 12px 12px;
  }
}
@media (max-width: 700px) {
  .calendar-panel {
    padding-bottom: env(safe-area-inset-bottom);
  }
  .calendar-header {
    padding: 12px 16px 8px;
  }
  .calendar-title-row {
    flex-wrap: wrap;
  }
  .calendar-title-row h1 {
    font-size: var(--text-heading);
  }
  .calendar-menu {
    display: inline-block;
  }
  .calendar-segments button {
    flex: 1;
  }
  .calendar-period {
    font-size: var(--text-body);
  }
  .calendar-week-strip-wrap {
    padding: 8px 8px 10px;
  }
  .calendar-week-strip {
    gap: 3px;
  }
  .calendar-entry {
    grid-template-columns: max(44px, calc(var(--text-caption) * 3)) minmax(0, 1fr);
    gap: 8px;
    padding: 12px 12px;
  }
  .calendar-scope,
  .calendar-day-heading,
  .calendar-month-separator,
  .calendar-week-separator {
    padding-left: 12px;
    padding-right: 12px;
  }
  .calendar-filters .search-wrap input {
    min-height: 44px;
  }
  /* 一覧と同じく、狭い画面では検索の欄を1行に取り、種類と印の絞り込みは次の行へ(検索の欄を潰さない)。 */
  .calendar-filters {
    flex-wrap: wrap;
  }
  .calendar-filters .search-wrap {
    flex-basis: 100%;
  }
}

/* 選んだ日の一覧: 時刻・題・ピン・タグ。押すと記録へ */
.calendar-item {
  display: grid;
  grid-template-columns: max(50px, calc(var(--text-caption) * 3)) minmax(0, 1fr);
  gap: 10px;
  width: 100%;
  min-height: 44px;
  padding: 11px 20px;
  border: 0;
  border-bottom: var(--frame-hair) solid var(--line);
  background: var(--white);
  color: var(--ink);
  text-align: left;
  cursor: pointer;
}
.calendar-item:hover {
  background: var(--soft);
}
.calendar-item.flash {
  animation: calendar-flash 1.1s ease;
}
.calendar-pin {
  display: inline-block;
  margin-left: 6px;
  color: var(--muted);
  vertical-align: -2px;
}
.calendar-pin svg {
  width: 14px;
  height: 14px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}
@media (max-width: 700px) {
  .calendar-item {
    grid-template-columns: max(44px, calc(var(--text-caption) * 3)) minmax(0, 1fr);
    gap: 8px;
    padding: 11px 12px;
  }
}

/* スマホの幅の月は、暦を全部見せ、残りに一覧(iPhone のシートを中で休ませるのと同じ形) */
@media (max-width: 900px) {
  .calendar-body.split.level-month {
    grid-template-rows: minmax(0, auto) minmax(min(160px, 40%), 1fr);
  }
  .calendar-body.level-month .calendar-map {
    max-height: none;
  }
}
@media (max-width: 700px) {
  .calendar-cell.m {
    min-height: 40px;
  }
  .calendar-weekdays,
  .calendar-month-grid {
    gap: 4px;
  }
}
@media (max-width: 700px) {
  /* 帯の印と年の日のマスは小さいまま(共通の 44px の決まりから外す。押す先は一覧と月の名前が担う) */
  #app .calendar-strip-mark,
  #app .calendar-cell.xs {
    min-width: 0;
    min-height: 0;
  }
}
/* スマホの幅の年: 暦を広く眺め、何も選ばないときの一覧は見出しだけ(claim:calendar-year-two-columns-month-tags-sheet-header) */
@media (max-width: 900px) {
  .calendar-body.split.level-year {
    grid-template-rows: minmax(0, 1fr) auto;
  }
  .calendar-body.level-year .calendar-map {
    max-height: none;
  }
  .calendar-body.level-year .calendar-pane {
    max-height: 46%;
    border-top: var(--frame-hair) solid var(--line);
  }
  .calendar-body.level-year:not(.has-selection) .calendar-pane {
    max-height: 53px;
    overflow: hidden;
  }
}
/* 最後の週も一覧の上まで送れるように(送ると7マスが替わる) */
.calendar-week-list::after {
  content: "";
  display: block;
  height: calc(100% - 64px);
}
.calendar-week-list.has-scope::after {
  display: none;
}

/* 窓の幅だけでなく、navigation を除いた実領域に合わせる。 */
.calendar-body.split.layout-split {
  grid-template-columns: minmax(0, 1fr) var(--calendar-pane-width, 420px);
  grid-template-rows: minmax(0, 1fr);
}
.calendar-body.split.layout-split .calendar-map {
  max-height: none;
}
.calendar-body.split.layout-stack {
  grid-template-columns: minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr) auto;
}
.calendar-body.split.layout-stack .calendar-map {
  max-height: none;
}
/* 月は格子の高さを取り、年は残りをすべて送り領域にする。 */
.calendar-body.split.layout-stack.level-month {
  grid-template-rows: minmax(0, auto) minmax(0, 1fr);
}

/* 帳面+。style.cssと同じ骨格を、暦の既存の配置に適用する。 */
.calendar-header {
  border-bottom: 0;
}
.calendar-title-row h1 {
  font-family: var(--font-reading);
  font-weight: 600;
  font-size: calc(28px * var(--text-scale));
  letter-spacing: 0.08em;
}
.calendar-segments {
  gap: 0;
  padding: 2px;
  border: 0;
  background: var(--frame-segment);
}
.calendar-segments button {
  min-height: 44px;
  border: 0;
  padding: 0 12px;
  background: transparent;
  font-family: var(--frame-sans);
}
.calendar-segments button.active {
  background: var(--frame-thumb);
  color: var(--on-thumb);
  box-shadow: none;
}
.calendar-day-number {
  font-family: var(--frame-sans);
}
.calendar-cell.selected {
  outline: 1px solid var(--blue);
  outline-offset: 2px;
}
.calendar-cell.filtered-out {
  outline: 0;
}
.calendar-button,
.calendar-arrow,
.calendar-menu {
  background: transparent;
  color: var(--blue);
  min-height: 44px;
}
.calendar-cell {
  background: transparent;
}
.calendar-entry-title,
.calendar-mark-title,
.calendar-entry-body,
.calendar-entry-preview,
.calendar-period,
.calendar-day-heading,
.calendar-year-head h2 {
  font-family: var(--font-reading);
}
.calendar-entry-tags,
.calendar-entry-tags * {
  font-family: var(--frame-sans);
}
@media (max-width: 760px) {
  .calendar-title-row h1 {
    font-size: calc(26px * var(--text-scale));
  }
}

/* 年の段の升は字が載らないので、芝と同じ濃い3段。 */
.calendar-cell.xs.level-1 {
  background: var(--grass-1);
}
.calendar-cell.xs.level-2 {
  background: var(--grass-2);
}
.calendar-cell.xs.level-3 {
  background: var(--grass-3);
}
/* 書いていない過去の日は字の 8% の灰の空き升(月・年・週の段。量の段と混ぜない。見た目の決まり 2.2)。未来の日は升を描かない。 */
.calendar-cell:is(.m, .xs, .w).level-0:not(.calendar-future) {
  background: var(--grass-empty);
}
/* 量の段の升の中の字は、その段の数字の色(見た目の決まり 2.2。濃い段は地の色で抜く)。今日も同じ数字の色を使う。 */
.calendar-cell.level-1 {
  color: var(--calendar-on-1);
}
.calendar-cell.level-2 {
  color: var(--calendar-on-2);
}
.calendar-cell.level-3 {
  color: var(--calendar-on-3);
}
.calendar-cell:is(.level-1, .level-2, .level-3)
  :is(.calendar-day-number, .calendar-mark-count, .calendar-mark-title, .calendar-weekday, .calendar-week-month) {
  color: inherit;
}
/* 空き日の数字だけ曜日で分ける。量のある升では、その段の数字の色を保つ。 */
.calendar-cell.level-0.sunday:not(.selected, .today, .calendar-future) .calendar-day-number {
  color: var(--weekday-sun);
}
.calendar-cell.level-0.saturday:not(.selected, .today, .calendar-future) .calendar-day-number {
  color: var(--weekday-sat);
}
.calendar-cell.m.calendar-future {
  background: transparent;
}
.calendar-cell.m.calendar-future .calendar-day-number {
  color: var(--frame-faint);
}
/* 今日の印は升の外側。量の塗り・数字と升の配置を変えない。 */
.calendar-cell.today:not(.xs) {
  outline: 2px solid var(--today-frame);
  outline-offset: 2px;
  z-index: 1;
}

/* Reuse the calendar label in the top layer, including inside settings dialogs. */
.stats-grass-tip {
  position: fixed;
  inset: auto;
  margin: 0;
  border: 0;
}
.stats-period-grass [role="button"]:focus-visible {
  outline: var(--frame-hair) solid var(--ink);
}

/* 年の段の升は間が狭いので、今日の枠は升の縁に描き、1px の地の隙間を空けて塗りを内側に縮める(10px 未満は 1px。ECD 10/12)。 */
/* 段の塗りの規則(background の一括指定)より後で効かせ、塗りを内側に縮める。 */
.calendar-cell.xs.today:is(.level-0, .level-1, .level-2, .level-3) {
  outline: none;
  border: 2px solid var(--today-frame);
  padding: 2px;
  background-clip: content-box;
}
/* 狭い幅の年の段は升が 10px 未満になるので、枠 1px・隙間 1px(ECD 10/12)。 */
@media (max-width: 700px) {
  .calendar-cell.xs.today:is(.level-0, .level-1, .level-2, .level-3) {
    border-width: 1px;
    padding: 1px;
  }
}

/* 短い窓でも操作の帯だけで記録の送り領域を使い切らない。押し口の44pxは保ち、余白を詰める。 */
@media (max-width: 700px) and (max-height: 500px) {
  .app:has(.calendar-panel:not(.calendar-away)) .list-header {
    padding-top: 0;
  }
  .app:has(.calendar-panel:not(.calendar-away)) .list-title-row {
    margin-bottom: 0;
  }
  .app:has(.calendar-panel:not(.calendar-away)) .search-wrap {
    padding-top: 0;
    padding-bottom: 0;
  }
  .app:has(.calendar-panel:not(.calendar-away)) #list-tags {
    margin-top: 0;
  }
  .calendar-header {
    padding-top: 0;
    padding-bottom: 0;
    gap: 0;
  }
  .calendar-nav {
    gap: 0;
  }
  .calendar-filter-label {
    margin: 0;
  }
  .calendar-year-head {
    position: static;
  }
}
@media (max-width: 900px) and (max-height: 600px) {
  .calendar-body.split.layout-stack.level-month,
  .calendar-body.split.layout-stack.level-year.has-selection {
    grid-template-rows: minmax(0, 2fr) minmax(0, 3fr);
  }
  .calendar-body.split.layout-stack.level-year.has-selection .calendar-pane {
    max-height: none;
  }
}
