/* Hallmark · genre: modern-minimal · theme: Cobalt · scope: application shell
 * 管理画面は「読む」ページではなく「操作する」道具なので、
 * ランディングの造形ではなく情報設計(状態が一目で分かること)を優先する。
 * 色とフォントは tokens.css の var() のみを使う。
 */

*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  overflow-x: clip;
  -webkit-text-size-adjust: 100%;
}

body {
  overflow-x: clip;
  margin: 0;
  background: var(--color-paper);
  color: var(--color-ink);
  font-family: var(--font-body);
  font-size: var(--text-base);
  font-weight: 400;
  line-height: 1.6;
  font-variant-numeric: oldstyle-nums;
  -webkit-font-smoothing: antialiased;
}

h1,
h2,
h3 {
  font-family: var(--font-display);
  font-style: normal;
  font-weight: 700;
  letter-spacing: -0.022em;
  line-height: 1.15;
  text-wrap: balance;
  overflow-wrap: anywhere;
  min-width: 0;
  margin: 0;
}

p {
  margin: 0;
}

a {
  color: var(--color-accent);
  text-decoration-thickness: 1px;
  text-underline-offset: 0.18em;
}

a:hover {
  text-decoration-thickness: var(--rule-thick);
}

:focus-visible {
  outline: var(--rule-thick) solid var(--color-focus);
  outline-offset: 2px;
  border-radius: var(--radius-sm);
}

/* --- 骨格 --------------------------------------------------------------- */

.shell {
  max-width: var(--page-max);
  margin: 0 auto;
  padding: var(--space-lg) var(--page-gutter) var(--space-3xl);
}

/* ヘッダーの中身は本文と同じ版面・同じ左右余白に揃える(端に貼り付かせない) */
.masthead {
  display: flex;
  align-items: center;
  gap: var(--space-md);
  flex-wrap: wrap;
  max-width: var(--page-max);
  margin: 0 auto;
  padding: var(--space-md) var(--page-gutter);
  border-bottom: var(--rule-hair) solid var(--color-rule);
}

.wordmark {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-md);
  letter-spacing: -0.03em;
  color: var(--color-ink);
  text-decoration: none;
  white-space: nowrap;
}

.wordmark::before {
  content: '';
  display: inline-block;
  width: 0.5em;
  height: 0.5em;
  margin-right: 0.45em;
  border-radius: 2px;
  background: var(--color-accent);
  vertical-align: 0.06em;
}

.masthead__tabs {
  display: flex;
  gap: var(--space-xs);
  flex-wrap: wrap;
}

.masthead__tabs a {
  padding: var(--space-2xs) var(--space-sm);
  border-radius: var(--radius-sm);
  color: var(--color-muted);
  font-size: var(--text-sm);
  text-decoration: none;
  white-space: nowrap;
  transition: color var(--dur-micro) var(--ease-out),
    background-color var(--dur-micro) var(--ease-out);
}

.masthead__tabs a:hover {
  color: var(--color-ink);
  background: var(--color-paper-2);
}

.masthead__tabs a[aria-current='page'] {
  color: var(--color-accent);
  background: var(--color-accent-soft);
}

.masthead__end {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  margin-left: auto;
}

.page-title {
  font-size: var(--text-xl);
  margin: var(--space-xl) 0 var(--space-2xs);
}

.page-lede {
  color: var(--color-muted);
  font-size: var(--text-sm);
  max-width: var(--measure);
}

/* --- 区画 --------------------------------------------------------------- */

.section {
  margin-top: var(--space-2xl);
}

.section:first-of-type {
  margin-top: var(--space-xl);
}

.section__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-sm);
  flex-wrap: wrap;
  margin-bottom: var(--space-md);
}

.section__title {
  font-size: var(--text-md);
}

.count {
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-variant-numeric: tabular-nums;
  color: var(--color-neutral);
}

.note {
  color: var(--color-muted);
  font-size: var(--text-sm);
  max-width: var(--measure);
}

