<!DOCTYPE html>
<html lang="en-US">
<head>
	<meta charset="UTF-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Home - Dino Crisis</title>
<link rel="alternate" type="application/rss+xml" title="Dino Crisis &raquo; Feed" href="https://dinocrisis.com/feed/" />
<link rel="alternate" type="application/rss+xml" title="Dino Crisis &raquo; Comments Feed" href="https://dinocrisis.com/comments/feed/" />
<!-- SureRank Meta Data -->
<link rel="canonical" href="https://dinocrisis.com/">
<meta name="robots" content="index, follow">
<meta property="og:url" content="https://dinocrisis.com/">
<meta property="og:site_name" content="Dino Crisis">
<meta property="og:locale" content="en_US">
<meta property="og:type" content="website">
<meta property="og:title" content="Home - Dino Crisis">
<meta property="article:publisher" content="https://www.facebook.com/dinocrisisfans">
<meta property="article:published_time" content="2025-07-25T17:06:52+00:00">
<meta property="article:modified_time" content="2026-03-04T16:38:57+00:00">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Home - Dino Crisis">
<script type="application/ld+json" id="surerank-schema">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://dinocrisis.com/#website","name":"Dino Crisis","description":"A fansite for fans of the Dino Crisis series of video games.","url":"https://dinocrisis.com/","potentialAction":{"@id":"https://dinocrisis.com/#searchaction"},"publisher":{"@id":"https://dinocrisis.com/#organization"}},{"@type":"WebPage","@id":"https://dinocrisis.com#webpage","name":"Home","inLanguage":"en-US","url":"https://dinocrisis.com","isPartOf":{"@id":"https://dinocrisis.com/#website"},"publisher":{"@id":"https://dinocrisis.com/#organization"}},{"@type":"Organization","@id":"https://dinocrisis.com/#organization","name":"Dino Crisis","logo":"https://dinocrisis.com/wp-content/uploads/2022/11/dino-crisis-logo.svg","sameAs":["https://www.facebook.com/dinocrisisfans"],"slogan":"A fansite for fans of the Dino Crisis series of video games.","url":"https://dinocrisis.com/ "},{"@type":"SearchAction","@id":"https://dinocrisis.com/#searchaction","target":"https://dinocrisis.com/?s={search_term_string}","query-input":"required name=search_term_string"}]}</script>
<!-- /SureRank Meta Data -->
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://dinocrisis.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fdinocrisis.com%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://dinocrisis.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fdinocrisis.com%2F&#038;format=xml" />
<style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>

<style id="wp-block-post-content-inline-css">
.wp-block-post-content{display:flow-root}
/*# sourceURL=https://dinocrisis.com/wp-includes/blocks/post-content/style.min.css */
</style>



<link rel="https://api.w.org/" href="https://dinocrisis.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://dinocrisis.com/wp-json/wp/v2/pages/2" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://dinocrisis.com/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.0" />
<link rel='shortlink' href='https://dinocrisis.com/' />
			<style id="etch-defaults-css-styles">
				@layer etch-defaults {
	body {
		line-height: 1.5;
		-webkit-font-smoothing: antialiased;
		font-family: system-ui;
		display: flex;
		flex-direction: column;
	}
}
			</style>
						<style id="etch-reset-css-styles">
				@layer etch-reset {
	/* Box sizing rules */
	*,
	*::before,
	*::after {
		box-sizing: border-box;
	}

	/* Remove default margins */
	* {
		margin: 0;
	}

	/* Prevent font size inflation */
	html {
		-moz-text-size-adjust: none;
		-webkit-text-size-adjust: none;
		text-size-adjust: none;
		scrollbar-gutter: stable;
	}

	/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
	ul[role='list'],
	ol[role='list'] {
		list-style: none;
	}

	ul[class]:not(
			[data-etch-has-custom-classes='false'], /* data-etch-has-custom-classes is builder only (not output on frontend) */
			.wp-block-list,
			.list,
			[class*='marker']
		),
	ol[class]:not(
			[data-etch-has-custom-classes='false'], /* data-etch-has-custom-classes is builder only (not output on frontend) */
			.wp-block-list,
			.list,
			[class*='marker']
		) {
		padding: 0;
		list-style: none;
	}

	/* Set body min height */
	body {
		min-block-size: 100svh;
		display: flex;
		flex-direction: column;

		main {
			flex-grow: 1;
		}
	}

	/* A elements that don't have a class get default styles */
	a:not([class]) {
		text-decoration-skip-ink: auto;
	}

	/* Make media easier to work with */
	img,
	picture,
	video,
	canvas,
	svg:not(.block-editor-list-view-tree svg),
	a:not(
		p > a,
		span > a,
		h1 > a,
		h2 > a,
		h3 > a,
		h4 > a,
		h5 > a,
		h6 > a,
		li > a,
		em > a,
		q > a,
		label > a,
		strong > a,
		figcaption > a,
		.editor-styles-wrapper a
	) {
		max-inline-size: 100%;
		height: auto;
		display: block;
	}

	/* Inherit fonts for inputs and buttons */
	input,
	button,
	textarea,
	select {
		font: inherit;
		font-size: inherit;
	}

	button {
		cursor: pointer;
		background-color: transparent;
		border: none;
		color: currentColor;
	}

	/* Make sure textareas without a rows attribute are not tiny */
	textarea:not([rows]) {
		min-height: 10em;
	}

	/* Avoid text overflows */
	p,
	h1,
	h2,
	h3,
	h4,
	h5,
	h6 {
		overflow-wrap: break-word;
	}

	figure > img {
		inline-size: 100%;
	}

	img {
		block-size: auto;
	}

	/* Add back select GB styles that are removed by global settings toggle */
	.has-text-align-center {
		text-align: center;
	}

	.has-text-align-left {
		text-align: left;
	}

	.has-text-align-right {
		text-align: right;
	}

	.has-fit-text {
		white-space: nowrap !important;
	}

	#end-resizable-editor-section {
		display: none;
	}

	.aligncenter {
		clear: both;
	}

	.items-justified-left {
		justify-content: flex-start;
	}

	.items-justified-center {
		justify-content: center;
	}

	.items-justified-right {
		justify-content: flex-end;
	}

	.items-justified-space-between {
		justify-content: space-between;
	}

	.screen-reader-text {
		border: 0;
		clip-path: inset(50%);
		height: 1px;
		margin: -1px;
		overflow: hidden;
		padding: 0;
		position: absolute;
		width: 1px;
		word-wrap: normal !important;
	}

	.screen-reader-text:focus {
		background-color: #ddd;
		clip-path: none;
		color: #444;
		display: block;
		font-size: 1em;
		height: auto;
		left: 5px;
		line-height: normal;
		padding: 15px 23px 14px;
		text-decoration: none;
		top: 5px;
		width: auto;
		z-index: 100000;
	}
}
			</style>
			<link rel="icon" href="https://dinocrisis.com/wp-content/uploads/2023/07/favicon.svg" sizes="32x32" />
<link rel="icon" href="https://dinocrisis.com/wp-content/uploads/2023/07/favicon.svg" sizes="192x192" />
<link rel="apple-touch-icon" href="https://dinocrisis.com/wp-content/uploads/2023/07/favicon.svg" />
<meta name="msapplication-TileImage" content="https://dinocrisis.com/wp-content/uploads/2023/07/favicon.svg" />
<style id="etch-page-styles">:where([data-etch-element="section"]) { inline-size: 100%;
  display: flex;
  flex-direction: column;
  align-items: center; }
.header-wrapper { background: var(--neutral-ultra-light);
  pointer-events: none;
  z-index: 50;
  padding: 0;

  > * {
    pointer-events: auto;
  }

  /* HEADER */

  /* - Sticky Header */
  &[data-sticky-header='true'] {
    position: sticky;
    inset-block-start: var(--wp-admin--admin-bar--height, 0px);
  }

  /* - hide on scroll */
  &[data-hide-on-scroll='true'] .header {
    transition: transform 0.4s var(--ease-swift);
  }

  /* - if hiding the header move the header up on scroll */
  &.hide .header {
    transform: translateY(-100%);
  }

  &:has(.menu-wrapper.mobile) {
    .toggle {
      display: flex;
      z-index: 1000;
    }
  }

  /* - Skip Link */
  .skip-link {
    position: absolute;
    top: -1500px;
    left: 32px;
    overflow: hidden;
    z-index: 999;
    background: white;
    color: black;
    border: none;

    &:focus-visible {
      top: 32px;
    }
  }

  /* VARIABLES */

  /* - link vars */
  --link-color: var(--text-color-dark);
  --link-color-hover: var(--text-dark);
  --link-color-active: var(--link-color-hover);
  --link-bg-color: transparent;
  --link-bg-color-hover: var(--bg-light);
  --link-bg-color-active: var(--link-bg-color-hover);
  --link-font-weight: var(--btn-font-weight);
  --link-transition: all 0.2s ease-out;
  --link-padding-inline: var(--btn-padding-inline);
  --link-padding-block: var(--btn-padding-block);
  --link-border-radius: var(--btn-border-radius);

  /* - dropdown vars*/
  --dropdown-padding: var(--space-s);
  --dropdown-border-radius: var(--radius);
  --dropdown-border-width: 0px;
  --dropdown-border-color: var(--border-color-dark);
  --dropdown-bg: var(--neutral-ultra-light);
  --dropdown-box-shadow: 0px 1px 1px rgba(3, 7, 18, 0.01), 0px 2px 3px rgba(3, 7, 18, 0.01), 0px 5px 6px rgba(3, 7, 18, 0.01), 0px 8px 11px rgba(3, 7, 18, 0.02), 0px 13px 18px rgba(3, 7, 18, 0.03), 0px 18px 25px rgba(3, 7, 18, 0.03), 0px 25px 34px rgba(3, 7, 18, 0.04), 0px 32px 45px rgba(3, 7, 18, 0.04);
  --dropdown-link-min-border-radius: 8px;
  --dropdown-link-padding-block: 0.75em;
  --dropdown-link-padding-inline: 0.75em;
  --dropdown-link-font-weight: var(--link-font-weight);
  --dropdown-link-color: var(--link-color);
  --dropdown-link-color-hover: var(--link-color-hover);
  --dropdown-link-color-active: var(--link-color-active);
  --dropdown-link-bg-color: var(--link-bg-color);
  --dropdown-link-bg-color-hover: var(--link-bg-color-hover);
  --dropdown-link-bg-color-active: var(--link-bg-color-active);

  /* - available dropdown vars
  --dropdown-transition-property
  --dropdown-transition-duration
  --dropdown-transition-delay
  --dropdown-transition-timing
  */

  /* - starting position for dropdown when closed on desktop (closed)*/
  --dropdown-closed-top: calc(var(--space-m) + 20px);

  /* - ending position for dropdown when closed on desktop (open)*/
  --dropdown-open-top: calc(var(--space-m) + 20px);

  /* - mobile vars*/
  --mobile-menu-padding-inline: var(--gutter);
  --mobile-menu-padding-block: var(--space-m);
  --mobile-menu-bg-color: var(--white);
  --mobile-menu-width: 768px;
  --mobile-dropdown-stacked-timing: cubic-bezier(0.86, 0.01, 0.09, 1.01);

  /* DROPDOWN SETTINGS */

  /* - global dropdown animation closed */
  .menu-dropdown .menu-dropdown__content-wrapper {
    filter: blur(4px);
  }

  /* - global dropdown animation closed */
  .menu-dropdown.is-open > .menu-dropdown__content-wrapper {
    filter: blur(0);
  }

  /* - desktop dropdown animation closed */
  .menu-wrapper.desktop .menu-dropdown .menu-dropdown__content-wrapper {
    scale: 0.95;
  }

  /* - desktop dropdown animation open */
  .menu-wrapper.desktop .menu-dropdown.is-open > .menu-dropdown__content-wrapper {
    scale: 1;
  }

  /* - dropdown back button */
  .menu-dropdown-back-button {
    font-weight: var(--link-font-weight);
    padding-block: 1em;
    padding-inline: var(--mobile-menu-padding-inline);
    color: var(--link-color);
    background-color: var(--mobile-menu-bg-color);
    border-block-end: 1px solid #ececec;
  }

  /* ON DESKTOP */
  .menu-wrapper.desktop {
    /* - top level links */
    .nav__list > li > *:is(a, button) {
      color: var(--link-color);
      text-decoration: none;
      line-height: 100%;
      border-radius: var(--link-border-radius);
      transition: var(--link-transition);
      padding-inline: var(--link-padding-inline);
      padding-block: var(--link-padding-block);
      font-weight: var(--link-font-weight);

      &:hover,
      &.active {
        background-color: var(--link-bg-color-hover);
        color: var(--link-color-hover);
      }

      &.active-link {
        color: var(--link-color-active);
        background: var(--link-bg-color-active);
      }
    }

    /* - last top level item as button (uncomment if wanted)
    .nav__list > li:last-child > *:is(a, button) {
      --btn-background: var(--primary);
      --btn-background-hover: var(--primary-hover);
      --btn-text-color: var(--primary-ultra-light);
      --btn-text-color-hover: var(--primary-ultra-light);
      --btn-border-color: var(--primary);
      --btn-border-color-hover: var(--primary-hover);
      --btn-outline-background-hover: var(--primary-hover);
      --btn-outline-border-hover: var(--primary-hover);
      --btn-outline-text-color: var(--primary);
      --btn-outline-text-color-hover: var(--primary-ultra-light);
      --focus-color: var(--primary-dark);
      padding-block: var(--btn-padding-block);
      padding-inline: var(--btn-padding-inline);
      min-inline-size: var(--btn-min-width);
      line-height: var(--btn-line-height);
      font-size: var(--btn-font-size, var(--text-m));
      font-weight: var(--btn-font-weight);
      font-style: var(--btn-font-style);
      text-decoration: var(--btn-text-decoration);
      text-transform: var(--btn-text-transform);
      letter-spacing: var(--btn-letter-spacing);
      border-width: var(--btn-border-width);
      border-style: var(--btn-border-style);
      border-radius: var(--btn-border-radius);
      display: var(--btn-display, inline-flex);
      text-align: center;
      justify-content: center;
      align-items: center;
      background: var(--btn-background);
      color: var(--btn-text-color);
      border-color: var(--btn-border-color);
      transition: var(--btn-transition, var(--transition));
    
      &:hover, &:focus-visible {
        background: var(--btn-background-hover);
        border-color: var(--btn-border-color-hover);
        color: var(--btn-text-color-hover);
        text-decoration: var(--btn-text-decoration-hover);
      }
    }
    */

    /* - direct list items of the nav list */
    .nav__list > li {
      inline-size: fit-content;
    }

    /* - links inside a standard dropdown */
    .menu-dropdown__content > li > *:is(a, button) {
      color: var(--link-color);
      text-decoration: none;
      line-height: 100%;
      padding-block: var(--dropdown-link-padding-block);
      padding-inline: var(--dropdown-link-padding-inline);
      color: var(--dropdown-link-color);
      background-color: var(--dropdown-link-bg-color);
      border-radius: max(calc(var(--dropdown-border-radius) - var(--dropdown-padding)), var(--dropdown-link-min-border-radius));
      transition: var(--link-transition);
      white-space: nowrap;
      font-weight: var(--dropdown-link-font-weight);

      &:hover,
      &.active {
        background-color: var(--dropdown-link-bg-color-hover);
        color: var(--dropdown-link-color-hover);
      }

      &.active-link {
        color: var(--dropdown-link-color-active);
        background: var(--dropdown-link-bg-color-active);
      }
    }
  }

  /* ON MOBILE */
  .menu-wrapper.mobile {
    /* - sync top level links and links inside standard dropdown */
    .nav__list > li > *:is(a, button),
    .menu-dropdown__content > li > *:is(a, button) {
      color: var(--link-color);
      text-decoration: none;
      line-height: 100%;
      font-weight: var(--btn-font-weight);
      padding-block: var(--btn-padding-block);
      background-color: var(--link-bg-color);
      transition: var(--link-transition);
      padding-inline: 0;
    }

    .menu-wrapper__inner {
      display: flex;
      flex-direction: column;
    }

    .nav {
      flex: 1;
      position: relative;
      padding-inline: var(--mobile-menu-padding-inline);
      overflow-y: auto;
      overflow-x: clip;
    }

    .nav__list {
      flex-direction: column;
      flex-grow: 1;
      block-size: 100%;

      > li {
        inline-size: 100%;
        max-inline-size: 100%;

        > a,
        .menu-dropdown,
        .menu-dropdown__trigger {
          inline-size: 100%;
        }
      }
    }

    .menu-dropdown__trigger {
      inline-size: 100%;
      justify-content: space-between;
    }

    /* - Spacing refinements for different mobile modes */
    :where(& .menu-dropdown__content-wrapper.stacked-mode .menu-dropdown__content) {
      padding-block: var(--mobile-menu-padding-block);
      padding-inline: var(--mobile-menu-padding-inline);
    }

    :where(& .menu-dropdown.accordion-mode .menu-dropdown__content) {
      padding-inline: var(--space-xs);
    }

    :where(& .menu-dropdown.accordion-mode[data-mega-menu='true'] .menu-dropdown__content) {
      padding-block: var(--space-xs);
    }
  } }
