/* Solitaire — table, fiches-cartes et emplacements (le reste vient de carnet.css). */
.layout { grid-template-columns: minmax(0, 700px) minmax(220px, 1fr); }

.board {
  position: relative;
  width: 100%;
  min-height: 200px;
  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none;
  touch-action: manipulation;
  isolation: isolate;
  --cw: 48px; --ch: 67px; --fs: 17px; --pip: 25px;
}

.board.celebrate { overflow: hidden; }

/* ---- Emplacements vides : pointillés au crayon ---- */
.slot {
  position: absolute;
  left: 0; top: 0;
  width: var(--cw);
  height: var(--ch);
  border: 2px dashed var(--pencil);
  border-radius: 9px 5px 10px 4px / 5px 10px 4px 9px;
  opacity: .55;
  color: var(--pencil);
  font-family: var(--marker);
}
.slot.col:nth-child(even) { border-radius: 5px 10px 4px 9px / 9px 4px 10px 5px; }

.slot .ghost {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  font-size: calc(var(--cw) * .6);
  line-height: 1;
}
.slot .ghost-a {
  position: absolute;
  top: 3px; left: 5px;
  font-size: var(--fs);
  line-height: 1;
}
.slot.found { opacity: .7; }
.slot.found .ghost { opacity: .45; }

.slot.stock { cursor: pointer; }
.slot.stock.recycle .ghost::before { content: '↻'; font-size: calc(var(--cw) * .62); }
.slot.stock.recycle { opacity: .8; }
.slot.stock.empty { opacity: .35; cursor: default; }

/* ---- Cartes : fiches de papier au feutre fin ---- */
.card {
  position: absolute;
  left: 0; top: 0;
  width: var(--cw);
  height: var(--ch);
  transition: transform .2s cubic-bezier(.25, .8, .35, 1);
  will-change: transform;
  touch-action: manipulation;
}
.board.still .card { transition: none; }

.card.up { touch-action: none; cursor: grab; }
.card.drag { transition: none; cursor: grabbing; }
.card.drag .face { box-shadow: 3px 6px 0 rgba(14, 14, 12, .18); }

.card .face,
.card .back {
  position: absolute;
  inset: 0;
  border: 1.5px solid var(--ink);
  border-radius: 7px 4px 8px 3px / 4px 8px 3px 7px;
  background: #fff;
  overflow: hidden;
}
.card.v1 .face, .card.v1 .back { border-radius: 4px 8px 3px 7px / 7px 3px 8px 4px; }
.card.v2 .face, .card.v2 .back { border-radius: 8px 3px 6px 5px / 3px 6px 5px 8px; }

.card .back { display: none; }
.card:not(.up) .face { display: none; }
.card:not(.up) .back { display: block; }

/* Dos : hachures au stylo bleu dans un cadre tracé à la main */
.card .back::after {
  content: '';
  position: absolute;
  inset: 3px;
  border: 1px solid var(--pen);
  border-radius: 3px 5px 2px 4px;
  background:
    repeating-linear-gradient(-52deg, transparent 0 3px, rgba(31, 63, 168, .55) 3px 4.2px),
    repeating-linear-gradient(38deg, transparent 0 7px, rgba(31, 63, 168, .18) 7px 8px);
}

.card .corner {
  position: absolute;
  top: 1px; left: 3px;
  display: flex;
  align-items: baseline;
  gap: 1px;
  font-family: var(--marker);
  font-size: var(--fs);
  line-height: 1;
  color: var(--ink);
  transform: translate(var(--dx, 0), 0) rotate(calc(var(--r, 0deg) * .6));
  transform-origin: left top;
}
.card .corner b { font-weight: 400; letter-spacing: -.04em; }
.card .corner i { font-style: normal; font-size: .9em; }

.card .pip {
  position: absolute;
  right: 6%; bottom: 3%;
  font-family: var(--marker);
  font-size: var(--pip);
  line-height: 1;
  color: var(--ink);
}

.card.red .corner, .card.red .pip { color: var(--red-pen); }

/* Surlignage fluo : cible de dépôt et indice */
.card.target .face::after,
.card.hinted .face::after,
.card.hinted .back::before {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(200, 255, 61, .55);
  mix-blend-mode: multiply;
  z-index: 1;
}
.card.hinted .back::before { z-index: 2; }
.slot.target, .slot.hinted { opacity: 1; background: rgba(200, 255, 61, .6); border-color: var(--ink); }
.card.hinted { animation: nudge .5s ease 2; }

@keyframes nudge {
  50% { margin-top: -4px; }
}

.card.nope { animation: nope .32s ease; }
@keyframes nope {
  20%, 60% { margin-left: -4px; }
  40%, 80% { margin-left: 4px; }
}

.card.trail { transition: none; pointer-events: none; }

/* ---- Côté : outils et carnet de stats ---- */
.tools { grid-template-columns: repeat(3, 1fr); }
.tool.ready { background: var(--fluo); animation: pop .5s ease; }
.side .actions { margin-top: 12px; }

.record { margin-top: 18px; }
.record .label { margin: 0 0 4px; }
.record dl { margin: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 4px 16px; }
.record dl > div { display: flex; justify-content: space-between; gap: 8px; border-bottom: 1px dashed var(--line); padding: 2px 0; }
.record dt { font: 500 19px var(--hand); color: var(--text-2); }
.record dd { margin: 0; font: 400 19px var(--marker); color: var(--pen); white-space: nowrap; }

@media (max-width: 820px) {
  .layout { grid-template-columns: 1fr; }
  .board-wrap { max-width: 720px; }
  .side { max-width: 540px; }
}

@media (max-width: 420px) {
  .card .corner { left: 2px; top: 1px; }
  .card .face, .card .back { border-width: 1.3px; }
  .record dl { grid-template-columns: 1fr; }
  .stats { gap: 16px; }
}

@media (prefers-reduced-motion: reduce) {
  .card { transition: none; }
  .card.hinted, .card.nope, .tool.ready { animation: none; }
}
