/* ─── Tailwind v4 Palette ────────────────────────────────────────────────── */
/* Required so var(--color-*) references from the Go compiler resolve.        */

:root {
  --color-white: oklch(1 0 0);
  --color-black: oklch(0 0 0);

  --color-slate-50:  oklch(0.984 0.003 247.858);
  --color-slate-100: oklch(0.968 0.007 247.896);
  --color-slate-200: oklch(0.929 0.013 255.508);
  --color-slate-300: oklch(0.869 0.022 252.894);
  --color-slate-400: oklch(0.704 0.04  256.788);
  --color-slate-500: oklch(0.554 0.046 257.417);
  --color-slate-600: oklch(0.446 0.043 257.281);
  --color-slate-700: oklch(0.372 0.044 257.287);
  --color-slate-800: oklch(0.279 0.041 260.031);
  --color-slate-900: oklch(0.208 0.042 265.755);
  --color-slate-950: oklch(0.129 0.042 264.695);

  --color-gray-50:  oklch(0.985 0.002 247.839);
  --color-gray-100: oklch(0.967 0.003 264.542);
  --color-gray-200: oklch(0.928 0.006 264.531);
  --color-gray-300: oklch(0.872 0.01  258.338);
  --color-gray-400: oklch(0.707 0.022 264.436);
  --color-gray-500: oklch(0.551 0.023 264.364);
  --color-gray-600: oklch(0.446 0.03  256.802);
  --color-gray-700: oklch(0.373 0.034 259.733);
  --color-gray-800: oklch(0.278 0.033 256.848);
  --color-gray-900: oklch(0.21  0.034 264.665);
  --color-gray-950: oklch(0.13  0.028 261.692);

  --color-zinc-50:  oklch(0.985 0.002 247.839);
  --color-zinc-100: oklch(0.967 0.001 286.375);
  --color-zinc-200: oklch(0.92  0.004 286.32);
  --color-zinc-300: oklch(0.871 0.006 286.286);
  --color-zinc-400: oklch(0.705 0.015 286.067);
  --color-zinc-500: oklch(0.552 0.016 285.938);
  --color-zinc-600: oklch(0.442 0.017 285.786);
  --color-zinc-700: oklch(0.37  0.013 285.805);
  --color-zinc-800: oklch(0.274 0.006 286.033);
  --color-zinc-900: oklch(0.21  0.006 285.885);
  --color-zinc-950: oklch(0.141 0.005 285.823);

  --color-red-50:  oklch(0.971 0.013 17.38);
  --color-red-100: oklch(0.936 0.032 17.717);
  --color-red-200: oklch(0.885 0.062 18.334);
  --color-red-300: oklch(0.808 0.114 19.571);
  --color-red-400: oklch(0.704 0.191 22.216);
  --color-red-500: oklch(0.637 0.237 25.331);
  --color-red-600: oklch(0.577 0.245 27.325);
  --color-red-700: oklch(0.505 0.213 27.518);
  --color-red-800: oklch(0.444 0.177 26.899);
  --color-red-900: oklch(0.396 0.141 25.723);
  --color-red-950: oklch(0.258 0.092 26.042);

  --color-orange-50:  oklch(0.98  0.016 73.684);
  --color-orange-100: oklch(0.954 0.038 75.164);
  --color-orange-200: oklch(0.901 0.076 70.697);
  --color-orange-300: oklch(0.837 0.128 66.29);
  --color-orange-400: oklch(0.75  0.183 55.934);
  --color-orange-500: oklch(0.705 0.191 41.116);
  --color-orange-600: oklch(0.646 0.222 41.116);
  --color-orange-700: oklch(0.553 0.195 38.402);
  --color-orange-800: oklch(0.47  0.157 37.304);
  --color-orange-900: oklch(0.408 0.123 38.172);
  --color-orange-950: oklch(0.266 0.079 36.259);

  --color-amber-50:  oklch(0.987 0.022 95.277);
  --color-amber-100: oklch(0.962 0.059 95.617);
  --color-amber-200: oklch(0.924 0.12  95.746);
  --color-amber-300: oklch(0.879 0.169 91.605);
  --color-amber-400: oklch(0.828 0.189 84.429);
  --color-amber-500: oklch(0.769 0.188 70.08);
  --color-amber-600: oklch(0.666 0.179 58.318);
  --color-amber-700: oklch(0.555 0.163 48.998);
  --color-amber-800: oklch(0.473 0.137 46.201);
  --color-amber-900: oklch(0.414 0.112 45.904);
  --color-amber-950: oklch(0.279 0.077 45.635);

  --color-yellow-50:  oklch(0.987 0.026 102.212);
  --color-yellow-100: oklch(0.973 0.071 103.193);
  --color-yellow-200: oklch(0.945 0.129 101.54);
  --color-yellow-300: oklch(0.905 0.182 98.111);
  --color-yellow-400: oklch(0.852 0.199 91.936);
  --color-yellow-500: oklch(0.795 0.184 86.047);
  --color-yellow-600: oklch(0.681 0.162 75.834);
  --color-yellow-700: oklch(0.554 0.135 66.442);
  --color-yellow-800: oklch(0.476 0.114 61.907);
  --color-yellow-900: oklch(0.421 0.095 57.708);
  --color-yellow-950: oklch(0.286 0.066 53.813);

  --color-green-50:  oklch(0.982 0.018 155.826);
  --color-green-100: oklch(0.962 0.044 156.743);
  --color-green-200: oklch(0.925 0.084 155.995);
  --color-green-300: oklch(0.871 0.15  154.449);
  --color-green-400: oklch(0.792 0.209 151.711);
  --color-green-500: oklch(0.723 0.219 149.579);
  --color-green-600: oklch(0.627 0.194 149.214);
  --color-green-700: oklch(0.527 0.154 150.069);
  --color-green-800: oklch(0.448 0.119 151.328);
  --color-green-900: oklch(0.393 0.095 152.535);
  --color-green-950: oklch(0.266 0.065 152.934);

  --color-teal-50:  oklch(0.984 0.014 180.72);
  --color-teal-100: oklch(0.953 0.051 180.801);
  --color-teal-200: oklch(0.91  0.096 180.426);
  --color-teal-300: oklch(0.855 0.138 181.071);
  --color-teal-400: oklch(0.777 0.152 181.912);
  --color-teal-500: oklch(0.704 0.14  182.503);
  --color-teal-600: oklch(0.6   0.118 184.704);
  --color-teal-700: oklch(0.511 0.096 186.391);
  --color-teal-800: oklch(0.437 0.078 188.216);
  --color-teal-900: oklch(0.386 0.063 188.416);
  --color-teal-950: oklch(0.277 0.046 192.524);

  --color-blue-50:  oklch(0.97  0.014 254.604);
  --color-blue-100: oklch(0.932 0.032 255.585);
  --color-blue-200: oklch(0.882 0.059 254.128);
  --color-blue-300: oklch(0.809 0.105 251.813);
  --color-blue-400: oklch(0.707 0.165 254.624);
  --color-blue-500: oklch(0.623 0.214 259.815);
  --color-blue-600: oklch(0.546 0.245 262.881);
  --color-blue-700: oklch(0.488 0.243 264.376);
  --color-blue-800: oklch(0.424 0.199 265.638);
  --color-blue-900: oklch(0.379 0.146 265.522);
  --color-blue-950: oklch(0.282 0.091 267.935);

  --color-indigo-50:  oklch(0.962 0.018 272.314);
  --color-indigo-100: oklch(0.93  0.034 272.788);
  --color-indigo-200: oklch(0.87  0.065 274.039);
  --color-indigo-300: oklch(0.785 0.115 274.713);
  --color-indigo-400: oklch(0.673 0.182 276.935);
  --color-indigo-500: oklch(0.585 0.233 277.117);
  --color-indigo-600: oklch(0.511 0.262 276.966);
  --color-indigo-700: oklch(0.457 0.24  277.023);
  --color-indigo-800: oklch(0.398 0.195 277.366);
  --color-indigo-900: oklch(0.359 0.144 278.697);
  --color-indigo-950: oklch(0.257 0.09  281.288);

  --color-violet-50:  oklch(0.969 0.016 293.756);
  --color-violet-100: oklch(0.943 0.029 294.588);
  --color-violet-200: oklch(0.894 0.057 293.283);
  --color-violet-300: oklch(0.811 0.111 293.571);
  --color-violet-400: oklch(0.702 0.183 293.541);
  --color-violet-500: oklch(0.606 0.25  292.717);
  --color-violet-600: oklch(0.541 0.281 293.009);
  --color-violet-700: oklch(0.491 0.27  292.581);
  --color-violet-800: oklch(0.432 0.232 292.759);
  --color-violet-900: oklch(0.38  0.189 293.745);
  --color-violet-950: oklch(0.283 0.141 291.089);

  --color-pink-50:  oklch(0.971 0.014 343.198);
  --color-pink-100: oklch(0.948 0.028 342.258);
  --color-pink-200: oklch(0.899 0.061 343.231);
  --color-pink-300: oklch(0.823 0.12  346.018);
  --color-pink-400: oklch(0.718 0.202 349.761);
  --color-pink-500: oklch(0.656 0.241 354.308);
  --color-pink-600: oklch(0.592 0.249 0.584);
  --color-pink-700: oklch(0.525 0.223 3.958);
  --color-pink-800: oklch(0.459 0.187 3.815);
  --color-pink-900: oklch(0.408 0.153 2.432);
  --color-pink-950: oklch(0.284 0.109 3.907);

  --color-rose-50:  oklch(0.969 0.015 12.422);
  --color-rose-100: oklch(0.941 0.03  12.58);
  --color-rose-200: oklch(0.892 0.058 10.001);
  --color-rose-300: oklch(0.81  0.117 11.638);
  --color-rose-400: oklch(0.712 0.194 13.428);
  --color-rose-500: oklch(0.645 0.246 16.439);
  --color-rose-600: oklch(0.586 0.253 17.585);
  --color-rose-700: oklch(0.514 0.222 16.935);
  --color-rose-800: oklch(0.455 0.188 13.697);
  --color-rose-900: oklch(0.41  0.159 10.272);
  --color-rose-950: oklch(0.271 0.105 12.094);
}