.panel {
  border: var(--rule-hair) solid var(--color-rule);
  border-radius: var(--radius-md);
  background: var(--color-paper);
}

/* --- 一覧 ---------------------------------------------------------------
 * 表は横に伸びるので、必ず自前のコンテナ内で横スクロールさせ、
 * ページ本体が横スクロールしないようにする
 */

.table-scroll {
  overflow-x: auto;
  border: var(--rule-hair) solid var(--color-rule);
  border-radius: var(--radius-md);
}

table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--text-sm);
}

th,
td {
  padding: var(--space-sm) var(--space-md);
  text-align: left;
  vertical-align: middle;
  border-bottom: var(--rule-hair) solid var(--color-rule);
}

thead th {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--text-xs);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-neutral);
  background: var(--color-paper-2);
  white-space: nowrap;
}

tbody tr:last-child td {
  border-bottom: 0;
}

.num {
  font-variant-numeric: tabular-nums;
  text-align: right;
}

.time {
  font-variant-numeric: tabular-nums;
  color: var(--color-muted);
  white-space: nowrap;
}

.empty {
  padding: var(--space-xl) var(--space-md);
  text-align: center;
  color: var(--color-muted);
  font-size: var(--text-sm);
}

/* --- 状態表示 -----------------------------------------------------------
 * 色だけで意味を運ばない。必ず文言を伴い、形(点の有無)でも区別できるようにする
 */

.state {
  display: inline-flex;
  align-items: center;
  gap: 0.4em;
  font-size: var(--text-xs);
  white-space: nowrap;
}

.state::before {
  content: '';
  width: 0.5em;
  height: 0.5em;
  border-radius: 50%;
  background: currentColor;
  flex: none;
}

.state--ok {
  color: var(--color-positive);
}

.state--warn {
  color: var(--color-caution);
}

.state--off {
  color: var(--color-neutral);
}

.state--off::before {
  background: none;
  border: var(--rule-hair) solid currentColor;
}

.tag {
  display: inline-block;
  padding: 0.1em 0.5em;
  border: var(--rule-hair) solid var(--color-rule-strong);
  border-radius: var(--radius-sm);
  font-size: var(--text-xs);
  color: var(--color-muted);
  white-space: nowrap;
}

/* --- 操作要素 ----------------------------------------------------------- */

/* `a.btn` を並べると特異度が .btn--primary を上回り、修飾クラスが効かなくなる。
 * ベースは .btn と button だけにして、修飾は同じ特異度で上書きできるようにする */
.btn,
button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.4em;
  min-height: 2.25rem;
  padding: 0.35rem 0.9rem;
  border: var(--rule-hair) solid var(--color-rule-strong);
  border-radius: var(--radius-md);
  background: var(--color-paper);
  color: var(--color-ink);
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
  text-decoration: none;
  cursor: pointer;
  transition: background-color var(--dur-micro) var(--ease-out),
    border-color var(--dur-micro) var(--ease-out), color var(--dur-micro) var(--ease-out);
}

.btn:hover:not(:disabled),
button:hover:not(:disabled) {
  background: var(--color-paper-2);
  border-color: var(--color-ink);
}

.btn:active:not(:disabled),
button:active:not(:disabled) {
  background: var(--color-paper-3);
}

.btn:disabled,
button:disabled {
  color: var(--color-neutral);
  border-color: var(--color-rule);
  background: var(--color-paper-2);
  cursor: not-allowed;
}

.btn--primary {
  background: var(--color-ink);
  border-color: var(--color-ink);
  color: var(--color-paper);
}

.btn--primary:hover:not(:disabled) {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: var(--color-paper);
}

.btn--danger {
  color: var(--color-danger);
  border-color: var(--color-rule-strong);
}

.btn--danger:hover:not(:disabled) {
  background: var(--color-danger-soft);
  border-color: var(--color-danger);
}

.btn--quiet {
  border-color: transparent;
  background: none;
  color: var(--color-muted);
  font-weight: 400;
}

