/* ============================================================
   CREALIZE — WORK MODAL · materialize-on-open styles
   點 → 線 → 面 → content snap. Transform/opacity only.
   ============================================================ */

.work-modal {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: grid;
  place-items: center;
  padding: clamp(16px, 4vw, 48px);
}
.work-modal[hidden] { display: none; }
.work-modal__backdrop {
  position: absolute;
  inset: 0;
  background: color-mix(in oklab, var(--paper) 55%, rgba(18,17,16,.5));
  -webkit-backdrop-filter: blur(10px) saturate(120%);
  backdrop-filter: blur(10px) saturate(120%);
  opacity: 0;
  transition: opacity .24s var(--ease-cond);
}
.work-modal.is-open .work-modal__backdrop { opacity: 1; }

.work-modal__card {
  position: relative;
  width: min(880px, 100%);
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--r-3);
  box-shadow: 0 30px 90px rgba(18,17,16,.18);
  opacity: 0;
  transform: scale(.965) translateY(calc(10px * var(--motion)));
  transition: opacity .26s var(--ease-cond), transform .32s var(--ease-cond);
  overflow: hidden;
}
.work-modal.is-open .work-modal__card { opacity: 1; transform: none; }

.work-modal__canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 2;
}

.work-modal__content {
  position: relative;
  display: grid;
  grid-template-columns: 46% 1fr;
  gap: clamp(24px, 3vw, 36px);
  padding: 26px;
  min-height: 420px;
  z-index: 1;
}

/* the two halves snap in: image first, then the story */
.work-modal__shot, .work-modal__body {
  opacity: 0;
  filter: blur(calc(9px * var(--motion)));
  transform: translateY(calc(6px * var(--motion)));
}
.work-modal.is-snapped .work-modal__shot,
.work-modal.is-snapped .work-modal__body {
  opacity: 1;
  filter: none;
  transform: none;
  transition:
    opacity .26s var(--ease-cond),
    filter .26s var(--ease-cond),
    transform .26s var(--ease-cond);
}
.work-modal.is-snapped .work-modal__body { transition-delay: .09s; }
@media (prefers-reduced-motion: reduce) {
  .work-modal__shot, .work-modal__body { opacity: 1; filter: none; transform: none; }
}

.work-modal__shot {
  position: relative;
  border: 1px solid var(--line);
  border-radius: var(--r-2);
  background:
    repeating-linear-gradient(
      -45deg,
      var(--paper-2) 0px, var(--paper-2) 1px,
      transparent 1px, transparent 9px
    ),
    color-mix(in oklab, var(--paper) 60%, var(--paper-2));
  display: grid;
  place-items: center;
  min-height: 320px;
}

.work-modal__body {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
  padding: 14px 8px 8px 0;
}
.work-modal__top {
  display: flex;
  align-items: center;
  gap: 12px;
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--ink-40);
}
.work-modal__badge {
  font-family: var(--font-mono);
  font-size: 9.5px;
  letter-spacing: 0.06em;
  color: var(--accent);
  border: 1px solid color-mix(in oklab, var(--accent) 45%, transparent);
  border-radius: var(--r-pill);
  padding: 3px 9px;
}
.work-modal__name {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: clamp(30px, 3vw, 42px);
  letter-spacing: -0.025em;
  margin-top: 4px;
}
.work-modal__jp { font-family: var(--font-jp); font-size: var(--fs-xs); color: var(--ink-40); letter-spacing: 0.12em; }
.work-modal__tag {
  font-family: var(--font-mono);
  font-size: 10.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--accent);
}
.work-modal__line {
  font-size: var(--fs-body);
  color: var(--ink-70);
  max-width: 38ch;
  margin-top: 6px;
}
.work-modal__line em { color: var(--ink); }
.work-modal__stack {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 10px 0 0;
  padding: 0;
}
.work-modal__stack li {
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--ink-55);
  border: 1px solid var(--line);
  border-radius: var(--r-1);
  padding: 3px 7px;
}
.work-modal__ok {
  margin-top: auto;
  font-family: var(--font-mono);
  font-size: 10px;
  color: var(--ink-25);
  min-height: 14px;
}

.work-modal__close {
  position: absolute;
  top: 14px; right: 14px;
  z-index: 3;
  appearance: none;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--line);
  border-radius: var(--r-pill);
  background: color-mix(in oklab, var(--paper) 85%, transparent);
  color: var(--ink-70);
  font-family: var(--font-mono);
  font-size: 11px;
  padding: 7px 12px;
  cursor: pointer;
  transition: color .2s var(--ease-cond), border-color .2s var(--ease-cond), transform .2s var(--ease-cond);
}
.work-modal__close span { font-size: 9px; color: var(--ink-25); letter-spacing: .06em; }
.work-modal__close:hover { color: var(--ink); border-color: var(--ink-40); }
.work-modal__close:active { transform: scale(.95); }

@media (max-width: 700px) {
  .work-modal__content {
    grid-template-columns: 1fr;
    min-height: 0;
    padding: 18px;
  }
  .work-modal__shot { min-height: 200px; aspect-ratio: 16 / 10; }
  .work-modal__card { width: 100%; }
  .work-modal__line { max-width: none; }
}

/* ── real product screenshot in modal ── */
.work-modal__img {
  width: 100%;
  height: 100%;
  max-height: 62vh;
  object-fit: cover;
  object-position: top center;
  border-radius: calc(var(--r-2) - 1px);
  display: block;
}
@media (max-width: 720px) {
  .work-modal__img { max-height: 38vh; }
}
