/**
* shared.css
*
* Contains all shared css for the different files
* - CANVAS styles
* - MARKDOWN styles
* - TOC styles
* */

body {
  font-family: var(--font-main) /* var(--font-main) */;
  color: var(--color-foreground) /* var(--text-color) */;
}

#global-graph-container {
  width: 100%;
  height: 100%;
}

:target,
[id] {
  scroll-margin-top: 16px;
}

/* CANVAS */
.canvas-mode {
  position: relative;
  width: 100%;
  flex: 1;
  padding: 0;
  overflow: hidden;
  background-color: var(--bg-color);
}

#viewport {
  width: 100%;
  height: 100%;
  overflow: hidden;
  cursor: grab;
  position: relative;
  touch-action: none;
}

#viewport:active {
  cursor: grabbing;
}

#canvas-world {
  position: absolute;
  top: 0;
  left: 0;
  transform-origin: 0 0;
  will-change: transform;
}
.node {
  position: absolute;
  background: var(--bg-color);
  border: 2px solid var(--sidebar-border);
  border-radius: 8px;
  padding: 0;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  font-size: 1rem;
  overflow-y: auto;
}

.node p {
  margin: 0px;
}
.node-note {
  padding: 16px;
}

.node-title-link {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  margin-right: 8px;
  flex: 1;
}

.node-content-scroll {
  padding: 10px;
  overflow-y: auto;
  flex: 1;
  width: 100%;
  text-align: left;
}

.node-content-center {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100%;
  text-align: center;
  padding: 10px;
}

/* CANVAS dark mode tweaks */
:root[data-theme="dark"] .node,
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .node {
    background: var(--sidebar-bg);
    border-color: var(--sidebar-border);
  }
}

/* CANVAS colors */
.color-1 {
  border-color: var(--color-red) !important;
  background-color: color-mix(
    in srgb,
    var(--color-red),
    transparent 90%
  ) !important;
}
.color-2 {
  border-color: var(--color-orange) !important;
  background-color: color-mix(
    in srgb,
    var(--color-orange),
    transparent 90%
  ) !important;
}
.color-3 {
  border-color: var(--color-yellow) !important;
  background-color: color-mix(
    in srgb,
    var(--color-yellow),
    transparent 90%
  ) !important;
}
.color-4 {
  border-color: var(--color-green) !important;
  background-color: color-mix(
    in srgb,
    var(--color-green),
    transparent 90%
  ) !important;
}
.color-5 {
  border-color: var(--color-cyan) !important;
  background-color: color-mix(
    in srgb,
    var(--color-cyan),
    transparent 90%
  ) !important;
}
.color-6 {
  border-color: var(--color-purple) !important;
  background-color: color-mix(
    in srgb,
    var(--color-purple),
    transparent 90%
  ) !important;
}

/* CANVAS group */
.node.group {
  background-color: rgba(243, 244, 246, 0.5);
  border: 2px dashed #d1d5db;
  box-shadow: none;
  pointer-events: none;
  z-index: 0;
  padding: 1rem;
  overflow: visible !important;
  align-items: flex-start;
  justify-content: flex-start;
  text-align: left;
}

:root[data-theme="dark"] .node.group {
  border-color: #444;
  background-color: rgba(255, 255, 255, 0.05);
}

.node:not(.group) {
  z-index: 10;
}

#edges-layer {
  position: absolute;
  top: 0;
  left: 0;
  width: 1px;
  height: 1px;
  overflow: visible;
  z-index: 1;
  pointer-events: none;
}

/* CANVAS arrow marker styling */
#arrow-head path {
  fill: #9ca3af;
}
path.edge {
  fill: none;
  stroke: #9ca3af;
  stroke-width: 3px;
  marker-end: url(#arrow-head);
}

/* Canvas UI controls */
#canvas-controls {
  position: absolute;
  bottom: 20px;
  right: 20px;
  z-index: 100;
  display: flex;
  gap: 8px;
  background: var(--bg-color);
  padding: 6px;
  border-radius: 8px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  border: 1px solid var(--sidebar-border);
}

