@tailwind base;
@tailwind components;
@tailwind utilities;

/* Base styles - Tailwind only */
@layer base {
  html {
    scroll-behavior: smooth;
  }

  body {
    @apply bg-white text-slate-800 font-serif antialiased selection:bg-slate-900 selection:text-white;
    line-height: 1.6;
  }

  /* Typography */
  h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    @apply font-sans font-bold text-slate-900 tracking-tighter;
  }

  h1 {
    @apply text-4xl md:text-8xl leading-[1.1] md:leading-[0.95] mb-6 md:mb-12;
  }

  h2 {
    @apply text-2xl md:text-6xl leading-tight mb-4 md:mb-8 mt-12 md:mt-16;
  }

  h3 {
    @apply text-xl md:text-5xl leading-tight mb-3 md:mb-6 mt-8 md:mt-12;
  }

  h4 {
    @apply text-lg md:text-3xl leading-tight mb-3 md:mb-4 mt-6 md:mt-8;
  }

  p {
    @apply mb-4 text-sm md:text-base leading-relaxed text-slate-700;
  }

  .lead {
    @apply text-base md:text-2xl text-slate-600 mb-6 leading-relaxed;
    font-weight: 400;
  }

  a {
    @apply text-slate-900 hover:text-slate-700 transition-colors no-underline;
  }

  ul,
  ol {
    @apply ml-5 mb-4;
  }

  li {
    @apply mb-1;
  }

  code:not([class*="language-"]) {
    @apply bg-slate-50 px-1.5 py-0.5 rounded-md font-mono text-[0.9em] text-slate-800 border border-slate-100;
  }

  blockquote {
    @apply border-l-4 border-slate-900 pl-6 italic text-slate-700 my-8 text-lg md:text-2xl font-serif;
  }

  /* Focus states */
  a:focus,
  button:focus,
  input:focus,
  textarea:focus {
    outline: none !important;
    box-shadow: none !important;
  }

  /* Remove default tap highlight on mobile */
  * {
    -webkit-tap-highlight-color: transparent !important;
  }
}

