/* ============================================================================
   Grimoire Theme for Obsidian Publish
   ----------------------------------------------------------------------------
   Matches the look & feel of the Grimoire platform
   (https://grimoire.dev) — Inter typography, Grimoire purple accents, and
   the same neutral grey scale used throughout the product.

   Drop this file into the root of your published vault and Obsidian Publish
   will automatically apply it to your knowledge base.
   ============================================================================ */

@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap");

/* ---------------------------------------------------------------------------
   1. Grimoire base palette
   --------------------------------------------------------------------------- */
:root {
  /* Greys */
  --grimoire-grey-1000: #000000;
  --grimoire-grey-900: #191919;
  --grimoire-grey-850: #292929;
  --grimoire-grey-800: #353535;
  --grimoire-grey-750: #3b3b3b;
  --grimoire-grey-700: #424242;
  --grimoire-grey-650: #505050;
  --grimoire-grey-600: #6e6e6e;
  --grimoire-grey-500: #8b8b8b;
  --grimoire-grey-400: #a6a6a6;
  --grimoire-grey-300: #bfbfbf;
  --grimoire-grey-200: #dcdcdc;
  --grimoire-grey-100: #f0f0f0;
  --grimoire-grey-50: #fafafa;
  --grimoire-grey-0: #ffffff;

  /* Purple (primary) */
  --grimoire-purple-900: #1f0958;
  --grimoire-purple-800: #350f95;
  --grimoire-purple-700: #4a1ac5;
  --grimoire-purple-600: #6e35ff;
  --grimoire-purple-500: #8454ff;
  --grimoire-purple-400: #a07aff;
  --grimoire-purple-300: #c0acff;
  --grimoire-purple-200: #d7cbff;
  --grimoire-purple-100: #ede7ff;
  --grimoire-purple-50:  #f2eefe;

  /* Indigo (dark accents) */
  --grimoire-indigo-900: #2d1c57;
  --grimoire-indigo-800: #361e71;
  --grimoire-indigo-700: #401d95;
  --grimoire-indigo-600: #6436d9;

  /* Aqua (secondary) */
  --grimoire-aqua-700: #028a93;
  --grimoire-aqua-500: #00c8d5;
  --grimoire-aqua-400: #19cbd7;
  --grimoire-aqua-200: #8ce7ed;
  --grimoire-aqua-100: #bdebee;

  /* Semantic */
  --grimoire-green-500:  #37b637;
  --grimoire-yellow-500: #f4b208;
  --grimoire-orange-500: #cc4f39;
  --grimoire-red-500:    #d51010;
  --grimoire-pink-500:   #ff5fdd;

  /* Spacing / shape */
  --grimoire-radius: 6px;
  --grimoire-radius-lg: 10px;
  --grimoire-shadow-sm: 0 1px 2px rgba(0,0,0,0.04);
  --grimoire-shadow-md: 0 4px 12px rgba(0,0,0,0.06);
  --grimoire-shadow-lg: 0 10px 30px rgba(0,0,0,0.08);
}

/* ---------------------------------------------------------------------------
   2. Light theme — Grimoire default
   --------------------------------------------------------------------------- */
.theme-light {
  /* Backgrounds */
  --background-primary:        var(--grimoire-grey-0);
  --background-primary-alt:    var(--grimoire-grey-50);
  --background-secondary:      var(--grimoire-grey-50);
  --background-secondary-alt:  var(--grimoire-grey-100);
  --background-modifier-hover: var(--grimoire-purple-50);
  --background-modifier-border: var(--grimoire-grey-200);
  --background-modifier-border-hover: var(--grimoire-grey-300);
  --background-modifier-border-focus: var(--grimoire-purple-500);

  /* Text */
  --text-normal:   var(--grimoire-grey-900);
  --text-muted:    var(--grimoire-grey-650);
  --text-faint:    var(--grimoire-grey-500);
  --text-title-h1: var(--grimoire-grey-900);
  --text-title-h2: var(--grimoire-grey-900);
  --text-title-h3: var(--grimoire-grey-900);
  --text-title-h4: var(--grimoire-grey-800);
  --text-title-h5: var(--grimoire-grey-700);
  --text-title-h6: var(--grimoire-grey-650);

  /* Accents / links */
  --text-accent:       var(--grimoire-purple-600);
  --text-accent-hover: var(--grimoire-purple-700);
  --text-link:         var(--grimoire-purple-600);
  --text-link-hover:   var(--grimoire-purple-700);
  --interactive-accent: var(--grimoire-purple-600);
  --interactive-accent-hover: var(--grimoire-purple-700);

  /* Selections / highlights */
  --text-highlight-bg: var(--grimoire-purple-100);
  --text-selection:    color-mix(in srgb, var(--grimoire-purple-500) 25%, transparent);

  /* Code */
  --code-background: var(--grimoire-grey-100);
  --code-normal:     var(--grimoire-purple-700);

  /* Callouts */
  --callout-note:     var(--grimoire-purple-600);
  --callout-info:     var(--grimoire-aqua-500);
  --callout-success:  var(--grimoire-green-500);
  --callout-warning:  var(--grimoire-yellow-500);
  --callout-error:    var(--grimoire-red-500);
  --callout-important: var(--grimoire-pink-500);
  --callout-tip:      var(--grimoire-aqua-500);

  /* Tags */
  --tag-color:       var(--grimoire-purple-700);
  --tag-background:  var(--grimoire-purple-100);
}

/* ---------------------------------------------------------------------------
   3. Dark theme — Grimoire dark
   --------------------------------------------------------------------------- */