.btn--quiet:hover:not(:disabled) {
  color: var(--color-ink);
  background: var(--color-paper-2);
  border-color: transparent;
}

/* 要素付きセレクタにすると .masthead__end のようなクラス修飾を特異度で上回り、
 * そちらの display / gap が黙って効かなくなる。クラスだけで書く */
.inline {
  display: inline;
}

.btn--block {
  width: 100%;
  min-height: 2.75rem;
}

.bar {
  display: flex;
  gap: var(--space-sm);
  align-items: center;
  flex-wrap: wrap;
  margin-top: var(--space-md);
}

/* --- ログイン ----------------------------------------------------------- */

.signin {
  display: grid;
  gap: var(--space-sm);
  max-width: 24rem;
  margin-top: var(--space-xl);
}

.signin__langs {
  margin: var(--space-xs) 0 0;
  text-align: right;
  font-size: var(--text-xs);
  color: var(--color-neutral);
}

/* --- 入力 --------------------------------------------------------------- */

input,
select {
  min-height: 2.25rem;
  padding: 0.35rem 0.6rem;
  border: var(--rule-hair) solid var(--color-rule-strong);
  border-radius: var(--radius-md);
  background: var(--color-paper);
  color: var(--color-ink);
  font-family: var(--font-body);
  font-size: var(--text-sm);
}

input:hover,
select:hover {
  border-color: var(--color-ink);
}

label {
  font-size: var(--text-sm);
  color: var(--color-muted);
}

.form {
  display: grid;
  grid-template-columns: minmax(0, auto) minmax(0, 1fr);
  gap: var(--space-sm) var(--space-md);
  align-items: center;
  max-width: 34rem;
  padding: var(--space-lg);
}

@media (max-width: 34rem) {
  .form {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--space-2xs);
  }

  .form label {
    margin-top: var(--space-sm);
  }
}

details.panel > summary {
  padding: var(--space-sm) var(--space-lg);
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--color-accent);
  cursor: pointer;
}

details.panel[open] > summary {
  border-bottom: var(--rule-hair) solid var(--color-rule);
}

/* --- 予定の一覧 --------------------------------------------------------- */

.day {
  margin: var(--space-lg) 0 var(--space-xs);
  padding-bottom: var(--space-2xs);
  border-bottom: var(--rule-hair) solid var(--color-rule);
  font-family: var(--font-display);
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--color-muted);
}

.row {
  display: flex;
  gap: var(--space-sm);
  align-items: center;
  flex-wrap: wrap;
  padding: var(--space-xs) var(--space-sm);
  margin-bottom: var(--space-2xs);
  border: var(--rule-hair) solid var(--color-rule);
  border-radius: var(--radius-md);
  background: var(--color-paper);
  font-size: var(--text-sm);
}

/* コピーは「元の予定ではない」ことが一目で分かる必要がある。
 * 面の色差だけだと色覚特性によっては伝わらないので、左端の刻みでも示す */
.row--copy {
  background: var(--color-paper-2);
  border-style: dashed;
}

/* 背景色は呼び出し側がカレンダーごとの濃色をインラインで入れる。
 * 前景を継承させると本文色(ほぼ黒)が乗ってコントラストが落ちるため面色で固定する */
.calbadge {
  padding: 0.1em 0.5em;
  border-radius: var(--radius-sm);
  border: var(--rule-hair) solid var(--color-rule-strong);
  color: var(--color-paper);
  font-size: var(--text-xs);
  white-space: nowrap;
}

.cols {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
  gap: var(--space-md);
}

/* --- アカウント / ポリシー / セキュリティ -------------------------------- */

.account {
  margin-bottom: var(--space-lg);
}

.account__name {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  flex-wrap: wrap;
  margin-bottom: var(--space-xs);
  font-size: var(--text-sm);
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--color-neutral);
}

.policy-form {
  margin-top: var(--space-md);
}

.form__note {
  padding: 0 var(--space-lg) var(--space-lg);
}