/* Components - Tailwind utility classes */
@layer components {
  /* Legacy hooks required by tests */
  .file-example {
    @apply w-full;
  }

  .container {
    @apply max-w-6xl mx-auto px-5 md:px-6 py-8 md:py-12;
  }

  .wide-container {
    @apply max-w-7xl mx-auto px-5 md:px-6 py-10 md:py-16;
  }

  .narrow-container {
    @apply max-w-4xl mx-auto px-5 md:px-6 py-6 md:py-10;
  }

  .highlighter-tag {
    @apply inline-block text-[10px] uppercase tracking-wider font-bold px-3 py-1 rounded-full cursor-pointer transition-all duration-300;
    position: relative;
  }

  .search-box {
    @apply w-full px-6 py-4 border border-slate-200 rounded-2xl focus:outline-none focus:border-slate-400 transition-all duration-300;
    background: rgba(255, 255, 255, 0.9);
    backdrop-filter: blur(10px);
  }

  .search-box::placeholder {
    @apply text-slate-400;
  }

  /* Blog post card */
  .post-card {
    @apply mb-8 last:mb-0;
  }

  .post-meta {
    @apply text-xs text-slate-500 font-sans mb-2;
  }

  .post-excerpt {
    @apply text-slate-700 mb-2 leading-relaxed;
  }

  .post-tags {
    @apply flex flex-wrap gap-1;
  }

  /* Article page */
  .article-header {
    @apply mb-12;
  }

  .article-title {
    @apply text-4xl md:text-5xl font-bold mb-3;
  }

  .article-meta {
    @apply text-sm text-slate-500 font-sans mb-5;
  }

  .article-content {
    @apply text-lg leading-relaxed;
  }

  .article-content p {
    @apply mb-5;
  }

  .article-content h2 {
    @apply text-2xl font-bold mt-8 mb-3;
  }

  .article-content h3 {
    @apply text-xl font-bold mt-6 mb-2;
  }

  .article-content ul,
  .article-content ol {
    @apply ml-6 mb-5;
  }

  .article-content li {
    @apply mb-1;
  }

  .article-content blockquote {
    @apply border-l-2 border-slate-400 pl-4 italic text-slate-600 my-5 text-lg;
  }

  /* Buttons */
  .btn {
    @apply inline-flex items-center justify-center px-6 py-3 border border-slate-200 bg-white text-slate-600 font-sans font-bold text-sm uppercase tracking-widest rounded-full transition-all duration-500 hover:border-slate-400 hover:text-slate-900 hover:bg-slate-50 hover:-translate-y-0.5 hover:shadow-xl hover:shadow-slate-100 active:translate-y-0 active:shadow-sm;
    transition-timing-function: cubic-bezier(0.23, 1, 0.32, 1);
  }

  .btn-primary {
    @apply border-slate-900 text-slate-900 hover:bg-slate-900 hover:text-white;
  }

  .btn-secondary {
    @apply border-slate-200 text-slate-500 hover:border-slate-400 hover:text-slate-900;
  }

  /* Hide scrollbars but keep functionality */
  .no-scrollbar::-webkit-scrollbar {
    display: none;
  }

  .no-scrollbar {
    -ms-overflow-style: none;
    /* IE and Edge */
    scrollbar-width: none;
    /* Firefox */
  }

  /* Empty state */
  .empty-state {
    @apply text-center py-8 text-slate-500;
  }

  .empty-state svg {
    @apply mx-auto mb-2 text-slate-300;
  }

  /* Line clamp utility */
  .line-clamp-3 {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }

  /* Reading progress indicator */
  .reading-progress-bar {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 1px;
    background: #0f172a;
    transform-origin: left;
    transform: scaleX(0);
    z-index: 100;
    transition: transform 0.1s ease-out;
  }

  /* Floating back to top button */
  .floating-back-to-top {
    position: fixed;
    bottom: 2rem;
    right: 2rem;
    width: 3rem;
    height: 3rem;
    background: white;
    border: 1px solid #e2e8f0;
    border-radius: 9999px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #64748b;
    transition: all 0.5s cubic-bezier(0.23, 1, 0.32, 1);
    opacity: 0;
    transform: translateY(8px);
    z-index: 50;
  }

  .floating-back-to-top.visible {
    opacity: 1;
    transform: translateY(0);
  }

  .floating-back-to-top:hover {
    background: #f8fafc;
    color: #1e293b;
    border-color: #cbd5e1;
    transform: translateY(-4px);
    box-shadow:
      0 20px 25px -5px rgb(0 0 0 / 0.1),
      0 8px 10px -6px rgb(0 0 0 / 0.1);
  }

  /* Reduced motion support */
  @media (prefers-reduced-motion: reduce) {
    html {
      scroll-behavior: auto;
    }

    * {
      animation-duration: 0.01ms !important;
      animation-iteration-count: 1 !important;
      transition-duration: 0.01ms !important;
    }
  }

  /* Print styles */
  @media print {
    .floating-back-to-top,
    .reading-progress-bar {
      display: none !important;
    }
  }
}

/* Additional global styles from BaseLayout */

/* Custom scrollbar */
::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

::-webkit-scrollbar-track {
  background: #f1f5f9;
}

::-webkit-scrollbar-thumb {
  background: #cbd5e1;
  border-radius: 4px;
  transition: background 0.2s ease;
}

::-webkit-scrollbar-thumb:hover {
  background: #94a3b8;
}

/* Selection color */
::selection {
  background: #0f172a;
  color: #ffffff;
}

/* Tag Styles */
.highlighter-tag {
  animation: tagPopIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) both;
  animation-delay: calc(var(--tag-index, 0) * 0.05s);
}

.highlighter-tag:hover {
  @apply -translate-y-0.5 scale-105 shadow-lg shadow-slate-200;
}

@keyframes tagPopIn {
  from {
    opacity: 0;
    transform: scale(0.8) translateY(10px);
  }

  to {
    opacity: 1;
    transform: scale(1) translateY(0);
  }
}

.highlighter-yellow {
  background: linear-gradient(
    135deg,
    rgba(255, 235, 59, 0.95) 0%,
    rgba(255, 213, 79, 0.95) 100%
  );
  color: #3f2f00;
}

.highlighter-pink {
  background: linear-gradient(
    135deg,
    rgba(255, 167, 209, 0.95) 0%,
    rgba(255, 122, 175, 0.95) 100%
  );
  color: #3f0018;
}