.theme-dark {
  --background-primary:        var(--grimoire-grey-850);
  --background-primary-alt:    var(--grimoire-grey-800);
  --background-secondary:      var(--grimoire-grey-900);
  --background-secondary-alt:  var(--grimoire-grey-800);
  --background-modifier-hover: var(--grimoire-indigo-900);
  --background-modifier-border: var(--grimoire-grey-750);
  --background-modifier-border-hover: var(--grimoire-grey-650);
  --background-modifier-border-focus: var(--grimoire-purple-400);

  --text-normal:   var(--grimoire-grey-50);
  --text-muted:    var(--grimoire-grey-300);
  --text-faint:    var(--grimoire-grey-500);
  --text-title-h1: var(--grimoire-grey-0);
  --text-title-h2: var(--grimoire-grey-50);
  --text-title-h3: var(--grimoire-grey-100);
  --text-title-h4: var(--grimoire-grey-200);
  --text-title-h5: var(--grimoire-grey-300);
  --text-title-h6: var(--grimoire-grey-400);

  --text-accent:       var(--grimoire-purple-300);
  --text-accent-hover: var(--grimoire-purple-200);
  --text-link:         var(--grimoire-purple-300);
  --text-link-hover:   var(--grimoire-purple-200);
  --interactive-accent: var(--grimoire-purple-600);
  --interactive-accent-hover: var(--grimoire-purple-500);

  --text-highlight-bg: color-mix(in srgb, var(--grimoire-purple-500) 30%, transparent);
  --text-selection:    color-mix(in srgb, var(--grimoire-purple-400) 30%, transparent);

  --code-background: var(--grimoire-grey-900);
  --code-normal:     var(--grimoire-purple-300);

  --tag-color:       var(--grimoire-purple-200);
  --tag-background:  var(--grimoire-indigo-800);
}

/* ---------------------------------------------------------------------------
   4. Global typography
   --------------------------------------------------------------------------- */
body,
.published-container,
.markdown-preview-view,
.site-body {
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important;
  font-feature-settings: "cv02", "cv03", "cv04", "cv11";
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  letter-spacing: -0.005em;
}

.markdown-preview-view {
  line-height: 1.65;
  font-size: 16px;
  color: var(--text-normal);
}

code,
pre,
.cm-s-obsidian,
.HyperMD-codeblock {
  font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace !important;
  font-size: 0.9em;
}

/* Headings — mirrors Grimoire's Inter-based heading scale */
.markdown-preview-view h1,
.markdown-preview-view h2,
.markdown-preview-view h3,
.markdown-preview-view h4,
.markdown-preview-view h5,
.markdown-preview-view h6 {
  font-family: "Inter", sans-serif !important;
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.2;
  margin-top: 2em;
  margin-bottom: 0.75em;
}

.markdown-preview-view h1 { font-size: 2.25rem; letter-spacing: -0.03em; margin-top: 0.5em; }
.markdown-preview-view h2 { font-size: 1.65rem; padding-bottom: 0.3em; border-bottom: 1px solid var(--background-modifier-border); }
.markdown-preview-view h3 { font-size: 1.3rem;  }
.markdown-preview-view h4 { font-size: 1.1rem;  font-weight: 600; }
.markdown-preview-view h5 { font-size: 1rem;    font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.05em; }
.markdown-preview-view h6 { font-size: 0.875rem;font-weight: 600; color: var(--text-muted); }

/* Paragraphs */
.markdown-preview-view p {
  margin: 0 0 1em;
}

/* ---------------------------------------------------------------------------
   5. Site layout
   --------------------------------------------------------------------------- */
.site-body {
  background-color: var(--background-secondary);
  color: var(--text-normal);
}

/* Narrower left sidebar */
.site-body-left-column {
  width: 260px !important;
  min-width: 260px !important;
  max-width: 260px !important;
  flex: 0 0 260px !important;
  background-color: var(--background-primary);
  border-right: 1px solid var(--background-modifier-border);
}

.site-body-left-column-inner {
  width: 100% !important;
  max-width: 100% !important;
}

.site-nav,
.nav-container {
  background-color: var(--background-primary);
  border-right: 1px solid var(--background-modifier-border);
}

/* Hide the "GrimoireAcademy" site name in the left sidebar */
.site-body-left-column-site-name,
.site-body-left-column .site-body-left-column-site-name,
.site-body-left-column-site-logo + .site-body-left-column-site-name {
  display: none !important;
}

/* Narrower right sidebar that takes the full viewport height */
.site-body-right-column {
  width: 290px !important;
  min-width: 290px !important;
  max-width: 290px !important;
  flex: 0 0 290px !important;
  height: 100vh !important;
  max-height: 100vh !important;
  position: sticky;
  top: 0;
  align-self: flex-start;
  overflow-y: auto;
  background-color: var(--background-primary);
  border-left: 1px solid var(--background-modifier-border);
}

.site-body-right-column-inner {
  height: 100% !important;
  max-height: 100% !important;
}

/* Center column — fill the space between sidebars, cap reading width at 700px */
.site-body-center-column,
.published-container {
  flex: 1 1 auto !important;
  width: auto !important;
  max-width: none !important;
  min-width: 0 !important;
}

.site-header,
.site-body-header {
  background-color: var(--background-primary);
  border-bottom: 1px solid var(--background-modifier-border);
  backdrop-filter: saturate(180%) blur(8px);
  -webkit-backdrop-filter: saturate(180%) blur(8px);
}

/* The main reading surface — fills the center column, reading width capped at 700px */
.markdown-preview-view {
  width: 100% !important;
  max-width: 100% !important;
  padding: 2.5rem 2rem !important;
}

.published-container .markdown-preview-sizer,
.markdown-preview-sizer {
  width: 100% !important;
  max-width: 700px !important;
  margin: 0 auto !important;
  /* Allow hard-offset shadows (cards/buttons) to render outside the sizer
     without getting clipped by any upstream overflow rules. */
  overflow: visible !important;
}

/* Ensure the center content column does not clip box-shadows. */
.published-container,
.site-body-center-column {
  overflow: visible !important;
}

/* ---------------------------------------------------------------------------
   6. Sidebar navigation (file tree)
   --------------------------------------------------------------------------- */
.nav-folder-title,
.nav-file-title {
  border-radius: var(--grimoire-radius);
  padding: 4px 8px;
  font-size: 14px;
  color: var(--text-muted);
  transition: background-color 0.15s ease, color 0.15s ease;
}
/* Force root-level folders open in Publish */
.nav-folder.mod-root > .nav-folder-children {
  display: block !important;
  height: auto !important;
  visibility: visible !important;
}
/* If Publish marks them collapsed, override it visually */
.nav-folder.mod-root.is-collapsed > .nav-folder-children {
  display: block !important;
}
/* Optional: make the caret look “expanded” */
.nav-folder.mod-root > .nav-folder-title .nav-folder-collapse-indicator {
  transform: rotate(90deg);
}
.nav-folder-title:hover,
.nav-file-title:hover {
  background-color: var(--background-modifier-hover);
  color: var(--text-normal);
}