/* ─── Tailwind v4 Theme Variables ────────────────────────────────────────── */
/* Required so calc(var(--spacing)*N) and var(--radius-*) resolve correctly. */

:root {
  --spacing: 0.25rem;

  --radius-xs:   0.125rem;
  --radius-sm:   0.1875rem;
  --radius-md:   0.375rem;
  --radius-lg:   0.5rem;
  --radius-xl:   0.75rem;
  --radius-2xl:  1rem;
  --radius-3xl:  1.5rem;
  --radius-4xl:  2rem;
  --radius-full: 9999px;

  --tw-inset-shadow:       0 0 #0000;
  --tw-inset-ring-shadow:  0 0 #0000;
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow:        0 0 #0000;
}

/* ─── Design Tokens ─────────────────────────────────────────────────────── */

:root {
  --color-canvas:        #ffffff;
  --color-surface:       #fafafa;
  --color-raised:        #f4f4f5;
  --color-border:        #e4e4e7;
  --color-border-strong: #d4d4d8;
  --color-ink:           #09090b;
  --color-muted:         #71717a;
  --color-subtle:        #a1a1aa;
  --color-primary:       #18181b;
  --color-primary-fg:    #ffffff;
  --color-accent:        #2563eb;
  --color-accent-fg:     #ffffff;
}

