/* ─────────────────────────────────────────────────────────────────────────
   webcafe.gr — the blog

   The homepage's palette and type, without the room. A post is something to
   read for five minutes, so it gets a solid ground, one column of about 64
   characters and body copy that clears 7:1 — the same floor the homepage
   holds itself to, for the same readers.

   The tokens are the CONNECT values from index.html. The blog does not take
   part in the white-label demo, so they are plain constants here.
   ───────────────────────────────────────────────────────────────────────── */
@font-face{
  font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;
  src:url('/assets/fonts/inter-greek.woff2') format('woff2');
  unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03E1,U+03F0-03FF;
}
@font-face{
  font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;
  src:url('/assets/fonts/inter-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

:root{
  --bg:#040b18;
  --brand:#2f7ff7;
  --warm:#f97316;
  --cool:#38bdf8;
  --gold:#fbbf24;
  --text:#e9f2ff;
  --glass:rgba(47,127,247,.10);
  --border:rgba(47,127,247,.30);
  --body:#b9cbe3;           /* a step lighter than the homepage's #8ea9cc:
                               long-form reading, 10.9:1 on --bg */
  --label:#f97316;
  --panel:#08142a;
  --max:1180px;
  --r:18px;
  --ease:cubic-bezier(.22,.61,.36,1);
}

*{margin:0;padding:0;box-sizing:border-box}
html{font-size:112.5%}
body{
  background:var(--bg);color:var(--text);
  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;
  font-size:1rem;line-height:1.7;
  -webkit-font-smoothing:antialiased;
  min-height:100vh;display:flex;flex-direction:column;
  background-image:radial-gradient(ellipse 70% 40% at 50% 0%,var(--glass),transparent 70%);
  background-repeat:no-repeat;
}
main{flex:1}
a{color:inherit}
::selection{background:var(--brand);color:#fff}
:focus-visible{outline:3px solid var(--bg);outline-offset:0;box-shadow:0 0 0 6px var(--cool)}
:focus:not(:focus-visible){outline:none}

.wrap{max-width:var(--max);margin:0 auto;padding:0 24px;width:100%}
.skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--warm);color:#160800;padding:14px 22px;border-radius:0 0 12px 0;font-weight:800}
.skip:focus{left:0}

h1,h2,h3{line-height:1.2;letter-spacing:-.022em;font-weight:800;text-wrap:balance}
h1{font-size:clamp(2.2rem,5.4vw,3.4rem);font-weight:900;letter-spacing:-.03em}
p{color:var(--body)}
strong,b{color:var(--text);font-weight:700}
:lang(el) p,:lang(el) li{letter-spacing:0}
.eyebrow{
  display:inline-block;font-size:.8rem;font-weight:800;letter-spacing:.18em;
  text-transform:uppercase;color:var(--label);margin-bottom:12px;
}
.lead{font-size:1.2rem;line-height:1.6;max-width:56ch;margin-top:16px}

/* ── buttons: same shapes as the homepage ── */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  min-height:52px;padding:14px 28px;border-radius:999px;text-decoration:none;
  font-weight:700;font-size:1rem;line-height:1.2;border:1px solid transparent;white-space:nowrap;
  transition:transform .18s var(--ease),box-shadow .18s var(--ease);
}
.btn:hover{transform:translateY(-2px)}
.btn-primary{background:var(--warm);color:#160800;box-shadow:0 10px 34px -8px rgba(249,115,22,.55)}
.btn-sm{min-height:44px;padding:10px 20px;font-size:.9rem}

/* ── header ── */
body>header{
  position:sticky;top:0;z-index:60;
  background:var(--bg);
  background:color-mix(in srgb,var(--bg) 86%,transparent);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-bottom:1px solid var(--border);
}
.nav{display:flex;align-items:center;gap:20px;min-height:68px}
.logo{display:flex;align-items:center;gap:11px;font-weight:900;font-size:1.15rem;letter-spacing:-.03em;flex:none;text-decoration:none}
.logo .dot{
  width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-size:1rem;flex:none;
  background:linear-gradient(140deg,var(--brand),var(--cool));box-shadow:0 6px 20px -6px var(--brand);
}
.logo small{display:block;font-size:.56rem;letter-spacing:.22em;color:var(--label);font-weight:800;text-transform:uppercase;margin-top:-4px}
.nav-links{display:flex;gap:26px;margin-left:auto;font-size:.9rem;font-weight:600}
.nav-links a{color:var(--body);text-decoration:none;padding:10px 0}
.nav-links a:hover,.nav-links a.here{color:var(--text)}
.nav-links a{white-space:nowrap}
.burger{
  display:none;background:none;border:1px solid var(--border);border-radius:10px;
  color:var(--text);width:46px;height:46px;font-size:1.3rem;cursor:pointer;font-family:inherit;
}
.nav-cta-m{display:none}

/* The same menu as the homepage, and it folds at the same width: six links
   and the button need about 1180px on one line, and below that they wrap
   into one-word stacks. */
@media(max-width:1180px){
  body>header .wrap{position:relative}
  .nav-links{display:none}
  .nav-links.open{
    display:flex;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:0;margin:0;
    background:var(--bg);border-bottom:1px solid var(--border);padding:10px 24px 18px;
  }
  .nav-links.open a{padding:14px 0;border-bottom:1px solid var(--border);font-size:1rem}
  /* Burger last, after the button, where the homepage has it. */
  .burger{display:grid;place-items:center;order:3}
  body>header .btn{margin-left:auto}
}

/* ── the list ── */
.list-head{padding-top:clamp(48px,8vw,96px);padding-bottom:36px}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:22px;padding-bottom:40px}
.card{
  border:1px solid var(--border);border-radius:var(--r);background:var(--panel);
  transition:transform .18s var(--ease),border-color .18s var(--ease);
}
.card:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--cool) 60%,transparent)}
.card-link{display:flex;flex-direction:column;height:100%;padding:28px;text-decoration:none;border-radius:inherit}
.card-cover{
  display:block;width:calc(100% + 56px);max-width:none;height:auto;margin:-28px -28px 20px;
  aspect-ratio:16/9;object-fit:cover;object-position:top;border-radius:var(--r) var(--r) 0 0;
  border-bottom:1px solid var(--border);
}
.card-cover+.badge{display:none}
.card h2{font-size:1.4rem;margin:6px 0 10px}
.card p{font-size:.98rem}
.card .meta{margin-top:auto;padding-top:18px}
.badge{
  width:54px;height:54px;border-radius:14px;display:grid;place-items:center;font-size:1.6rem;
  background:linear-gradient(140deg,color-mix(in srgb,var(--brand) 35%,transparent),color-mix(in srgb,var(--warm) 25%,transparent));
  border:1px solid var(--border);margin-bottom:16px;
}
.badge.big{width:72px;height:72px;font-size:2.2rem;border-radius:18px}
.kicker{font-size:.78rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--label)}
.meta{font-size:.92rem;color:var(--body)}