.nav-file-title.is-active,
.nav-file-title.is-active:hover {
  background-color: var(--grimoire-purple-100);
  color: var(--grimoire-purple-700);
  font-weight: 600;
}

.theme-dark .nav-file-title.is-active,
.theme-dark .nav-file-title.is-active:hover {
  background-color: var(--grimoire-indigo-800);
  color: var(--grimoire-purple-200);
}

.nav-folder-title {
  font-weight: 600;
  color: var(--text-normal);
}

.nav-folder-collapse-indicator {
  color: var(--text-faint);
}

/* ---------------------------------------------------------------------------
   7. Links — internal, external, and unresolved
   --------------------------------------------------------------------------- */
.markdown-preview-view a,
.markdown-preview-view .internal-link {
  color: var(--text-link);
  text-decoration: none;
  background-image: linear-gradient(to right, var(--grimoire-purple-300), var(--grimoire-purple-300));
  background-position: 0 100%;
  background-repeat: no-repeat;
  background-size: 0 1px;
  transition: background-size 0.25s ease, color 0.15s ease;
}

.markdown-preview-view a:hover,
.markdown-preview-view .internal-link:hover {
  color: var(--text-link-hover);
  background-size: 100% 1px;
}

.markdown-preview-view .internal-link.is-unresolved,
.markdown-preview-view a.is-unresolved {
  color: var(--grimoire-red-500);
  opacity: 0.85;
  border-bottom: 1px dashed var(--grimoire-red-500);
  background: none;
}

.markdown-preview-view a.external-link::after {
  content: " ↗";
  font-size: 0.85em;
  color: var(--text-faint);
}

/* ---------------------------------------------------------------------------
   8. Blockquotes
   --------------------------------------------------------------------------- */
.markdown-preview-view blockquote {
  border-left: 3px solid var(--grimoire-purple-500);
  background-color: var(--grimoire-purple-50);
  padding: 0.75em 1em;
  border-radius: 0 var(--grimoire-radius) var(--grimoire-radius) 0;
  color: var(--text-normal);
  margin: 1.25em 0;
}

.theme-dark .markdown-preview-view blockquote {
  background-color: color-mix(in srgb, var(--grimoire-purple-600) 10%, transparent);
  border-left-color: var(--grimoire-purple-400);
}

/* ---------------------------------------------------------------------------
   9. Code blocks & inline code
   --------------------------------------------------------------------------- */
.markdown-preview-view code {
  background-color: var(--code-background);
  color: var(--code-normal);
  padding: 0.15em 0.4em;
  border-radius: 4px;
  border: 1px solid var(--background-modifier-border);
  font-size: 0.9em;
}

.markdown-preview-view pre {
  background-color: var(--code-background);
  border: 1px solid var(--background-modifier-border);
  border-radius: var(--grimoire-radius);
  padding: 1em 1.25em;
  margin: 1.25em 0;
  overflow-x: auto;
}

.markdown-preview-view pre > code {
  background: none;
  border: none;
  padding: 0;
  color: var(--text-normal);
}

/* ---------------------------------------------------------------------------
   10. Tables
   --------------------------------------------------------------------------- */
.markdown-preview-view table {
  width: 100%;
  border-collapse: collapse;
  margin: 1.25em 0;
  font-size: 0.95em;
  border: 1px solid var(--background-modifier-border);
  border-radius: var(--grimoire-radius);
  overflow: hidden;
}

.markdown-preview-view th {
  background-color: var(--background-secondary);
  color: var(--text-normal);
  font-weight: 600;
  text-align: left;
  padding: 0.6em 0.9em;
  border-bottom: 1px solid var(--background-modifier-border);
}

.markdown-preview-view td {
  padding: 0.6em 0.9em;
  border-bottom: 1px solid var(--background-modifier-border);
  color: var(--text-normal);
}

.markdown-preview-view tr:last-child td {
  border-bottom: none;
}

.markdown-preview-view tr:hover td {
  background-color: var(--background-modifier-hover);
}

/* ---------------------------------------------------------------------------
   11. Tags
   --------------------------------------------------------------------------- */
.markdown-preview-view .tag {
  background-color: var(--tag-background);
  color: var(--tag-color);
  border: none;
  border-radius: 999px;
  padding: 2px 10px;
  font-size: 0.8em;
  font-weight: 500;
  text-decoration: none;
  transition: background-color 0.15s ease;
}

.markdown-preview-view .tag:hover {
  background-color: var(--grimoire-purple-200);
}

.theme-dark .markdown-preview-view .tag:hover {
  background-color: var(--grimoire-indigo-700);
}

/* ---------------------------------------------------------------------------
   12. Callouts — Grimoire colour coding
   --------------------------------------------------------------------------- */
.callout {
  border-radius: var(--grimoire-radius);
  border: 1px solid var(--background-modifier-border);
  background-color: var(--background-primary-alt);
  padding: 0.85em 1em;
  margin: 1.25em 0;
  box-shadow: var(--grimoire-shadow-sm);
}

.callout-title {
  font-weight: 600;
  margin-bottom: 0.25em;
}

.callout[data-callout="note"],
.callout[data-callout="abstract"],
.callout[data-callout="summary"] {
  --callout-color: var(--grimoire-purple-600);
}

.callout[data-callout="info"],
.callout[data-callout="tip"],
.callout[data-callout="hint"] {
  --callout-color: var(--grimoire-aqua-500);
}

.callout[data-callout="success"],
.callout[data-callout="check"],
.callout[data-callout="done"] {
  --callout-color: var(--grimoire-green-500);
}

.callout[data-callout="warning"],
.callout[data-callout="caution"],
.callout[data-callout="attention"] {
  --callout-color: var(--grimoire-yellow-500);
}

.callout[data-callout="danger"],
.callout[data-callout="error"],
.callout[data-callout="bug"],
.callout[data-callout="failure"],
.callout[data-callout="fail"],
.callout[data-callout="missing"] {
  --callout-color: var(--grimoire-red-500);
}

.callout[data-callout="question"],
.callout[data-callout="help"],
.callout[data-callout="faq"] {
  --callout-color: var(--grimoire-pink-500);
}

/* ---------------------------------------------------------------------------
   13. Search
   --------------------------------------------------------------------------- */