.header { --ease-swift: cubic-bezier(0.78, 0.02, 0.22, 0.9);
  padding-inline: var(--gutter);
  padding-block: var(--space-m);
  inline-size: 100%;

  &:has(.menu-wrapper.mobile:not(.overlay-mode)) {
    position: relative;
  } }
:where([data-etch-element="container"]) { inline-size: 100%;
  display: flex;
  flex-direction: column;
  max-inline-size: var(--content-width, 1366px);
  align-self: center; margin-inline: auto; }
.header__container { display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;

  .toggle {
    display: none;
  } }
.header__logo { svg {
    width: 4rem;
    height: auto;
    transition: 300ms;
  }
  svg:hover {
    transform: rotateZ(-1deg) scale(1.1);
  }
  svg path {
    fill: var(--text-color);
  } }
:where([data-etch-element="flex-div"]) { inline-size: 100%;
  display: flex;
  flex-direction: column; }
.menu-wrapper { gap: 0;
  inline-size: fit-content;

  /* - on mobile off canvas mode */
  &.mobile.off-canvas-mode {
    position: fixed;
    inset: 0;
    visibility: hidden;
    inline-size: 100%;
    pointer-events: none;
    z-index: 999;
    opacity: 1;
    transition: visibility var(--mobile-menu-transition-duration, 0.2s) ease-out;
  }

  /* - on mobile reveal mode */
  &.mobile.reveal-mode {
    inline-size: 100%;
    position: absolute;
    inset-block-start: 100%;
    inset-inline: 0;
    overflow: hidden;
    visibility: hidden;
    clip-path: polygon(0 0, 100% 0, 100% 0, 0 0);
    background-color: var(--mobile-menu-bg-color);
    transition: clip-path, visibility, transform, opacity;
    transition-duration: var(--mobile-menu-transition-duration, 0.2s);
    transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);

    .menu-wrapper__inner {
      overflow-y: auto;
      overflow-x: clip;
      transform: translateY(20px);
    }

    .nav {
      padding-block-end: var(--mobile-menu-padding-block);
    }
  }

  /* - on mobile AND on open */
  &.mobile.open {
    visibility: visible;
    opacity: 1;
  }

  /* - on mobile AND open AND reveal mode */
  &.mobile.reveal-mode.open {
    clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);

    .menu-wrapper__inner {
      transform: translateY(0);
    }
  }

  /* HELPER CLASSES */

  /* - hide item on desktop */
  &.desktop :is(.hide-from-desktop-menu, [data-menu-hide='desktop']) {
    display: none;
  }

  /* - hide item on mobile */
  &.mobile :is(.hide-from-mobile-menu, [data-menu-hide='mobile']) {
    display: none;
  }

  /* hide menu until initialized */

  &:not([data-menu-initialized]) {
    opacity: 0;
  } }
.menu-wrapper__inner { pointer-events: auto;
  min-block-size: 0px;
  transition-property: visibility, opacity, transform;
      transition-duration: var(--mobile-menu-transition-duration, 0.2s);
      transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1);

  .menu-wrapper.off-canvas-mode.mobile & {
    position: absolute;
    inset-block-end: 0;
    z-index: 999;
    opacity: 0;
    visibility: hidden;
    background: var(--mobile-menu-bg-color);
    max-inline-size: var(--mobile-menu-width, 500px);
    inline-size: 100%;
    overflow: hidden;
    block-size: 100%;
    inset-block-start: var(--wp-admin--admin-bar--height, 0px);
  }

  .menu-wrapper.off-canvas-mode.mobile.open & {
    opacity: 1;
    visibility: visible;
    transform: translate(0, 0) !important;
  }

  .menu-wrapper.off-canvas-mode.mobile[data-mobile-off-canvas-direction='from right' i] & {
    transform: translateX(100%);
    inset-inline-end: 0;

    html[dir='RTL'] & {
      inset-inline-start: 0;
      inset-inline-end: unset;
    }
  }

  .menu-wrapper.off-canvas-mode.mobile[data-mobile-off-canvas-direction='from left' i] & {
    transform: translateX(-100%);
    will-change: inset-inline;
    inset-inline-start: 0;

    html[dir='RTL'] & {
      inset-inline-end: 0;
      inset-inline-start: unset;
    }
  }

  .menu-wrapper.off-canvas-mode.mobile[data-mobile-off-canvas-direction='from top' i] & {
    transform: translateY(-100%);
    --mobile-menu-width: 100%;
  }

  .menu-wrapper.off-canvas-mode.mobile[data-mobile-off-canvas-direction='from bottom' i] & {
    transform: translateY(100%);
    --mobile-menu-width: 100%;
  }

  .menu-wrapper:not(.off-canvas-mode).mobile & {
    max-block-size: 70vh;
  } }
.mobile-menu-header { flex-direction: column;
  justify-content: center;
  padding-inline: var(--mobile-menu-padding-inline);
  min-block-size: var(--header-height);
  display: none;

  /* display only off canvas */
  .menu-wrapper.off-canvas-mode &{
    display: flex;
  } }
.nav__list { display: flex;
  flex-direction: row;
  gap: 0.2rem;
  align-items: center;

  li {
    max-inline-size: 100%;
  } }
.menu-link { display: flex;
  align-items: center; }
.menu-dropdown { /* on open */
  &.is-open > .menu-dropdown__content-wrapper {
    visibility: visible;
    opacity: 1;
  }

  .menu-dropdown .menu-dropdown__trigger {
    inline-size: 100%;
    justify-content: space-between;
    text-align: start;
  }

  /* DROPDOWN MODE */
  &.dropdown-mode {
    position: relative;

    .menu-dropdown__content-wrapper {
      transform: translateY(var(--dropdown-closed-top, 40px));
      height: fit-content;
    }

    .menu-dropdown__content {
      padding: var(--dropdown-padding);
      block-size: fit-content;
      background: var(--dropdown-bg, white);
      box-shadow: var(--dropdown-box-shadow);
      border-radius: var(--dropdown-border-radius);
      border-width: var(--dropdown-border-width);
      border-color: var(--dropdown-border-color);
      border-style: solid;
    }

    /* - nested dropdowns */
    .menu-dropdown {
      /* -- Nested trigger styling */
      .menu-dropdown__trigger {
        inline-size: 100%;
        justify-content: space-between;
        text-align: start;

        /* --- Rotate arrow 90° for nested (pointing right) */
        .menu-dropdown__trigger-icon {
          transform: rotate(-90deg);

          html[dir='rtl'] & {
            transform: rotate(90deg);
          }
        }

        &.active .menu-dropdown__trigger-icon {
          transform: rotate(0deg); /* Back to pointing down when open */
        }
      }

      > .menu-dropdown__content-wrapper {
        position: absolute;
        inset-inline-start: calc(100% + var(--dropdown-padding));
      }
    }

    .menu-dropdown__content-wrapper {
      inset-block-end: 0;
    }

    /* - dropdown positioning */
    .menu-dropdown__content-wrapper.position-left {
      inset-inline-start: auto;
      inset-inline-end: 100%;
      margin-inline-start: 0;
      margin-inline-end: var(--dropdown-padding);

      &.position-bottom {
        transform-origin: top right;

        html[dir='rtl'] & {
          transform-origin: top left;
        }
      }

      &.position-top {
        transform-origin: bottom right;

        html[dir='rtl'] & {
          transform-origin: bottom left;
        }
      }
    }

    .menu-dropdown__content-wrapper.position-right {
      &.position-bottom {
        transform-origin: top left;

        html[dir='rtl'] & {
          transform-origin: top right;
        }
      }

      &.position-top {
        transform-origin: bottom left;

        html[dir='rtl'] & {
          transform-origin: bottom right;
        }
      }
    }

    .menu-dropdown__content-wrapper.position-top {
      inset-block-start: auto;
      inset-block-end: calc(100% + var(--dropdown-padding));
    }

    /* - transforming open */
    &.is-open > .menu-dropdown__content-wrapper {
      transform: translateY(var(--dropdown-open-top, 20px));

      .menu-dropdown > .menu-dropdown__content-wrapper {
        transform: translateY(calc((var(--dropdown-padding) + var(--dropdown-border-width)) * -1));

        &.position-top {
          transform: translateY(calc(var(--dropdown-padding) + var(--dropdown-border-width)));
        }
      }
    }
  }

  /* ACCORDION MODE */
  &.accordion-mode {
    inline-size: 100%;

    .menu-dropdown {
      flex-direction: column;
    }

    .menu-dropdown__content-wrapper {
      position: static;
    }
  }

  /* STACKED MODE */
  &.stacked-mode {
    .menu-dropdown__trigger-icon-wrapper {
      transform: rotate(-90deg);

      html[dir='rtl'] & {
        transform: rotate(90deg);
      }
    }
  }

  /* specifically not stacked mode flip trigger icon */
  &:not(.stacked-mode) .menu-dropdown__trigger.active .menu-dropdown__trigger-icon {
    transform: scaley(-1);
  } }
.menu-dropdown__trigger { display: flex;
  flex-direction: row;
  align-items: center;
  inline-size: fit-content;
  gap: var(--dropdown-trigger-gap, 0.5em); }
.menu-dropdown__trigger-label { white-space: nowrap; }
.menu-dropdown__trigger-icon-wrapper { inline-size: fit-content; }
.menu-dropdown__trigger-icon { block-size: var(--dropdown-trigger-icon-size, 1em);
  inline-size: var(--dropdown-trigger-icon-size, 1em);
  min-inline-size: var(--dropdown-trigger-icon-size, 1em);
  transition: transform var(--dropdown-transition-duration, 0.15s) ease-out;
  color: inherit;

  path {
    stroke: currentColor
  } }
