/*!
 * PrismJS — foundation26 custom theme
 * Token-Mapping auf foundation26 Design-Tokens (mode-aware Light/Dark via --bs-* Variablen).
 * Container-Optik (Border, Padding, Shadow) kommt aus bootstrap-typography.css.
 * Plugin-Styles (Line-Numbers, Toolbar, Copy-Button) integriert.
 */

/* ========================================================================
   BASE — schriftliche Defaults für Prism-Blöcke
   ======================================================================== */

pre[class*="language-"],
code[class*="language-"] {
  font-family: var(--bs-font-monospace);
  font-size: var(--bs-font-size-small);
  line-height: var(--bs-line-height-small);
  tab-size: 2;
  -moz-tab-size: 2;
  hyphens: none;
  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  text-shadow: none;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  word-wrap: normal;
}

/* Inline code keeps its color from typography.css */
:not(pre) > code[class*="language-"] {
  padding: 0 0.25em;
  border-radius: .125em;
  background-color: hsl(from var(--bs-overlay) h s l / 0.05);
}

/* ========================================================================
   TOKEN COLORS — gemappt auf foundation26 Brand- und Text-Tokens
   ======================================================================== */

.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
  color: hsl(from var(--bs-body-color) h s l / 0.45);
  font-style: italic;
}

.token.punctuation,
.token.operator {
  color: hsl(from var(--bs-body-color) h s l / 0.7);
}

.token.namespace {
  opacity: 0.7;
}

.token.tag,
.token.keyword,
.token.selector,
.token.atrule {
  color: var(--bs-primary-base);
}

.token.attr-name,
.token.property {
  color: var(--bs-secondary-base);
}

.token.function,
.token.class-name {
  color: var(--bs-accent-base);
}

.token.attr-value,
.token.string,
.token.char,
.token.url {
  color: var(--bs-success-500);
}

.token.number,
.token.boolean,
.token.constant,
.token.symbol {
  color: var(--bs-warning-500);
}

.token.regex,
.token.important,
.token.variable,
.token.deleted {
  color: var(--bs-danger-500);
}

.token.builtin,
.token.inserted {
  color: var(--bs-info-500);
}

.token.entity {
  cursor: help;
}

.token.bold,
.token.important {
  font-weight: var(--bs-font-weight-bold);
}

.token.italic {
  font-style: italic;
}

/* ========================================================================
   LINE NUMBERS PLUGIN
   ======================================================================== */

pre[class*="language-"].line-numbers {
  position: relative;
  padding-left: calc(var(--bs-gutter-x) * 2 );
  counter-reset: linenumber;
}

pre[class*="language-"].line-numbers > code {
  position: relative;
  white-space: inherit;
}

.line-numbers .line-numbers-rows {
  position: absolute;
  pointer-events: none;
  top: 0;
  font-size: 100%;
  left: calc(var(--bs-gutter-x) * -1.125);
  width: calc(var(--bs-gutter-x) * .75);
  border-right: var(--bs-border-width) solid hsl(from var(--bs-border-color) h s l / var(--bs-border-opacity));
  user-select: none;
}

.line-numbers-rows > span {
  display: block;
  counter-increment: linenumber;
}

.line-numbers-rows > span::before {
  content: counter(linenumber);
  color: hsl(from var(--bs-body-color) h s l / 0.35);
  display: block;
  padding-right: 0.8em;
  text-align: right;
}

/* ========================================================================
   TOOLBAR + COPY-TO-CLIPBOARD PLUGIN
   ======================================================================== */

div.code-toolbar {
  position: relative;
}

div.code-toolbar > .toolbar {
  position: absolute;
  top: 0.5em;
  right: 0.5em;
  z-index: 10;
  display: flex;
  gap: 0.25em;
  opacity: 0;
  transition: opacity 0.2s ease-in-out;
}

div.code-toolbar:hover > .toolbar,
div.code-toolbar:focus-within > .toolbar {
  opacity: 1;
}

div.code-toolbar > .toolbar > .toolbar-item > button,
div.code-toolbar > .toolbar > .toolbar-item > a,
div.code-toolbar > .toolbar > .toolbar-item > span {
  color: var(--bs-body-color);
  font-family: var(--bs-font-sans-serif);
  font-size: var(--bs-font-size-extra-small);
  font-weight: var(--bs-font-weight-light);
  line-height: 1.4;
  padding: 0.25em 0.625em;
  background: hsl(from var(--bs-body-bg) h s l / 0.85);
  border: var(--bs-border-width) solid hsl(from var(--bs-border-color) h s l / var(--bs-border-opacity));
  border-radius: var(--bs-border-radius-4, 0.25rem);
  cursor: pointer;
  text-decoration: none;
  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
}

div.code-toolbar > .toolbar > .toolbar-item > button:hover,
div.code-toolbar > .toolbar > .toolbar-item > button:focus-visible,
div.code-toolbar > .toolbar > .toolbar-item > a:hover,
div.code-toolbar > .toolbar > .toolbar-item > a:focus-visible {
  background: var(--bs-body-bg);
  border-color: hsl(from var(--bs-border-color) h s l / var(--bs-border-opacity-subtle));
  outline: 0;
}