.search-input-container input,
input.search-input {
  background-color: var(--background-primary-alt);
  border: 1px solid var(--background-modifier-border);
  border-radius: var(--grimoire-radius);
  padding: 8px 12px;
  color: var(--text-normal);
  font-family: inherit;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.search-input-container input:focus,
input.search-input:focus {
  outline: none;
  border-color: var(--grimoire-purple-500);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--grimoire-purple-500) 20%, transparent);
}

.search-result-file-title {
  font-weight: 600;
  color: var(--text-normal);
}

.search-result-file-matched-text {
  background-color: var(--text-highlight-bg);
  color: var(--text-normal);
  border-radius: 3px;
  padding: 0 3px;
}

/* ---------------------------------------------------------------------------
   14. Graph view
   --------------------------------------------------------------------------- */
.graph-view.color-fill {
  color: var(--grimoire-purple-600);
}

.graph-view.color-fill-tag {
  color: var(--grimoire-aqua-500);
}

.graph-view.color-fill-attachment {
  color: var(--grimoire-orange-500);
}

.graph-view.color-arrow {
  color: var(--grimoire-grey-400);
}

.graph-view.color-circle {
  color: var(--grimoire-purple-500);
}

.graph-view.color-line {
  color: var(--grimoire-grey-300);
}

.graph-view.color-text {
  color: var(--text-normal);
}

.graph-view.color-fill-highlight {
  color: var(--grimoire-purple-400);
}

.graph-view.color-line-highlight {
  color: var(--grimoire-purple-500);
}

/* ---------------------------------------------------------------------------
   15. Horizontal rules
   --------------------------------------------------------------------------- */
.markdown-preview-view hr {
  border: none;
  height: 1px;
  background-color: var(--background-modifier-border);
  margin: 2em 0;
}

/* ---------------------------------------------------------------------------
   16. Lists
   --------------------------------------------------------------------------- */
.markdown-preview-view ul,
.markdown-preview-view ol {
  padding-left: 1.5em;
  margin: 0.5em 0 1em;
}

.markdown-preview-view li {
  margin: 0.25em 0;
}

.markdown-preview-view li::marker {
  color: var(--grimoire-purple-500);
}

/* Task lists */
.markdown-preview-view input[type="checkbox"] {
  appearance: none;
  -webkit-appearance: none;
  width: 16px;
  height: 16px;
  border: 1.5px solid var(--background-modifier-border-hover);
  border-radius: 4px;
  background-color: var(--background-primary);
  vertical-align: middle;
  margin-right: 6px;
  cursor: pointer;
  position: relative;
  transition: all 0.15s ease;
}

.markdown-preview-view input[type="checkbox"]:checked {
  background-color: var(--grimoire-purple-600);
  border-color: var(--grimoire-purple-600);
}

.markdown-preview-view input[type="checkbox"]:checked::after {
  content: "";
  position: absolute;
  left: 4px;
  top: 0px;
  width: 5px;
  height: 10px;
  border: solid white;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

/* ---------------------------------------------------------------------------
   17. Images & embeds
   --------------------------------------------------------------------------- */
.markdown-preview-view img {
  max-width: 100%;
  border-radius: var(--grimoire-radius);
  box-shadow: var(--grimoire-shadow-md);
  margin: 0.5em 0;
}

.markdown-preview-view .internal-embed {
  border-radius: var(--grimoire-radius);
  border: 1px solid var(--background-modifier-border);
  padding: 1em;
  margin: 1em 0;
  background-color: var(--background-primary-alt);
}

.markdown-preview-view .internal-embed.image-embed {
  padding: 0;
  border: none;
  background: none;
  background-color: transparent;
  border-radius: 0;
  margin: 0;
}

/* ---------------------------------------------------------------------------
   18. Footnotes
   --------------------------------------------------------------------------- */
.markdown-preview-view .footnote-link,
.markdown-preview-view .footnote-backref {
  color: var(--grimoire-purple-600);
  font-size: 0.8em;
  text-decoration: none;
}

.markdown-preview-view .footnotes {
  margin-top: 3em;
  padding-top: 1em;
  border-top: 1px solid var(--background-modifier-border);
  font-size: 0.9em;
  color: var(--text-muted);
}

/* ---------------------------------------------------------------------------
   19. Selection
   --------------------------------------------------------------------------- */
::selection {
  background-color: var(--text-selection);
  color: var(--text-normal);
}

/* ---------------------------------------------------------------------------
   20. Scrollbars — thin & minimal (mirrors platform)
   --------------------------------------------------------------------------- */
::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}

::-webkit-scrollbar-track {
  background: transparent;
}

::-webkit-scrollbar-thumb {
  background: color-mix(in srgb, var(--grimoire-grey-400) 40%, transparent);
  border-radius: 3px;
}

::-webkit-scrollbar-thumb:hover {
  background: color-mix(in srgb, var(--grimoire-grey-500) 60%, transparent);
}

* {
  scrollbar-width: thin;
  scrollbar-color: color-mix(in srgb, var(--grimoire-grey-400) 40%, transparent) transparent;
}

/* ---------------------------------------------------------------------------
   21. Buttons (theme toggle, etc.)
   --------------------------------------------------------------------------- */
button,
.clickable-icon {
  border-radius: var(--grimoire-radius);
  transition: background-color 0.15s ease, color 0.15s ease;
}

button:hover,
.clickable-icon:hover {
  background-color: var(--background-modifier-hover);
  color: var(--grimoire-purple-600);
}

/* ---------------------------------------------------------------------------
   22. Backlinks panel
   --------------------------------------------------------------------------- */
.backlinks,
.published-backlinks {
  background-color: var(--background-primary-alt);
  border: 1px solid var(--background-modifier-border);
  border-radius: var(--grimoire-radius-lg);
  padding: 1em 1.25em;
  margin-top: 2em;
}

.backlinks h3,
.published-backlinks h3 {
  font-size: 0.85em !important;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text-muted);
  margin-top: 0 !important;
  margin-bottom: 0.75em !important;
  border: none !important;
  padding: 0 !important;
}

.backlinks a,
.published-backlinks a {
  display: block;
  padding: 6px 8px;
  border-radius: 4px;
  color: var(--text-normal);
  background: none;
}