.menu-dropdown__content-wrapper { position: absolute;
  inset-block-start: 100%;
  inset-inline-start: 0;
  min-inline-size: 200px;
  z-index: 999;
  transform-origin: top center;
  visibility: hidden;
  transition-property: var(--dropdown-transition-property, all);
  transition-duration: var(--dropdown-transition-duration, 0.15s);
  transition-delay: var(--dropdown-transition-delay, 0);
  transition-timing-function: var(--dropdown-transition-timing, cubic-bezier(0.4, 0, 0.2, 1));
  opacity: 0;

  &.stacked-mode {
    position: absolute;
    inset-block: 0;
    inset-inline: 0;
    background: var(--mobile-menu-bg-color);
    transform: translateX(100%);
    overflow-y: auto;
    overflow-x: clip;
    transform-origin: center center;
    transition-timing-function: var(--mobile-dropdown-stacked-timing, ease-out);
    transition-duration: var(--mobile-menu-transition-duration);

    .menu-dropdown-back-button {
      display: flex;
    }

    &.open {
      transform: translateX(0);
      scale: 1;
      visibility: visible;
      opacity: 1;
    }

    &.open:has(+ .menu-dropdown__content-wrapper.open) {
      transform: translateX(20px);
      scale: 0.98;

      /*RTL language flip direction */
      html[dir='RTL'] & {
        transform: translateX(-20px);
      }
    }

    .nav__list:has(~ &) {
      transform: translateX(0);
      scale: 1;
      transform-origin: center center;
      transition-property: transform, opacity, scale;
      opacity: 1;
      transition-duration: var(--mobile-menu-transition-duration);
      transition-delay: var(--dropdown-transition-delay, 0);
      transition-timing-function: var(--mobile-dropdown-stacked-timing, ease-out);
    }

    /* mobile dropdown stacked animations */
    .nav__list:has(~ &.open) {
      transform: translateX(20px);
      scale: 0.98;
      opacity: 0;

      /*RTL language flip direction */
      html[dir='rtl'] & {
        transform: translateX(-20px);
      }
    }
  } }
.menu-dropdown-back-button { align-items: center;
  gap: 0.5em;
  text-decoration: none;
  display: none;
  inline-size: 100%;
  z-index: 100;
  position: sticky;
  inset-block-start: -1px;

  svg {
    block-size: 1em;
    inline-size: 1em;
    order: -1;

    html[dir='rtl'] & {
      transform: rotate(180deg);
    }
  } }
.menu-dropdown__content { display: flex;
  flex-direction: column;
  --divider-gap: 0.5em;

  > li {
    display: flex;
    inline-size: 100%;
    max-inline-size: 100%;
  }

  > li > a,
  > li > button {
    inline-size: 100%;
  } }
.menu-wrapper-backdrop { position: fixed;
  inset: 0;
  z-index: 998;
  background-color: var(--mobile-menu-backdrop-color);
  opacity: 0%;
  visibility: hidden;
  transition-property: opacity, visibility;
  transition-duration: var(--mobile-menu-transition-duration);
  transition-delay: calc(var(--mobile-menu-transition-duration) / 1.5);
  transition-timing-function: ease-out;
  pointer-events: none;

  .menu-wrapper.open & {
    visibility: visible;
    opacity: var(--mobile-menu-backdrop-opacity);
  } }
.toggle { --ease-smooth: cubic-bezier(0.25, 0.8, 0.3, 1);
  display: flex;
  flex-direction: row;
  gap: var(--toggle-icon-gap, 0.25em);
  align-items: center;
  inline-size: fit-content;

  /*alternating labels */
  &.active .label-off {
    transform: translateY(-100%);
    opacity: 0;
  }

  &.active .label-on {
    transform: translateY(-100%);
    opacity: 1;
  } }
.toggle-animated-hamburger-1 { --transition-duration-rotate: var(--toggle-transition-duration, 0.2s);
  --transition-duration-collapse: calc(var(--transition-duration-rotate) / 1.5);
  inline-size: var(--toggle-icon-size, 1.25em);
  block-size: var(--toggle-icon-size, 1.25em);
  color: inherit;

  [class*='hamburger-line'] {
    stroke: var(--toggle-icon-color, currentColor);
    stroke-width: var(--toggle-icon-line-width, 8px);
    stroke-linecap: round;
    transition:
      /* rotation starts slightly after collapse begins */
      rotate var(--transition-duration-rotate) var(--ease-smooth),
      /* collapse moves start immediately */ transform var(--transition-duration-collapse) var(--ease-smooth) var(--transition-duration-rotate);
    transform-origin: center;
    transform: translateX(0) translateY(0);
    rotate: 0deg;
  }

  .toggle.active & .hamburger-line--top {
    transform: translateY(20px) translateX(0px);
    rotate: 45deg;
    transition:
      transform var(--transition-duration-collapse) var(--ease-smooth),
      rotate var(--transition-duration-rotate) var(--ease-smooth) var(--transition-duration-collapse);
  }

  .toggle.active & .hamburger-line--bottom {
    transform: translateY(-20px) translateX(0px);
    rotate: -45deg;
    transition:
      transform var(--transition-duration-collapse) var(--ease-smooth),
      rotate var(--transition-duration-rotate) var(--ease-smooth) var(--transition-duration-collapse);
  } }
.toggle__label { position: relative;
  display: inline-block;
  overflow: hidden;
  transition: inline-size var(--toggle-transition-duration, 0.2s) var(--ease-smooth);
  inline-size: fit-content;

  .toggle__label-text {
    display: block;
    white-space: nowrap;
    inline-size: fit-content;
  }

  /* For alternate mode: stack vertically */
  .label-off,
  .label-on {
    transition:
      transform 0.2s var(--ease-smooth),
      opacity 0.2s var(--ease-smooth);
    line-height: 1.2;
  }

  .label-off {
    transform: translateY(0%);
    opacity: 1;
  }

  .label-on {
    transform: translateY(100%);
    opacity: 0;
    position: absolute;
  } }
.fs-posts-wrapper { display: grid;
  grid-template-columns: var(--grid-1);
  gap: var(--space-xl);

  @media (width >= 54.8125rem) {
    display: grid;
    grid-template-columns: var(--grid-2);
  } }
.fs-post-wrapper { display: flex;
  flex-direction: column;
  gap: var(--space-xs); }
.fs-footer-wrapper { background: var(--neutral-ultra-light);
  padding-bottom: var(--space-l);
  padding-top: var(--space-l); }
.fs-colophon { gap: var(--content-gap);
  display: flex;
  flex-direction: column; }</style><script id="etch-script-9ojf-" type="module" defer>// Select the header element
const header = document.querySelector('.header-wrapper');

// Early exit if header doesn't exist on this page
if (!header) {
  if (window.console) console.warn('Header element (.header-wrapper) not found.');
} else {
  // 1. CONFIGURATION
  // Read once and cache to avoid repeated DOM access
  const ds = header.dataset;
  const config = {
    sticky: ds.stickyHeader === 'true',
    hide: ds.hideOnScroll === 'true',
    up: ds.showOnScrollUp === 'true',
    at: parseInt(ds.hideAt, 10) || 0,
    skipLink: ds.skipLink === 'true'
  };

  // 2. SKIP LINK
  // Add accessible skip link for keyboard navigation
  if (config.skipLink) {
    const skipLink = document.createElement('a');
    skipLink.href = '#main';
    skipLink.className = 'skip-link';
    skipLink.textContent = 'Skip to main content';
    header.insertBefore(skipLink, header.firstChild);

    // Set id on main element
    const main = document.querySelector('main');
    if (main) {
      main.id = 'main';
    }
  }

  // 3. HEADER HEIGHT
  // Using ResizeObserver handles initial load, window resize, and content changes
  // It's more performant and robust than manual event listeners + debounce
  const updateHeight = () => document.body.style.setProperty('--header-height', `${header.offsetHeight}px`);
  
  if (window.ResizeObserver) {
    new ResizeObserver(updateHeight).observe(header);
  } else {
    window.addEventListener('resize', updateHeight);
    window.addEventListener('load', updateHeight);
    updateHeight();
  }

  // 4. SCROLL LOGIC (Merged into single rAF loop)
  // Consolidating all scroll updates into one requestAnimationFrame callback
  // minimizes layout thrashing and synchronizes DOM updates with screen refreshes.
  if (config.sticky) {
    let lastY = window.scrollY;
    let ticking = false;
    let isHidden = false;
    const tolerance = 5; // Ignore tiny scroll movements

    const updateHeader = (forceVisible = false) => {
      const currentY = Math.max(0, window.scrollY); // Normalize for mobile bounce
      
      // Toggle 'scrolling' class based on any scroll from top
      header.classList.toggle('scrolling', currentY > 0);

      // Hide-on-scroll logic
      if (config.hide && config.at > 0) {
        const isMenuOpen = document.body.classList.contains('menu-open');
        const pastThreshold = currentY >= config.at;

        if (isMenuOpen || forceVisible) {
          isHidden = false;
        } else if (config.up) {
          // Mode: responsive to scroll direction past threshold
          if (!pastThreshold) {
            isHidden = false;
          } else {
            const diff = currentY - lastY;
            if (diff > tolerance) {
              isHidden = true; // Hiding because user is scrolling DOWN
            } else if (diff < -tolerance) {
              isHidden = false; // Showing because user is scrolling UP
            }
          }
        } else {
          // Mode: static threshold
          // If initial load, we don't hide immediately even if past threshold
          isHidden = pastThreshold;
        }

        header.classList.toggle('hide', isHidden);
      }
      
      lastY = currentY;
      ticking = false;
    };

    const onScroll = () => {
      if (!ticking) {
        ticking = true;
        requestAnimationFrame(() => updateHeader(false));
      }
    };

    window.addEventListener('scroll', onScroll, { passive: true });
    
    // Initial state check - force visible on load regardless of position
    updateHeader(true);
  }
}
</script><script id="etch-script-tmn_c" type="module" defer>// ============================================
// menuWrapper COMPONENT - SINGLE BREAKPOINT CONTROLLER
// ============================================

const menuWrapper = document.querySelector('[data-menu-element="menu-wrapper"]');

if (!menuWrapper) {
  if (window.console) console.warn("⚠️ No menu wrapper element found.");
} else {
  // 1. CONFIGURATION & STATE
  const ds = menuWrapper.dataset;
  const mobileMenuMode = ds.mobileMenuMode || "Off Canvas";
  const breakpoint = ds.mobileBreakpoint || "768px";
  const mediaQuery = window.matchMedia(`(max-width: ${breakpoint})`);
  
  // Store original location for desktop restoration
  const originalParent = menuWrapper.parentElement;
  const originalNextSibling = menuWrapper.nextSibling;
  const headerInner = document.querySelector('[data-menu-element="header-inner"]');
  if (!headerInner && window.console) {
    console.warn('⚠️ [Menu Wrapper] No header inner element found targeting [data-menu-element="header-inner"]. Mobile positioning may fail.');
  }

  // 2. TOGGLE LOGIC
  // Sync body class with menu state
  menuWrapper.addEventListener("toggle:change", (e) => {
    document.body.classList.toggle("menu-open", !!e.detail.isEnabled);
  });

  // 3. DOM MANIPULATION
  const moveToMobileLocation = () => {
    if (!headerInner) {
      console.warn("⚠️ No header-inner found to move menuWrapper relative to.");
      return;
    }
    // Efficiently move if not already there
    if (headerInner.nextSibling !== menuWrapper) {
      headerInner.parentNode.insertBefore(menuWrapper, headerInner.nextSibling);
    }
  };

  const restoreToDesktopLocation = () => {
    if (!originalParent) return;
    // Efficiently move back using the sibling reference
    if (menuWrapper.nextSibling !== originalNextSibling || menuWrapper.parentNode !== originalParent) {
      originalParent.insertBefore(menuWrapper, originalNextSibling);
    }
  };

  // 4. BREAKPOINT HANDLER
  const handleBreakpointChange = (e) => {
    const isMobile = e.matches;
    
    // Toggle primary state classes
    menuWrapper.classList.toggle("mobile", isMobile);
    menuWrapper.classList.toggle("desktop", !isMobile);

    if (isMobile) {
      const isOffCanvas = mobileMenuMode === "Off Canvas";
      const isReveal = mobileMenuMode === "Reveal";
      
      menuWrapper.classList.toggle("off-canvas-mode", isOffCanvas);
      menuWrapper.classList.toggle("reveal-mode", isReveal);

      if (isOffCanvas) moveToMobileLocation();
      
      if (isOffCanvas) {
        menuWrapper.setAttribute("role", "dialog");
        menuWrapper.setAttribute("aria-modal", "true");
      } else {
        menuWrapper.removeAttribute("role");
        menuWrapper.removeAttribute("aria-modal");
      }
      
      menuWrapper.dispatchEvent(new CustomEvent("menuWrapper:mobile"));
    } else {
      // Desktop: close menu if any toggle targeting this wrapper is on
      const wrapperId = menuWrapper.id;
      if (wrapperId && typeof window.Toggles !== "undefined") {
        const togglesForThisMenu = window.Toggles.findByTarget(wrapperId) || [];
        togglesForThisMenu.forEach((t) => {
          if (t.isEnabled) t.disable();
        });
      }
      // Desktop Cleanup
      menuWrapper.classList.remove("off-canvas-mode", "reveal-mode");
      menuWrapper.removeAttribute("role");
      menuWrapper.removeAttribute("aria-modal");
      restoreToDesktopLocation();
      menuWrapper.dispatchEvent(new CustomEvent("menuWrapper:desktop"));
    }
  };

  // 5. ACTIVE LINK DETECTION
  // Marks navigation links matching the current URL with an "active" class
  const nav = menuWrapper.querySelector('nav');
  
  const setActiveLink = () => {
    if (!nav) return;
    
    const currentUrl = new URL(window.location.href);
    let currentPath = currentUrl.pathname;
    
    // Normalize: strip trailing slash except for root
    if (currentPath.length > 1 && currentPath.endsWith('/')) {
      currentPath = currentPath.slice(0, -1);
    }
    
    // Query links only within the nav element
    const links = nav.querySelectorAll('a[href]');
    
    links.forEach(link => {
      const href = link.getAttribute('href');
      
      // Skip non-navigable links
      if (!href || href === '#' || href.startsWith('javascript:') || href.startsWith('mailto:') || href.startsWith('tel:')) {
        return;
      }
      
      try {
        // Resolve link href relative to the current origin
        const linkUrl = new URL(href, window.location.origin);
        
        // Only process links within the same origin
        if (linkUrl.origin !== currentUrl.origin) return;
        
        let linkPath = linkUrl.pathname;
        
        // Apply same normalization as currentPath
        if (linkPath.length > 1 && linkPath.endsWith('/')) {
          linkPath = linkPath.slice(0, -1);
        }
        
        // Match and apply active class
        if (linkPath === currentPath) {
          link.classList.add('active-link');
        } else {
          link.classList.remove('active-link');
        }
      } catch (e) {
        // Silently skip malformed URLs
        return;
      }
    });
  };

  // 6. INITIALIZE (Run immediately to prevent FOUC)
  handleBreakpointChange(mediaQuery);
  setActiveLink(); // Set initial active state
  menuWrapper.setAttribute("data-menu-initialized", "true");
  mediaQuery.addEventListener("change", handleBreakpointChange);
}
</script><script id="etch-script-_jy8w" type="module" defer>/**
 * FLEXIBLE DROPDOWN V3 - REFACTORED CLASS-BASED VERSION
 * Improvements:
 * - Class-based structure (reduced memory & code size)
 * - Consolidated mode switching (Change 3)
 * - Separated positioning logic (Change 2)
 * - Improved maintainability
 */