.highlighter-green {
  background: linear-gradient(
    135deg,
    rgba(129, 199, 132, 0.95) 0%,
    rgba(102, 187, 106, 0.95) 100%
  );
  color: #002f0a;
}

.highlighter-blue {
  background: linear-gradient(
    135deg,
    rgba(226, 232, 240, 0.95) 0%,
    rgba(203, 213, 225, 0.95) 100%
  );
  color: #0f172a;
}

.highlighter-tag:hover::before {
  content: "";
  position: absolute;
  inset: -2px;
  background: inherit;
  filter: blur(8px);
  opacity: 0.4;
  z-index: -1;
  border-radius: inherit;
}

.highlighter-tag:active {
  transform: rotate(-1deg) translateY(0) scale(0.98);
  transition: transform 0.1s ease;
}

.highlighter-tag:focus {
  @apply -translate-y-0.5 scale-105;
  outline: none !important;
}

/* Marker Title Styles */
.marker-title::before {
  content: "";
  position: absolute;
  left: -0.15em;
  right: -0.15em;
  bottom: 0.05em;
  height: 0.62em;
  border-radius: 0.18em;
  z-index: -1;

  background: linear-gradient(
    180deg,
    rgba(255, 255, 255, 0) 0%,
    rgba(255, 255, 255, 0) 20%,
    rgba(253, 230, 138, 0.7) 20%,
    rgba(253, 230, 138, 0.7) 100%
  );

  transform-origin: left center;
  transform: rotate(calc((var(--marker-seed, 0) - 3) * 0.45deg))
    skewX(calc((var(--marker-seed, 0) - 3) * -0.25deg));

  filter: saturate(1.05);
}

.marker-title::after {
  content: "";
  position: absolute;
  left: -0.18em;
  right: -0.05em;
  bottom: 0.05em;
  height: 0.62em;
  border-radius: 0.18em;
  z-index: -1;

  background: linear-gradient(
    90deg,
    rgba(253, 230, 138, 0) 0%,
    rgba(253, 230, 138, 0.6) 8%,
    rgba(253, 230, 138, 0.55) 60%,
    rgba(253, 230, 138, 0.35) 100%
  );

  opacity: 0.75;
  mix-blend-mode: multiply;
  transform: rotate(calc((var(--marker-seed, 0) - 3) * 0.45deg))
    translateY(0.02em);

  mask-image: linear-gradient(
    180deg,
    rgba(0, 0, 0, 0) 0%,
    rgba(0, 0, 0, 1) 20%,
    rgba(0, 0, 0, 1) 100%
  );
}

@media (prefers-reduced-motion: no-preference) {
  .post-link:hover .marker-title::before,
  .post-link:hover .marker-title::after {
    filter: saturate(1.08) contrast(1.02);
  }
}

/* Mermaid Styles */
.mermaid-container svg {
  width: 100% !important;
  max-width: 100%;
  height: auto;
  display: block;
  background-color: transparent !important;
}

.mermaid-container rect,
.mermaid-container circle,
.mermaid-container ellipse,
.mermaid-container polygon,
.mermaid-container path,
.mermaid-container .actor,
.mermaid-container .node {
  fill: white !important;
  stroke: #cbd5e1 !important;
  stroke-width: 1.5px !important;
}

.mermaid-container .edgePath .path,
.mermaid-container .messageLine0,
.mermaid-container .messageLine1,
.mermaid-container .flowchart-link {
  stroke: #cbd5e1 !important;
  stroke-width: 1.5px !important;
}

.mermaid-container text,
.mermaid-container .label,
.mermaid-container .labelText,
.mermaid-container .edgeLabel,
.mermaid-container .node text,
.mermaid-container tspan {
  font-family: "Inter", sans-serif !important;
  fill: #334155 !important;
  color: #334155 !important;
  stroke: none !important;
  font-size: 16px !important;
}

.mermaid-container .marker,
.mermaid-container marker path {
  fill: #cbd5e1 !important;
  stroke: #cbd5e1 !important;
}

/* Generic Embed Styles */
.generic-embed {
  --max-width: 100%;
  --border-radius: 24px;
  --bg-color: #ffffff;
  --border-color: #e2e8f0;
  --shadow: none;

  margin: 1.5rem 0;
  width: 100%;
  max-width: var(--max-width);
}