.backlinks a:hover,
.published-backlinks a:hover {
  background-color: var(--background-modifier-hover);
  color: var(--grimoire-purple-700);
}

/* ---------------------------------------------------------------------------
   23. Grimoire cards (gridview style)
   ----------------------------------------------------------------------------
   Drop Grimoire-style clickable cards into any note. They mirror the look of
   the Grimoire platform's grid view — rounded surface, 1px border, the
   signature 4×4 hard-offset shadow, and a Grimoire-purple hover lift.

   ──── HTML usage (recommended for grids) ─────────────────────────────────
   <div class="grimoire-cards">
     <a class="grimoire-card" href="My-Page">
       <div class="grimoire-card-header">
         <span class="grimoire-card-title">My Page</span>
       </div>
       <div class="grimoire-card-body">Short description of the page.</div>
       <div class="grimoire-card-footer">
         <span class="grimoire-card-tag">Tag</span>
         <span>2025</span>
       </div>
     </a>

     <a class="grimoire-card" href="Folder/Other-Page">
       <div class="grimoire-card-header">
         <span class="grimoire-card-title">Other Page</span>
       </div>
       <div class="grimoire-card-body">Another card.</div>
     </a>
   </div>

   The `href` is the published URL slug for an internal note (e.g.
   `My-Page` or `Folder/My-Page`) or any external URL. The whole card is
   clickable. Cards auto-fill the available width at a 250px minimum.

   ──── Markdown grid (recommended — uses a `[!cards]` wrapper callout) ────
   Wrap nested `[!card]` callouts inside a `[!cards]` container callout. The
   wrapper renders as an invisible CSS grid; each nested card becomes a
   grid item. Use a bare `>` line to separate cards inside the wrapper.

       > [!cards]
       > > [!card] [[Page 1|Page 1 Title]]
       > > Short description for page 1.
       >
       > > [!card] [[Page 2|Page 2 Title]]
       > > Short description for page 2.
       >
       > > [!card] [[Page 3|Page 3 Title]]
       > > Short description for page 3.

   ⚠️ Why not just `<div class="grimoire-cards">` + blank-line callouts?
   CommonMark closes an HTML block at the first blank line, so the wrapper
   div ends before the callouts even start — the cards become siblings of
   an empty div and stack vertically instead of gridding. The `[!cards]`
   callout sidesteps this entirely because callouts can nest natively.

   ──── Callout usage (single card, pure markdown) ─────────────────────────
       > [!card] [[My Page|My Page Title]]
       > Short description shown in the body.
       >
       > Optional second paragraph / metadata.

   The whole callout becomes clickable to the linked page.
   --------------------------------------------------------------------------- */

/* Grid container — responsive auto-fill. Equal-height rows so every card
   in a row matches the tallest card. */
.markdown-preview-view .grimoire-cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  grid-auto-rows: 1fr;
  gap: 1rem;
  margin: 1.5rem 0;
  overflow: visible;
}

/* Reset margins on direct grid children — both HTML cards and `[!card]`
   callouts — so they sit flush in the grid and stretch to the row height. */
.markdown-preview-view .grimoire-cards > * {
  margin: 0 !important;
  height: 100%;
  min-width: 0;
}

/* Obsidian sometimes wraps inline markdown in <p> blocks. Strip the wrapper
   styling so a paragraph inside .grimoire-cards still grids cleanly. */
.markdown-preview-view .grimoire-cards > p {
  display: contents;
}

/* Card root (typically <a class="grimoire-card">) */
.markdown-preview-view a.grimoire-card,
.markdown-preview-view .grimoire-card {
  display: flex;
  flex-direction: column;
  position: relative;
  background-color: var(--background-primary);
  color: var(--text-normal) !important;
  border: 1px solid var(--background-modifier-border);
  border-radius: var(--grimoire-radius);
  padding: 0;
  text-decoration: none !important;
  background-image: none !important;
  box-shadow: 4px 4px 0 0 var(--background-modifier-border);
  transition:
    box-shadow 0.15s ease,
    border-color 0.15s ease,
    color 0.15s ease;
  min-height: 160px;
  height: 100%;
}

/* Hover: only colour changes, no transform — keeps the card anchored so
   it can't drift past its grid cell or the page edge. */
.markdown-preview-view a.grimoire-card:hover,
.markdown-preview-view .grimoire-card:hover {
  border-color: var(--grimoire-purple-500);
  box-shadow: 4px 4px 0 0 var(--grimoire-purple-300);
  color: var(--text-normal) !important;
}

.theme-dark .markdown-preview-view a.grimoire-card,
.theme-dark .markdown-preview-view .grimoire-card {
  box-shadow: 4px 4px 0 0 var(--grimoire-grey-800);
}

.theme-dark .markdown-preview-view a.grimoire-card:hover,
.theme-dark .markdown-preview-view .grimoire-card:hover {
  border-color: var(--grimoire-purple-400);
  box-shadow: 4px 4px 0 0 var(--grimoire-indigo-700);
}

/* Header — title + optional meta, separated by a divider */
.markdown-preview-view .grimoire-card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.75rem 1rem;
  border-bottom: 1px solid var(--background-modifier-border);
}

/* Title */
.markdown-preview-view .grimoire-card-title {
  display: block;
  font-family: "Inter", sans-serif;
  font-weight: 700;
  font-size: 1rem;
  line-height: 1.3;
  letter-spacing: -0.01em;
  color: var(--text-normal);
  margin: 0;
  padding: 0;
  border: none !important;
  text-decoration: none !important;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}

/* Heading elements used directly as the title get the header padding */
.markdown-preview-view .grimoire-card > h1:first-child,
.markdown-preview-view .grimoire-card > h2:first-child,
.markdown-preview-view .grimoire-card > h3:first-child,
.markdown-preview-view .grimoire-card > h4:first-child {
  margin: 0 !important;
  padding: 0.75rem 1rem !important;
  border: none !important;
  border-bottom: 1px solid var(--background-modifier-border) !important;
  font-family: "Inter", sans-serif !important;
  font-weight: 700;
  font-size: 1rem;
  line-height: 1.3;
  letter-spacing: -0.01em;
  color: var(--text-normal);
}