const allDropdownInstances = [];
window.allDropdownInstances = allDropdownInstances;

window.Dropdowns = {
  getAll() { return allDropdownInstances; },
  findById(idOrDomId) {
    let numericId;
    if (typeof idOrDomId === "string") {
      const match = idOrDomId.match(/(\d+)$/);
      numericId = match ? Number(match[1]) : NaN;
    } else {
      numericId = Number(idOrDomId);
    }
    if (!Number.isFinite(numericId)) return null;
    return allDropdownInstances.find((inst) => inst.id === numericId) || null;
  },
};

const DROPDOWN_VIEWPORT_PADDING = 50;
const getIsRTL = () => getComputedStyle(document.documentElement).direction === "rtl";

const menuWrapper = document.querySelector('[data-menu-element="menu-wrapper"]');
if (!menuWrapper && window.console) {
  console.warn('⚠️ [Dropdown] No menu wrapper element found targeting [data-menu-element="menu-wrapper"]. Mobile modes may not work correctly.');
}
const navRoot = menuWrapper ? menuWrapper.querySelector('nav, [data-menu-element="nav"]') || menuWrapper : null;

// Helper for focus management
function getTabbableElements(container) {
  if (!container) return [];
  return Array.from(
    container.querySelectorAll('a[href], button, input, textarea, select, [tabindex]:not([tabindex="-1"])')
  ).filter((el) => !el.hasAttribute("disabled") && el.getAttribute("aria-hidden") !== "true");
}

// Helper to find the closest scrollable parent element
function getScrollableParent(element) {
  if (!element) return null;
  
  let parent = element.parentElement;
  
  while (parent && parent !== document.body && parent !== document.documentElement) {
    const style = getComputedStyle(parent);
    const overflowY = style.overflowY;
    const overflow = style.overflow;
    
    // Check if this element is scrollable
    if ((overflowY === 'auto' || overflowY === 'scroll' || overflow === 'auto' || overflow === 'scroll')) {
      // Verify it actually has scrollable content
      if (parent.scrollHeight > parent.clientHeight) {
        return parent;
      }
    }
    
    parent = parent.parentElement;
  }
  
  return null; // Return null if no scrollable parent found (don't scroll at all)
}

class Dropdown {
  constructor(dropdownEl, index) {
    this.id = index + 1;
    this.dropdown = dropdownEl;
    this.trigger = dropdownEl.querySelector(':scope > [data-menu-element="dropdown-trigger"]');
    this.contentWrapper = dropdownEl.querySelector(':scope > [data-menu-element="dropdown-content"]');
    this.backButton = dropdownEl.querySelector(':scope > [data-menu-element="dropdown-content"] > [data-menu-element="back-button"]');
    
    if (!this.trigger || !this.contentWrapper) {
      if (window.console) {
        if (!this.trigger) console.warn('⚠️ [Dropdown] Trigger element not found inside dropdown:', dropdownEl);
        if (!this.contentWrapper) console.warn('⚠️ [Dropdown] Content wrapper element not found inside dropdown:', dropdownEl);
      }
      return;
    }

    this.originalParent = this.contentWrapper.parentElement;
    this.originalNextSibling = this.contentWrapper.nextElementSibling;
    
    this.mode = null; // null | "dropdown" | "accordion" | "stacked"
    this.isOpen = false;
    this.hoverTimeout = null;
    this.isClickLocked = false;
    this.stackedContentHasFocus = false;
    
    this.childInstances = [];
    this.parentInstance = null;
    this.level = 0;

    const activation = this.resolveActivationMode();
    this.config = {
      activationMode: activation,
      activateOnHover: activation === "hover and click",
      breakpoint: this.dropdown.dataset.breakpoint || "768px",
      widthMatch: this.dropdown.dataset.widthMatch || null,
      isInNav: menuWrapper && menuWrapper.contains(this.dropdown),
    };

    this.setupAccessibility();
    this.bindMethods();
    allDropdownInstances.push(this);
  }

  bindMethods() {
    this.handleTriggerClick = this.handleTriggerClick.bind(this);
    this.handleTriggerMouseEnter = this.handleTriggerMouseEnter.bind(this);
    this.handleTriggerMouseLeave = this.handleTriggerMouseLeave.bind(this);
    this.handleHoverModeClick = this.handleHoverModeClick.bind(this);
    this.handleContentMouseEnter = this.handleContentMouseEnter.bind(this);
    this.handleContentMouseLeave = this.handleContentMouseLeave.bind(this);
    this.handleFocusOut = this.handleFocusOut.bind(this);
    this.handleStackedKeydown = this.handleStackedKeydown.bind(this);
    this.handleStackedFocusIn = this.handleStackedFocusIn.bind(this);
    this.handleStackedFocusOut = this.handleStackedFocusOut.bind(this);
    this.handleBackButtonClick = this.handleBackButtonClick.bind(this);
    this.updatePosition = this.updatePosition.bind(this);
    this.handleTransitionEnd = this.handleTransitionEnd.bind(this);
  }

  handleTransitionEnd(e) {
    if (e.target !== this.contentWrapper || e.propertyName !== "max-height") return;
    if (this.isOpen && this.mode === "accordion") {
      this.contentWrapper.style.maxHeight = "none";
    }
  }

  setupAccessibility() {
    this.contentWrapper.id = `dropdown-content-${this.id}`;
    this.dropdown.id = `dropdown-${this.id}`;
    this.trigger.setAttribute("aria-controls", this.contentWrapper.id);
    this.trigger.setAttribute("aria-expanded", "false");
    if (this.backButton) {
      this.backButton.setAttribute("aria-controls", this.contentWrapper.id);
    }
  }

  resolveActivationMode() {
    let activation = this.trigger.dataset.activation?.toLowerCase();
    const isInNav = menuWrapper && menuWrapper.contains(this.dropdown);
    if (activation === "respect menu" && isInNav) {
      const menuActivation = menuWrapper.getAttribute("data-desktop-dropdown-interaction")?.toLowerCase();
      if (menuActivation === "hover and click" || menuActivation === "click") {
        activation = menuActivation;
      }
    }
    return (activation === "hover and click" || activation === "click") ? activation : "click";
  }

  init() {
    if (this.config.isInNav) {
      this.setupNavWatcher();
    }
    
    // Initial mode setup
    this.checkMode();

    if (this.backButton) {
      this.backButton.addEventListener("click", this.handleBackButtonClick);
    }
  }

  setupNavWatcher() {
    const observer = new MutationObserver((mutations) => {
      for (const mutation of mutations) {
        if (mutation.type === "attributes") {
          // If interaction mode changes, we might need to re-attach events even if mode is still "dropdown"
          if (mutation.attributeName === "data-desktop-dropdown-interaction" && this.mode === "dropdown") {
            const oldActivation = this.config.activationMode;
            const newActivation = this.resolveActivationMode();
            if (oldActivation !== newActivation) {
              this.switchMode("dropdown"); // Force re-init dropdown mode
            }
          } else {
            this.checkMode();
          }
        }
      }
    });
    observer.observe(menuWrapper, { 
      attributes: true, 
      attributeFilter: ["class", "data-mobile-dropdown-mode", "data-desktop-dropdown-interaction"] 
    });
    this._navObserver = observer;
  }

  checkMode() {
    let newMode;
    
    if (this.config.isInNav) {
      const currentMobileMode = menuWrapper?.getAttribute("data-mobile-dropdown-mode") === "Stacked" ? "Stacked" : "Accordion";
      const navIsMobile = menuWrapper.classList.contains("mobile");
      newMode = !navIsMobile ? "dropdown" : (currentMobileMode === "Accordion" ? "accordion" : "stacked");
    } else {
      newMode = "dropdown";
    }

    if (newMode !== this.mode) {
      this.switchMode(newMode);
    }
  }

  switchMode(newMode) {
    const oldMode = this.mode;
    
    // Cleanup old mode
    this.cleanupCurrentMode();
    
    this.mode = newMode;
    this.resetPositioning();
    
    if (this.isOpen) {
      this.close({ cascade: true });
    }

    // Initialize new mode
    this.dropdown.classList.remove("dropdown-mode", "accordion-mode", "stacked-mode");
    this.dropdown.classList.add(`${newMode}-mode`);

    if (newMode === "dropdown" || newMode === "stacked") {
      this.trigger.setAttribute("aria-haspopup", "true");
    } else {
      this.trigger.removeAttribute("aria-haspopup");
    }

    if (newMode === "dropdown") {
      const activation = this.resolveActivationMode();
      this.config.activationMode = activation;
      this.config.activateOnHover = activation === "hover and click";

      this.attachDropdownEvents();
      if (this.config.widthMatch && this.level === 0) this.updatePosition();
    } else if (newMode === "accordion") {
      this.trigger.addEventListener("click", this.handleTriggerClick);
      this.contentWrapper.style.overflow = "hidden";
      this.contentWrapper.style.maxHeight = "0px";
      this.contentWrapper.addEventListener("transitionend", this.handleTransitionEnd);
    } else if (newMode === "stacked") {
      this.trigger.addEventListener("click", this.handleTriggerClick);
      this.setupStackedMode();
    }

    this.dispatchDropdownEvent("modeChange", { oldMode, newMode });
  }

  cleanupCurrentMode() {
    this.detachEvents();
    if (this.mode === "stacked") this.teardownStackedMode();
    if (this.mode === "accordion") {
      this.contentWrapper.style.overflow = "";
      this.contentWrapper.style.maxHeight = "";
      this.contentWrapper.removeEventListener("transitionend", this.handleTransitionEnd);
    }
    
    this.contentWrapper.style.inlineSize = "";
    this.contentWrapper.style.insetInlineStart = "";
    this.contentWrapper.style.maxInlineSize = "";
  }

  attachDropdownEvents() {
    if (this.config.activateOnHover) {
      this.trigger.addEventListener("click", this.handleHoverModeClick);
      this.trigger.addEventListener("mouseenter", this.handleTriggerMouseEnter);
      this.trigger.addEventListener("mouseleave", this.handleTriggerMouseLeave);
      this.contentWrapper.addEventListener("mouseenter", this.handleContentMouseEnter);
      this.contentWrapper.addEventListener("mouseleave", this.handleContentMouseLeave);
    } else {
      this.trigger.addEventListener("click", this.handleTriggerClick);
    }
    this.dropdown.addEventListener("focusout", this.handleFocusOut);
  }

  detachEvents() {
    this.trigger.removeEventListener("click", this.handleTriggerClick);
    this.trigger.removeEventListener("click", this.handleHoverModeClick);
    this.trigger.removeEventListener("mouseenter", this.handleTriggerMouseEnter);
    this.trigger.removeEventListener("mouseleave", this.handleTriggerMouseLeave);
    this.contentWrapper.removeEventListener("mouseenter", this.handleContentMouseEnter);
    this.contentWrapper.removeEventListener("mouseleave", this.handleContentMouseLeave);
    this.dropdown.removeEventListener("focusout", this.handleFocusOut);
    clearTimeout(this.hoverTimeout);
  }

  setupStackedMode() {
    if (navRoot && this.contentWrapper.parentElement !== navRoot) {
      navRoot.appendChild(this.contentWrapper);
    }
    this.contentWrapper.classList.add("stacked-mode");
    this.trigger.addEventListener("keydown", this.handleStackedKeydown);
    this.contentWrapper.addEventListener("focusin", this.handleStackedFocusIn);
    this.contentWrapper.addEventListener("focusout", this.handleStackedFocusOut);
  }

  teardownStackedMode() {
    this.contentWrapper.classList.remove("stacked-mode", "open");
    this.trigger.removeEventListener("keydown", this.handleStackedKeydown);
    this.contentWrapper.removeEventListener("focusin", this.handleStackedFocusIn);
    this.contentWrapper.removeEventListener("focusout", this.handleStackedFocusOut);
    
    if (this.originalParent && this.originalParent !== this.contentWrapper.parentElement) {
      if (this.originalNextSibling && this.originalNextSibling.parentElement === this.originalParent) {
        this.originalParent.insertBefore(this.contentWrapper, this.originalNextSibling);
      } else {
        this.originalParent.appendChild(this.contentWrapper);
      }
    }
  }

  // --- Core Actions ---