/* ─── Reset ──────────────────────────────────────────────────────────────── */

*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  border: 0 solid;
}

html {
  line-height: 1.5;
  -webkit-text-size-adjust: 100%;
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
    "Segoe UI", sans-serif;
}

body {
  line-height: inherit;
}

img, video, svg {
  display: block;
  max-width: 100%;
  height: auto;
}

button, input, select, textarea, ::file-selector-button {
  font: inherit;
  color: inherit;
  background-color: transparent;
}

button, a, [role="button"], summary {
  cursor: pointer;
}

/* ─── Editor shell ───────────────────────────────────────────────────────── */
/* Fills the viewport below the fixed h-11 (2.75rem) nav bar. */

editor-shell {
  display: block;
  height: calc(100vh - 2.75rem);
  overflow: hidden;
}

/* ─── Nav ────────────────────────────────────────────────────────────────── */

.nav-link[aria-current="page"] {
  color: var(--color-zinc-950);
  font-weight: 500;
}

/* ─── Animations ────────────────────────────────────────────────────────── */

@keyframes spin { to { transform: rotate(360deg); } }

/* ─── Focus ──────────────────────────────────────────────────────────────── */

*:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 2px;
}

/* ─── Outline Component ──────────────────────────────────────────────────── */
/* Only what Tailwind cannot express: custom-element display, user-select     */
/* (compiler gap), :empty pseudo-class, and data-attr / ::before selectors.  */

outline-root {
  display: block;
  --outline-indent: 1rem;
}
@media (min-width: 640px) {
  outline-root { --outline-indent: 1.375rem; }
}

/* user-select not yet supported by the Go compiler */
.outline-toggle,
.outline-bullet,
.outline-kebab         { user-select: none; }

/* Hide expand/collapse and kebab on desktop until row hover; always visible on mobile */
@media (min-width: 640px) {
  .outline-toggle           { opacity: 0; }
  .outline-kebab            { opacity: 0; pointer-events: none; }
  .outline-row:hover .outline-toggle { opacity: 1; }
  .outline-row:hover .outline-kebab  { opacity: 1; pointer-events: auto; }
  .outline-kebab:hover      { opacity: 1; pointer-events: auto; }
}
.outline-content,
.outline-note          { user-select: text; }