.security {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-md);
  flex-wrap: wrap;
  padding: var(--space-md) var(--space-lg);
}

.account__disconnect {
  display: inline-flex;
  align-items: center;
  gap: var(--space-sm);
  flex-wrap: wrap;
  margin-left: auto;
  font-weight: 400;
  text-transform: none;
  letter-spacing: normal;
}

.checkline {
  display: inline-flex;
  align-items: center;
  gap: 0.4em;
  font-size: var(--text-xs);
  color: var(--color-muted);
}

.checkline input {
  min-height: 0;
  margin: 0;
  accent-color: var(--color-accent);
}

/* 取り消せない操作は、通常の操作と同じ面に並べない */
.danger {
  padding: var(--space-lg);
  border-color: var(--color-danger);
  display: grid;
  gap: var(--space-md);
}

.danger__form {
  display: grid;
  gap: var(--space-xs);
  justify-items: start;
  max-width: 26rem;
}

.danger__form input[type='email'] {
  width: 100%;
}

.danger-note {
  margin-bottom: var(--space-xs);
  color: var(--color-danger);
}

/* --- ローカルデモ(DEV_FAKE 時のみ) -------------------------------------- */

.demo-block {
  padding: var(--space-lg);
  margin-bottom: var(--space-md);
}

.demo-block h2 {
  font-size: var(--text-md);
  margin-bottom: var(--space-sm);
}

/* 片側だけ太い罫を引くカード(side-stripe)は避け、全周のヘアラインで囲う */
.lead {
  padding: var(--space-sm) var(--space-md);
  border: var(--rule-hair) solid var(--color-rule-strong);
  background: var(--color-accent-soft);
  border-radius: var(--radius-md);
}

.pcal {
  font-weight: 400;
  font-size: var(--text-xs);
  color: var(--color-neutral);
}

.ev {
  padding: var(--space-xs) var(--space-sm);
  margin-bottom: var(--space-xs);
  border: var(--rule-hair) solid var(--color-rule);
  border-radius: var(--radius-md);
  background: var(--color-paper);
}

.ev--copy {
  background: var(--color-paper-2);
  border-style: dashed;
}

.ev-head {
  display: flex;
  gap: var(--space-xs);
  align-items: center;
  flex-wrap: wrap;
  font-size: var(--text-xs);
  color: var(--color-neutral);
}

.ev-line {
  display: flex;
  gap: var(--space-xs);
  margin: var(--space-2xs) 0;
}

.ev-line input[name='title'] {
  flex: 1;
  min-width: 0;
}

.add {
  display: flex;
  flex-direction: column;
  gap: var(--space-xs);
  margin-top: var(--space-xs);
}

/* --- 締め -------------------------------------------------------------- */

.colophon {
  max-width: var(--page-max);
  margin: 0 auto;
  padding: var(--space-lg) var(--page-gutter) var(--space-2xl);
  border-top: var(--rule-hair) solid var(--color-rule);
  color: var(--color-neutral);
  font-size: var(--text-xs);
}

.colophon a {
  color: var(--color-muted);
}

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* --- 法的文書 ----------------------------------------------------------- */

.legal {
  max-width: 46rem;
}

.legal__intro {
  margin-top: var(--space-lg);
  font-size: var(--text-md);
  color: var(--color-muted);
}

.legal__section {
  margin-top: var(--space-xl);
}

.legal__section h2 {
  font-size: var(--text-md);
  margin-bottom: var(--space-xs);
}

.legal__section p {
  margin-bottom: var(--space-sm);
  max-width: var(--measure);
}

.legal__section ul {
  margin: 0;
  padding-left: 1.2em;
}

.legal__section li {
  margin-bottom: var(--space-xs);
  max-width: var(--measure);
}

.legal__back {
  margin-top: var(--space-2xl);
  padding-top: var(--space-md);
  border-top: var(--rule-hair) solid var(--color-rule);
  font-size: var(--text-sm);
}

.foot-line__legal {
  margin-left: auto;
}