.embed-wrapper {
  border-radius: var(--border-radius);
  border: 1px solid var(--border-color);
  background: var(--bg-color);
  box-shadow: var(--shadow);
  overflow: hidden;
  transition: all 0.2s ease;
  position: relative;
}

.generic-embed[data-type="video"] .embed-wrapper {
  aspect-ratio: 16/9;
  height: 0;
  padding-bottom: 56.25%;
  /* 16:9 */
}

.generic-embed[data-type="video"] .embed-wrapper iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.embed-wrapper:hover {
  box-shadow:
    0 4px 6px -1px rgb(0 0 0 / 0.1),
    0 2px 4px -2px rgb(0 0 0 / 0.1);
  border-color: #cbd5e1;
}

.generic-embed[data-provider="youtube.com"] {
  --bg-color: #000000;
}

.generic-embed[data-provider="vimeo.com"] {
  --bg-color: #1a1a1a;
}

.generic-embed[data-provider="codepen.io"] {
  --bg-color: #1e1e1e;
  --border-color: #333;
}

.embed-fallback {
  padding: 1.5rem;
  background: #f8fafc;
  border: 1px dashed #cbd5e1;
  border-radius: var(--border-radius);
  text-align: center;
}

.fallback-content {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
  color: #64748b;
  font-size: 0.875rem;
}

.fallback-link {
  @apply text-slate-900 underline underline-offset-4;
  text-decoration: none;
  font-weight: 500;
  margin-top: 0.25rem;
  word-break: break-all;
}

.fallback-link:hover {
  text-decoration: underline;
}

@media (max-width: 768px) {
  .generic-embed {
    margin: 1rem 0;
  }

  .embed-fallback {
    padding: 1rem;
  }

  .embed-wrapper:hover {
    box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  }
}

/* File Example Styles */
[data-file-example] {
  box-shadow: 0 1px 0 rgba(15, 23, 42, 0.04);
}

.copy-btn,
.download-btn {
  color: #475569;
}

.copy-btn[data-copied="true"] {
  color: #065f46;
  background: rgba(16, 185, 129, 0.1);
  border-color: rgba(16, 185, 129, 0.35);
}

/* Prism.js syntax highlighting - light, low-noise */
code[class*="language-"],
pre[class*="language-"],
pre:has(code[class*="language-"]) {
  color: #0f172a;
  background: transparent;
  text-shadow: none;
  font-family:
    ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
    "Courier New", monospace;
  font-size: 0.8125rem;
  line-height: 1.65;
  direction: ltr;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  tab-size: 2;
  hyphens: none;
}

.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
  color: #64748b;
  font-style: italic;
}

.token.punctuation {
  color: #94a3b8;
}

.token.operator {
  color: #64748b;
}

.token.property,
.token.tag,
.token.constant,
.token.symbol,
.token.deleted {
  color: #c2410c;
}

.token.boolean,
.token.number {
  color: #a16207;
}

.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
  color: #059669;
}

.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
  color: #475569;
}

.token.atrule,
.token.attr-value,
.token.keyword {
  color: #7c3aed;
  font-weight: 500;
}

.token.function,
.token.class-name {
  color: #2563eb;
}

.token.regex,
.token.important,
.token.variable {
  color: #db2777;
}

/* ═══════════════════════════════════════════════
   TECH AESTHETIC – Animation Keyframes
   ═══════════════════════════════════════════════ */

/* Gradient Mesh Blob Animations */
@keyframes gradient-blob-1 {
  0%,
  100% {
    transform: translate(0, 0) scale(1);
  }

  25% {
    transform: translate(30px, -20px) scale(1.05);
  }

  50% {
    transform: translate(-15px, 25px) scale(0.95);
  }

  75% {
    transform: translate(20px, 15px) scale(1.02);
  }
}

@keyframes gradient-blob-2 {
  0%,
  100% {
    transform: translate(0, 0) scale(1);
  }

  33% {
    transform: translate(-25px, 15px) scale(1.03);
  }

  66% {
    transform: translate(20px, -20px) scale(0.97);
  }
}