/* Body — main content area, clamps long text like the platform card */
.markdown-preview-view .grimoire-card-body,
.markdown-preview-view .grimoire-card-content,
.markdown-preview-view .grimoire-card-description {
  padding: 0.75rem 1rem;
  font-size: 0.9rem;
  line-height: 1.55;
  color: var(--text-muted);
  flex: 1 1 auto;
  min-height: 0;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 6;
  line-clamp: 6;
  -webkit-box-orient: vertical;
}

.markdown-preview-view .grimoire-card-body p,
.markdown-preview-view .grimoire-card-content p {
  margin: 0;
}

/* Footer — small meta row at the bottom */
.markdown-preview-view .grimoire-card-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.6rem 1rem;
  border-top: 1px solid var(--background-modifier-border);
  font-size: 0.78rem;
  color: var(--text-faint);
}

/* Inline tag pill inside a card */
.markdown-preview-view .grimoire-card-tag {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 999px;
  background-color: var(--tag-background);
  color: var(--tag-color);
  font-size: 0.72rem;
  font-weight: 500;
  line-height: 1.4;
}

/* Optional accent strip — <div class="grimoire-card-accent"></div> */
.markdown-preview-view .grimoire-card-accent {
  height: 4px;
  background: linear-gradient(90deg, var(--grimoire-purple-500), var(--grimoire-aqua-500));
  flex-shrink: 0;
}

/* ---- `[!cards]` callout: invisible grid container for nested cards ----
   Authored as a wrapper callout that holds nested `[!card]` callouts.
   We zero-out every default callout style (border, background, shadow,
   padding, margin, title) and turn the content area into a CSS grid.
   Selectors are doubled with `.markdown-preview-view` so they win over
   the generic `.callout` rules higher in this file even without the
   !importants doing the work. */
.markdown-preview-view .callout[data-callout="cards"],
.callout[data-callout="cards"] {
  background: none !important;
  background-color: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 1.5rem 0 !important;
  display: block !important;
  overflow: visible !important;
}

/* Hide the wrapper's title row — also hide siblings like callout-fold or
   callout-metadata that some Obsidian builds add. */
.markdown-preview-view .callout[data-callout="cards"] > .callout-title,
.callout[data-callout="cards"] > .callout-title,
.markdown-preview-view .callout[data-callout="cards"] > .callout-fold,
.callout[data-callout="cards"] > .callout-fold {
  display: none !important;
}

/* Content area becomes the responsive grid */
.markdown-preview-view .callout[data-callout="cards"] > .callout-content,
.callout[data-callout="cards"] > .callout-content {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)) !important;
  grid-auto-rows: 1fr !important;
  gap: 1rem !important;
  padding: 0 !important;
  margin: 0 !important;
  background: none !important;
  overflow: visible !important;
}

/* Sometimes Obsidian wraps inline children in <p> tags inside the content.
   `display: contents` lets the real children participate in the grid. */
.markdown-preview-view .callout[data-callout="cards"] > .callout-content > p,
.callout[data-callout="cards"] > .callout-content > p {
  display: contents !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* Nested `[!card]` callouts inside `[!cards]` are the grid items */
.markdown-preview-view .callout[data-callout="cards"] .callout[data-callout="card"],
.callout[data-callout="cards"] .callout[data-callout="card"] {
  margin: 0 !important;
  height: 100% !important;
  min-width: 0 !important;
  width: auto !important;
}

/* Force a 2-column grid: use `[!cards|cols-2]` (handy when the auto-fill
   minmax kicks the layout into 1-column on narrower readers). */
.markdown-preview-view .callout[data-callout="cards"][data-callout-metadata="cols-2"] > .callout-content,
.callout[data-callout="cards"][data-callout-metadata="cols-2"] > .callout-content {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}

.markdown-preview-view .callout[data-callout="cards"][data-callout-metadata="cols-3"] > .callout-content,
.callout[data-callout="cards"][data-callout-metadata="cols-3"] > .callout-content {
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
}

.markdown-preview-view .callout[data-callout="cards"][data-callout-metadata="cols-4"] > .callout-content,
.callout[data-callout="cards"][data-callout-metadata="cols-4"] > .callout-content {
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
}

/* Mobile: collapse the cards grid to a single column */
@media (max-width: 640px) {
  .markdown-preview-view .callout[data-callout="cards"] > .callout-content,
  .callout[data-callout="cards"] > .callout-content,
  .markdown-preview-view .callout[data-callout="cards"][data-callout-metadata] > .callout-content,
  .callout[data-callout="cards"][data-callout-metadata] > .callout-content {
    grid-template-columns: 1fr !important;
    gap: 0.75rem !important;
  }
}

/* ---- `[!card]` callout: markdown card (works standalone or in a grid) -- */
.callout[data-callout="card"] {
  position: relative;
  display: flex;
  flex-direction: column;
  background-color: var(--background-primary);
  border: 1px solid var(--background-modifier-border);
  border-radius: var(--grimoire-radius);
  box-shadow: 4px 4px 0 0 var(--background-modifier-border);
  padding: 0;
  margin: 1rem 0;
  min-height: 160px;
  transition:
    box-shadow 0.15s ease,
    border-color 0.15s ease;
}

/* When inside .grimoire-cards, the callout is already a grid item:
   drop the standalone vertical margin so it hugs the grid gap. */
.markdown-preview-view .grimoire-cards .callout[data-callout="card"] {
  margin: 0 !important;
}

/* Hover: colour change only, no transform — keeps the card anchored. */
.callout[data-callout="card"]:hover {
  border-color: var(--grimoire-purple-500);
  box-shadow: 4px 4px 0 0 var(--grimoire-purple-300);
}

.theme-dark .callout[data-callout="card"] {
  box-shadow: 4px 4px 0 0 var(--grimoire-grey-800);
}

.theme-dark .callout[data-callout="card"]:hover {
  border-color: var(--grimoire-purple-400);
  box-shadow: 4px 4px 0 0 var(--grimoire-indigo-700);
}

.callout[data-callout="card"] .callout-title {
  padding: 0.75rem 1rem;
  border-bottom: 1px solid var(--background-modifier-border);
  background: none;
  font-weight: 700;
  font-size: 1rem;
  letter-spacing: -0.01em;
  color: var(--text-normal);
}

.callout[data-callout="card"] .callout-icon {
  display: none;
}

.callout[data-callout="card"] .callout-title-inner {
  font-weight: 700;
  font-size: 1rem;
  color: var(--text-normal);
}

.callout[data-callout="card"] .callout-content {
  padding: 0.75rem 1rem;
  font-size: 0.9rem;
  line-height: 1.55;
  color: var(--text-muted);
  flex: 1 1 auto;
  min-height: 0;
}

.callout[data-callout="card"] .callout-content > :first-child {
  margin-top: 0;
}

.callout[data-callout="card"] .callout-content > :last-child {
  margin-bottom: 0;
}

/* Make the title link cover the whole callout so clicking anywhere
   on the card navigates to the linked page. */
.callout[data-callout="card"] .callout-title a {
  text-decoration: none !important;
  background: none !important;
  color: var(--text-normal) !important;
}

.callout[data-callout="card"] .callout-title a::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
}