/* ── a post ── */
.post{max-width:calc(40rem + 48px);padding-top:clamp(28px,5vw,56px);padding-bottom:48px}
.back{display:inline-flex;align-items:center;min-height:44px;color:var(--body);text-decoration:none;font-weight:600;font-size:.95rem}
.back:hover{color:var(--text)}
.post-head{margin:18px 0 36px;padding-bottom:28px;border-bottom:1px solid var(--border)}
.post-head .meta{margin-top:14px}

.prose{font-size:1.06rem}
.prose>*+*{margin-top:1.05em}
.prose h2{font-size:clamp(1.45rem,3vw,1.75rem);margin-top:2.1em;color:var(--text)}
.prose h2+p{margin-top:.7em}
.prose ul{padding-left:1.3em;color:var(--body)}
.prose li+li{margin-top:.45em}
.prose li::marker{color:var(--cool)}
.prose a{color:var(--cool);text-decoration:underline;text-underline-offset:3px}
.prose code{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.92em;
  background:var(--glass);border:1px solid var(--border);border-radius:6px;padding:.08em .38em;color:var(--text);
  overflow-wrap:anywhere;
}
.prose .cmd{padding:14px 18px;background:var(--panel);border:1px solid var(--border);border-radius:12px}
.prose .cmd code{background:none;border:0;padding:0}
/* The «try it» line: where to tap, in the member's words. */
.prose .try{
  padding:16px 20px;border-radius:12px;border-left:4px solid var(--warm);
  background:color-mix(in srgb,var(--warm) 9%,var(--bg));color:var(--text);
}
.prose .try strong{color:var(--gold)}

/* Screenshots. width:100% + height:auto, so the width/height the build
   writes on every <img> reserve the right box before the file arrives.
   (width:auto collapsed a lazy image to nothing — and a picture with no size
   is never "near the viewport", so it never loaded at all.) A portrait phone
   shot would be a metre tall at full column width; the build marks it .tall. */
.prose figure{margin:1.8em 0}
.prose figure img.tall{width:min(100%,360px)}
.prose figure img{
  display:block;margin:0 auto;width:100%;height:auto;
  border-radius:12px;border:1px solid var(--border);background:var(--panel);
  box-shadow:0 18px 50px -24px rgba(0,0,0,.9);
}
.prose figcaption{margin-top:.7em;font-size:.9rem;line-height:1.5;color:var(--body);text-align:center}
.pixel{image-rendering:pixelated}

/* A deck (build.mjs `::: slides`, deck.js): one slide at a time, the row
   scrolls sideways and snaps — with no script it is still a swipeable row.
   16:9 boxes are reserved from the width/height on each <img>. */