.canvas-btn {
  background: none;
  border: none;
  cursor: pointer;
  padding: 8px;
  border-radius: 4px;
  color: var(--text-color);
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  font-size: 0;
  width: 26px;
  height: 26px;
}

.canvas-btn:hover {
  background-color: var(--hover-color);
  color: var(--accent-color);
}

.canvas-btn::before {
  content: "";
  position: absolute;
  width: 18px;
  height: 18px;
  background-color: currentColor;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
  -webkit-mask-size: contain;
  mask-size: contain;
}

.icon-minus::before {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3C/svg%3E");
}

.icon-maximize::before {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 3H5a2 2 0 0 0-2 2v3'/%3E%3Cpath d='M21 8V5a2 2 0 0 0-2-2h-3'/%3E%3Cpath d='M3 16v3a2 2 0 0 0 2 2h3'/%3E%3Cpath d='M16 21h3a2 2 0 0 0 2-2v-3'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 3H5a2 2 0 0 0-2 2v3'/%3E%3Cpath d='M21 8V5a2 2 0 0 0-2-2h-3'/%3E%3Cpath d='M3 16v3a2 2 0 0 0 2 2h3'/%3E%3Cpath d='M16 21h3a2 2 0 0 0 2-2v-3'/%3E%3C/svg%3E");
}

.icon-plus::before {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3Cpath d='M12 5v14'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3Cpath d='M12 5v14'/%3E%3C/svg%3E");
}

/* CANVAS internal node items */
.canvas-node-image {
  overflow: hidden;
  border: none;
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
}

.canvas-node-image img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.canvas-node-header {
  position: absolute;
  height: 24px;
  top: -24px;
  width: 100%;
  padding: 8px 0px;
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--text-color);
  display: flex;
  justify-content: space-between;
  align-items: center;
  cursor: grab;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.canvas-node-header a {
  color: inherit;
  text-decoration: none;
}

.canvas-node-header a:hover {
  text-decoration: underline !important;
}

.canvas-node-content-box {
  border-radius: 8px;
  border: 2px solid var(--sidebar-border);
  width: 100%;
  height: 100%;
  overflow-y: scroll;
  position: relative;
}

.canvas-node-loading-note {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100%;
  color: var(--text-color);
}

.canvas-node-fallback {
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100%;
  color: var(--text-color);
  padding: 0.5rem;
  text-align: center;
}

.canvas-node-fallback span {
  font-family: monospace;
  font-size: 0.8rem;
  word-break: break-all;
}