/* Mobile: stack cards in a single column */
@media (max-width: 640px) {
  .markdown-preview-view .grimoire-cards {
    grid-template-columns: 1fr;
    gap: 0.75rem;
  }
}

/* ---- Suppress Obsidian's hover-preview popover on cards ----------------
   The wikilinks inside `[!card]` callouts (and any internal-link inside an
   HTML `.grimoire-card`) trigger Obsidian Publish's page-preview popover by
   default. Cards already advertise the destination, so the floating preview
   is redundant and visually noisy.

   We use `:has()` to detect when the cursor is over a card or one of its
   descendants and hide the popover element while it's hovered. The popover
   lives outside the card in the DOM (it's appended near <body>), so we
   match it from a parent that contains both the popover and the hovered
   card — `body` works in every Obsidian Publish layout. */
body:has(.callout[data-callout="card"]:hover) .popover.hover-popover,
body:has(.callout[data-callout="card"] *:hover) .popover.hover-popover,
body:has(.grimoire-card:hover) .popover.hover-popover,
body:has(.grimoire-card *:hover) .popover.hover-popover,
body:has(.callout[data-callout="cards"]:hover) .popover.hover-popover {
  display: none !important;
  opacity: 0 !important;
  pointer-events: none !important;
}

/* ---------------------------------------------------------------------------
   24. Grimoire page navigation (bottom-of-page "where to next" block)
   ----------------------------------------------------------------------------
   A titled section with two equal-width buttons that link to other pages.
   Designed to live at the bottom of a note as a "Continue reading" / prev-next
   style component. Each button shows just a page title — no description.

   ──── HTML usage ─────────────────────────────────────────────────────────
   <div class="grimoire-page-nav">
     <div class="grimoire-page-nav-title">Where to next?</div>
     <div class="grimoire-page-nav-buttons">
       <a class="grimoire-page-nav-button" href="Folder/Page-A">Page A Title</a>
       <a class="grimoire-page-nav-button" href="Folder/Page-B">Page B Title</a>
     </div>
   </div>

   ──── Callout usage (recommended — pure markdown) ────────────────────────
   Wrap wikilinks in a `[!nav]` callout. The callout title becomes the
   section title; each link becomes a button. Default is 2 columns; use the
   `cols-N` metadata to override (cols-1, cols-2, cols-3, cols-4).

       > [!nav] Where to next?
       > [[Page A|Page A Title]]
       > [[Page B|Page B Title]]

       > [!nav|cols-3] Continue exploring
       > [[Page A|Page A Title]]
       > [[Page B|Page B Title]]
       > [[Page C|Page C Title]]
   --------------------------------------------------------------------------- */

/* Wrapper */
.markdown-preview-view .grimoire-page-nav {
  margin: 2.5rem 0 1.5rem;
  padding-top: 1.25rem;
  border-top: 1px solid var(--background-modifier-border);
  /* Reserve 4px on the right + bottom so the buttons' 4×4 hard-offset
     shadow has room to render and isn't clipped at the page edge. */
  padding-right: 4px;
  padding-bottom: 4px;
}

/* Section title */
.markdown-preview-view .grimoire-page-nav-title {
  font-family: "Inter", sans-serif;
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin: 0 0 0.85rem;
  padding: 0;
  border: none;
}

/* Two-button row */
.markdown-preview-view .grimoire-page-nav-buttons {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.75rem;
}

/* Button — mirrors the Grimoire card surface (border + 4×4 hard-offset
   shadow + purple hover) but at button proportions. */