  open(options = { cascade: true }) {
    if (this.isOpen) return;
    
    this.closeSiblings();
    this.isOpen = true;
    if (this.mode === "dropdown") this.openAncestors();

    this.dropdown.classList.add("is-open");
    this.trigger.classList.add("active");
    this.trigger.setAttribute("aria-expanded", "true");

    if (this.mode === "dropdown") {
      this.updatePosition();
      this.detectCollision();
    } else if (this.mode === "accordion") {
      this.contentWrapper.style.maxHeight = `${this.contentWrapper.scrollHeight}px`;
      if (this.parentInstance) this.parentInstance.updateAccordionHeight();
      
      // Scroll the newly opened accordion into view after animations complete
      // This prevents the user from ending up in the wrong position when other dropdowns close
      setTimeout(() => {
        const scrollableParent = getScrollableParent(this.trigger);
        
        // Only scroll if we found a scrollable parent (not the body/html)
        if (scrollableParent) {
          const offset = 80; // Pixels from top of container for comfortable viewing
          
          // Get positions relative to the scrollable container
          const triggerRect = this.trigger.getBoundingClientRect();
          const containerRect = scrollableParent.getBoundingClientRect();
          
          // Calculate the scroll position needed
          const relativeTop = triggerRect.top - containerRect.top;
          const targetScrollTop = scrollableParent.scrollTop + relativeTop - offset;
          
          scrollableParent.scrollTo({
            top: targetScrollTop,
            behavior: 'smooth'
          });
        }
      }, 200); // Wait for accordion animation to complete
    } else if (this.mode === "stacked") {
      this.contentWrapper.classList.add("open");
    }

    this.dispatchDropdownEvent("open");
    this.dispatchDropdownEvent(`open:${this.mode}`);
  }

  close(options = { cascade: true }) {
    if (!this.isOpen) return;
    
    if (options.cascade) this.closeChildren();
    
    this.isOpen = false;
    this.isClickLocked = false;
    this.dropdown.classList.remove("is-open");
    this.trigger.classList.remove("active");
    this.trigger.setAttribute("aria-expanded", "false");

    if (this.mode === "accordion") {
      if (this.contentWrapper.style.maxHeight === "none") {
        this.contentWrapper.style.maxHeight = `${this.contentWrapper.scrollHeight}px`;
        this.contentWrapper.offsetHeight; // force reflow
      }
      this.contentWrapper.style.maxHeight = "0px";
      if (this.parentInstance) this.parentInstance.updateAccordionHeight();
    }

    if (this.mode === "stacked") {
      this.contentWrapper.classList.remove("open");
    }

    this.dispatchDropdownEvent("close", { cascade: options.cascade });
    this.dispatchDropdownEvent(`close:${this.mode}`, { cascade: options.cascade });

    if (this.parentInstance) this.parentInstance.onChildClosed();
  }

  toggle(options = { cascade: true }) {
    this.isOpen ? this.close(options) : this.open(options);
  }

  // --- Event Handlers ---

  handleTriggerClick(e) {
    e.preventDefault();
    e.stopPropagation();
    this.toggle();
  }

  handleHoverModeClick(e) {
    e.preventDefault();
    e.stopPropagation();
    if (this.isOpen && !this.isClickLocked) {
      this.isClickLocked = true;
    } else if (this.isOpen && this.isClickLocked) {
      this.close();
    } else {
      this.open();
      this.isClickLocked = true;
    }
  }

  handleTriggerMouseEnter() {
    if (this.isClickLocked) return;
    clearTimeout(this.hoverTimeout);
    this.open();
  }

  handleTriggerMouseLeave() {
    if (this.isClickLocked) return;
    clearTimeout(this.hoverTimeout);
    this.hoverTimeout = setTimeout(() => this.checkAndCloseIfUnused(), 250);
  }

  handleContentMouseEnter() {
    if (this.isClickLocked) return;
    clearTimeout(this.hoverTimeout);
  }

  handleContentMouseLeave() {
    if (this.isClickLocked) return;
    clearTimeout(this.hoverTimeout);
    this.hoverTimeout = setTimeout(() => this.checkAndCloseIfUnused(), 150);
  }

  checkAndCloseIfUnused() {
    if (this.isClickLocked || !this.isOpen || this.mode !== "dropdown") return;
    const overOwnTrigger = this.trigger.matches(":hover");
    const overOwnContent = this.contentWrapper.matches(":hover");
    if (!overOwnTrigger && !overOwnContent && !this.hasOpenDescendant()) {
      this.close();
    }
  }

  onChildClosed() {
    if (this.mode === "dropdown" && !this.isClickLocked && this.isOpen) {
      setTimeout(() => this.checkAndCloseIfUnused(), 50);
    }
  }

  handleFocusOut(e) {
    if (!this.isOpen || this.mode === "stacked") return;
    setTimeout(() => {
      const active = document.activeElement;
      const insideSelf = this.dropdown.contains(active);
      const insideAnyChild = this.childInstances.some((child) => child.dropdown.contains(active) || child.contentWrapper.contains(active));
      if (!insideSelf && !insideAnyChild) this.close();
    }, 0);
  }

  handleStackedKeydown(e) {
    if (this.mode !== "stacked" || !this.isOpen || document.activeElement !== this.trigger) return;
    if (e.key === "Tab" && !e.shiftKey) {
      const tabbables = getTabbableElements(this.contentWrapper);
      if (tabbables.length) {
        window.__stackedIsManagingFocus = true;
        e.preventDefault();
        tabbables[0].focus();
        setTimeout(() => { window.__stackedIsManagingFocus = false; }, 0);
      }
    }
  }

  handleStackedFocusIn() {
    if (this.mode === "stacked") this.stackedContentHasFocus = true;
  }

  handleStackedFocusOut() {
    if (this.mode !== "stacked") return;
    setTimeout(() => {
      const active = document.activeElement;
      const stillInTree = this.dropdown.contains(active) || this.contentWrapper.contains(active) || 
                          this.childInstances.some(c => c.dropdown.contains(active) || c.contentWrapper.contains(active));
      const anyChildOpen = this.childInstances.some(c => c.isOpen);
      if (!stillInTree && this.stackedContentHasFocus && !anyChildOpen) {
        this.stackedContentHasFocus = false;
        this.close({ cascade: false });
        this.trigger.focus();
      }
    }, 0);
  }

  handleBackButtonClick(e) {
    e.preventDefault();
    e.stopPropagation();
    this.close({ cascade: false });
    this.trigger.focus();
  }

  // --- Hierarchy & Positioning Logic ---

  addChild(child) {
    if (!this.childInstances.includes(child)) this.childInstances.push(child);
  }

  closeSiblings() {
    allDropdownInstances.forEach((other) => {
      if (other === this || this.isAncestorOf(other) || other.isAncestorOf(this)) return;
      if (other.parentInstance === this.parentInstance && other.isOpen) other.close({ cascade: true });
    });
  }

  closeChildren() {
    this.childInstances.forEach((child) => child.isOpen && child.close({ cascade: true }));
  }

  openAncestors() {
    let current = this.parentInstance;
    while (current) {
      if (current.mode === "dropdown" && !current.isOpen) current.open({ cascade: false });
      current = current.parentInstance;
    }
  }

  hasOpenDescendant() {
    return this.childInstances.some((child) => child.isOpen || child.hasOpenDescendant());
  }

  isAncestorOf(other) {
    let current = other.parentInstance;
    while (current) {
      if (current === this) return true;
      current = current.parentInstance;
    }
    return false;
  }

  resetPositioning() {
    const s = this.contentWrapper.style;
    s.insetInlineStart = "";
    s.insetInlineEnd = "";
    s.insetBlockStart = "";
    s.insetBlockEnd = "";
    s.maxInlineSize = "";
    s.inlineSize = "";
    this.contentWrapper.classList.remove("position-right", "position-left", "position-top", "position-bottom", "position-center");
    this.dropdown.classList.remove("width-match");
  }

  updatePosition() {
    if (this.mode !== "dropdown" || !this.config.widthMatch || this.level !== 0) return;
    
    const target = document.querySelector(this.config.widthMatch);
    if (!target) return;
    
    const isRTL = getIsRTL();
    const targetRect = target.getBoundingClientRect();
    const dropdownRect = this.dropdown.getBoundingClientRect();
    
    // Calculate logical inline-start offset based on direction
    const offsetInlineStart = isRTL 
      ? dropdownRect.right - targetRect.right 
      : targetRect.left - dropdownRect.left;
    
    this.contentWrapper.style.inlineSize = `${targetRect.width}px`;
    this.contentWrapper.style.insetInlineStart = `${offsetInlineStart}px`;
    this.dropdown.classList.add("width-match");
  }

  updateAccordionHeight() {
    if (this.mode !== "accordion" || !this.isOpen) return;
    if (this.contentWrapper.style.maxHeight !== "none") {
      this.contentWrapper.style.maxHeight = `${this.contentWrapper.scrollHeight}px`;
    }
    if (this.parentInstance) this.parentInstance.updateAccordionHeight();
  }

  detectCollision(forceCheck = false) {
    if (this.mode !== "dropdown") return;
    if (!this.isOpen && !forceCheck) return;

    const cw = this.contentWrapper;
    const triggerRect = this.trigger.getBoundingClientRect();
    const viewportWidth = window.innerWidth;
    const viewportHeight = window.innerHeight;
    const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
    const padding = DROPDOWN_VIEWPORT_PADDING;
    const isRTL = getIsRTL();

    const posClasses = ["position-right", "position-left", "position-top", "position-bottom", "position-center"];
    cw.classList.remove(...posClasses);
    this.dropdown.classList.remove(...posClasses);

    const addClass = (cls) => {
      cw.classList.add(cls);
      this.dropdown.classList.add(cls);
    };

    const rect = cw.getBoundingClientRect();

    if (this.level === 0) {
      if (!this.config.widthMatch) {
        const overflowInlineEnd = isRTL 
          ? rect.left < padding 
          : rect.right > viewportWidth - scrollbarWidth - padding;
        const overflowInlineStart = isRTL 
          ? rect.right > viewportWidth - scrollbarWidth - padding 
          : rect.left < padding;

        if (overflowInlineEnd && !overflowInlineStart) {
          cw.style.insetInlineStart = "auto";
          cw.style.insetInlineEnd = "0";
          addClass("position-right");
        } else if (overflowInlineStart && !overflowInlineEnd) {
          cw.style.insetInlineStart = "0";
          cw.style.insetInlineEnd = "auto";
          addClass("position-left");
        } else if (overflowInlineEnd && overflowInlineStart) {
          const triggerCenter = triggerRect.left + triggerRect.width / 2;
          const leftPosition = triggerCenter - rect.width / 2;
          cw.style.insetInlineStart = `${leftPosition - triggerRect.left}px`;
          cw.style.insetInlineEnd = "auto";
          addClass("position-center");
        }
      } else {
        const overflowInlineEnd = isRTL ? rect.left < padding : rect.right > viewportWidth - scrollbarWidth - padding;
        const overflowInlineStart = isRTL ? rect.right > viewportWidth - scrollbarWidth - padding : rect.left < padding;
        
        const targetElement = document.querySelector(this.config.widthMatch);
        const targetRect = targetElement?.getBoundingClientRect();
        const isFullWidthTarget = targetRect && targetRect.width >= viewportWidth - padding * 2;
        
        if (!isFullWidthTarget && (overflowInlineEnd || overflowInlineStart)) {
          cw.style.maxInlineSize = `calc(100vw - ${padding * 2}px)`;
        } else {
          cw.style.maxInlineSize = "";
        }
      }
    } else {
      // Nested submenus
      const overflowInlineEnd = isRTL ? rect.left < padding : rect.right > viewportWidth - scrollbarWidth - padding;
      const spaceOnPhysicalLeft = triggerRect.left;
      const spaceOnPhysicalRight = viewportWidth - triggerRect.right;
      const hasMoreSpaceOnInlineStart = isRTL ? spaceOnPhysicalRight > spaceOnPhysicalLeft : spaceOnPhysicalLeft > spaceOnPhysicalRight;

      if (overflowInlineEnd && hasMoreSpaceOnInlineStart) {
        addClass("position-left");
      } else {
        addClass("position-right");
      }
    }

    // Vertical
    const dropdownRect = cw.getBoundingClientRect();
    const overflowBottom = dropdownRect.bottom > viewportHeight - padding;
    const spaceAbove = triggerRect.top;
    const spaceBelow = viewportHeight - triggerRect.bottom;

    if (this.level === 0) {
      if (overflowBottom && spaceAbove > spaceBelow && spaceAbove > dropdownRect.height) {
        cw.style.insetBlockStart = "auto";
        cw.style.insetBlockEnd = "100%";
        cw.style.marginBlockStart = "0";
        addClass("position-top");
      } else if (overflowBottom) {
        addClass("position-bottom");
      } else {
        addClass("position-bottom");
      }
    } else {
      const overflowTop = dropdownRect.top < padding;
      if (overflowBottom && !overflowTop) {
        cw.style.insetBlockStart = "auto";
        cw.style.insetBlockEnd = "0";
        addClass("position-top");
      } else if (overflowBottom && overflowTop) {
        cw.style.insetBlockStart = "0";
        addClass("position-bottom");
      } else {
        cw.style.insetBlockStart = "0";
        cw.style.insetBlockEnd = "auto";
        addClass("position-bottom");
      }
    }
  }

  dispatchDropdownEvent(type, extra = {}) {
    const event = new CustomEvent(`menuDropdown:${type}`, {
      bubbles: true,
      detail: { instanceId: this.id, mode: this.mode, level: this.level, ...extra },
    });
    this.dropdown.dispatchEvent(event);
  }