.canvas-node-link {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  padding: 1rem;
  color: var(--text-decoration);
  text-decoration: none;
  transition-property:
    color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.canvas-node-link:hover {
  background-color: var(--background-color);
}

.canvas-node-link span {
  font-weight: 500;
  font-size: 0.8rem;
  word-break: break-all;
  text-align: center;
}

.canvas-group-label {
  position: absolute;
  top: -25px;
  left: 0;
  font-weight: bold;
  color: var(--text-color);
  text-transform: uppercase;
  font-size: 0.75rem;
  pointer-events: auto;
}

/* MARKDOWN */
.content hr {
  width: 100%;
  margin-top: 1rem;
  margin-bottom: 1rem;
  color: var(--sidebar-border);
}
.content {
  width: 100%;
}
.content h1,
.content h2 {
  border-bottom: 1px solid var(--sidebar-border);
  padding-bottom: 0.3rem;
  margin-bottom: 1rem;
}
.content h1 {
  font-size: 2em;
  font-weight: bold;
  margin-top: 2rem;
}
.content h2 {
  font-size: 1.5em;
  font-weight: bold;
  margin-top: 1.5rem;
}
.content h3 {
  font-size: 1.25em;
  font-weight: bold;
  margin-top: 1rem;
}
.content h4 {
  font-size: 1em;
  font-weight: bold;
}
.content h5 {
  font-size: 0.875em;
  font-weight: bold;
}
.content h6 {
  font-size: 0.85em;
  font-weight: bold;
}
.content {
  max-width: 65ch;
  margin: 0 auto;
  line-height: 1.6;
}
.content p {
  margin-bottom: 1rem;
}

.content h1 {
  margin-top: 0;
}
.content img {
  max-width: 100%;
  border-radius: 4px;
}
.content a {
  color: var(--accent-color);
  text-decoration: none;
}
.content a:hover {
  text-decoration: underline;
}

.content a[href^="http"]:not([href*="localhost"])::after {
  content: " ↗";
  font-size: 0.8em;
  opacity: 0.7;
  display: inline-block;
  margin-left: 2px;
}

.content ol,
.content ul {
  padding-left: 1.5rem;
  padding-bottom: 1rem;
}
.content ol li::marker {
  color: #888;
  font-weight: normal;
  font-size: 1em;
}
.content li input[type="checkbox"] {
  margin-right: 0.5em;
}
.content ul {
  list-style-type: disc;
}
.content ul li:has(input[type="checkbox"]) {
  list-style-type: none;
  margin-left: -1rem;
}
.content blockquote:not(.callout) {
  border-left: 4px solid var(--accent-color);
  margin: 0;
  padding-left: 1rem;
  color: #888;
}

.content table {
  display: block;
  overflow-x: auto;
  width: 100%;
  -webkit-overflow-scrolling: touch;
  border-collapse: collapse;
  width: 100%;
  margin: 1rem 0;
  border: 1px solid var(--sidebar-border);
}

.content th,
.content td {
  border: 1px solid var(--sidebar-border);
  padding: 8px 12px;
  text-align: left;
}

.content th {
  background-color: var(--sidebar-bg);
  font-weight: 600;
}
.content tr:nth-child(even) {
  background-color: rgba(0, 0, 0, 0.02);
}
mark {
  background-color: color-mix(in srgb, var(--color-yellow), transparent 70%);
  color: inherit;
  border-radius: 2px;
  padding: 0 2px;
}

/* MARKDOWN embed */
.markdown-embed {
  border-left: 2px solid var(--accent-color);
  padding-left: 2rem;
}

.markdown-embed-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 0.9rem;
}

.markdown-embed-title {
  font-weight: 600;
  text-decoration: none;
}

.markdown-embed-link {
  display: flex;
  align-items: center;
  padding: 0.15rem;
  border-radius: 4px;
}

.markdown-embed-link:hover {
  background-color: var(--sidebar-border);
}

/* MARKDOWN callouts */
.callout {
  overflow: hidden;
  margin: 1em 0;
  padding: 0;
  border: 1px solid color-mix(in srgb, var(--callout-color), transparent 75%);
  background-color: color-mix(in srgb, var(--callout-color), transparent 90%);
  border-radius: 4px;
}

.content blockquote.callout {
  border-left: none !important;
  padding-left: 0 !important;
  margin: 1em 0;
  color: inherit;
}

.callout-title {
  padding: 0.5em 1em;
  display: flex;
  align-items: center;
  gap: 0.5em;
  background-color: color-mix(in srgb, var(--callout-color), transparent 90%);
  font-weight: bold;
  color: var(--callout-color);
}

details.callout > summary {
  list-style: none;
  cursor: pointer;
}
details.callout > summary::-webkit-details-marker {
  display: none;
}
details.callout > summary .callout-title::after {
  content: "›";
  margin-left: auto;
  font-size: 1.2em;
  transition: transform 0.2s;
}
details.callout[open] > summary .callout-title::after {
  transform: rotate(90deg);
}
.callout-icon {
  display: flex;
  align-items: center;
}
.callout-title .callout-icon svg {
  width: 18px;
  height: 18px;
  vertical-align: text-bottom;
}
.callout p {
  padding: 0.5em 1em;
  margin: 0;
  color: var(--text-color);
}