@keyframes gradient-blob-3 {
  0%,
  100% {
    transform: translate(0, 0) scale(1);
  }

  20% {
    transform: translate(15px, 10px) scale(1.06);
  }

  40% {
    transform: translate(-10px, 20px) scale(0.98);
  }

  60% {
    transform: translate(25px, -15px) scale(1.02);
  }

  80% {
    transform: translate(-20px, -10px) scale(0.96);
  }
}

/* Binary Stream Scroll */
@keyframes binary-scroll {
  0% {
    transform: translateY(-50%);
  }

  100% {
    transform: translateY(0%);
  }
}

/* Circuit Pulse (used for node glow effects) */
@keyframes circuit-pulse {
  0%,
  100% {
    opacity: 0.2;
    box-shadow: 0 0 0 0 rgba(148, 163, 184, 0);
  }

  50% {
    opacity: 0.5;
    box-shadow: 0 0 12px 2px rgba(148, 163, 184, 0.15);
  }
}

/* Data Packet Flow */
@keyframes data-packet-flow {
  0% {
    transform: translateX(-100%);
  }

  100% {
    transform: translateX(100vw);
  }
}

/* Tech Border Glow */
@keyframes border-trace {
  0% {
    background-position: 0% 50%;
  }

  100% {
    background-position: 200% 50%;
  }
}

/* Section Fade-In Glow */
@keyframes section-glow {
  0% {
    opacity: 0;
  }

  50% {
    opacity: 0.08;
  }

  100% {
    opacity: 0;
  }
}

/* Tailwind-compatible animation classes */
.animate-gradient-blob-1 {
  animation: gradient-blob-1 20s ease-in-out infinite;
}

.animate-gradient-blob-2 {
  animation: gradient-blob-2 25s ease-in-out infinite;
}

.animate-gradient-blob-3 {
  animation: gradient-blob-3 30s ease-in-out infinite;
}

.animate-circuit-pulse {
  animation: circuit-pulse 3s ease-in-out infinite;
}

.animate-border-trace {
  animation: border-trace 4s linear infinite;
}

/* Glassmorphism Utilities */
.glass {
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  background: rgba(255, 255, 255, 0.7);
  border: 1px solid rgba(226, 232, 240, 0.5);
}

.glass-subtle {
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  background: rgba(255, 255, 255, 0.5);
  border: 1px solid rgba(241, 245, 249, 0.8);
}

.glass-dark {
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  background: rgba(15, 23, 42, 0.8);
  border: 1px solid rgba(255, 255, 255, 0.05);
}

/* Tech Border – animated gradient trace */
.tech-border {
  position: relative;
}

.tech-border::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: linear-gradient(
    90deg,
    transparent 0%,
    rgba(148, 163, 184, 0.3) 25%,
    rgba(191, 206, 228, 0.2) 50%,
    rgba(148, 163, 184, 0.3) 75%,
    transparent 100%
  );
  background-size: 200% 100%;
  animation: border-trace 4s linear infinite;
  -webkit-mask:
    linear-gradient(#fff 0 0) content-box,
    linear-gradient(#fff 0 0);
  mask:
    linear-gradient(#fff 0 0) content-box,
    linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  pointer-events: none;
}

/* Noise texture overlay */
.noise-overlay::before {
  content: "";
  position: absolute;
  inset: 0;
  opacity: 0.02;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
  pointer-events: none;
  z-index: 1;
}

/* ═══════════════════════════════════════════════
   ABSTRACT CIRCUIT – Trace Pulse Animations
   ═══════════════════════════════════════════════ */

@keyframes tracePulse1 {
  0% {
    stroke-dashoffset: 1280;
  }

  100% {
    stroke-dashoffset: 0;
  }
}

@keyframes tracePulse2 {
  0% {
    stroke-dashoffset: 650;
  }

  100% {
    stroke-dashoffset: 0;
  }
}

@keyframes tracePulse3 {
  0% {
    stroke-dashoffset: 1280;
  }

  100% {
    stroke-dashoffset: 0;
  }
}

@keyframes tracePulse4 {
  0% {
    stroke-dashoffset: 440;
  }

  100% {
    stroke-dashoffset: 0;
  }
}

@keyframes junctionGlow {
  0%,
  100% {
    opacity: 0.1;
  }

  50% {
    opacity: 0.4;
  }
}