  /**
   * Repositions the dropdown by temporarily making it visible for measurement,
   * running collision detection, then restoring its state.
   * This is used on page load and resize to prevent overflow issues.
   */
  repositionForMeasurement() {
    if (this.mode !== "dropdown") return;
    
    const cw = this.contentWrapper;
    
    // Store current state
    const originalVisibility = cw.style.visibility;
    const originalOpacity = cw.style.opacity;
    const originalPointerEvents = cw.style.pointerEvents;
    const originalPosition = cw.style.position;
    
    // Temporarily make visible for measurement (but invisible to user)
    cw.style.visibility = "hidden";
    cw.style.opacity = "0";
    cw.style.pointerEvents = "none";
    
    // Ensure it's positioned absolutely for proper measurement
    if (!originalPosition || originalPosition === "static") {
      cw.style.position = "absolute";
    }
    
    // Force a display if needed (some CSS might hide with display:none)
    const computedDisplay = getComputedStyle(cw).display;
    const originalDisplay = cw.style.display;
    if (computedDisplay === "none") {
      cw.style.display = "block";
    }
    
    // Run collision detection with force flag
    this.detectCollision(true);
    
    // Restore original state
    cw.style.visibility = originalVisibility;
    cw.style.opacity = originalOpacity;
    cw.style.pointerEvents = originalPointerEvents;
    cw.style.position = originalPosition;
    cw.style.display = originalDisplay;
  }
}

// --- Global Handlers ---

/**
 * Repositions all dropdown-mode dropdowns to prevent viewport overflow.
 * Should be called on page load and resize.
 */
function repositionAllDropdowns() {
  allDropdownInstances.forEach((inst) => {
    if (inst.mode === "dropdown") {
      if (inst.isOpen) {
        // If open, just run normal positioning
        inst.updatePosition();
        inst.detectCollision();
      } else {
        // If closed, use measurement method to preemptively position
        inst.repositionForMeasurement();
      }
    } else if (inst.mode === "accordion" && inst.isOpen) {
      inst.updateAccordionHeight();
    }
  });
}

// Expose globally for external use if needed
window.repositionAllDropdowns = repositionAllDropdowns;

if (!window._dropdownGlobalHandlersSetup) {
  window._dropdownGlobalHandlersSetup = true;
  document.addEventListener("click", (e) => {
    allDropdownInstances.filter(i => i.isOpen).forEach(i => {
      if (i.mode === "dropdown" && !i.dropdown.contains(e.target)) i.close({ cascade: true });
    });
  });
  document.addEventListener("keydown", (e) => {
    if (e.key !== "Escape") return;
    const top = allDropdownInstances
      .filter(i => i.isOpen && i.mode !== "accordion")
      .sort((a, b) => b.level - a.level)[0];
    if (top) { 
      top.close({ cascade: false }); 
      top.trigger.focus(); 
      e.preventDefault(); 
    }
  });
  window.addEventListener("resize", () => {
    clearTimeout(window._dropdownResizeTimeout);
    window._dropdownResizeTimeout = setTimeout(() => {
      repositionAllDropdowns();
    }, 150);
  });
}

// --- Initialization ---
const dropdownElements = document.querySelectorAll('[data-menu-element="dropdown"]');
const instanceMap = new Map();

dropdownElements.forEach((el, i) => {
  const inst = new Dropdown(el, i);
  if (inst.trigger) instanceMap.set(el, inst);
});

// Wiring
dropdownElements.forEach((el) => {
  const inst = instanceMap.get(el);
  if (!inst) return;
  const parentEl = el.parentElement.closest('[data-menu-element="dropdown"]');
  if (parentEl) {
    const parentInst = instanceMap.get(parentEl);
    if (parentInst) {
      inst.parentInstance = parentInst;
      parentInst.addChild(inst);
      inst.level = parentInst.level + 1;
    }
  }
});

// Final labels & Init
allDropdownInstances.forEach((inst) => {
  const label = inst.dropdown.querySelector(':scope > [data-menu-element="dropdown-content"] > [data-menu-element="back-button"] [data-menu-element="back-button-label"]');
  if (label && inst.parentInstance) {
    const pLabel = inst.parentInstance.trigger.querySelector('[data-menu-element="dropdown-label"]');
    if (pLabel) {
      label.textContent = pLabel.textContent;
      inst.backButton.setAttribute("aria-label", `Back to ${pLabel.textContent} Menu`);
    } else if (window.console) {
      console.warn('⚠️ [Dropdown] Parent dropdown label [data-menu-element="dropdown-label"] not found for back button update:', inst.parentInstance.dropdown);
    }
  }
  inst.init();
});

// Reposition all dropdowns on page load to prevent overflow
// Run immediately after init
repositionAllDropdowns();

// Run again after a short delay to catch any late layout shifts (fonts, images, etc.)
setTimeout(() => {
  repositionAllDropdowns();
}, 100);
</script><script id="etch-script-6n8jk" type="module" defer>
</script><script id="etch-script-evltk" type="module" defer>// ============================================
// Toggle Component (Multi-Toggle Sync Edition)
// ============================================
//
// Wires up buttons with class "toggle" to enable/disable a target element,
// manage focus, ESC handling, scroll freeze, nested dropdown closing,
// and supports optional toggle labels (alternate mode) with
// accessible ARIA-friendly width handling.
//
// NOW SUPPORTS: Multiple toggles targeting the same element with synced states
// NOW SUPPORTS: data-target-is-modal="true" to add role="dialog" and aria-modal="true"
//
// Adds a global API:
//
//   window.allToggleInstances : ToggleInstance[]
//   window.Toggles : {
//     getAll(): ToggleInstance[],
//     findById(id: string): ToggleInstance | null,
//     findByTarget(targetId: string): ToggleInstance[],
//   }
//
// ============================================

(function() {
    "use strict";

    // --------------------------------------------
    // GLOBAL STATE & SHARED HELPERS
    // --------------------------------------------
    const allToggleInstances = [];
    const toggleStates = new Map(); // Map<buttonId, boolean>
    const targetToTogglesMap = new Map(); // Map<targetId, Toggle[]>

    let scrollFreezeCount = 0;
    let toggleIdCounter = 0;

    /**
     * Toggles the scroll-locked class and overflow styles on the body.
     * Uses a counter to handle multiple overlapping scroll-frozen elements.
     */
    function setScrollFreeze(freeze) {
        if (freeze) {
            scrollFreezeCount++;
        } else {
            scrollFreezeCount = Math.max(0, scrollFreezeCount - 1);
        }

        if (scrollFreezeCount > 0) {
            document.body.classList.add("scroll-locked");
            document.body.style.overflow = "hidden";
            document.body.style.overscrollBehavior = "none";
        } else {
            document.body.classList.remove("scroll-locked");
            document.body.style.overflow = "";
            document.body.style.overscrollBehavior = "";
        }
    }

    function isElementFocusable(element) {
        if (!element) return false;
        const styles = window.getComputedStyle(element);
        return (
            styles.visibility !== "hidden" &&
            styles.display !== "none" &&
            element.offsetParent !== null
        );
    }

    function getFocusableElements(container) {
        return Array.from(
            container.querySelectorAll(
                'a[href], button:not([disabled]), input:not([disabled]), ' +
                'select:not([disabled]), textarea:not([disabled]), ' +
                '[tabindex]:not([tabindex="-1"])'
            )
        ).filter(isElementFocusable);
    }

    function closeDropdownsInContainer(container) {
        if (!container) return;
        const registry = Array.isArray(window.allDropdownInstances)
            ? window.allDropdownInstances
            : null;
        if (!registry) return;

        registry.forEach((instance) => {
            const dropdownEl = instance.dropdown;
            if (!dropdownEl || !container.contains(dropdownEl)) return;

            if (typeof instance.isOpen === "function" && !instance.isOpen()) return;

            if (typeof instance.close === "function") {
                instance.close(true);
            } else {
                dropdownEl.classList.remove("is-open", "open", "active");
                if (instance.trigger) {
                    instance.trigger.setAttribute("aria-expanded", "false");
                    instance.trigger.classList.remove("is-open", "open", "active");
                }
            }
        });
    }

    // --------------------------------------------
    // TOGGLE CLASS
    // --------------------------------------------
    class Toggle {
        constructor(button) {
            this.button = button;
            this.id = button.id || `toggle-${++toggleIdCounter}`;
            if (!button.id) this.button.id = this.id;

            // Configuration extraction
            const ds = button.dataset;
            this.config = {
                targetId: ds.targetElement || null,
                targetToggledClass: ds.targetToggledClass || null,
                freezeScroll: ds.freezeScroll === "true",
                labelMode: (ds.labelMode || "single").toLowerCase(),
                nextFocusId: ds.nextFocusItem || null,
                targetIsModal: ds.targetIsModal === "true",
            };

            this.target = this.config.targetId ? document.getElementById(this.config.targetId) : null;
            
            // Label mode initialization (sync with original behavior)
            if (this.config.labelMode === "alternate") {
                this._initLabels();
            }
            
            // Initialization
            this._initAria();
            this._initTarget();
            this._bindEvents();

            // Registry
            allToggleInstances.push(this);
            if (this.config.targetId) {
                if (!targetToTogglesMap.has(this.config.targetId)) {
                    targetToTogglesMap.set(this.config.targetId, []);
                }
                targetToTogglesMap.get(this.config.targetId).push(this);
            }

            // Internal handlers
            this._escapeHandler = this._handleEscape.bind(this);
            this._tabHandler = this._handleTab.bind(this);
            this._outsideClickHandler = this._handleOutsideClick.bind(this);
            this._anchorClickHandler = this._handleAnchorClick.bind(this);
        }

        get isEnabled() {
            return !!toggleStates.get(this.id);
        }

        set isEnabled(value) {
            this.setEnabled(value);
        }

        _initAria() {
            if (!this.button.hasAttribute("aria-pressed")) {
                this.button.setAttribute("aria-pressed", "false");
            }
        }

        _initLabels() {
            const ds = this.button.dataset;
            let labelOff = ds.labelOff || "";
            let labelOn = ds.labelOn || "";
            const labelWrapper = this.button.querySelector(".toggle__label");

            if (labelWrapper) {
                const offTextEl = labelWrapper.querySelector(".label-off");
                const onTextEl = labelWrapper.querySelector(".label-on");
                const offTextFromDom = offTextEl?.textContent?.trim();
                const onTextFromDom = onTextEl?.textContent?.trim();

                if (!labelOff && offTextFromDom) {
                    ds.labelOff = offTextFromDom;
                }
                if (!labelOn && onTextFromDom) {
                    ds.labelOn = onTextFromDom;
                }
            }
        }

        _initTarget() {
            if (this.config.targetIsModal && this.target) {
                this.target.setAttribute("role", "dialog");
                this.target.setAttribute("aria-modal", "true");
            }
        }

        _bindEvents() {
            this.button.addEventListener("click", () => this.toggle());
        }

        setEnabled(nextOpen) {
            nextOpen = !!nextOpen;
            if (this.isEnabled === nextOpen) return;

            if (!this.target) {
                if (this.config.targetId) {
                    this.target = document.getElementById(this.config.targetId);
                }
                if (!this.target) {
                    console.warn(`⚠️ Target element #${this.config.targetId} not found.`);
                    return;
                }
            }

            if (!this.config.targetToggledClass) {
                console.warn("⚠️ Toggle button missing data-target-toggled-class:", this.button);
                return;
            }

            // Update state
            toggleStates.set(this.id, nextOpen);
            
            // UI Updates
            this.button.classList.toggle("active", nextOpen);
            this.target.classList.toggle(this.config.targetToggledClass, nextOpen);
            this.button.setAttribute("aria-pressed", String(nextOpen));

            if (this.config.labelMode === "alternate") {
                this.updateLabelWidth();
            }

            if (this.config.freezeScroll) {
                setScrollFreeze(nextOpen);
            }

            if (nextOpen) {
                this._onEnable();
            } else {
                this._onDisable();
            }

            this._dispatchEvents(nextOpen);
            this._syncSiblings(nextOpen);
        }

        enable() { this.setEnabled(true); }
        disable() { this.setEnabled(false); }
        toggle() { this.setEnabled(!this.isEnabled); }

        _onEnable() {
            this.target._lastOpener = this.button;
            document.addEventListener("keydown", this._escapeHandler);
            document.addEventListener("keydown", this._tabHandler);
            document.addEventListener("mousedown", this._outsideClickHandler);
            document.addEventListener("touchstart", this._outsideClickHandler);
            this.target.addEventListener("click", this._anchorClickHandler);

            this._handleFocus();
        }

        _onDisable() {
            closeDropdownsInContainer(this.target);
            this._cleanupHandlers();

            if (this.target._lastOpener && document.body.contains(this.target._lastOpener)) {
                this.target._lastOpener.focus();
                this.target._lastOpener = null;
            }
        }

        _cleanupHandlers() {
            document.removeEventListener("keydown", this._escapeHandler);
            document.removeEventListener("keydown", this._tabHandler);
            document.removeEventListener("mousedown", this._outsideClickHandler);
            document.removeEventListener("touchstart", this._outsideClickHandler);
            if (this.target) {
                this.target.removeEventListener("click", this._anchorClickHandler);
            }
        }

        _handleEscape(event) {
            if (event.key === "Escape" && !event.defaultPrevented) {
                this.disable();
            }
        }

        _handleOutsideClick(event) {
            if (!this.target || !this.config.targetToggledClass) return;
            if (this.target.contains(event.target) || this.button.contains(event.target)) return;
            this.disable();
        }

        _handleAnchorClick(event) {
            const link = event.target.closest("a[href]");
            if (!link) return;

            const href = link.getAttribute("href") || "";
            const isHashLink = href.startsWith("#") || 
                             href.startsWith(window.location.pathname + "#") || 
                             href === "" || href === "#";

            if (isHashLink) {
                this.disable();
            }
        }

        _handleTab(event) {
            if (!this.isEnabled) return;
            if (event.key !== "Tab" || window.__stackedIsManagingFocus) return;

            const focusableItems = getFocusableElements(this.target);
            if (focusableItems.length === 0) {
                event.preventDefault();
                return;
            }

            const firstItem = focusableItems[0];
            const lastItem = focusableItems[focusableItems.length - 1];
            const hasInternalToggle = focusableItems.some(el => el.classList.contains("toggle"));

            if (event.shiftKey) {
                if (document.activeElement === firstItem) {
                    event.preventDefault();
                    (hasInternalToggle ? lastItem : this.button).focus();
                } else if (document.activeElement === this.button && !hasInternalToggle) {
                    event.preventDefault();
                    lastItem.focus();
                }
            } else {
                if (document.activeElement === lastItem) {
                    event.preventDefault();
                    (hasInternalToggle ? firstItem : this.button).focus();
                } else if (document.activeElement === this.button && !hasInternalToggle) {
                    event.preventDefault();
                    firstItem.focus();
                }
            }
        }

        _handleFocus() {
            const nextFocusId = this.config.nextFocusId;
            if (nextFocusId === "self") {
                this.button.focus();
            } else if (nextFocusId) {
                this._moveFocusToElement(nextFocusId);
            } else {
                this.button.focus();
            }
        }

        _moveFocusToElement(elementId) {
            const attemptFocus = (isRetry = false) => {
                if (window.__stackedIsManagingFocus) return;
                const target = document.getElementById(elementId);
                if (target && isElementFocusable(target)) {
                    target.focus();
                    if (document.activeElement === target) return;
                }
                if (!isRetry) {
                    setTimeout(() => attemptFocus(true), 50);
                } else {
                    this.button.focus();
                }
            };
            requestAnimationFrame(() => attemptFocus(false));
        }

        _dispatchEvents(isEnabled) {
            const detail = { id: this.id, isEnabled };
            const events = [isEnabled ? "toggle:enable" : "toggle:disable", "toggle:change"];
            events.forEach(name => {
                this.target.dispatchEvent(new CustomEvent(name, {
                    bubbles: true,
                    cancelable: false,
                    detail
                }));
            });
        }

        _syncSiblings(nextOpen) {
            const siblings = targetToTogglesMap.get(this.config.targetId) || [];
            siblings.forEach(sibling => {
                if (sibling === this) return;
                toggleStates.set(sibling.id, nextOpen);
                sibling.button.classList.toggle("active", nextOpen);
                sibling.button.setAttribute("aria-pressed", String(nextOpen));
                if (sibling.config.labelMode === "alternate") {
                    sibling.updateLabelWidth();
                }
            });
        }

        updateLabelWidth() {
            const labelWrapper = this.button.querySelector(".toggle__label");
            if (!labelWrapper) return;

            const labelOn = labelWrapper.querySelector(".label-on");
            const labelOff = labelWrapper.querySelector(".label-off");
            
            labelWrapper.style.removeProperty("inline-size");

            const currentLabel = this.isEnabled ? labelOn : labelOff;
            if (!currentLabel) return;

            const width = currentLabel.offsetWidth;
            if (width > 0) {
                labelWrapper.style.setProperty("inline-size", width + "px");
            }
        }

        // Event proxy methods
        on(eventName, handler) {
            if (this.target) this.target.addEventListener(eventName, handler);
        }
        off(eventName, handler) {
            if (this.target) this.target.removeEventListener(eventName, handler);
        }

        getConfig() {
            return { ...this.config };
        }
    }

    // --------------------------------------------
    // INITIALIZATION & GLOBAL API
    // --------------------------------------------
    const toggleButtons = document.querySelectorAll("button.toggle");
    if (toggleButtons.length === 0) {
        console.warn("⚠️ No toggle buttons found on this page.");
    }

    toggleButtons.forEach(btn => new Toggle(btn));

    // Recalculate label widths on resize
    let resizeRafId = null;
    window.addEventListener("resize", () => {
        if (resizeRafId !== null) return;
        resizeRafId = requestAnimationFrame(() => {
            resizeRafId = null;
            allToggleInstances.forEach(inst => {
                if (inst.config.labelMode === "alternate") inst.updateLabelWidth();
            });
        });
    });

    // Public API
    window.allToggleInstances = allToggleInstances;
    window.Toggles = {
        getAll() { return allToggleInstances; },
        findById(id) { return allToggleInstances.find(i => i.id === id) || null; },
        findByTarget(targetId) { return targetToTogglesMap.get(targetId) || []; }
    };

})();</script><style type="text/css" id="etch-main-default">/* Add your global styles here */</style><style type="text/css" id="etch-custom-media-definitions-custom-media">/* Add your custom media definitions here using @custom-media rules. Example: @custom-media --small-screen (max-width: 600px);*/</style><link rel='stylesheet' id='automaticcss-core-css' href='https://dinocrisis.com/wp-content/uploads/automatic-css/automatic.css?ver=1773009484' media='all' />
</head>