.callout[data-callout="note"],
.callout[data-callout="info"],
.callout[data-callout="new"],
.callout[data-callout="todo"] {
  --callout-color: var(--color-blue);
}
.callout[data-callout="abstract"],
.callout[data-callout="summary"],
.callout[data-callout="tldr"] {
  --callout-color: var(--color-cyan);
}
.callout[data-callout="tip"],
.callout[data-callout="hint"],
.callout[data-callout="important"] {
  --callout-color: var(--color-cyan);
}
.callout[data-callout="success"],
.callout[data-callout="check"],
.callout[data-callout="done"] {
  --callout-color: var(--color-green);
}
.callout[data-callout="question"],
.callout[data-callout="help"],
.callout[data-callout="faq"] {
  --callout-color: var(--color-orange);
}
.callout[data-callout="warning"],
.callout[data-callout="caution"],
.callout[data-callout="attention"] {
  --callout-color: var(--color-orange);
}
.callout[data-callout="failure"],
.callout[data-callout="fail"],
.callout[data-callout="missing"] {
  --callout-color: var(--color-red);
}
.callout[data-callout="danger"],
.callout[data-callout="error"] {
  --callout-color: var(--color-red);
}
.callout[data-callout="bug"] {
  --callout-color: var(--color-red);
}
.callout[data-callout="example"] {
  --callout-color: var(--color-purple);
}
.callout[data-callout="quote"],
.callout[data-callout="cite"] {
  --callout-color: var(--text-color);
}

/* MARKDOWN syntax highlighting */
.chroma {
  color: var(--text-color);
  background-color: var(--sidebar-bg);
  padding: 1em;
  border-radius: 4px;
  overflow-x: auto;
  position: relative;
  font-size: 0.95rem;
}

.copy-code-btn {
  position: absolute;
  top: 0.5em;
  right: 0.5em;
  background-color: var(--bg-color);
  color: var(--text-color);
  border: 1px solid var(--sidebar-border);
  border-radius: 4px;
  padding: 4px 8px;
  font-size: 0.8rem;
  cursor: pointer;
  opacity: 0;
  transition:
    opacity 0.2s,
    background-color 0.2s;
  z-index: 10;
}

.chroma:hover .copy-code-btn {
  opacity: 1;
}
.copy-code-btn:hover {
  background-color: var(--hover-color);
  color: var(--accent-color);
}

.chroma .k {
  color: var(--color-purple);
  font-weight: bold;
}
.chroma .kt {
  color: var(--color-yellow);
}
.chroma .n {
  color: var(--text-color);
}
.chroma .nc {
  color: var(--color-green);
}
.chroma .nf {
  color: var(--color-blue);
}
.chroma .s,
.chroma .sa,
.chroma .sb,
.chroma .sc,
.chroma .dl,
.chroma .sd,
.chroma .s2,
.chroma .se,
.chroma .sh,
.chroma .si,
.chroma .sx,
.chroma .sr,
.chroma .s1,
.chroma .ss {
  color: var(--color-green);
}
.chroma .c,
.chroma .c1,
.chroma .cs,
.chroma .cm {
  color: var(--color-comment);
  font-style: italic;
}
.chroma .o,
.chroma .ow {
  color: var(--color-cyan);
}

/* BREADCRUMBS */
.breadcrumbs {
  text-align: center;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

/* TABLE OF CONTENTS */
.toc {
  font-size: 0.85rem;
}

.toc ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

.toc a {
  padding-top: 4px;
  padding-bottom: 4px;
  text-decoration: none;
  opacity: 1;
  display: block;
}

.toc a:hover {
  opacity: 0.5 !important;
}

.toc-level-1 {
  font-weight: 600;
  margin-top: 0.5rem;
  margin-bottom: 0.25rem;
}

.toc-level-1 a {
  padding-left: 0 !important;
}

.toc-level-2 {
}
.toc-level-2 a {
  padding-left: 0 !important;
  margin-left: 1.5rem;
}

.toc-level-3 {
  margin-left: 1.5rem !important;
}
.toc-level-3 a {
  padding-left: 0 !important;
  margin-left: 1.5rem;
}

.toc-level-4,
.toc-level-5,
.toc-level-6 {
  display: none;
}