.markdown-preview-view a.grimoire-page-nav-button,
.markdown-preview-view .grimoire-page-nav-button {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 0.85rem 1rem;
  background-color: var(--background-primary);
  color: var(--text-normal) !important;
  border: 1px solid var(--background-modifier-border);
  border-radius: var(--grimoire-radius);
  box-shadow: 4px 4px 0 0 var(--background-modifier-border);
  font-family: "Inter", sans-serif;
  font-weight: 600;
  font-size: 0.95rem;
  letter-spacing: -0.01em;
  text-decoration: none !important;
  background-image: none !important;
  transition:
    box-shadow 0.15s ease,
    border-color 0.15s ease,
    color 0.15s ease;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.markdown-preview-view a.grimoire-page-nav-button:hover,
.markdown-preview-view .grimoire-page-nav-button:hover {
  border-color: var(--grimoire-purple-500);
  box-shadow: 4px 4px 0 0 var(--grimoire-purple-300);
  color: var(--grimoire-purple-700) !important;
}

.theme-dark .markdown-preview-view a.grimoire-page-nav-button,
.theme-dark .markdown-preview-view .grimoire-page-nav-button {
  box-shadow: 4px 4px 0 0 var(--grimoire-grey-800);
}

.theme-dark .markdown-preview-view a.grimoire-page-nav-button:hover,
.theme-dark .markdown-preview-view .grimoire-page-nav-button:hover {
  border-color: var(--grimoire-purple-400);
  box-shadow: 4px 4px 0 0 var(--grimoire-indigo-700);
  color: var(--grimoire-purple-200) !important;
}

/* ---- `[!nav]` callout: invisible wrapper that turns into the nav block ---
   Strips the default callout chrome, repurposes the callout title as the
   section title, and lays the two wikilinks out as buttons. */
.markdown-preview-view .callout[data-callout="nav"],
.callout[data-callout="nav"] {
  background: none !important;
  background-color: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  margin: 2.5rem 0 1.5rem !important;
  border-top: 1px solid var(--background-modifier-border) !important;
  /* Reserve 4px on the right + bottom so the buttons' 4×4 hard-offset
     shadow has room to render and isn't clipped at the page edge. */
  padding: 1.25rem 4px 4px 0 !important;
  display: block !important;
}

/* Callout title becomes the section heading */
.markdown-preview-view .callout[data-callout="nav"] > .callout-title,
.callout[data-callout="nav"] > .callout-title {
  padding: 0 !important;
  margin: 0 0 0.85rem !important;
  border: none !important;
  background: none !important;
  font-family: "Inter", sans-serif !important;
  font-size: 0.78rem !important;
  font-weight: 600 !important;
  letter-spacing: 0.08em !important;
  text-transform: uppercase !important;
  color: var(--text-muted) !important;
}

.markdown-preview-view .callout[data-callout="nav"] .callout-icon,
.callout[data-callout="nav"] .callout-icon {
  display: none !important;
}

.markdown-preview-view .callout[data-callout="nav"] .callout-title-inner,
.callout[data-callout="nav"] .callout-title-inner {
  font-family: "Inter", sans-serif !important;
  font-size: 0.78rem !important;
  font-weight: 600 !important;
  letter-spacing: 0.08em !important;
  text-transform: uppercase !important;
  color: var(--text-muted) !important;
}

/* Content area becomes the button row — defaults to 2 columns, override
   with `[!nav|cols-N]` (rules below). */
.markdown-preview-view .callout[data-callout="nav"] > .callout-content,
.callout[data-callout="nav"] > .callout-content {
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 0.75rem !important;
  padding: 0 !important;
  margin: 0 !important;
  background: none !important;
}

/* Column count overrides via callout metadata: `[!nav|cols-N]` */
.markdown-preview-view .callout[data-callout="nav"][data-callout-metadata="cols-1"] > .callout-content,
.callout[data-callout="nav"][data-callout-metadata="cols-1"] > .callout-content {
  grid-template-columns: 1fr !important;
}

.markdown-preview-view .callout[data-callout="nav"][data-callout-metadata="cols-2"] > .callout-content,
.callout[data-callout="nav"][data-callout-metadata="cols-2"] > .callout-content {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}

.markdown-preview-view .callout[data-callout="nav"][data-callout-metadata="cols-3"] > .callout-content,
.callout[data-callout="nav"][data-callout-metadata="cols-3"] > .callout-content {
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
}

.markdown-preview-view .callout[data-callout="nav"][data-callout-metadata="cols-4"] > .callout-content,
.callout[data-callout="nav"][data-callout-metadata="cols-4"] > .callout-content {
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
}

/* Obsidian wraps inline links in <p> — let those participate in the grid */
.markdown-preview-view .callout[data-callout="nav"] > .callout-content > p,
.callout[data-callout="nav"] > .callout-content > p {
  display: contents !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* Each link inside the [!nav] callout becomes a button */
.markdown-preview-view .callout[data-callout="nav"] .callout-content a,
.callout[data-callout="nav"] .callout-content a {
  display: flex !important;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 0.85rem 1rem;
  background-color: var(--background-primary);
  color: var(--text-normal) !important;
  border: 1px solid var(--background-modifier-border);
  border-radius: var(--grimoire-radius);
  box-shadow: 4px 4px 0 0 var(--background-modifier-border);
  font-family: "Inter", sans-serif;
  font-weight: 600;
  font-size: 0.95rem;
  letter-spacing: -0.01em;
  text-decoration: none !important;
  background-image: none !important;
  transition:
    box-shadow 0.15s ease,
    border-color 0.15s ease,
    color 0.15s ease;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.markdown-preview-view .callout[data-callout="nav"] .callout-content a:hover,
.callout[data-callout="nav"] .callout-content a:hover {
  border-color: var(--grimoire-purple-500);
  box-shadow: 4px 4px 0 0 var(--grimoire-purple-300);
  color: var(--grimoire-purple-700) !important;
}

.theme-dark .markdown-preview-view .callout[data-callout="nav"] .callout-content a,
.theme-dark .callout[data-callout="nav"] .callout-content a {
  box-shadow: 4px 4px 0 0 var(--grimoire-grey-800);
}

.theme-dark .markdown-preview-view .callout[data-callout="nav"] .callout-content a:hover,
.theme-dark .callout[data-callout="nav"] .callout-content a:hover {
  border-color: var(--grimoire-purple-400);
  box-shadow: 4px 4px 0 0 var(--grimoire-indigo-700);
  color: var(--grimoire-purple-200) !important;
}

/* Mobile: stack all nav buttons vertically (overrides any cols-N) */
@media (max-width: 640px) {
  .markdown-preview-view .grimoire-page-nav-buttons,
  .markdown-preview-view .callout[data-callout="nav"] > .callout-content,
  .callout[data-callout="nav"] > .callout-content,
  .markdown-preview-view .callout[data-callout="nav"][data-callout-metadata] > .callout-content,
  .callout[data-callout="nav"][data-callout-metadata] > .callout-content {
    grid-template-columns: 1fr !important;
    gap: 0.5rem !important;
  }
}

/* Suppress Obsidian's hover-preview popover on nav buttons (same trick we
   use for cards — the button text already advertises the destination). */
body:has(.callout[data-callout="nav"] a:hover) .popover.hover-popover,
body:has(.grimoire-page-nav-button:hover) .popover.hover-popover {
  display: none !important;
  opacity: 0 !important;
  pointer-events: none !important;
}

/* ---------------------------------------------------------------------------
   25. Misc polish
   --------------------------------------------------------------------------- */
.markdown-preview-view strong {
  color: var(--text-normal);
  font-weight: 700;
}

.markdown-preview-view em {
  color: var(--text-normal);
}

.markdown-preview-view mark {
  background-color: var(--text-highlight-bg);
  color: var(--text-normal);
  padding: 0 0.2em;
  border-radius: 3px;
}

/* Mobile tweaks */
@media (max-width: 768px) {
  .markdown-preview-view,
  .published-container .markdown-preview-sizer {
    padding: 1.25rem 1rem !important;
  }

  .markdown-preview-view h1 { font-size: 1.75rem; }
  .markdown-preview-view h2 { font-size: 1.4rem; }
  .markdown-preview-view h3 { font-size: 1.15rem; }
}
