/* LIFE-132 Palace Today — New-Tab daily board. Propshaft's `:app` link
   serves every stylesheet on every page, so nothing here may be global:
   tokens live on .t-body and element rules are scoped to .t-app. */
.t-body {
  --t-bg: #09090b;
  --t-panel: #111114;
  --t-panel-2: #17171b;
  --t-line: #26262c;
  --t-text: #d4d4d8;
  --t-dim: #8b8b94;
  --t-faint: #5d5d66;
  --t-accent: #8b9cf7;
  --t-red: #f87171;
  --t-orange: #fb923c;
  --t-yellow: #facc15;
  --t-green: #4ade80;
  --t-blue: #60a5fa;
  --t-purple: #c084fc;
  --t-brown: #c08a67;
  --t-gray: #71717a;
  --t-sidebar: 21rem;
  color-scheme: dark;
}

.t-body, .t-body * { box-sizing: border-box; }
.t-body {
  margin: 0; min-height: 100vh; background: var(--t-bg); color: var(--t-text);
  font: 14px/1.5 system-ui, -apple-system, "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", sans-serif;
}
.t-app a { color: inherit; text-decoration: none; }
.t-app a:hover { color: #fff; }
.t-app button, .t-app input, .t-app select, .t-app textarea { font: inherit; color: inherit; }

/* Header */
.t-header {
  position: sticky; top: 0; z-index: 5; display: flex; align-items: center; justify-content: space-between;
  gap: .75rem; padding: .6rem 1rem; background: rgba(9, 9, 11, .92); backdrop-filter: blur(6px);
  border-bottom: 1px solid var(--t-line);
}
.t-datenav { display: flex; align-items: center; gap: .4rem; flex-wrap: wrap; }
.t-date { margin: 0 .25rem; font-size: 1.15rem; font-weight: 650; letter-spacing: -.01em; color: #fafafa; }
.t-date--past { color: var(--t-yellow); }
.t-datepick input { background: transparent; border: 1px solid var(--t-line); border-radius: 6px; padding: .15rem .35rem; color: var(--t-dim); }
.t-header__right { display: flex; align-items: center; gap: .75rem; font-size: .85rem; }
.t-syncstate { color: var(--t-accent); font-size: .8rem; }

.t-iconbtn, .t-btn {
  display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--t-line);
  background: var(--t-panel-2); border-radius: 7px; cursor: pointer; line-height: 1;
}
.t-iconbtn { width: 2rem; height: 2rem; font-size: 1.1rem; }
.t-btn { padding: .4rem .7rem; font-size: .85rem; }
.t-btn:hover, .t-iconbtn:hover { border-color: #3f3f48; background: #1e1e24; color: #fff; }
.t-btn--sm { padding: .25rem .5rem; font-size: .78rem; }
.t-btn--primary { border-color: #4553a8; background: #1f2547; color: #dfe4ff; }
.t-link { color: var(--t-dim); }
.t-link:hover { color: #fff; }
.t-muted { color: var(--t-dim); font-size: .85rem; margin: .25rem 0; }

/* Layout: main + independently scrolling sidebar */
.t-layout {
  display: grid; grid-template-columns: minmax(0, 1fr) var(--t-sidebar); gap: 1.25rem;
  max-width: 82rem; margin: 0 auto; padding: 1rem;
}
.t-layout--nosidebar { grid-template-columns: minmax(0, 1fr); max-width: 54rem; }
.t-layout--nosidebar .t-sidebar { display: none; }
.t-main { min-width: 0; display: flex; flex-direction: column; gap: .9rem; }
.t-sidebar {
  position: sticky; top: 3.6rem; align-self: start; max-height: calc(100vh - 4.6rem); overflow-y: auto;
  display: flex; flex-direction: column; gap: .9rem; padding-right: .25rem;
}
@media (max-width: 1000px) {
  .t-layout { grid-template-columns: minmax(0, 1fr); }
  .t-sidebar { position: static; max-height: none; overflow: visible; }
}
.t-fill { display: flex; flex-direction: column; gap: .9rem; }
/* Cached snapshot painted before the live fill: readable; its controls answer
   with a "불러오는 중" toast (today-loader) until the fresh data (and fresh
   ids) replace it — except Week 만들기, which runs from the snapshot too. */
.t-fill--cached button, .t-fill--cached select, .t-fill--cached a { cursor: progress; }
.t-fill--cached form[data-weekly="week"] button { cursor: pointer; }
.t-fill--cached { opacity: .82; transition: opacity .15s; }

/* Sections */
.t-section, .t-side {
  background: var(--t-panel); border: 1px solid var(--t-line); border-radius: 12px; padding: .75rem .9rem;
}
.t-section__head, .t-side__head {
  display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .45rem;
  list-style: none; cursor: default;
}
summary.t-section__head { cursor: pointer; margin-bottom: 0; }
details[open] > summary.t-section__head { margin-bottom: .45rem; }
summary.t-section__head::-webkit-details-marker { display: none; }
summary.t-section__head .t-section__title::after { content: " ▾"; color: var(--t-faint); font-size: .8em; }
details:not([open]) > summary .t-section__title::after { content: " ▸"; }
.t-section__title, .t-side__head > span:first-child { font-weight: 650; color: #f4f4f5; }
.t-section__meta { display: flex; align-items: center; gap: .4rem; color: var(--t-dim); font-size: .78rem; flex-wrap: wrap; justify-content: flex-end; }
.t-theme { color: var(--t-text); font-style: italic; }
.t-fresh { color: var(--t-faint); font-size: .74rem; }
/* Sidebar ↻ (today-loader#refresh); spins until the refilled sidebar replaces it. */
.t-refresh {
  display: inline-flex; align-items: center; justify-content: center; padding: 0 .2rem; border: 0; background: none;
  color: var(--t-faint); font-size: .95rem; line-height: 1; cursor: pointer;
}
.t-refresh:hover, .t-refresh:focus-visible { color: #fff; }
.t-app .t-refresh:disabled { cursor: progress; opacity: 1; }
.t-refresh--spin { color: var(--t-accent); animation: t-spin .9s linear infinite; }
@media (pointer: coarse) { .t-refresh { padding: .25rem .45rem; font-size: 1.1rem; } }
.t-fresh--err { color: var(--t-orange); }

/* Chips & dots */
.t-chip {
  display: inline-flex; align-items: center; gap: .2rem; padding: .05rem .4rem; border-radius: 999px;
  font-size: .72rem; line-height: 1.4; border: 1px solid currentColor; opacity: .9; white-space: nowrap;
}
.t-dot { width: .5rem; height: .5rem; border-radius: 50%; flex: none; background: var(--t-gray); display: inline-block; }
.t-chip--red { color: var(--t-red); } .t-dot--red { background: var(--t-red); }
.t-chip--orange { color: var(--t-orange); } .t-dot--orange { background: var(--t-orange); }
.t-chip--yellow { color: var(--t-yellow); } .t-dot--yellow { background: var(--t-yellow); }
.t-chip--green { color: var(--t-green); } .t-dot--green { background: var(--t-green); }
.t-chip--blue { color: var(--t-blue); } .t-dot--blue { background: var(--t-blue); }
.t-chip--purple { color: var(--t-purple); } .t-dot--purple { background: var(--t-purple); }
.t-chip--brown { color: var(--t-brown); } .t-dot--brown { background: var(--t-brown); }
.t-chip--gray { color: var(--t-gray); } .t-dot--gray { background: var(--t-gray); }
/* 이월 횟수: the one filled chip, so it never reads as another outline badge. */
.t-chip--carry {
  color: #fff; background: #760000; border-color: transparent; opacity: 1;
  font-weight: 200; font-variant-numeric: tabular-nums; letter-spacing: .01em;
}
/* A row's link chips (LIFE-135, today/_link_chip): a Linear ID (purple) or
   an MS-Todo title (blue, ellipsised) opening the target (`.t-app a` would
   recolour them); a broken link — its target no longer synced — is dashed. */
.t-app a.t-chip--link.t-chip--purple { color: var(--t-purple); }
.t-app a.t-chip--link.t-chip--purple:hover, .t-app a.t-chip--link.t-chip--purple:focus-visible { color: var(--t-purple); background: rgba(192, 132, 252, .14); opacity: 1; }
.t-app .t-chip--link.t-chip--blue { max-width: 11rem; }
.t-app a.t-chip--link.t-chip--blue { color: var(--t-blue); }
.t-app a.t-chip--link.t-chip--blue:hover, .t-app a.t-chip--link.t-chip--blue:focus-visible {
  color: var(--t-blue); background: color-mix(in srgb, var(--t-blue) 14%, transparent); opacity: 1;
}
.t-chip--broken { border-style: dashed; opacity: .7; }
.t-chip--broken .t-chip__text { text-decoration: line-through; text-decoration-color: var(--t-faint); }
.t-chip__text { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 560px) { .t-app .t-chip--link.t-chip--blue { max-width: 8rem; } }

/* Objectives */
.t-objlist { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: .35rem .9rem; }
.t-obj { display: flex; align-items: center; gap: .4rem; font-size: .88rem; max-width: 100%; }
/* An Objective's link chips (LIFE-135), after its 상태 chip. */
.t-obj__links { display: inline-flex; flex-wrap: wrap; gap: .25rem; min-width: 0; }
.t-obj__links:empty { display: none; }
.t-obj__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.t-obj--done .t-obj__title { color: var(--t-faint); text-decoration: line-through; }
/* The card's writes (today-weekly): Week 만들기, the inline add, pending rows. */
.t-weekadd { display: flex; align-items: center; gap: .4rem .6rem; flex-wrap: wrap; }
.t-weekadd .t-muted { margin: 0; }
.t-weekadd .t-btn[aria-busy] { cursor: progress; gap: .35rem; }
.t-weekadd .t-btn .t-spinner { width: .75rem; height: .75rem; }
.t-obj--empty { color: var(--t-dim); font-size: .85rem; }
.t-objlist:has(.t-ghost) .t-obj--empty { display: none; }
.t-objadd__toggle {
  border: 1px dashed var(--t-line); border-radius: 999px; background: none; color: var(--t-faint);
  padding: .1rem .5rem; font-size: .76rem; line-height: 1.3; cursor: pointer;
}
.t-objadd__toggle:hover, .t-objadd__toggle[aria-expanded="true"] { color: var(--t-dim); border-color: #3f3f48; }
.t-objadd { display: flex; gap: .4rem; margin-top: .5rem; }
.t-objadd[hidden] { display: none; }
.t-objadd .t-input { flex: 1; min-width: 0; padding: .3rem .55rem; font-size: .85rem; }
.t-obj.t-ghost .t-obj__title { color: var(--t-dim); }
.t-obj[aria-busy] .t-obj__title { cursor: progress; }
.t-obj--actions { gap: .4rem; flex-wrap: wrap; }
@media (pointer: coarse) { .t-objadd__toggle { padding: .3rem .65rem; font-size: .82rem; } }
/* Last week's open Objectives to carry (under Week 만들기, or behind
   "지난주 Objective N개 가져오기"): a compact checklist, all checked; a
   carried one reads "가져오는 중…" until the card re-renders. */
.t-carrypick { flex-basis: 100%; min-width: 0; margin: .15rem 0 0; padding: 0; border: 0; display: flex; flex-direction: column; gap: .1rem; }
.t-carrypick__head { padding: 0; margin-bottom: .15rem; color: var(--t-dim); font-size: .76rem; }
.t-carrypick__item { display: flex; align-items: center; gap: .45rem; min-width: 0; padding: .15rem .1rem; border-radius: 6px; font-size: .86rem; cursor: pointer; }
.t-carrypick__item:hover { background: #18181d; }
.t-carrypick__item input { flex: none; width: .95rem; height: .95rem; margin: 0; accent-color: var(--t-accent); }
.t-carrypick__title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.t-carrypick__item:has(input:not(:checked)) .t-carrypick__title { color: var(--t-faint); }
.t-carrypick__item[aria-busy] { cursor: progress; }
.t-carrypick__item .t-ghost__note { flex: none; }
.t-objcarry { display: flex; flex-direction: column; gap: .45rem; margin-top: .55rem; padding-top: .5rem; border-top: 1px solid #1b1b20; }
.t-objcarry[hidden] { display: none; }
.t-objcarry__actions { display: flex; gap: .4rem; }
@media (pointer: coarse) {
  .t-carrypick__item { padding: .45rem .2rem; }
  .t-carrypick__item input { width: 1.15rem; height: 1.15rem; }
}

/* Tasks (routine + sidebar) */
.t-tasks, .t-clist, .t-events, .t-issues, .t-inclist, .t-blocks { list-style: none; margin: 0; padding: 0; }
.t-task { display: flex; align-items: center; gap: .5rem; padding: .28rem 0; border-top: 1px solid #1b1b20; }
.t-task:first-child { border-top: 0; }
.t-task__form { display: contents; }
/* The title keeps its own width so the 📝 mark sits right after it. */
.t-task__title { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.t-task__memo { flex: none; font-size: .72rem; opacity: .75; cursor: help; }
.t-task__meta { display: flex; gap: .35rem; color: var(--t-dim); font-size: .76rem; flex: none; margin-left: auto; }
.t-overdue, .t-task--overdue .t-task__title { color: var(--t-red); }
.t-check {
  width: 1.05rem; height: 1.05rem; border-radius: 4px; border: 1.5px solid #52525b; background: transparent;
  cursor: pointer; flex: none; padding: 0;
}
.t-check:hover { border-color: var(--t-green); background: rgba(74, 222, 128, .12); }
.t-check--on { background: var(--t-green); border-color: var(--t-green); }
.t-check--on::after { content: "✓"; color: #052e12; font-size: .75rem; font-weight: 800; display: block; line-height: 1; }
.t-check:disabled { opacity: .35; cursor: default; }
.t-busy { pointer-events: none; }
.t-busy .t-c__title, .t-busy .t-task__title { opacity: .7; }
.t-pending { display: inline-flex; align-items: center; gap: .35rem; color: var(--t-accent); font-size: .75rem; white-space: nowrap; }
.t-pending .t-spinner { width: .75rem; height: .75rem; }
/* Optimistic writes (today-optimistic): the row already shows its new state;
   its locked controls keep full contrast and a dot pulses until it answers. */
.t-app [data-row-id][hidden] { display: none; }
.t-app [data-t-locked]:disabled { opacity: 1; cursor: progress; }
.t-syncdot { flex: none; width: .4rem; height: .4rem; border-radius: 50%; background: var(--t-accent); animation: t-pulse 1.2s ease-in-out infinite; }
@keyframes t-pulse { 50% { opacity: .25; } }
.t-ghost .t-check { cursor: default; opacity: .35; }
.t-ghost .t-c__title { color: var(--t-dim); }
.t-ghost__note { color: var(--t-accent); font-size: .75rem; }

/* Journal */
.t-capture { display: flex; gap: .5rem; align-items: flex-start; margin-bottom: .5rem; }
.t-capture__input, .t-input {
  flex: 1; min-width: 0; resize: none; background: var(--t-bg); border: 1px solid var(--t-line); border-radius: 8px;
  padding: .5rem .65rem; outline: none;
}
.t-capture__input:focus, .t-input:focus { border-color: #4553a8; box-shadow: 0 0 0 2px rgba(139, 156, 247, .15); }
.t-block { display: flex; gap: .65rem; padding: .35rem 0; border-top: 1px solid #1b1b20; }
.t-block:first-child { border-top: 0; }
.t-block__time { flex: none; width: 2.8rem; color: var(--t-accent); font-variant-numeric: tabular-nums; font-size: .82rem; padding-top: .05rem; }
.t-block__body { min-width: 0; }
.t-app a.t-journal__link { color: var(--t-accent); text-decoration: underline; text-underline-offset: .15em; overflow-wrap: anywhere; }
.t-app a.t-journal__link:hover { color: var(--t-text); }
.t-app a.t-journal__link:focus-visible { outline: 2px solid var(--t-accent); outline-offset: 2px; }
.t-block__label { display: block; color: #f4f4f5; font-weight: 600; font-size: .86rem; }
.t-block__text { margin: 0; white-space: normal; word-break: break-word; color: var(--t-text); font-size: .86rem; }
.t-block__line { position: relative; margin-inline-start: calc(var(--journal-depth) * 1.75em); white-space: pre-wrap; overflow-wrap: anywhere; }
.t-block__line--bullet::before { content: ""; position: absolute; inset-inline-start: -.85em; top: .65em; width: .25em; height: .25em; border-radius: 50%; background: var(--t-faint); }
.t-more { display: inline-block; margin-top: .35rem; font-size: .8rem; }

/* Commitments. Status groups (today-group): the head toggles the rows and
   takes drops (today-sortable); an empty group shows a slim drop zone. */
.t-group + .t-group { margin-top: .3rem; }
/* The head sits on its own band so the groups read apart from the rows. */
.t-group__head { margin: .15rem 0; border-radius: 6px; background: #1c1c1c; }
.t-group__toggle {
  display: flex; align-items: center; gap: .4rem; width: 100%; padding: .28rem .45rem; border: 0; border-radius: 6px;
  background: none; color: var(--t-dim); font-size: .74rem; text-transform: uppercase; letter-spacing: .04em;
  text-align: left; cursor: pointer;
}
.t-group__toggle:hover { color: #fff; background: #232323; }
.t-group__caret::before { content: "▼"; display: inline-block; width: .7rem; color: var(--t-faint); font-size: .58rem; }
.t-group--collapsed .t-group__caret::before { content: "▶"; }
.t-group__count { color: var(--t-faint); font-variant-numeric: tabular-nums; }
.t-group--collapsed > .t-clist { display: none; }
/* A row dragged over a head sits in it (Sortable) hidden; the head lights up. */
.t-group__head > .t-c { display: none; }
.t-group__head:has(> .t-c) .t-group__toggle { color: #fff; background: rgba(139, 156, 247, .1); outline: 1px dashed #4553a8; outline-offset: -1px; }
.t-dropzone { margin: .1rem 0 .2rem 1.1rem; padding: .1rem .5rem; border: 1px dashed var(--t-line); border-radius: 6px; color: var(--t-faint); font-size: .72rem; }
.t-clist:has(> .t-c) > .t-dropzone { display: none; }
.t-c { display: flex; align-items: center; gap: .55rem; padding: .35rem .15rem; border-top: 1px solid #1b1b20; }
.t-clist .t-c:first-child, .t-clist .t-dropzone + .t-c { border-top: 0; }
.t-c__done { display: contents; }
.t-c__body { flex: 1; min-width: 0; display: flex; align-items: center; gap: .45rem; flex-wrap: wrap; }
.t-c__title { font-weight: 500; cursor: pointer; outline: none; }
.t-c__title:focus-visible { border-radius: 4px; box-shadow: 0 0 0 2px rgba(139, 156, 247, .35); }
.t-app .t-c__inline-link {
  color: var(--t-blue); text-decoration: underline; text-decoration-thickness: .08em;
  text-underline-offset: .14em; cursor: pointer;
}
.t-app .t-c__inline-link:hover, .t-app .t-c__inline-link:focus-visible { color: #93c5fd; }
.t-c__chips { display: inline-flex; gap: .3rem; flex-wrap: wrap; }
.t-c--done .t-c__title, .t-c--dropped .t-c__title { color: var(--t-faint); text-decoration: line-through; }
.t-c--deferred .t-c__title, .t-c--carryover .t-c__title { color: var(--t-dim); }
/* 계획성 is a yes/no: only an Unplanned row shows the bolt. */
.t-unplanned { font-size: .8rem; line-height: 1; filter: saturate(.8); cursor: default; }
/* Drag reorder (today-sortable): the grip is the only handle. Subtle until
   the row is hovered; a wider target on touch screens. */
.t-grip {
  flex: none; align-self: stretch; display: inline-flex; align-items: center; justify-content: center;
  width: 1rem; margin: -.35rem -.25rem -.35rem -.15rem; padding: 0; border: 0; background: none;
  color: var(--t-faint); font-size: .78rem; letter-spacing: -1.25em; line-height: 1;
  cursor: grab; touch-action: none; user-select: none; -webkit-user-select: none; opacity: .5;
}
.t-c:hover .t-grip, .t-grip:focus-visible { opacity: 1; color: var(--t-dim); }
.t-app .t-grip:disabled { cursor: progress; opacity: .25; }
.t-sort-chosen .t-grip { cursor: grabbing; color: var(--t-accent); opacity: 1; }
.t-sort-placeholder { background: rgba(139, 156, 247, .07); outline: 1px dashed #4553a8; outline-offset: -1px; border-radius: 6px; }
.t-sort-placeholder > * { visibility: hidden; }
.t-c.t-sort-drag {
  background: var(--t-panel-2); border: 1px solid #4553a8; border-radius: 8px;
  box-shadow: 0 10px 28px rgba(0, 0, 0, .55); opacity: .96 !important;
}
@media (pointer: coarse) {
  .t-grip { width: 1.9rem; margin-right: -.45rem; font-size: 1rem; opacity: .75; }
}
.t-select {
  background: var(--t-panel-2); border: 1px solid var(--t-line); border-radius: 6px; padding: .2rem .35rem; font-size: .78rem;
}
.t-select--blue { color: var(--t-blue); } .t-select--green { color: var(--t-green); } .t-select--yellow { color: var(--t-yellow); }
.t-select--red { color: var(--t-red); } .t-select--orange { color: var(--t-orange); }
.t-select--purple { color: var(--t-purple); } .t-select--brown { color: var(--t-brown); } .t-select--gray { color: #a1a1aa; }
/* Title + 추가 only: 중요도 / 계획성 are edited afterwards in the modal. */
.t-quickadd { display: flex; gap: .4rem; margin-top: .6rem; }
.t-quickadd .t-input { flex: 1; min-width: 0; padding: .35rem .6rem; }

/* Commitment edit modal (today-modal); a bottom sheet on a phone. */
/* margin: auto centres the modal <dialog>; Tailwind's preflight (loaded on
   every page) zeroes it. */
.t-modal {
  width: min(28rem, calc(100vw - 2rem)); margin: auto; padding: 0; border: 1px solid var(--t-line); border-radius: 12px;
  background: var(--t-panel); color: var(--t-text); box-shadow: 0 18px 48px rgba(0, 0, 0, .6);
}
.t-modal::backdrop { background: rgba(0, 0, 0, .55); }
.t-modal__form { display: flex; flex-direction: column; gap: .75rem; padding: 1rem; }
.t-modal__title { margin: 0; font-size: .95rem; font-weight: 650; color: #f4f4f5; }
.t-field { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: .25rem; color: var(--t-dim); font-size: .74rem; }
.t-field .t-input, .t-field .t-select { font-size: .88rem; padding: .45rem .55rem; }
.t-modal__row { display: flex; gap: .6rem; flex-wrap: wrap; }
.t-modal__foot { display: flex; align-items: center; justify-content: space-between; gap: .5rem; flex-wrap: wrap; font-size: .85rem; }
.t-modal__actions { display: flex; gap: .4rem; }
.t-modal__foot > .t-link { margin-left: auto; }
@media (max-width: 560px) {
  .t-modal { width: 100%; max-width: 100%; margin: auto 0 0; border-radius: 14px 14px 0 0; }
  .t-modal__row { flex-direction: column; }
  .t-modal__actions .t-btn { padding: .55rem 1rem; }
}
/* Its Objective field (today-objpick): the week's objectives as toggle
   chips — a checkbox each, the 중요도 dot, the title. */
.t-objpick__list { display: flex; flex-wrap: wrap; gap: .3rem; }
.t-objpick__opt {
  display: inline-flex; align-items: center; gap: .35rem; max-width: 100%; padding: .2rem .55rem .2rem .35rem;
  border: 1px solid var(--t-line); border-radius: 999px; color: var(--t-dim); font-size: .8rem; cursor: pointer;
}
.t-objpick__opt input { position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; pointer-events: none; }
.t-objpick__opt::before { content: "＋"; flex: none; width: .8rem; color: var(--t-faint); font-size: .72rem; text-align: center; }
.t-objpick__opt--on { border-color: #4553a8; background: rgba(139, 156, 247, .12); color: var(--t-text); }
.t-objpick__opt--on::before { content: "✓"; color: var(--t-accent); }
.t-objpick__opt:hover { border-color: #3f3f48; color: #fff; }
.t-objpick__opt:has(input:focus-visible) { outline: 2px solid var(--t-accent); outline-offset: 1px; }
.t-objpick__name { min-width: 0; max-width: 16rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.t-objpick__empty { color: var(--t-faint); font-size: .8rem; }
@media (pointer: coarse) { .t-objpick__opt { padding: .45rem .7rem .45rem .5rem; } }
@media (max-width: 560px) { .t-objpick__name { max-width: 12rem; } }
/* The shared link picker (links-picker, LIFE-135): the anchor's links as
   chips — Linear ID (purple), MS-Todo title (blue), a broken one dashed —
   over one typeahead across both kinds. The suggestions sit in the flow
   (the sheet grows) rather than floating past a phone's bottom edge. */
.t-links__chips { display: flex; flex-wrap: wrap; gap: .3rem; }
.t-links__chip {
  display: inline-flex; align-items: center; gap: .35rem; max-width: 100%; padding: .1rem .15rem .1rem .5rem;
  border: 1px solid var(--t-line); border-radius: 999px; background: var(--t-panel-2); color: var(--t-text); font-size: .8rem;
}
.t-links__chip--linear { border-color: #4c3566; background: rgba(192, 132, 252, .08); }
.t-links__chip--linear .t-links__display { color: var(--t-purple); font-variant-numeric: tabular-nums; }
.t-links__chip--ms-todo { border-color: color-mix(in srgb, var(--t-blue) 45%, transparent); background: color-mix(in srgb, var(--t-blue) 9%, transparent); }
.t-links__chip--ms-todo .t-links__display { max-width: 16rem; }
.t-links__chip--broken { border-style: dashed; opacity: .75; }
.t-links__chip--broken .t-links__display { text-decoration: line-through; text-decoration-color: var(--t-faint); }
.t-links__display, .t-links__name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.t-links__display { flex: none; }
.t-links__chip .t-links__name { max-width: 13rem; color: var(--t-dim); }
.t-links__remove {
  flex: none; display: inline-flex; align-items: center; justify-content: center; width: 1.3rem; height: 1.3rem;
  padding: 0; border: 0; border-radius: 50%; background: none; color: var(--t-dim); font-size: .95rem; line-height: 1; cursor: pointer;
}
.t-links__remove:hover, .t-links__remove:focus-visible { background: #2a2a31; color: #fff; }
.t-links__list {
  list-style: none; margin: 0; padding: .2rem; max-height: 13rem; overflow-y: auto;
  border: 1px solid var(--t-line); border-radius: 8px; background: var(--t-panel-2);
}
.t-links__opt { display: flex; align-items: center; gap: .45rem; padding: .35rem .45rem; border-radius: 6px; color: var(--t-text); font-size: .84rem; cursor: pointer; }
.t-links__opt .t-links__name { flex: 1; }
.t-links__opt .t-links__display { max-width: 14rem; }
.t-links__opt--active { background: rgba(139, 156, 247, .16); }
.t-links__opt--closed { opacity: .55; }
.t-links__opt--closed .t-links__display { text-decoration: line-through; }
.t-links__kind { flex: none; padding: 0 .35rem; border-radius: 4px; font-size: .66rem; letter-spacing: .02em; }
.t-links__kind--linear { color: var(--t-purple); background: rgba(192, 132, 252, .12); }
.t-links__kind--ms-todo { color: var(--t-blue); background: color-mix(in srgb, var(--t-blue) 12%, transparent); }
.t-links__meta { flex: none; max-width: 9rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--t-faint); font-size: .72rem; font-variant-numeric: tabular-nums; }
.t-links__empty { padding: .35rem .45rem; color: var(--t-faint); font-size: .8rem; }
@media (pointer: coarse) {
  .t-links__remove { width: 1.8rem; height: 1.8rem; }
  .t-links__opt { padding: .6rem .5rem; }
}
@media (max-width: 560px) {
  .t-links__chip .t-links__name, .t-links__chip--ms-todo .t-links__display { max-width: 9rem; }
  .t-links__list { max-height: 35vh; }
  .t-links__meta { display: none; }
}

/* MS-Todo task edit dialog (today-todo): the .t-modal with an 알림 date +
   time row (one line on a phone too) and a multi-line 메모. */
.t-todo__when { display: flex; align-items: center; gap: .4rem; }
.t-todo__when input[type=date] { flex: 1 1 9rem; min-width: 0; }
.t-todo__when input[type=time] { flex: 1 1 6.5rem; min-width: 0; }
.t-todo__when .t-btn { flex: none; }
.t-field .t-todo__memo { resize: vertical; min-height: 5.5rem; line-height: 1.45; }
.t-todo__memo[readonly] { color: var(--t-dim); cursor: default; }
.t-todo__hint { color: var(--t-faint); font-size: .72rem; }
@media (pointer: coarse) { .t-todo__when .t-btn { padding: .45rem .7rem; } }

/* Carryover */
.t-carryover { border-color: #4a3220; }
.t-carry { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .4rem; padding: .4rem 0; border-top: 1px solid #1b1b20; }
.t-carry:first-child { border-top: 0; }
/* The title keeps a real width: on a narrow screen the actions wrap below it
   instead of squeezing it into a one-word column. */
.t-carry__main { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .45rem; min-width: 0; flex: 1 1 14rem; }
.t-carry__main .t-c__title { flex: 1 1 10rem; min-width: 0; overflow-wrap: anywhere; }
.t-carry__actions { display: flex; gap: .3rem; flex-wrap: wrap; }
.t-carry__actions form { display: inline; margin: 0; }

/* Incubator */
.t-inc { display: flex; align-items: center; gap: .45rem; padding: .25rem 0; flex-wrap: wrap; font-size: .86rem; }

/* Sidebar */
.t-event { display: flex; align-items: center; gap: .45rem; padding: .3rem 0; border-top: 1px solid #1b1b20; font-size: .86rem; }
.t-event:first-child { border-top: 0; }
.t-event__time { flex: none; width: 5.6rem; color: var(--t-accent); font-variant-numeric: tabular-nums; font-size: .78rem; }
.t-event__title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.t-issue { display: flex; align-items: center; gap: .45rem; padding: .28rem 0; border-top: 1px solid #1b1b20; font-size: .85rem; }
.t-issue:first-child { border-top: 0; }
.t-issue--pinned { background: rgba(192, 132, 252, .06); }
.t-issue__id { flex: none; color: var(--t-dim); font-size: .74rem; font-variant-numeric: tabular-nums; }
.t-issue__title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Loading / errors / toasts */
.t-loading { display: flex; align-items: center; gap: .55rem; color: var(--t-dim); font-size: .85rem; padding: .9rem; border: 1px dashed var(--t-line); border-radius: 12px; }
.t-spinner { width: .95rem; height: .95rem; border-radius: 50%; border: 2px solid #3f3f46; border-top-color: var(--t-accent); animation: t-spin .8s linear infinite; }
@keyframes t-spin { to { transform: rotate(360deg); } }
.t-unavailable { color: var(--t-orange); font-size: .85rem; padding: .75rem; border: 1px dashed #4a3220; border-radius: 12px; display: flex; gap: .6rem; align-items: center; }
.t-toasts { position: fixed; right: 1rem; bottom: 1rem; display: flex; flex-direction: column; gap: .4rem; z-index: 20; max-width: 24rem; }
.t-toast { padding: .6rem .8rem; border-radius: 9px; background: #1c1c22; border: 1px solid var(--t-line); font-size: .85rem; cursor: pointer; box-shadow: 0 6px 24px rgba(0, 0, 0, .4); }
.t-toast--error { border-color: #7f1d1d; color: #fecaca; }
.t-toast--ok { border-color: #14532d; color: #bbf7d0; }
.t-toast--info { border-color: #4553a8; color: #dfe4ff; }

/* Upcoming uses the existing calendar card and one compact line per event. */
.t-upcoming { margin-top: .7rem; padding-top: .65rem; border-top: 1px solid var(--t-line); min-width: 0; }
.t-upcoming__head { display: flex; align-items: baseline; justify-content: space-between; gap: .5rem; margin-bottom: .35rem; }
.t-upcoming__head h3 { margin: 0; color: #f4f4f5; font-size: .86rem; font-weight: 650; }
.t-upcoming__when { flex: none; white-space: nowrap; color: var(--t-accent); font-variant-numeric: tabular-nums; font-size: .78rem; }
.t-upcoming__events .t-event { min-width: 0; }
.t-upcoming__notice { font-size: .78rem; }