/* Hover background on row — kept here so [data-drop] attr selectors (0,2,0)
   beat the hover state (0,1,1) without needing !important.
   Rows with .sel-active are in drag-select mode — keep the blue bg. */
.outline-row:hover:not(.sel-active) { background-color: var(--color-zinc-50); }

/* Text selection matches the row selection blue */
.outline-content::selection { background-color: var(--color-blue-100); }
.outline-note::selection    { background-color: var(--color-blue-100); }

/* Scoped label: parent overlays content to the left on hover */
.scoped-label-parent {
  position: absolute;
  right: 100%;
  top: 0;
  opacity: 0;
  pointer-events: none;
  white-space: nowrap;
  z-index: 20;
  background: white;
  border: 1px solid var(--scoped-border-color);
  border-right: none;
  border-top-left-radius: 0.25rem;
  border-bottom-left-radius: 0.25rem;
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
  transition: opacity 0.15s ease;
}
.scoped-label.scoped-label-active .scoped-label-parent {
  opacity: 1;
  pointer-events: auto;
}
.scoped-label-sub {
  border-radius: 0.25rem;
  white-space: nowrap;
  transition: border-radius 0.15s ease;
}
.scoped-label.scoped-label-active .scoped-label-sub {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}
.label-switcher {
  width: max-content;
}

/* Float meta elements right so text flows below them */
.outline-meta {
  float: right;
  display: flex;
  align-items: baseline;
  gap: 0.6rem;
  margin-left: 0.5rem;
  margin-top: 0rem;
  max-width: 60%;
  flex-wrap: wrap;
  justify-content: flex-end;
}
@media (min-width: 640px) {
  .outline-meta { gap: 0.6rem; }
}
.outline-content-wrap::after {
  content: '';
  display: block;
  clear: both;
}

/* Placeholder on empty contenteditable (:empty pseudo-class) */
.outline-content:empty::before {
  content: attr(data-placeholder);
  color: var(--color-zinc-300);
  pointer-events: none;
}

/* Tree guide lines */
.outline-children {
  position: relative;
}
.outline-children::before {
  content: '';
  position: absolute;
  left: calc(var(--depth, 0) * var(--outline-indent, 1.375rem) + 2rem);
  top: 0.25rem;
  bottom: 0.25rem;
  width: 1px;
  background-color: var(--color-zinc-200);
  pointer-events: none;
}

/* Drag state — [data-dragging] attribute selector */
.outline-row[data-dragging] { opacity: 0.35; }

/* Drop indicators — require ::before / ::after pseudo-elements */
.outline-row[data-drop="before"]::before,
.outline-row[data-drop="after"]::after {
  content: '';
  position: absolute;
  left: 0; right: 0;
  height: 2px;
  background-color: var(--color-blue-500);
  border-radius: 1px;
}
.outline-row[data-drop="before"]::before { top: -1px; }
.outline-row[data-drop="after"]::after   { bottom: -1px; }

.outline-row[data-drop="child"] {
  background-color: var(--color-blue-50);
  box-shadow: inset 0 0 0 1.5px var(--color-blue-300);
}

/* ── Item completion fade-out ──────────────────────────────────────────── */
li.completing.fade-out,
.kanban-card.fade-out {
  opacity: 0;
  transition: opacity 0.3s ease-out;
}

/* ── Prose (markdown rendered content) ──────────────────────────────────── */
.prose h1, .prose h2, .prose h3 { font-weight: 600; margin: 1em 0 0.5em; }
.prose h1 { font-size: 1.25em; }
.prose h2 { font-size: 1.1em; }
.prose h3 { font-size: 1em; }
.prose p { margin: 0.5em 0; }
.prose ul, .prose ol { margin: 0.5em 0; padding-left: 1.5em; }
.prose li { margin: 0.25em 0; }
.prose code { background: var(--color-zinc-100); padding: 0.125em 0.375em; border-radius: 0.25em; font-size: 0.875em; }
.prose pre { background: var(--color-zinc-100); padding: 0.75em 1em; border-radius: 0.375em; overflow-x: auto; margin: 0.75em 0; }
.prose pre code { background: none; padding: 0; }
.prose blockquote { border-left: 3px solid var(--color-zinc-200); padding-left: 0.75em; margin: 0.75em 0; color: var(--color-zinc-500); }
.prose a { color: var(--color-blue-600); text-decoration: none; }
.prose a:hover { text-decoration: underline; }
.prose hr { border: none; border-top: 1px solid var(--color-zinc-200); margin: 1em 0; }
.prose .mermaid-block { margin: 1em 0; padding: 1em; background: var(--color-zinc-50); border-radius: 0.5em; overflow-x: auto; }
.prose .mermaid-block svg { max-width: 100%; height: auto; }
.prose table { border-collapse: collapse; width: 100%; margin: 0.75em 0; }
.prose th, .prose td { border: 1px solid var(--color-zinc-200); padding: 0.375em 0.75em; text-align: left; font-size: 0.875em; }
.prose th { background: var(--color-zinc-50); font-weight: 600; }