<body class="home wp-singular page-template-default page page-id-2 wp-embed-responsive wp-theme-etch-theme surerank-business-1.7.1 surerank-1.7.4">
	
<a class="skip-link screen-reader-text" id="wp-skip-link" href="#main">Skip to content</a><div class="wp-site-blocks"><header data-etch-element="section" data-sticky-header="true" data-hide-on-scroll="true" data-hide-at="200px" data-show-on-scroll-up="false" data-skip-link="true" class="header-wrapper"><div data-menu-element="header-inner" class="header"><div data-etch-element="container" class="header__container"><a href="/" aria-label="Task Homepage" class="header__logo"><svg xmlns="http://www.w3.org/2000/svg" id="Layer_2" viewBox="0 0 179.45 101.66"><defs><style>.cls-1</style></defs><g id="Layer_1-2"><path class="cls-1" d="m.04,51V.79h13.27v50.21H.04ZM6.43,13.34V.79h10.4v12.55H6.43Zm0,37.66v-12.55h10.4v12.55H6.43Zm10.4,0v-12.55c2.1,0,4.04-.31,5.81-.93,1.77-.62,3.3-1.48,4.59-2.58,1.29-1.1,2.3-2.41,3.01-3.95.72-1.53,1.08-3.23,1.08-5.09s-.36-3.56-1.08-5.09c-.72-1.53-1.72-2.84-3.01-3.95-1.29-1.1-2.82-1.96-4.59-2.58-1.77-.62-3.71-.93-5.81-.93V.79c5.5,0,10.37,1.08,14.6,3.23,4.23,2.15,7.54,5.11,9.94,8.86,2.39,3.75,3.59,8.09,3.59,13.02s-1.2,9.21-3.59,12.98c-2.39,3.78-5.7,6.74-9.94,8.9-4.23,2.15-9.1,3.23-14.6,3.23Z"></path><path class="cls-1" d="m51.05,51V.79h13.27v50.21h-13.27Z"></path><path class="cls-1" d="m72.93,51V.79h13.99l-.72,12.27v38.02l-13.27-.07Zm33.57,0l-30.49-42.97,10.9-7.25,30.27,42.68-10.69,7.53Zm0,0V.79h13.27v50.21h-13.27Z"></path><path class="cls-1" d="m152.77,51.86c-5.26,0-9.91-1.11-13.95-3.34-4.04-2.22-7.21-5.28-9.5-9.18-2.3-3.9-3.44-8.36-3.44-13.38s1.15-9.55,3.44-13.45c2.3-3.9,5.45-6.96,9.47-9.18,4.02-2.22,8.63-3.34,13.84-3.34s9.9,1.11,13.92,3.34c4.02,2.22,7.17,5.28,9.47,9.18,2.3,3.9,3.44,8.38,3.44,13.45s-1.14,9.48-3.41,13.38c-2.27,3.9-5.42,6.96-9.43,9.18-4.02,2.22-8.63,3.34-13.84,3.34Zm0-12.19c2.58,0,4.85-.58,6.82-1.76,1.96-1.17,3.49-2.79,4.59-4.84,1.1-2.06,1.65-4.42,1.65-7.1s-.56-5.06-1.69-7.14c-1.12-2.08-2.68-3.71-4.66-4.88-1.99-1.17-4.27-1.76-6.85-1.76s-4.79.59-6.78,1.76c-1.99,1.17-3.54,2.8-4.66,4.88-1.12,2.08-1.69,4.46-1.69,7.14s.57,5.05,1.72,7.1c1.15,2.06,2.71,3.67,4.7,4.84,1.98,1.17,4.27,1.76,6.85,1.76Z"></path><path class="cls-1" d="m20.41,101.66c-3.99,0-7.52-.88-10.57-2.65-3.06-1.77-5.46-4.2-7.21-7.3-1.75-3.1-2.62-6.66-2.62-10.69s.87-7.59,2.62-10.69c1.75-3.1,4.15-5.53,7.21-7.3,3.06-1.77,6.58-2.65,10.57-2.65,3.08,0,5.85.53,8.32,1.6,2.47,1.06,4.6,2.55,6.38,4.45,1.79,1.9,3.15,4.1,4.1,6.61l-10.03,3.19c-.53-1.25-1.22-2.35-2.05-3.28-.84-.93-1.81-1.64-2.94-2.14-1.12-.49-2.39-.74-3.79-.74-1.86,0-3.52.47-4.96,1.4-1.44.93-2.57,2.21-3.39,3.85-.82,1.63-1.23,3.53-1.23,5.7s.42,4.02,1.25,5.67c.84,1.65,1.98,2.95,3.45,3.88,1.46.93,3.14,1.4,5.04,1.4,1.48,0,2.76-.26,3.85-.77,1.08-.51,2.01-1.23,2.79-2.17.78-.93,1.45-2.02,2.02-3.28l10.03,3.19c-.91,2.51-2.26,4.72-4.05,6.64-1.79,1.92-3.93,3.41-6.44,4.47-2.51,1.06-5.3,1.6-8.38,1.6Z"></path><path class="cls-1" d="m43.55,100.98v-39.9h10.54v39.9h-10.54Zm9.06-12.65v-9.69h6.9c.95,0,1.79-.17,2.51-.51.72-.34,1.29-.82,1.71-1.42.42-.61.63-1.29.63-2.05,0-1.14-.45-2.08-1.34-2.82-.89-.74-2.06-1.11-3.51-1.11h-6.9v-9.63l7.47-.06c3-.04,5.66.53,7.98,1.71,2.32,1.18,4.13,2.79,5.44,4.84,1.31,2.05,1.97,4.41,1.97,7.07s-.66,5.03-1.97,7.1c-1.31,2.07-3.13,3.69-5.44,4.85-2.32,1.16-4.98,1.74-7.98,1.74h-7.47Zm12.37,12.65l-8.89-15.67,7.92-5.93,13.05,21.6h-12.08Z"></path><path class="cls-1" d="m81.34,100.98v-39.9h10.54v39.9h-10.54Z"></path><path class="cls-1" d="m112.69,101.66c-1.86,0-3.69-.26-5.47-.77-1.79-.51-3.41-1.23-4.87-2.14-1.46-.91-2.67-1.95-3.62-3.11-.95-1.16-1.52-2.38-1.71-3.68l10.49-2.91c.34.95.93,1.76,1.77,2.42.84.67,1.92,1.04,3.25,1.11,1.06.04,2-.25,2.82-.85.82-.61,1.23-1.41,1.23-2.39,0-.65-.24-1.26-.71-1.85-.48-.59-1.23-1.02-2.25-1.28l-5.98-1.54c-2.05-.53-3.81-1.35-5.27-2.45-1.46-1.1-2.58-2.45-3.36-4.05-.78-1.6-1.17-3.38-1.17-5.36,0-3.91,1.3-6.96,3.9-9.15,2.6-2.18,6.26-3.28,10.97-3.28,2.51,0,4.72.32,6.64.97,1.92.65,3.57,1.66,4.96,3.05,1.39,1.39,2.54,3.2,3.45,5.44l-10.43,3.02c-.19-.76-.67-1.52-1.45-2.28-.78-.76-1.83-1.14-3.16-1.14s-2.29.29-2.99.85c-.7.57-1.05,1.41-1.05,2.51,0,.68.28,1.28.85,1.8.57.51,1.39.9,2.45,1.17l6.04,1.54c3.04.76,5.42,2.25,7.12,4.47,1.71,2.22,2.56,4.76,2.56,7.61,0,2.62-.6,4.84-1.8,6.67-1.2,1.82-2.92,3.21-5.16,4.16-2.24.95-4.92,1.43-8.04,1.43Z"></path><path class="cls-1" d="m132.92,100.98v-39.9h10.55v39.9h-10.55Z"></path><path class="cls-1" d="m164.27,101.66c-1.86,0-3.69-.26-5.47-.77-1.79-.51-3.41-1.23-4.87-2.14-1.46-.91-2.67-1.95-3.62-3.11-.95-1.16-1.52-2.38-1.71-3.68l10.49-2.91c.34.95.93,1.76,1.77,2.42.83.67,1.92,1.04,3.25,1.11,1.06.04,2-.25,2.82-.85.82-.61,1.23-1.41,1.23-2.39,0-.65-.24-1.26-.71-1.85-.48-.59-1.23-1.02-2.25-1.28l-5.99-1.54c-2.05-.53-3.81-1.35-5.27-2.45-1.46-1.1-2.58-2.45-3.36-4.05-.78-1.6-1.17-3.38-1.17-5.36,0-3.91,1.3-6.96,3.9-9.15,2.6-2.18,6.26-3.28,10.97-3.28,2.51,0,4.72.32,6.64.97,1.92.65,3.57,1.66,4.96,3.05,1.39,1.39,2.54,3.2,3.45,5.44l-10.43,3.02c-.19-.76-.68-1.52-1.45-2.28-.78-.76-1.83-1.14-3.16-1.14s-2.29.29-2.99.85c-.7.57-1.05,1.41-1.05,2.51,0,.68.29,1.28.85,1.8.57.51,1.39.9,2.45,1.17l6.04,1.54c3.04.76,5.42,2.25,7.12,4.47,1.71,2.22,2.56,4.76,2.56,7.61,0,2.62-.6,4.84-1.79,6.67-1.2,1.82-2.92,3.21-5.16,4.16-2.24.95-4.92,1.43-8.04,1.43Z"></path></g></svg></a><div id="menu-wrapper" data-etch-element="flex-div" data-mobile-breakpoint="1200px" data-mobile-accordion="" data-mobile-off-canvas-direction="From Right" data-desktop-dropdown-interaction="hover and click" data-menu-element="menu-wrapper" style="--mobile-menu-transition-duration: 0.25s;" data-mobile-dropdown-mode="Accordion" data-mobile-menu-mode="Off Canvas" class="menu-wrapper desktop"><div class="menu-wrapper__inner"><div data-etch-element="flex-div" class="mobile-menu-header hide-from-desktop-menu"></div><nav data-menu-element="nav" class="nav"><ul data-etch-element="flex-div" class="nav__list"><li data-menu-hide="none" class="menu-link "><a href="/">Home</a></li><li data-menu-hide="none" class="menu-link "><a href="/blog/">Blog</a></li><li class=" menu-dropdown" data-width-match="" data-mega-menu="false" data-menu-element="dropdown" data-menu-hide="none"><button data-activation="respect menu" data-menu-element="dropdown-trigger" class="menu-dropdown__trigger"><span data-menu-element="dropdown-label" class="menu-dropdown__trigger-label">Dino Crisis</span><div aria-hidden="true" class="menu-dropdown__trigger-icon-wrapper"><svg width="32px" height="32px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#000000" class="menu-dropdown__trigger-icon"><path d="M6 9L12 15L18 9" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></button><div id="" data-menu-element="dropdown-content" class="menu-dropdown__content-wrapper"><button aria-label="Back to Main Menu" data-menu-element="back-button" class="menu-dropdown-back-button"><span data-menu-element="back-button-label" class="menu-dropdown-back-button__label">Main Menu</span><svg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#000000"><path d="M15 6L9 12L15 18" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></button><ul class="menu-dropdown__content"><li data-menu-hide="none" class="menu-link "><a href="/dino-crisis/cheats/">Dino Crisis Cheats</a></li></ul></div></li><li class=" menu-dropdown" data-width-match="" data-mega-menu="false" data-menu-element="dropdown" data-menu-hide="none"><button data-activation="respect menu" data-menu-element="dropdown-trigger" class="menu-dropdown__trigger"><span data-menu-element="dropdown-label" class="menu-dropdown__trigger-label">Dino Crisis 2</span><div aria-hidden="true" class="menu-dropdown__trigger-icon-wrapper"><svg width="32px" height="32px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#000000" class="menu-dropdown__trigger-icon"><path d="M6 9L12 15L18 9" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></button><div id="" data-menu-element="dropdown-content" class="menu-dropdown__content-wrapper"><button aria-label="Back to Main Menu" data-menu-element="back-button" class="menu-dropdown-back-button"><span data-menu-element="back-button-label" class="menu-dropdown-back-button__label">Main Menu</span><svg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#000000"><path d="M15 6L9 12L15 18" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></button><ul class="menu-dropdown__content"><li data-menu-hide="none" class="menu-link "><a href="/dino-crisis/cheats/">Dino Crisis 2 Cheats</a></li></ul></div></li><li data-menu-hide="none" class="menu-link "><a href="/contact/">Contact</a></li></ul></nav></div><div style="--mobile-menu-backdrop-color: var(--neutral-ultra-dark); --mobile-menu-backdrop-opacity: 80%;" class="menu-wrapper-backdrop"></div></div><button id="open-menu-button" class="toggle" aria-label="Toggle Menu" data-target-element="menu-wrapper" data-target-toggled-class="open" data-next-focus-item="self" data-freeze-scroll="true" data-label-mode="Alternate" aria-pressed="false" aria-controls="menu-wrapper" aria-haspopup="true" data-target-is-modal="false"><svg viewBox="0 0 100 100" class="toggle-animated-hamburger-1"><line x1="20" y1="30" x2="80" y2="30" class="hamburger-line--top"></line><line x1="20" y1="70" x2="80" y2="70" class="hamburger-line--bottom"></line></svg><span aria-hidden="true" class="toggle__label"><span class="toggle__label-text label-off">Open</span><span class="toggle__label-text label-on">Close</span></span></button></div></div></header><main id="main"><section data-etch-element="section"><div data-etch-element="container" class="fs-posts-wrapper"><a href="https://dinocrisis.com/dino-crisis-1-2-now-on-steam/" class="fs-post-wrapper"><figure><img decoding="async" alt="Dino Crisis 1 &amp; 2 Now Available on Steam" src="https://dinocrisis.com/wp-content/uploads/2026/03/dino-crisis-1-pc-140913884.webp"  title="Home" /></figure><h2>Dino Crisis 1 &amp; 2 Now Available on Steam</h2><p>Fri, Feb 13 2026</p></a><a href="https://dinocrisis.com/dino-crisis-bundle-pc-gog/" class="fs-post-wrapper"><figure><img decoding="async" alt="Dino Crisis 1 &amp; 2 Bundle Updated and Available on PC via GOG" src="https://dinocrisis.com/wp-content/uploads/2026/03/dino-crisis-2-pc-dylan-regina-937164.webp"  title="Home" /></figure><h2>Dino Crisis 1 &amp; 2 Bundle Updated and Available on PC via GOG</h2><p>Wed, Jan 29 2025</p></a></div></section></main><footer data-etch-element="section" class="fs-footer-wrapper"><div data-etch-element="container"><div class="fs-colophon"><p>Dino Crisis copyright ©  Capcom</p><a href="https://www.youtube.com/watch?v=TCSUKIhjevo" target="_blank">Are you a good person?</a></div></div></footer></div>
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/etch-theme/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
        <script id="independent-analytics-script"   >
            // Do not change this comment line otherwise Speed Optimizer won't be able to detect this script

            (function () {
                function sendRequest(url, body) {
                    if(!window.fetch) {
                        const xhr = new XMLHttpRequest();
                        xhr.open("POST", url, true);
                        xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
                        xhr.send(JSON.stringify(body))
                        return
                    }

                    const request = fetch(url, {
                        method: 'POST',
                        body: JSON.stringify(body),
                        keepalive: true,
                        headers: {
                            'Content-Type': 'application/json;charset=UTF-8'
                        }
                    });
                }
                const calculateParentDistance = (child, parent) => {
                    let count = 0;
                    let currentElement = child;

                    // Traverse up the DOM tree until we reach parent or the top of the DOM
                    while (currentElement && currentElement !== parent) {
                        currentElement = currentElement.parentNode;
                        count++;
                    }

                    // If parent was not found in the hierarchy, return -1
                    if (!currentElement) {
                        return -1; // Indicates parent is not an ancestor of element
                    }

                    return count; // Number of layers between element and parent
                }
                const isMatchingClass = (linkRule, href, classes, ids) => {
                    return classes.includes(linkRule.value)
                }
                const isMatchingId = (linkRule, href, classes, ids) => {
                    return ids.includes(linkRule.value)
                }
                const isMatchingDomain = (linkRule, href, classes, ids) => {
                    if(!URL.canParse(href)) {
                        return false
                    }

                    const url = new URL(href)
                    const host = url.host
                    const hostsToMatch = [host]

                    if(host.startsWith('www.')) {
                        hostsToMatch.push(host.substring(4))
                    } else {
                        hostsToMatch.push('www.' + host)
                    }

                    return hostsToMatch.includes(linkRule.value)
                }
                const isMatchingExtension = (linkRule, href, classes, ids) => {
                    if(!URL.canParse(href)) {
                        return false
                    }

                    const url = new URL(href)

                    return url.pathname.endsWith('.' + linkRule.value)
                }
                const isMatchingSubdirectory = (linkRule, href, classes, ids) => {
                    if(!URL.canParse(href)) {
                        return false
                    }

                    const url = new URL(href)

                    return url.pathname.startsWith('/' + linkRule.value + '/')
                }
                const isMatchingProtocol = (linkRule, href, classes, ids) => {
                    if(!URL.canParse(href)) {
                        return false
                    }

                    const url = new URL(href)

                    return url.protocol === linkRule.value + ':'
                }
                const isMatchingExternal = (linkRule, href, classes, ids) => {
                    if(!URL.canParse(href) || !URL.canParse(document.location.href)) {
                        return false
                    }

                    const matchingProtocols = ['http:', 'https:']
                    const siteUrl = new URL(document.location.href)
                    const linkUrl = new URL(href)

                    // Links to subdomains will appear to be external matches according to JavaScript,
                    // but the PHP rules will filter those events out.
                    return matchingProtocols.includes(linkUrl.protocol) && siteUrl.host !== linkUrl.host
                }
                const isMatch = (linkRule, href, classes, ids) => {
                    switch (linkRule.type) {
                        case 'class':
                            return isMatchingClass(linkRule, href, classes, ids)
                        case 'id':
                            return isMatchingId(linkRule, href, classes, ids)
                        case 'domain':
                            return isMatchingDomain(linkRule, href, classes, ids)
                        case 'extension':
                            return isMatchingExtension(linkRule, href, classes, ids)
                        case 'subdirectory':
                            return isMatchingSubdirectory(linkRule, href, classes, ids)
                        case 'protocol':
                            return isMatchingProtocol(linkRule, href, classes, ids)
                        case 'external':
                            return isMatchingExternal(linkRule, href, classes, ids)
                        default:
                            return false;
                    }
                }
                const track = (element) => {
                    const href = element.href ?? null
                    const classes = Array.from(element.classList)
                    const ids = [element.id]
                    const linkRules = [{"type":"extension","value":"pdf"},{"type":"extension","value":"zip"},{"type":"protocol","value":"mailto"},{"type":"protocol","value":"tel"}]
                    if(linkRules.length === 0) {
                        return
                    }

                    // For link rules that target an id, we need to allow that id to appear
                    // in any ancestor up to the 7th ancestor. This loop looks for those matches
                    // and counts them.
                    linkRules.forEach((linkRule) => {
                        if(linkRule.type !== 'id') {
                            return;
                        }

                        const matchingAncestor = element.closest('#' + linkRule.value)

                        if(!matchingAncestor || matchingAncestor.matches('html, body')) {
                            return;
                        }

                        const depth = calculateParentDistance(element, matchingAncestor)

                        if(depth < 7) {
                            ids.push(linkRule.value)
                        }
                    });

                    // For link rules that target a class, we need to allow that class to appear
                    // in any ancestor up to the 7th ancestor. This loop looks for those matches
                    // and counts them.
                    linkRules.forEach((linkRule) => {
                        if(linkRule.type !== 'class') {
                            return;
                        }

                        const matchingAncestor = element.closest('.' + linkRule.value)

                        if(!matchingAncestor || matchingAncestor.matches('html, body')) {
                            return;
                        }

                        const depth = calculateParentDistance(element, matchingAncestor)

                        if(depth < 7) {
                            classes.push(linkRule.value)
                        }
                    });

                    const hasMatch = linkRules.some((linkRule) => {
                        return isMatch(linkRule, href, classes, ids)
                    })

                    if(!hasMatch) {
                        return
                    }

                    const url = "https://dinocrisis.com/wp-content/plugins/independent-analytics-pro/iawp-click-endpoint.php";
                    const body = {
                        href: href,
                        classes: classes.join(' '),
                        ids: ids.join(' '),
                        ...{"payload":{"resource":"singular","singular_id":2,"page":1},"signature":"686b3f858bc702a3ed0937bbc0326be1"}                    };

                    sendRequest(url, body)
                }
                let hasSearched = false;
                function search() {
                    if(hasSearched) {
                        return;
                    }
                    hasSearched = true;

                    if (document.hasOwnProperty("visibilityState") && document.visibilityState === "prerender") {
                        return;
                    }

                                            if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
                            return;
                        }
                    
                    let referrer_url = null;

                    if (typeof document.referrer === 'string' && document.referrer.length > 0) {
                        referrer_url = document.referrer;
                    }

                    const params = location.search.slice(1).split('&').reduce((acc, s) => {
                        const [k, v] = s.split('=');
                        return Object.assign(acc, {[k]: v});
                    }, {});

                    const url = "https://dinocrisis.com/wp-json/iawp/search";
                    const body = {
                        referrer_url,
                        utm_source: params.utm_source,
                        utm_medium: params.utm_medium,
                        utm_campaign: params.utm_campaign,
                        utm_term: params.utm_term,
                        utm_content: params.utm_content,
                        gclid: params.gclid,
                        ...{"payload":{"resource":"singular","singular_id":2,"page":1},"signature":"686b3f858bc702a3ed0937bbc0326be1"}                    };

                    sendRequest(url, body)
                }
                document.addEventListener('mousedown', function (event) {
                                        if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
                        return;
                    }
                    
                    const element = event.target.closest('a')

                    if(!element) {
                        return
                    }

                    const isPro = true
                    if(!isPro) {
                        return
                    }

                    // Don't track left clicks with this event. The click event is used for that.
                    if(event.button === 0) {
                        return
                    }

                    track(element)
                })
                document.addEventListener('click', function (event) {
                                        if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
                        return;
                    }
                    
                    const element = event.target.closest('a, button, input[type="submit"], input[type="button"]')

                    if(!element) {
                        return
                    }

                    const isPro = true
                    if(!isPro) {
                        return
                    }

                    track(element)
                })
                document.addEventListener('play', function (event) {
                                        if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
                        return;
                    }
                    
                    const element = event.target.closest('audio, video')

                    if(!element) {
                        return
                    }

                    const isPro = true
                    if(!isPro) {
                        return
                    }

                    track(element)
                }, true)
                document.addEventListener("DOMContentLoaded", function (e) {
                    search();
                });
                document.addEventListener("iawpSearch", function (e) {
                    search();
                });
            })();
        </script>
        </body>
</html>


<!-- Page cached by LiteSpeed Cache 7.8.1 on 2026-06-04 13:47:01 -->