.prose .deck{margin:2em 0}
.deck-track{
  display:flex;overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;
  border-radius:12px;border:1px solid var(--border);background:var(--panel);
  box-shadow:0 18px 50px -24px rgba(0,0,0,.9);scrollbar-width:thin;
}
.prose .deck-track img{
  flex:0 0 100%;width:100%;height:auto;scroll-snap-align:start;
  border:0;border-radius:0;box-shadow:none;background:none;
}
.deck.js .deck-track{scrollbar-width:none}
.deck.js .deck-track::-webkit-scrollbar{display:none}
.deck figcaption{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 18px;
  margin-top:.8em;text-align:left;
}
.deck-nav{display:inline-flex;align-items:center;gap:10px}
.deck-nav[hidden]{display:none}
.deck-nav button{
  width:44px;height:44px;border-radius:999px;border:1px solid var(--border);background:var(--panel);
  color:var(--text);font:inherit;font-size:1.3rem;line-height:1;cursor:pointer;
}
.deck-nav button:hover:not(:disabled){border-color:var(--cool)}
.deck-nav button:disabled{opacity:.35;cursor:default}
.deck-count{min-width:4.5ch;text-align:center;font-variant-numeric:tabular-nums;color:var(--text);font-weight:600}
.deck.js .deck-hint{display:none}
.deck-nav .deck-cinema{width:auto;padding:0 16px;font-size:.92rem;font-weight:600;margin-left:6px}
.deck-nav .deck-close{display:none;width:auto;padding:0 16px;font-size:.92rem;font-weight:600}

/* «⛶ Σινεμά»: the same deck over the whole window, on a dark ground. The
   slide is as large as the screen allows at 16:9 — whichever of width or
   height runs out first — with the controls in a row beneath it. deck.js
   also asks for real fullscreen where the browser gives it. */
.deck.cinema{
  position:fixed;inset:0;z-index:300;margin:0;padding:16px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;
  background:#03070f;
}
.deck.cinema .deck-track{
  width:min(100%, calc((100vh - 110px) * 16 / 9));width:min(100%, calc((100dvh - 110px) * 16 / 9));
  flex:none;border-color:transparent;box-shadow:0 30px 90px -30px rgba(0,0,0,1);
}
/* whole pixels: a slide 498.4px wide scrolls by 498 and shows a hairline of the next one */
@supports (width:round(down, 10.5px, 1px)){
  .deck.cinema .deck-track{width:round(down, min(100%, calc((100dvh - 110px) * 16 / 9)), 2px)}
}
.deck.cinema figcaption{width:min(100%, calc((100vh - 110px) * 16 / 9));width:min(100%, calc((100dvh - 110px) * 16 / 9));margin:0;justify-content:center}
.deck.cinema .deck-cinema{display:none}
.deck.cinema .deck-close{display:inline-flex;align-items:center;margin-left:6px}
html.deck-open{overflow:hidden}

/* Who made it: a line at the foot of the post (front matter `credits:`). */
.credits{
  margin-top:36px;padding:16px 20px;border:1px solid var(--border);border-radius:12px;
  background:var(--panel);font-size:.95rem;color:var(--body);
}
.credits a{color:var(--cool);text-decoration:underline;text-underline-offset:3px}
/* The ownership notice (`rights:`): there to be found, not to shout. */
.rights{margin-top:14px;font-size:.8rem;line-height:1.55;color:var(--body);opacity:.8}
.shots-note{margin-top:32px;font-size:.88rem;color:var(--body);opacity:.85;font-style:italic}

.cta{
  margin:48px 0 8px;padding:clamp(24px,4vw,36px);border-radius:var(--r);
  border:1px solid var(--border);background:var(--panel);text-align:center;
}
.cta-t{font-size:1.35rem;font-weight:800;color:var(--text);letter-spacing:-.02em}
.cta p+p{margin-top:6px}
.cta .btn{margin-top:20px}

.pager{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:40px}
.pager a{
  display:block;padding:18px 20px;border:1px solid var(--border);border-radius:14px;
  text-decoration:none;font-weight:700;color:var(--text);background:var(--panel);
}
.pager a:hover{border-color:color-mix(in srgb,var(--cool) 60%,transparent)}
.pager small{display:block;font-size:.8rem;font-weight:600;color:var(--body);margin-bottom:4px}
.pager .next{text-align:right}

/* ── footer ── */
footer{border-top:1px solid var(--border);padding:36px 0;margin-top:48px}
.foot{display:flex;align-items:center;justify-content:space-between;gap:12px 28px;flex-wrap:wrap}
.foot-links{display:flex;gap:4px 24px;flex-wrap:wrap;font-size:.9rem}
.foot-links a{color:var(--body);text-decoration:none;min-height:44px;display:inline-flex;align-items:center}
.foot-links a:hover{color:var(--text)}

@media(max-width:640px){
  .nav{gap:12px}
  /* No room for the button beside the logo and the burger; the menu carries it. */
  body>header .btn{display:none}
  .burger{margin-left:auto}
  .nav-links.open .nav-cta-m{display:flex;color:var(--label);font-weight:800}
  .cards{grid-template-columns:1fr}
  .pager{grid-template-columns:1fr}
  .pager .next{text-align:left}
  .cta .btn{width:100%;white-space:normal}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition-duration:.01ms!important}
  .btn:hover,.card:hover{transform:none}
}