/* ── FullCalendar modern theme ──────────────────────────────────────────── */

/* Reset borders and backgrounds */
.fc {
  --fc-border-color: var(--color-zinc-100);
  --fc-today-bg-color: var(--color-blue-50);
  --fc-page-bg-color: transparent;
  --fc-neutral-bg-color: var(--color-zinc-50);
  --fc-event-bg-color: var(--color-zinc-900);
  --fc-event-border-color: var(--color-zinc-900);
  --fc-event-text-color: #fff;
  font-family: inherit;
}

/* Header toolbar */
.fc .fc-toolbar {
  margin-bottom: 1rem;
}
.fc .fc-toolbar-title {
  font-size: 1rem;
  font-weight: 600;
  color: var(--color-zinc-900);
}
.fc .fc-button {
  background: var(--color-zinc-100);
  border: 1px solid var(--color-zinc-200);
  color: var(--color-zinc-600);
  font-size: 0.75rem;
  padding: 0.25rem 0.625rem;
  border-radius: 0.375rem;
  font-weight: 500;
  text-transform: none;
  box-shadow: none;
}
.fc .fc-button:hover {
  background: var(--color-zinc-200);
  color: var(--color-zinc-800);
}
.fc .fc-button:active,
.fc .fc-button-active {
  background: var(--color-zinc-900);
  color: #fff;
  border-color: var(--color-zinc-900);
}
.fc .fc-button:focus {
  box-shadow: 0 0 0 2px var(--color-blue-200);
}

/* Day headers */
.fc .fc-col-header-cell {
  background: transparent;
  font-size: 0.6875rem;
  font-weight: 500;
  color: var(--color-zinc-400);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding: 0.5rem 0;
  border: none;
}

/* Day cells */
.fc .fc-daygrid-day {
  border-color: var(--color-zinc-100);
}
.fc .fc-daygrid-day-number {
  font-size: 0.75rem;
  color: var(--color-zinc-500);
  padding: 0.375rem 0.5rem;
}
.fc .fc-day-today .fc-daygrid-day-number {
  background: var(--color-blue-600);
  color: #fff;
  border-radius: 9999px;
  width: 1.5rem;
  height: 1.5rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  margin: 0.25rem;
}
.fc .fc-day-other .fc-daygrid-day-number {
  color: var(--color-zinc-300);
}

/* Events */
.fc .fc-daygrid-event {
  border-radius: 0.25rem;
  font-size: 0.6875rem;
  padding: 0.125rem 0.375rem;
  margin: 0.0625rem 0.25rem;
  border: none;
}
.fc .fc-daygrid-dot-event {
  padding: 0.125rem 0.375rem;
}
.fc .fc-daygrid-dot-event .fc-event-title {
  font-weight: 500;
}

/* Completed events */
.fc-event-completed { opacity: 0.4; text-decoration: line-through; }

/* Remove outer table border */
.fc .fc-scrollgrid {
  border: none;
}
.fc .fc-scrollgrid td:last-of-type {
  border-right: none;
}
.fc .fc-scrollgrid tr:last-of-type td {
  border-bottom: none;
}

/* Agent robot icon animation */
@keyframes agent-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}
@keyframes agent-bot {
  0%, 20% { transform: translateY(0) rotate(0deg); }
  30% { transform: translateY(-2px) rotate(-8deg); }
  50% { transform: translateY(-1px) rotate(6deg); }
  60% { transform: translateY(-2px) rotate(-6deg); }
  70% { transform: translateY(-1px) rotate(4deg); }
  80%, 100% { transform: translateY(0) rotate(0deg); }
}
@keyframes agent-girder {
  0%, 15% { transform: scaleY(1) rotate(0deg); }
  30% { transform: scaleY(0.6) rotate(-3deg); }
  45% { transform: scaleY(1.2) rotate(2deg); }
  60% { transform: scaleY(0.7) rotate(-2deg); }
  75%, 100% { transform: scaleY(1) rotate(0deg); }
}

/* SortableJS ghost (dragged item placeholder) */
.sort-ghost { opacity: 0.4; background: var(--color-blue-50); border-color: var(--color-blue-300); }
