html,
body {
  overflow-y: auto !important;
  overscroll-behavior-y: contain;
  scroll-behavior: smooth;
}

body.modal-open,
body[aria-modal='true'] {
  overflow-y: hidden !important;
  position: fixed;
  width: 100%;
}

/* Performance mode - reduce animations */
.performance-mode *,
.reduce-motion *,
.performance-mode *::before,
.reduce-motion *::before,
.performance-mode *::after,
.reduce-motion *::after {
  animation-duration: 0.01ms !important;
  animation-iteration-count: 1 !important;
  transition-duration: 0.01ms !important;
  scroll-behavior: auto !important;
}

*,
*::before,
*::after {
  transition-duration: 0.12s !important;
  animation-duration: 0.18s !important;
}

button,
.btn,
a,
[role='button'] {
  transition-duration: 0.1s !important;
  animation-duration: 0.15s !important;
}

.sr-only,
.visually-hidden {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip-path: inset(50%) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

.sr-only-focusable:focus,
.sr-only-focusable:active,
.visually-hidden-focusable:focus,
.visually-hidden-focusable:active {
  position: static !important;
  width: auto !important;
  height: auto !important;
  padding: inherit !important;
  margin: inherit !important;
  overflow: visible !important;
  clip-path: none !important;
  white-space: normal !important;
}

[aria-hidden='true'] {
  pointer-events: none;
}

.skip-link {
  position: fixed;
  top: -100px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 100000;
  padding: 1rem 2rem;
  background: var(--tiller-color-primary, #1a2a3a);
  color: #ffffff;
  font-weight: 700;
  font-size: 1rem;
  text-decoration: none;
  border-radius: 0 0 8px 8px;
  box-shadow: 0 4px 12px rgb(0 0 0 / 30%);
  transition: top 0.2s ease-out;
}

.skip-link:focus {
  top: 0;
  outline: 3px solid var(--tiller-color-gold, #c9a227);
  outline-offset: 2px;
}

.skip-links {
  position: fixed;
  top: -200px;
  left: 0;
  right: 0;
  z-index: 100000;
  display: flex;
  justify-content: center;
  gap: 1rem;
  padding: 0.5rem;
  background: var(--tiller-color-primary, #1a2a3a);
  transition: top 0.2s ease-out;
}

.skip-links:focus-within {
  top: 0;
}

.skip-links a {
  padding: 0.75rem 1.5rem;
  background: var(--tiller-color-gold, #c9a227);
  color: var(--tiller-color-primary, #1a2a3a);
  font-weight: 700;
  text-decoration: none;
  border-radius: 4px;
}

.skip-links a:focus {
  outline: 3px solid #ffffff;
  outline-offset: 2px;
}

:focus {
  outline: 3px solid var(--focus-color, #0066cc);
  outline-offset: 2px;
}

:focus:not(:focus-visible) {
  outline: none;
}

:focus-visible {
  outline: 3px solid var(--focus-color, #0066cc);
  outline-offset: 2px;
}

a:focus-visible,
button:focus-visible,
[role='button']:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible {
  outline: 3px solid var(--tiller-color-gold, #c9a227);
  outline-offset: 3px;
  box-shadow: 0 0 0 6px rgb(201 162 39 / 25%);
}

.card:focus-within,
.ts-card:focus-within,
.nav-item:focus-within {
  outline: 2px solid var(--tiller-color-gold, #c9a227);
  outline-offset: 2px;
}

.dark-bg a:focus-visible,
.dark-bg button:focus-visible,
[data-theme='dark'] a:focus-visible,
[data-theme='dark'] button:focus-visible {
  outline-color: #ffffff;
  box-shadow: 0 0 0 6px rgb(255 255 255 / 30%);
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }

  html {
    scroll-behavior: auto !important;
  }

  .animate,
  .animated,
  [data-aos],
  .fade-in,
  .slide-in {
    animation: none !important;
    opacity: 100% !important;
    transform: none !important;
  }

  .carousel,
  .slider,
  .slideshow {
    animation: none !important;
  }

  video[autoplay] {
    display: none;
  }

  .video-bg-fallback {
    display: block !important;
  }
}

@media (forced-colors: active) {
  *,
  *::before,
  *::after {
    border-color: currentcolor !important;
  }

  :focus,
  :focus-visible {
    outline: 3px solid Highlight !important;
    outline-offset: 2px !important;
  }

  button,
  .btn,
  [role='button'],
  input[type='submit'],
  input[type='button'] {
    border: 2px solid currentcolor !important;
  }

  a {
    text-decoration: underline !important;
  }

  input,
  textarea,
  select {
    border: 2px solid currentcolor !important;
  }

  svg {
    fill: currentcolor !important;
    stroke: currentcolor !important;
  }

  [style*='background-image'] {
    background-image: none !important;
    background-color: Canvas !important;
  }
}

[data-high-contrast='true'],
.high-contrast {
  --tiller-bg-color: #000000;
  --tiller-text-primary: #ffffff;
  --tiller-text-secondary: #ffffff;
  --tiller-color-gold: #c9a227;
  --tiller-color-primary: #ffffff;
  --link-color: #ffffff;
  --focus-color: #10b981;

  background: #000000 !important;
  color: #ffffff !important;
}

[data-high-contrast='true'] a,
.high-contrast a {
  color: #ffffff;
  text-decoration: underline;
  transition:
    color 0.15s ease,
    text-shadow 0.15s ease;
}

[data-high-contrast='true'] a:hover,
[data-high-contrast='true'] a:focus,
.high-contrast a:hover,
.high-contrast a:focus {
  color: var(--tiller-color-gold, #c9a227);
  text-shadow:
    0 0 8px rgb(201 162 39 / 70%),
    0 0 20px rgb(201 162 39 / 50%),
    0 0 35px rgb(201 162 39 / 30%);
}

[data-high-contrast='true'] .desktop-nav__link,
[data-high-contrast='true'] .mobile-nav__link,
.high-contrast .desktop-nav__link,
.high-contrast .mobile-nav__link {
  text-decoration: none;
}

[data-high-contrast='true'] .ts-header__company,
.high-contrast .ts-header__company {
  color: var(--tiller-color-emerald, #10b981) !important;
  text-shadow:
    0 0 10px rgb(16 185 129 / 80%),
    0 0 25px rgb(16 185 129 / 60%),
    0 0 40px rgb(16 185 129 / 40%) !important;
}

[data-high-contrast='true'] button,
[data-high-contrast='true'] .btn,
.high-contrast button,
.high-contrast .btn {
  background: #ffffff;
  color: #000000;
  border: 2px solid #ffffff;
  transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}

[data-high-contrast='true'] button:hover,
[data-high-contrast='true'] .btn:hover,
.high-contrast button:hover,
.high-contrast .btn:hover {
  background: var(--tiller-color-gold, #c9a227);
  border-color: var(--tiller-color-gold, #c9a227);
  box-shadow:
    0 0 15px rgb(201 162 39 / 60%),
    0 0 30px rgb(201 162 39 / 30%);
}

@media (inverted-colors: inverted) {
  img,
  video,
  picture {
    filter: invert(100%);
  }
}

[data-inverted-colors='true'] img,
[data-inverted-colors='true'] video {
  filter: invert(100%);
}

@media (prefers-reduced-transparency: reduce) {
  *,
  *::before,
  *::after {
    backdrop-filter: none !important;
    opacity: 100% !important;
  }

  .glass,
  .frosted,
  .backdrop-blur {
    background: var(--tiller-bg-color, #ffffff) !important;
    backdrop-filter: none !important;
  }
}

[data-reduced-transparency='true'] .glass,
[data-reduced-transparency='true'] .frosted,
[data-reduced-transparency='true'] .backdrop-blur {
  background: var(--tiller-bg-color, #ffffff) !important;
  backdrop-filter: none !important;
}

@media (pointer: coarse) {
  button,
  .btn,
  [role='button'],
  a,
  input[type='submit'],
  input[type='button'],
  input[type='checkbox'],
  input[type='radio'] {
    min-height: 48px;
    min-width: 48px;
  }

  nav a,
  nav button,
  .nav-link {
    padding: 12px 16px;
    margin: 4px;
  }

  input,
  textarea,
  select {
    min-height: 48px;
    font-size: 16px;
  }
}

.touch-friendly button,
.touch-friendly .btn,
.touch-friendly a {
  min-height: 48px;
  min-width: 48px;
  padding: 12px 24px;
}

@media (hover: none) {
  /* Touch devices - hover states handled via :active */

  a,
  button,
  [role='button'] {
    text-decoration: underline;
  }

  .dropdown:hover .dropdown-menu {
    display: none;
  }
}

[data-hover='none'] .hover-only {
  display: none !important;
}

@media (prefers-contrast: more) {
  * {
    border-color: currentcolor !important;
  }

  a {
    text-decoration: underline !important;
  }

  button,
  .btn {
    border: 2px solid currentcolor !important;
  }

  body {
    font-weight: 500;
  }

  h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    font-weight: 800;
  }
}

@media (prefers-contrast: less) {
  :root {
    --tiller-text-primary: #333333;
    --tiller-bg-color: #f5f5f5;
  }
}

[data-low-contrast='true'] {
  --tiller-text-primary: #333333 !important;
  --tiller-bg-color: #f5f5f5 !important;

  filter: contrast(0.9);
}

@media (prefers-color-scheme: dark) {
  :root {
    --tiller-bg-color: #1a1a2e;
    --tiller-text-primary: #ffffff;
    --tiller-text-secondary: #cccccc;

    color-scheme: dark;
  }

  img {
    filter: brightness(0.9);
  }
}

[data-color-scheme='dark'] {
  --tiller-bg-color: #1a1a2e;
  --tiller-text-primary: #ffffff;
  --tiller-text-secondary: #cccccc;

  color-scheme: dark;
}

[data-color-scheme='dark'] img {
  filter: brightness(0.9);
}

@media (prefers-color-scheme: light) {
  :root {
    color-scheme: light;
  }
}

[data-color-scheme='light'] {
  color-scheme: light;
}

[data-larger-cursor='true'],
[data-larger-cursor='true'] * {
  cursor:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath fill='%23000' stroke='%23fff' stroke-width='2' d='M6 2L6 28L12 22L18 30L22 28L16 20L24 20Z'/%3E%3C/svg%3E")
      6 2,
    auto;
}

[data-focus-highlight='true'] :focus-visible {
  outline: 4px solid var(--tiller-color-emerald, #10b981) !important;
  outline-offset: 4px !important;
  box-shadow: 0 0 0 8px rgb(16 185 129 / 30%) !important;
}

.status-success::before {
  content: '✓ ';
}

.status-error::before {
  content: '✗ ';
}

.status-warning::before {
  content: '⚠ ';
}

.status-info::before {
  content: 'ℹ ';
}

.required-field::after,
[aria-required='true']::after {
  content: ' *';
  color: var(--tiller-color-error, #e85a50);
}

a[href^='http']:not([href*='tillerstead'])::after,
a[rel*='external']::after {
  content: ' ↗';
  font-size: 0.75em;
}

a[href^='mailto:']::before {
  content: '✉ ';
}

a[href^='tel:']::before {
  content: '☎ ';
}

[role='button'],
[role='link'],
[role='menuitem'],
[role='tab'],
[tabindex]:not([tabindex='-1']) {
  cursor: pointer;
}

button,
.btn,
[role='button'],
input[type='submit'],
input[type='button'],
input[type='checkbox'],
input[type='radio'],
a.nav-link,
.nav-item a {
  min-height: 44px;
  min-width: 44px;
}

.touch-friendly button,
.touch-friendly a {
  padding: 12px 24px;
  margin: 4px;
}

[data-focus-trap='true'] {
  position: relative;
}

[data-focus-trap='true']::before {
  content: '';
  position: absolute;
  inset: -4px;
  border: 2px dashed var(--tiller-color-gold, #c9a227);
  border-radius: inherit;
  pointer-events: none;
  opacity: 0%;
  transition: opacity 0.2s;
}

[data-focus-trap='true']:focus-within::before {
  opacity: 100%;
}

html {
  font-size: 100%;
}

p,
li,
dd,
blockquote {
  max-width: 75ch;
}

body {
  line-height: 1.5;
  letter-spacing: normal;
  word-spacing: normal;
}

p,
li {
  line-height: 1.6;
}

p + p {
  margin-top: 1em;
}

[data-text-size='large'] {
  font-size: 125%;
}

[data-text-size='larger'] {
  font-size: 150%;
}

label {
  display: block;
  margin-bottom: 0.5rem;
  font-weight: 600;
  cursor: pointer;
}

label[for][data-required]::after,
.form-label.required::after {
  content: ' (required)';
  color: var(--tiller-color-error, #e85a50);
  font-size: 0.875em;
}

input:not([type='checkbox'], [type='radio']):focus,
textarea:focus,
select:focus {
  border-color: var(--tiller-color-gold, #c9a227);
  box-shadow: 0 0 0 3px rgb(201 162 39 / 25%);
  outline: none;
}

input[aria-invalid='true'],
textarea[aria-invalid='true'],
select[aria-invalid='true'],
.field-error {
  border-color: var(--tiller-color-error, #e85a50) !important;
  border-width: 2px;
}

input[aria-invalid='true']:focus,
textarea[aria-invalid='true']:focus {
  box-shadow: 0 0 0 3px rgb(232 90 80 / 25%);
}

.error-message,
[role='alert'],
.field-error-message {
  color: var(--tiller-color-error, #e85a50);
  font-size: 0.875rem;
  margin-top: 0.25rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.error-message::before,
.field-error-message::before {
  content: '⚠';
  font-size: 1.1em;
}

input[aria-invalid='false'].touched,
.field-success {
  border-color: var(--tiller-color-success, #10b981);
}

.success-message {
  color: var(--tiller-color-success, #10b981);
  font-size: 0.875rem;
  margin-top: 0.25rem;
}

.success-message::before {
  content: '✓ ';
}

.form-hint,
.field-description,
[id$='-hint'],
[id$='-description'] {
  font-size: 0.875rem;
  color: var(--tiller-text-secondary, #555555);
  margin-top: 0.25rem;
}

input:-webkit-autofill {
  box-shadow: 0 0 0 1000px var(--tiller-bg-color, #ffffff) inset;
}

.sr-announcer,
[role='status'],
[role='alert'],
[aria-live] {
  /* Screen reader announcements - styled by parent contexts */
}

[aria-live='polite']:not(:empty),
[role='status']:not(:empty) {
  padding: 0.75rem 1rem;
  border-radius: 4px;
  background: var(--tiller-bg-color, #f0f0f0);
  border-left: 4px solid var(--tiller-color-info, #0066cc);
  margin: 0.5rem 0;
}

[aria-live='assertive']:not(:empty),
[role='alert']:not(:empty) {
  padding: 0.75rem 1rem;
  border-radius: 4px;
  background: #fff5f5;
  border-left: 4px solid var(--tiller-color-error, #e85a50);
  margin: 0.5rem 0;
}

[role='dialog'],
[aria-modal='true'] {
  position: fixed;
  z-index: 10000;
}

body.modal-open > *:not([role='dialog'], .modal-backdrop) {
  pointer-events: none;
}

[role='dialog'] :focus-visible {
  outline: 3px solid var(--tiller-color-gold, #c9a227);
  outline-offset: 2px;
}

.modal-close,
[aria-label*='close' i] {
  min-width: 44px;
  min-height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
}

table {
  border-collapse: collapse;
  width: 100%;
}

th,
td {
  padding: 0.75rem;
  text-align: left;
  border: 1px solid var(--tiller-border-color, #dddddd);
}

th {
  background: var(--tiller-bg-color, #f5f5f5);
  font-weight: 700;
}

tr:focus-within {
  outline: 2px solid var(--tiller-color-gold, #c9a227);
  outline-offset: -2px;
}

tbody tr:nth-child(even) {
  background: rgb(0 0 0 / 2%);
}

img:not([alt]) {
  outline: 3px solid var(--tiller-color-coral, #f87171) !important;
}

img[alt=''] {
  /* Empty alt indicates decorative image */
}

img {
  max-width: 100%;
  height: auto;
}

figure {
  margin: 1rem 0;
}

figcaption {
  font-size: 0.875rem;
  color: var(--tiller-text-secondary, #555555);
  margin-top: 0.5rem;
  text-align: center;
}

.loading,
[aria-busy='true'] {
  position: relative;
  pointer-events: none;
  opacity: 70%;
}

.loading::after,
[aria-busy='true']::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 24px;
  height: 24px;
  margin: -12px 0 0 -12px;
  border: 3px solid var(--tiller-color-gold, #c9a227);
  border-top-color: transparent;
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
}

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

@media (prefers-reduced-motion: reduce) {
  .loading::after,
  [aria-busy='true']::after {
    animation: none;
    border: 3px solid var(--tiller-color-gold, #c9a227);
  }
}

@media print {
  a[href]::after {
    content: ' (' attr(href) ')';
    font-size: 0.8em;
    color: #666666;
  }

  [aria-hidden='true'],
  .skip-link,
  .no-print {
    display: none !important;
  }

  * {
    color: #000000 !important;
    background: #ffffff !important;
  }

  h1,
  h2,
  h3 {
    break-after: avoid;
  }

  img,
  table,
  figure {
    break-inside: avoid;
  }
}

.a11y-toolbar {
  position: fixed;
  bottom: 1rem;
  right: 1rem;
  z-index: 9999;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  background: var(--tiller-bg-color, #ffffff);
  padding: 1rem;
  border-radius: 8px;
  box-shadow: 0 4px 12px rgb(0 0 0 / 15%);
}

.a11y-toolbar button {
  min-width: 44px;
  min-height: 44px;
  padding: 0.5rem;
  border: 2px solid currentcolor;
  border-radius: 4px;
  background: transparent;
  cursor: pointer;
  font-size: 1rem;
}

.a11y-toolbar button:hover,
.a11y-toolbar button:focus {
  background: var(--tiller-color-gold, #c9a227);
  color: var(--tiller-color-primary, #1a2a3a);
}

.a11y-toolbar button[aria-pressed='true'] {
  background: var(--tiller-color-gold, #c9a227);
  color: var(--tiller-color-primary, #1a2a3a);
}

*:focus-visible {
  transition: outline-offset 0.1s ease;
}

a:hover,
button:hover {
  text-decoration: underline;
}

[data-font='dyslexia'] {
  font-family: OpenDyslexic, 'Comic Sans MS', sans-serif;
  letter-spacing: 0.05em;
  word-spacing: 0.1em;
}

[data-reading-guide='true'] p:hover,
[data-reading-guide='true'] li:hover {
  background: rgb(255 255 0 / 20%);
  outline: 2px solid rgb(255 255 0 / 50%);
}

svg[role='img']:not([aria-label], [aria-labelledby]) {
  /* SVGs with img role should have labels */
}

svg[aria-hidden='true'],
.icon-decorative {
  pointer-events: none;
}

button:has(svg):not([aria-label], :has(.sr-only)) {
  /* Buttons with SVG icons should have labels */
}

.tts-reading {
  background: rgb(255 235 59 / 30%) !important;
  outline: 3px solid #ffc107 !important;
  outline-offset: 2px !important;
  border-radius: 4px;
}

[data-tts-active='true']::before {
  content: '🔊 Reading...';
  position: fixed;
  top: 10px;
  left: 50%;
  transform: translateX(-50%);
  padding: 8px 16px;
  background: #1a2a3a;
  color: #ffffff;
  border-radius: 20px;
  font-size: 14px;
  z-index: 100001;
  animation: tts-pulse 1.5s ease-in-out infinite;
}

@keyframes tts-pulse {
  0%,
  100% {
    opacity: 100%;
  }

  50% {
    opacity: 70%;
  }
}

@media (prefers-reduced-motion: reduce) {
  @keyframes tts-pulse {
    0%,
    100% {
      opacity: 100%;
    }
  }
}

.tts-controls {
  position: fixed;
  bottom: 80px;
  right: 20px;
  background: #ffffff;
  padding: 16px;
  border-radius: 12px;
  box-shadow: 0 4px 20px rgb(0 0 0 / 20%);
  z-index: 10000;
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 200px;
}

.tts-controls button {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  border: 2px solid #1a2a3a;
  border-radius: 8px;
  background: #ffffff;
  cursor: pointer;
  font-size: 14px;
  transition:
    background 0.2s,
    color 0.2s;
}

.tts-controls button:hover,
.tts-controls button:focus {
  background: #1a2a3a;
  color: #ffffff;
}

.tts-controls button.active {
  background: #10b981;
  border-color: #10b981;
}

@keyframes a11y-flash {
  0% {
    opacity: 60%;
  }

  100% {
    opacity: 0%;
  }
}

@keyframes a11y-slide-in {
  from {
    transform: translateX(100%);
    opacity: 0%;
  }

  to {
    transform: translateX(0);
    opacity: 100%;
  }
}

@keyframes a11y-slide-out {
  from {
    transform: translateX(0);
    opacity: 100%;
  }

  to {
    transform: translateX(100%);
    opacity: 0%;
  }
}

.no-captions-warning {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 12px;
  background: #fff3cd;
  color: #856404;
  border: 1px solid #ffeeba;
  border-radius: 4px;
  font-size: 14px;
  margin-top: 8px;
}

video:not(:has(track[kind='captions'])),
video:not(:has(track[kind='subtitles'])) {
  /* Videos should have captions/subtitles */
}

video[muted]::before {
  content: '🔇';
  position: absolute;
  top: 10px;
  right: 10px;
  background: rgb(0 0 0 / 70%);
  color: #ffffff;
  padding: 4px 8px;
  border-radius: 4px;
  font-size: 12px;
}

main {
  /* Main content landmark */
}

aside {
  /* Sidebar landmark */
}

[aria-live='polite'],
[aria-live='assertive'],
[role='status'],
[role='alert'] {
  /* Live regions for screen readers */
}

@media (prefers-reduced-motion: no-preference) {
  [role='banner']:focus-within,
  [role='navigation']:focus-within,
  [role='main']:focus-within,
  [role='contentinfo']:focus-within {
    outline: 2px solid #0066cc;
    outline-offset: 2px;
  }
}

::selection {
  background: #0066cc;
  color: #ffffff;
}

@media (min-resolution: 192dpi) {
  html {
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
  }
}

@media (min-width: 1px) {
  body {
    overflow-x: hidden;
  }

  img,
  video,
  iframe {
    max-width: 100%;
    height: auto;
  }
}
