/* ============================================================
   "Langit Terbuka" — sistem desain dokumenter terang
   Sistem yang sama dengan Bab 1; yang berubah hanya warnanya:
   dasar biru langit, bukan laut dalam. Nama tokennya sengaja
   dipertahankan supaya peta, grafik, dan skrip Bab 1 langsung
   terpakai tanpa diubah.
   JARING x Newstapa x ORN — Kapal yang Menghilang
   ============================================================ */

/* --- 1. Huruf ------------------------------------------------ */
@font-face{font-family:Newsreader;src:url('assets/fonts/newsreader-latin-400-normal.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Newsreader;src:url('assets/fonts/newsreader-latin-400-italic.woff2') format('woff2');font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:Newsreader;src:url('assets/fonts/newsreader-latin-500-normal.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:Newsreader;src:url('assets/fonts/newsreader-latin-600-normal.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:Newsreader;src:url('assets/fonts/newsreader-latin-700-normal.woff2') format('woff2');font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:Lekton;src:url('assets/fonts/lekton-latin-400-normal.woff2') format('woff2');font-weight:400;font-display:swap}

/* --- 2. Token ------------------------------------------------
   Warna diambil dari ilustrasi Bab 2: langit biru pucat, laut
   biru baja, lambung putih tulang, dan satu-satunya warna pekat
   di seluruh gambar — cat lambung bawah yang karat. Karat itu
   yang menjadi aksen kunci, menggantikan amber Bab 1. */
:root{
 --abyss:#EEF4F9;      /* dasar halaman: langit paling pucat */
 --deep:#DFEAF3;       /* permukaan panel, laut pada peta */
 --hull:#CFDEEA;       /* panel terangkat */
 --line:#BACCDC;       /* garis rambut */
 --line-lit:#8AA5BC;   /* garis tegas, graticule */
 --salt:#14212C;       /* teks utama: tinta biru-hitam */
 --salt-mid:#3C566B;   /* teks sekunder */
 --salt-dim:#5F7B92;   /* keterangan, label */
 --teal:#2F6E77;
 --teal-deep:#C2D2DE;  /* isian daratan */
 --amber:#A2452C;      /* aksen kunci: karat lambung */
 --rust:#7E3A5F;

 --display:Newsreader,Georgia,"Times New Roman",serif;
 --mono:Lekton,"Cascadia Code",Consolas,ui-monospace,monospace;

 --micro:12px;
 --caption:14px;
 --body:clamp(18px,1.32vw,20px);
 --dek:clamp(16px,1.15vw,18px);
 --lede:clamp(19px,1.45vw,22px);
 --quote:clamp(21px,2.05vw,29px);
 --h2:clamp(21px,1.75vw,26px);
 --h3:var(--h2);
 --h1:clamp(36px,4.6vw,74px);

 --measure:40rem;
 --wide:min(calc(100vw - var(--gut) * 2),52rem);
 --gut:clamp(20px,4vw,40px);
 color-scheme:light;
}
/* --- 3. Dasar ------------------------------------------------ */
*{box-sizing:border-box}
html{scroll-padding-top:24px;-webkit-text-size-adjust:100%}
body{
 margin:0;background:var(--abyss);color:var(--salt);
 font:400 var(--body)/1.72 var(--display);
 font-feature-settings:"kern","liga";
 text-rendering:optimizeLegibility;
 overflow-x:hidden;
}
img,canvas,video{display:block;max-width:100%}
img{height:auto}
figure,p,h1,h2,h3,ol,ul,dl,dd{margin:0}
button,input,select,summary{font:inherit;color:inherit}
a{color:inherit}
a:focus-visible,select:focus-visible,summary:focus-visible,button:focus-visible{outline:2px solid var(--amber);outline-offset:4px}
[hidden]{display:none!important}
::selection{background:var(--amber);color:#FFF}

.skip{position:fixed;left:-10000px;top:12px;z-index:9;background:var(--hull);color:var(--salt);padding:12px 20px;font:400 var(--micro)/1 var(--mono);letter-spacing:.08em;text-transform:uppercase}
.skip:focus{left:12px}
.kicker{font:400 var(--micro)/1.4 var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--salt-dim)}

/* --- 5. Pembuka ---------------------------------------------- */
/* Tanpa JavaScript pembuka tampil sebagai satu layar diam yang sudah dibingkai. */
/* latar sama dengan panggung peta supaya sambungannya tidak terlihat */
.hero{position:relative;background:var(--deep);--lift:0;--crop:1;--recap:1;--scrim:1}
.hero-pin{position:relative;height:100svh;overflow:hidden;background:var(--deep)}
.hero--live{height:420svh;--crop:0;--recap:0}
.hero--live .hero-pin{position:sticky;top:0}

.masthead{
 position:absolute;z-index:3;top:0;left:0;right:0;
 display:flex;align-items:center;gap:14px;padding:18px var(--gut);min-height:74px;
}
/* Selubung layar penuh meluruh saat digulir, jadi kepala halaman bisa berdiri
   di atas langit yang terang. Alasnya sendiri, setipis mungkin, hanya di
   pita atas. */
.masthead::before{
 content:"";position:absolute;z-index:-1;pointer-events:none;
 top:0;left:0;right:0;bottom:-46px;
 background:linear-gradient(180deg,rgba(238,244,249,.62) 0%,rgba(238,244,249,.34) 55%,rgba(238,244,249,0) 100%);
}
/* dua logo sejajar, dipisahkan tanda kali putih sebagai tanda kolaborasi */
.jaring-logo{width:auto;height:30px;object-fit:contain}
.partner-logo{width:auto;object-fit:contain;opacity:.92}
.partner-logo--newstapa{height:21px}
.partner-logo--orn{height:30px}
.brand-x{font:400 20px/1 var(--mono);color:var(--salt-mid);opacity:.75}

h1,h2,h3{font-family:var(--display);text-wrap:balance}
h1{font-size:var(--h1);font-weight:600;line-height:1.03;letter-spacing:-.022em;color:var(--salt)}

/* judul masuk kata demi kata dari balik topeng, lalu naik dan hilang */
.hero-open{
 position:absolute;z-index:2;top:clamp(88px,13svh,152px);left:var(--gut);right:var(--gut);
 text-align:center;
 opacity:calc((1 - var(--lift)) * (1 - var(--recap)));
 transform:translateY(calc(var(--lift) * -34%));
}
/* tanpa bayangan: topeng kata memotong bayangan jadi kotak. Keterbacaan
   diserahkan ke kerudung gelap di atas rekaman. */
/* Tanpa bayangan, dan Bab 1 sudah memperingatkannya di atas: tiap kata
   duduk di dalam topeng ber-overflow:hidden, jadi halo bayangan terpotong
   jadi kotak terang di belakang kata. Keterbacaan diserahkan ke kerudung
   di atas rekaman, sama seperti Bab 1. */
.hero-title{max-width:18ch;margin:0 auto}
.hero-open .dek{
 margin:clamp(18px,2.4vw,28px) auto 0;max-width:52ch;
 color:var(--salt);text-shadow:0 1px 16px rgba(238,244,249,.95),0 0 40px rgba(238,244,249,.85);
}
.byline{
 display:flex;flex-wrap:wrap;justify-content:center;gap:14px clamp(26px,4vw,54px);
 max-width:46rem;margin:clamp(20px,2.6vw,30px) auto 0;
 padding-top:clamp(18px,2.2vw,26px);border-top:1px solid rgba(20,33,44,.20);
}
.byline span{display:flex;flex-direction:column;align-items:center;gap:5px}
.byline i{
 font:400 var(--caption)/1.35 var(--mono);font-style:normal;letter-spacing:.05em;
 color:var(--salt);text-shadow:0 1px 14px rgba(238,244,249,.95);
}
.byline b{
 font:400 var(--caption)/1 var(--mono);letter-spacing:.04em;
 color:var(--salt-mid);text-shadow:0 1px 14px rgba(238,244,249,.95);
}
.masked{display:block}
.masked .w{display:inline-block;overflow:hidden;vertical-align:bottom;padding-bottom:.08em;margin-bottom:-.08em}
.masked .w>span{display:inline-block}
.hero--live .masked .w>span{transform:translateY(115%)}
.hero--enter .masked .w>span{animation:rise .95s cubic-bezier(.16,1,.3,1) both}
@keyframes rise{from{transform:translateY(115%)}to{transform:none}}

/* Di ujung rekaman bingkainya menyusut. Yang berubah adalah kotak bingkainya,
   dan object-fit membingkai ulang isinya — bukan clip-path yang memotong
   sembarang bagian gambar. */
.hero-art{
 position:absolute;margin:0;overflow:hidden;
 top:calc(var(--crop) * 7%);
 right:0;
 bottom:calc(var(--crop) * 7%);
 left:calc(var(--crop) * 43%);
}
.hero-media{position:absolute;inset:0}
.hero-media img,.hero-media video{width:100%;height:100%;object-fit:cover;object-position:48% 50%}
.hero-media video{position:absolute;inset:0;opacity:0}
.hero.has-video .hero-media video{opacity:1}
.hero.has-video .hero-media img{opacity:0}
.hero-art::before{
 content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
 background:rgba(238,244,249,.02);
}
.hero-art::after{
 content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
 /* --scrim: 1 saat diam, meluruh ke 0 begitu pembaca mulai menggulir */
 opacity:calc((1 - var(--crop) * .8) * var(--scrim));
 background:linear-gradient(180deg,rgba(238,244,249,.72) 0%,rgba(238,244,249,.30) 42%,rgba(238,244,249,.16) 70%,rgba(238,244,249,.62) 100%);
}

/* judul kembali, menggeser dari samping, bersama satu paragraf pembuka */
.hero-recap{
 position:absolute;z-index:2;left:var(--gut);top:50%;
 width:min(40%,30rem);
 opacity:var(--recap);
 transform:translateY(-50%) translateX(calc((1 - var(--recap)) * -3rem));
}
.dek{font:400 var(--dek)/1.62 var(--display);color:var(--salt-mid);text-wrap:pretty}
.recap-lede{font:400 var(--lede)/1.6 var(--display);color:var(--salt);text-wrap:pretty;text-shadow:0 1px 18px rgba(238,244,249,.95),0 0 44px rgba(238,244,249,.8)}
.recap-lede::first-letter{
 float:left;font-size:3.6em;line-height:.8;font-weight:600;
 padding:.04em .09em 0 0;color:var(--amber);
}
.scroll-hint{
 position:absolute;z-index:2;bottom:20px;left:0;right:0;text-align:center;
 font:400 var(--micro)/1.4 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--salt-dim);
 opacity:calc(1 - var(--lift));
}

/* --- 7. Naskah ----------------------------------------------- */
/* lapisan naskah selalu di atas panggung peta yang baru saja lepas */
article,.chapter,footer{position:relative;z-index:1;background:var(--abyss)}
.chapter{padding:clamp(48px,6vw,84px) var(--gut);max-width:calc(var(--measure) + var(--gut) * 2);margin:0 auto}
.chapter:empty{display:none}
.chapter+.chapter{padding-top:0}
.prose{margin-bottom:1.3em;text-wrap:pretty}
h2{
 font-size:var(--h2);font-weight:600;line-height:1.14;letter-spacing:-.018em;color:var(--salt);
 margin:clamp(48px,5.4vw,80px) 0 clamp(20px,2.4vw,32px);padding-top:22px;
 border-top:1px solid var(--line);
}
.pullquote-cite{
 margin:-1.6em 0 clamp(34px,4.4vw,56px);padding:0 0 0 clamp(18px,2.6vw,28px);
 border-left:2px solid var(--amber);
 font:400 var(--caption)/1.6 var(--mono);letter-spacing:.04em;color:var(--salt-dim);
}
.pullquote{
 margin:clamp(34px,4.4vw,56px) 0;padding:0 0 0 clamp(18px,2.6vw,28px);
 border-left:2px solid var(--amber);
 font:400 var(--quote)/1.36 var(--display);
 letter-spacing:-.012em;color:var(--salt);
}
.pullquote:has(+ .pullquote-cite){margin-bottom:1.6em}

/* --- 8. Foto dokumentasi ------------------------------------- */
.evidence{margin:clamp(34px,4.4vw,52px) 0}
.evidence--center{max-width:27rem;margin-left:auto;margin-right:auto}
.evidence--offset{max-width:23rem;margin-right:auto}
.evidence--inset{max-width:22rem;margin-left:auto}
/* foto pendukung: lebih lebar dari kolom baca, tetapi tidak selebar layar */
.evidence--wide{
 width:min(calc(100vw - var(--gut) * 2),46rem);
 position:relative;left:50%;transform:translateX(-50%);
}
.photo-frame{padding:10px;border:1px solid var(--line);background:var(--deep)}
.photo-frame img{width:100%;height:auto}
figcaption{
 margin-top:12px;padding-left:14px;border-left:1px solid var(--line-lit);
 font:400 var(--caption)/1.55 var(--mono);color:var(--salt-dim);
}

/* --- 8b. Korsel kedalaman ----------------------------------- */
.gallery{
 width:min(calc(100vw - var(--gut) * 2),64rem);
 position:relative;left:50%;transform:translateX(-50%);
 margin:clamp(38px,4.8vw,58px) 0;
}
.gallery .fig{
 font:400 var(--micro)/1.4 var(--mono);letter-spacing:.16em;text-transform:uppercase;
 color:var(--amber);margin-bottom:16px;
}
.depth{
 /* foto air sengaja besar: kartu depan mengisi sekitar seperempat layar */
 --card-w:min(48vw,31rem);
 --card-h:min(calc(var(--card-w) * 4 / 3),72svh);
 position:relative;height:calc(var(--card-h) + 104px);
 display:flex;align-items:center;justify-content:center;
 perspective:1400px;perspective-origin:50% 50%;
 touch-action:pan-y;user-select:none;cursor:grab;outline:none;
 /* kartu terjauh menjulur keluar kotak; tanpa ini halaman bisa digulir mendatar */
 overflow:hidden;
}
.depth:active{cursor:grabbing}
.depth:focus-visible{outline:2px solid var(--amber);outline-offset:4px}
.depth-stage{position:absolute;inset:0;margin:0;padding:0;list-style:none;transform-style:preserve-3d}
.depth-card{
 position:absolute;top:50%;left:50%;
 width:var(--card-w);height:var(--card-h);
 transform-origin:center center;transform:translate(-50%,-50%);
 overflow:hidden;background:var(--deep);border:1px solid var(--line);
 box-shadow:0 30px 60px -22px rgba(20,45,70,.34),0 8px 20px -10px rgba(20,45,70,.20);
 cursor:pointer;
 /* kedalaman diurut oleh preserve-3d, bukan z-index: z-index berubah seketika
    di tengah transisi dan membuat kartu melompat ke depan */
 transition:transform .85s cubic-bezier(.22,1,.28,1),opacity .55s ease-out,
            filter .85s cubic-bezier(.22,1,.28,1);
 backface-visibility:hidden;
}
.depth.is-dragging .depth-card{transition:none}
.depth-card img{width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}
.depth-tint{position:absolute;inset:0;opacity:0;pointer-events:none;background:var(--abyss);mix-blend-mode:lighten}
.depth-arrow{
 position:absolute;top:50%;transform:translateY(-50%);z-index:20;
 width:44px;height:44px;display:grid;place-items:center;cursor:pointer;
 border:1px solid var(--line-lit);border-radius:999px;background:rgba(238,244,249,.7);
 font:400 15px/1 var(--mono);color:var(--salt-mid);
 transition:color .2s,border-color .2s,background .2s;
}
.depth-arrow:hover{color:var(--salt);border-color:var(--amber);background:rgba(238,244,249,.9)}
/* panah duduk tepat di sisi kartu terdepan, bukan di tepi jauh figur */
.depth-arrow--prev{left:max(0px,calc(50% - var(--card-w) / 2 - 58px))}
.depth-arrow--next{right:max(0px,calc(50% - var(--card-w) / 2 - 58px))}
.depth-dots{
 position:absolute;bottom:0;left:50%;transform:translateX(-50%);z-index:20;
 display:flex;gap:8px;padding:8px 12px;border-radius:999px;background:rgba(238,244,249,.55);
}
.depth-dot{
 width:7px;height:7px;padding:0;cursor:pointer;border:0;border-radius:999px;
 background:rgba(20,33,44,.26);transition:width .25s,background .25s;
}
.depth-dot[aria-selected="true"]{width:20px;background:var(--amber)}
.depth-caption{
 display:flex;gap:12px;margin-top:18px;
 font:400 var(--caption)/1.6 var(--mono);color:var(--salt-dim);
}
.depth-caption b{flex:none;font-weight:400;color:var(--amber);font-variant-numeric:tabular-nums}
.gallery>figcaption{margin-top:14px}

/* --- 9. Film layar penuh ------------------------------------- */
.film{position:relative;height:190svh;margin:0;background:var(--deep)}
.film-pin{position:sticky;top:0;height:100svh;overflow:hidden;background:var(--deep)}
.film-media{position:absolute;inset:0}
.film-media img,.film-media video{width:100%;height:100%;object-fit:cover}
.film-media video{position:absolute;inset:0;opacity:0;transition:opacity .6s}
.film.has-video .film-media video{opacity:1}
.film-pin::after{
 content:"";position:absolute;inset:0;pointer-events:none;
 background:rgba(238,244,249,.02);
}
.film-copy{
 opacity:var(--o,1);transition:opacity .28s linear;
 position:absolute;z-index:1;left:var(--gut);right:var(--gut);bottom:clamp(96px,16svh,180px);
 max-width:34rem;padding:clamp(16px,2vw,22px) clamp(18px,2.4vw,26px);
 border-left:2px solid var(--amber);
 /* Alas panel 5%: yang harus terlihat rekamannya, bukan kotak putih di
    atasnya. Keterbacaan dipindah ke halo tipis pada hurufnya — elemen ini
    tidak bertopeng kata, jadi bayangan aman di sini. */
 background:rgba(247,251,253,.05);
}
.film-copy p{
 font:400 var(--quote)/1.44 var(--display);color:var(--salt);text-wrap:pretty;
 text-shadow:0 1px 12px rgba(247,251,253,.94),0 0 34px rgba(247,251,253,.78);
}
.film figcaption{
 position:absolute;z-index:1;left:var(--gut);bottom:12px;margin:0;
 max-width:calc(100% - var(--gut) * 2);width:fit-content;
 padding:7px 12px;background:rgba(238,244,249,.72);
 border:0;font-size:var(--micro);color:var(--salt-mid);
}

/* --- 10. Pelayaran: peta latar + kartu bertahap -------------- */
/* bagian selebar layar saling menempel: jeda apa pun memperlihatkan pita
   latar yang kontras di antaranya */
.scrolly{position:relative;margin:0;background:var(--deep)}
/* Pola satu panggung lengket: panggung memenuhi layar, lalu pembungkus langkah
   ditarik naik menimpanya. Margin negatif harus di pembungkus, bukan di
   panggung — kalau di panggung, naskah sesudah bagian ini ikut tertimbun. */
.stage{position:sticky;top:0;height:100svh;overflow:hidden;background:var(--deep)}
/* Pembungkus ini menutupi seluruh peta. Tanpa pointer-events:none ia menelan
   setiap klik, dan titik koordinat di bawahnya tidak pernah bisa dibuka. */
.steps{position:relative;z-index:1;margin-top:-100svh;pointer-events:none}
.stage canvas{width:100%;height:100%}
.readout{
 position:absolute;z-index:2;left:var(--gut);bottom:calc(var(--gut) + 6px);
 display:flex;gap:8px 20px;flex-wrap:wrap;align-items:baseline;
 padding:11px 15px;background:rgba(247,251,253,.95);border:1px solid var(--line-lit);
 font:400 var(--caption)/1.4 var(--mono);color:var(--salt-mid);font-variant-numeric:tabular-nums;
}
.ro-ship{color:var(--salt-dim);letter-spacing:.1em;text-transform:uppercase;font-size:var(--micro)}
.ro-date{color:var(--amber)}
.ro-coord{color:var(--amber)}
.tip{
 /* di luar panggung, dipatok ke layar: koordinat dari kanvas sudah koordinat
    layar selama panggung menempel di atas */
 position:fixed;z-index:4;width:min(19rem,calc(100% - var(--gut) * 2));
 background:var(--abyss);border:1px solid var(--line-lit);border-top:2px solid var(--amber);
 padding:13px 15px;font:400 var(--caption)/1.5 var(--mono);color:var(--salt-mid);
 pointer-events:none;
}
.tip .t-date{font-size:var(--micro);letter-spacing:.14em;text-transform:uppercase;color:var(--amber);margin-bottom:5px}
.tip .t-title{font:600 var(--dek)/1.3 var(--display);color:var(--salt);margin-bottom:8px}
.tip .t-row{display:flex;justify-content:space-between;gap:12px;border-top:1px solid var(--line);padding:4px 0}
.tip .t-row span:first-child{color:var(--salt-dim)}
.tip .t-row span:last-child{color:var(--salt);text-align:right}

.step{
 position:relative;z-index:1;min-height:112svh;
 display:flex;align-items:center;padding:8svh var(--gut);
 pointer-events:none;
}
.step--beat{justify-content:center}
/* teks di atas rekaman atau peta selalu duduk di atas latar tipis, kalau tidak
   bagian terang di belakangnya memakan hurufnya */
/* kalimat pembuka bukan bagian naskah utama, jadi warnanya dibedakan */
.beat{
 max-width:30ch;text-align:center;opacity:var(--o,1);text-wrap:pretty;
 padding:clamp(16px,2vw,22px) clamp(20px,2.6vw,28px);
 background:rgba(247,251,253,.05);border:1px solid rgba(162,69,44,.34);
 font:400 var(--quote)/1.42 var(--display);color:var(--amber);
 text-shadow:0 1px 12px rgba(247,251,253,.94),0 0 34px rgba(247,251,253,.78);
}
.card{
 pointer-events:auto;
 max-width:29rem;padding:clamp(20px,2.6vw,28px);
 background:rgba(247,251,253,.97);border:1px solid var(--line-lit);border-left:2px solid var(--amber);
 box-shadow:0 18px 40px -26px rgba(20,45,70,.5);
}
.steps .step:nth-child(2) .card{margin-left:auto}
.card-art{margin:0 0 16px}
.card-art img{width:100%;height:auto;border:1px solid var(--line)}
.card-art figcaption{margin-top:9px;padding-left:12px;font-size:var(--micro);line-height:1.5}
.card .fig{font:400 var(--micro)/1.4 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--amber);margin-bottom:12px}
.card .card-title{font-size:var(--h3);font-weight:600;line-height:1.2;letter-spacing:-.015em;margin:0 0 14px;color:var(--amber)}
.card p+p{margin-top:.9em}
.card .note{font:400 var(--caption)/1.6 var(--mono);color:var(--salt-dim)}
.legend{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:14px;font:400 var(--micro)/1.4 var(--mono);letter-spacing:.06em;color:var(--salt-dim)}
.legend span{display:inline-flex;align-items:center;gap:7px}
.dot{width:9px;height:9px;display:inline-block}
.dot--enc{border-radius:50%;background:var(--amber)}
.dot--port{background:var(--salt)}
.hint-click{margin-top:12px;font:400 var(--micro)/1.4 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--teal)}
.hint-click::before{content:"\25C9 ";color:var(--amber)}
.records{margin-top:16px;font:400 var(--caption)/1.6 var(--mono);color:var(--salt-dim)}
.records summary{width:fit-content;cursor:pointer;min-height:44px;padding:10px 0;color:var(--salt-mid);letter-spacing:.06em}
.records ul{padding-left:18px;margin:4px 0 0}
.records li{margin-bottom:9px}

/* --- 10b. Naskah bergulir di atas rekaman -------------------- */
.reel{position:relative;background:var(--deep);margin:0}
.reel-pin{position:sticky;top:0;height:100svh;overflow:hidden;background:var(--deep)}
.reel-media{position:absolute;inset:0}
.reel-media img,.reel-media video{width:100%;height:100%;object-fit:cover}
.reel-media video{position:absolute;inset:0;opacity:0;transition:opacity .6s}
.reel.has-video .reel-media video{opacity:1}
.reel-pin::after{
 content:"";position:absolute;inset:0;pointer-events:none;
 background:rgba(238,244,249,.02);
}
.reel-caption{
 position:absolute;z-index:1;left:var(--gut);bottom:12px;margin:0;
 max-width:calc(100% - var(--gut) * 2);width:fit-content;
 padding:7px 12px;background:rgba(238,244,249,.72);
 font:400 var(--micro)/1.6 var(--mono);color:var(--salt-mid);
}
.reel-copy{position:relative;z-index:1;margin-top:-100svh}
.reel-copy p{
 min-height:100svh;margin:0 auto;padding:0 var(--gut);
 max-width:calc(var(--measure) + var(--gut) * 2);
}
.reel-copy p>span{
 position:sticky;top:calc(50svh - 5rem);
 opacity:var(--o,1);transition:opacity .28s linear;
}
.reel-copy p>span{
 display:block;padding:clamp(18px,2.4vw,26px) clamp(20px,2.6vw,30px);
 background:rgba(247,251,253,.05);border-left:2px solid var(--amber);
 font:400 var(--quote)/1.42 var(--display);color:var(--salt);text-wrap:pretty;
 text-shadow:0 1px 12px rgba(247,251,253,.94),0 0 34px rgba(247,251,253,.78);
}

/* --- 11. Satu hari kerja ------------------------------------- */
.clock{margin:clamp(40px,5vw,64px) 0;padding:clamp(24px,3vw,34px) 0;border-block:1px solid var(--line);width:var(--wide);position:relative;left:50%;transform:translateX(-50%);
}
.clock h3{font-size:var(--h3);font-weight:600;line-height:1.2;margin-bottom:22px}
.clock-wrap{display:flex;gap:clamp(20px,4vw,38px);align-items:center;flex-wrap:wrap}
.clock-wrap svg{flex:none}
.clock-num{fill:var(--salt);font:400 30px var(--mono)}
.clock-unit{fill:var(--salt-dim);font:400 10px var(--mono);letter-spacing:.12em}
.clock-arc{transition:stroke .4s}
.clock-wrap svg,.clock-note{opacity:0;transform:translateY(14px);transition:opacity .7s,transform .7s cubic-bezier(.16,1,.3,1)}
.clock.is-on .clock-wrap svg,.clock.is-on .clock-note{opacity:1;transform:none}
.clock.is-on .clock-note{transition-delay:.12s}
.clock-note{flex:1 1 15rem;max-width:23rem;font-size:var(--body);line-height:1.6;color:var(--salt-mid)}
.clock-note b{font-weight:400;color:var(--amber);font-family:var(--mono);font-size:.94em}
.clock figcaption{margin-top:22px}

/* --- 12. Grafik temuan --------------------------------------- */
.finding{margin:clamp(40px,5vw,60px) 0;padding:clamp(24px,3vw,32px) 0;border-block:1px solid var(--line);width:var(--wide);position:relative;left:50%;transform:translateX(-50%);
}
.finding h3{font-size:var(--h3);font-weight:600;line-height:1.2;margin-bottom:24px}
.finding-row{margin-top:20px}
.finding-label{
 display:flex;justify-content:space-between;gap:16px;
 font:400 var(--caption)/1.4 var(--mono);color:var(--salt-mid);font-variant-numeric:tabular-nums;
}
.finding-row svg{display:block;width:100%;height:10px;margin-top:9px;overflow:visible}
.finding-row rect{fill:var(--rust)}
.finding-row--amber rect{fill:var(--amber)}
.finding-row--rust rect{fill:var(--rust)}
.finding--wage .finding-label span:last-child{color:var(--salt)}
/* --- 12a. Upah: dua batang dengan jalur pembanding ----------- */
.wage{
 margin:clamp(40px,5vw,60px) 0;
 padding:clamp(22px,2.8vw,30px) clamp(20px,2.6vw,28px);
 border:1px solid var(--line);border-left:2px solid var(--amber);background:var(--deep);
 width:var(--wide);position:relative;left:50%;transform:translateX(-50%);
}
.wage .fig{
 font:400 var(--micro)/1.4 var(--mono);letter-spacing:.16em;text-transform:uppercase;
 color:var(--amber);margin-bottom:10px;
}
.wage h3{font-size:var(--h3);font-weight:600;line-height:1.2;margin-bottom:24px}
.wage-row{padding:10px 0;cursor:default}
.wage-row+.wage-row{margin-top:6px}
.wage-row:hover,.wage-row:focus-visible{outline:none}
.wage-label{
 display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:9px;
 font:400 var(--caption)/1.4 var(--mono);color:var(--salt-mid);font-variant-numeric:tabular-nums;
}
.wage-label b{font-weight:400;color:var(--salt)}
.wage-track{display:block;height:12px;background:var(--hull);border:1px solid var(--line)}
.wage-fill{
 display:block;height:100%;width:0;background:var(--amber);
 transition:width 1.1s cubic-bezier(.2,.7,.2,1);
}
.wage-row--rust .wage-fill{background:var(--rust)}
.wage-row:hover .wage-fill,.wage-row:focus-visible .wage-fill{filter:brightness(1.25)}
.wage-row:hover .wage-label b,.wage-row:focus-visible .wage-label b{color:var(--amber)}
.wage-gap{
 margin-top:20px;padding-top:16px;border-top:1px solid var(--line);
 font:400 var(--caption)/1.5 var(--mono);color:var(--salt-mid);
}
.wage-gap b{font-weight:400;color:var(--rust);font-size:var(--lede)}
.wage figcaption{margin-top:18px;padding-left:0;border-left:0}

/* --- 12b. Sampai ke kanal resmi ------------------------------ */
.matrix{
 margin:clamp(40px,5vw,60px) 0;
 padding:clamp(22px,2.8vw,30px) clamp(20px,2.6vw,28px);
 border:1px solid var(--line);border-left:2px solid var(--teal);background:var(--deep);
 width:var(--wide);position:relative;left:50%;transform:translateX(-50%);
}
.matrix .fig{
 font:400 var(--micro)/1.4 var(--mono);letter-spacing:.16em;text-transform:uppercase;
 color:var(--teal);margin-bottom:10px;
}
.matrix h3{font-size:var(--h3);font-weight:600;line-height:1.2;margin-bottom:18px}
.matrix-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px}
.matrix-tab{
 min-height:44px;padding:9px 15px;cursor:pointer;
 background:var(--hull);border:1px solid var(--line-lit);border-radius:0;
 font:400 var(--caption)/1.3 var(--mono);color:var(--salt-mid);
 transition:color .2s,border-color .2s,background .2s;
}
.matrix-tab:hover{color:var(--salt);border-color:var(--teal)}
.matrix-tab[aria-selected="true"]{background:var(--salt);border-color:var(--salt);color:var(--abyss)}
.matrix-grid{
 display:grid;grid-template-columns:repeat(auto-fill,9px);gap:3px;
 padding:4px 0;
}
.matrix-grid i{
 display:block;width:6px;height:6px;background:var(--line-lit);border-radius:50%;
 opacity:0;transform:scale(.4);
 transition:opacity .5s,transform .5s,background .3s,box-shadow .3s;
}
.matrix.is-on .matrix-grid i{opacity:1;transform:none}
.matrix-grid i.on{background:var(--amber);box-shadow:0 0 0 2px rgba(162,69,44,.20)}
.matrix-readout{
 margin-top:18px;font:400 var(--caption)/1.65 var(--mono);color:var(--salt-mid);
}
.matrix figcaption{margin-top:18px;padding-left:0;border-left:0}

/* --- 12b. Profil penulis ------------------------------------- */
.authors{
 position:relative;z-index:1;background:var(--abyss);
 max-width:calc(var(--measure) + var(--gut) * 2);margin:0 auto;
 padding:clamp(44px,5.4vw,72px) var(--gut) 0;
}
.authors .kicker{margin-bottom:20px}
.author{
 display:flex;gap:clamp(16px,2.4vw,24px);align-items:flex-start;
 padding:clamp(18px,2.4vw,24px);border:1px solid var(--line);background:var(--deep);
}
.author+.author{margin-top:14px}
.author-photo{
 width:82px;height:82px;flex:none;border-radius:50%;object-fit:cover;
 border:1px solid var(--line-lit);
}
.author-name{font:600 var(--lede)/1.2 var(--display);letter-spacing:-.015em;color:var(--salt)}
.author-role{
 margin:6px 0 12px;font:400 var(--micro)/1.4 var(--mono);
 letter-spacing:.18em;text-transform:uppercase;color:var(--amber);
}
.author-body>p:last-child{font:400 var(--dek)/1.68 var(--display);color:var(--salt-mid);text-wrap:pretty}
.authors-note{
 margin-top:14px;font:400 var(--micro)/1.6 var(--mono);color:var(--salt-dim);
}

/* --- 12c. Kredit --------------------------------------------- */
/* Kredit menutup badan naskah: hanya garis pembatas, tanpa judul.
   Lebarnya melebihi kolom baca dan dipusatkan pada kolom itu. */
.credits{
 position:relative;left:50%;translate:-50%;
 width:var(--wide);margin:clamp(40px,5vw,64px) 0 0;
 padding-top:clamp(24px,3vw,34px);border-top:1px solid var(--line-lit);
}
.credits dl{
 display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(18px,2.4vw,30px);
 margin:0;justify-items:center;text-align:center;
}
.credits div{display:flex;flex-direction:column;gap:7px;align-items:center}
.credits dt{font:400 var(--caption)/1.5 var(--mono);letter-spacing:.03em;color:var(--salt-dim)}
.credits dd{margin:0;font:400 var(--caption)/1.5 var(--mono);color:var(--salt);text-wrap:balance}

/* --- 13. Kaki ------------------------------------------------ */
footer{max-width:calc(var(--measure) + var(--gut) * 2);margin:0 auto;padding:clamp(48px,6vw,80px) var(--gut) 64px}
footer .kicker{margin-bottom:16px}
footer p{padding-top:20px;border-top:1px solid var(--line);font:400 var(--caption)/1.7 var(--mono);color:var(--salt-dim)}
footer p+p{border-top:0;padding-top:0;margin-top:14px}

/* --- 14. Layar kecil ----------------------------------------- */
@media(max-width:760px){
 :root{--measure:100%}
 .masthead{min-height:60px;padding:13px var(--gut)}
 .masthead .kicker{display:none}
 .jaring-logo{width:auto;height:30px}.pulitzer-logo{width:112px;height:21px}
 .hero-title{max-width:none}
 .hero-open .dek{max-width:none}
 .byline{gap:12px 22px;padding-top:16px}
 .hero--live{height:380svh}
 .hero-title{top:clamp(84px,13svh,120px)}
 .hero-art{top:calc(var(--crop) * 4%);right:0;bottom:calc(var(--crop) * 46%);left:0}
 .hero-recap{
  top:auto;bottom:40px;width:calc(100% - var(--gut) * 2);
  transform:translateX(calc((1 - var(--recap)) * -2rem));
 }
 .step--beat{align-items:center}
 .beat{max-width:none}
 .evidence--center,.evidence--offset,.evidence--inset{max-width:none;margin-left:0;margin-right:0}
 .film{height:170svh}
 .reel-copy p{min-height:76svh}
 .film-copy{bottom:clamp(80px,14svh,140px);max-width:none}
 .step{min-height:104svh;align-items:flex-end;padding-bottom:12svh}
 .card{max-width:none}
 .steps .step:nth-child(2) .card{margin-left:0}
 .readout{
  left:0;right:0;top:0;bottom:auto;justify-content:space-between;
  border-width:0 0 1px;padding:10px var(--gut);background:var(--abyss);
 }
 .step{padding-top:16svh}
 /* Di ponsel kartu naskah selebar layar dan menutupi seluruh peta, sehingga
    tidak ada satu pun titik yang bisa diketuk. Kartu dibuat tembus sentuhan;
    hanya bagian yang memang perlu ditekan yang menahannya. */
 .card{pointer-events:none}
 .card details,.card summary,.card a{pointer-events:auto}
 .tip{width:calc(100% - var(--gut) * 2)}
 .evidence--wide,.gallery{width:auto;position:static;left:auto;transform:none}
 .depth{
  --card-w:min(72vw,19rem);--card-h:min(calc(var(--card-w) * 4 / 3),58svh);
  --spread:.16;--visible:1.4;--depth-z:150;
 }
 .clock,.wage,.matrix,.finding{width:auto;position:static;left:auto;transform:none}
 .credits{width:auto;position:static;left:auto;translate:none}
 .credits dl{grid-template-columns:1fr 1fr;gap:22px}
 .depth-arrow{width:40px;height:40px}
 .wage-label{flex-direction:column;gap:4px}
 .matrix-grid{grid-template-columns:repeat(auto-fill,8px)}
 .author{flex-direction:column;gap:14px}
 .author-photo{width:72px;height:72px}
 .clock-wrap{gap:20px}
 .clock-wrap svg{width:150px;height:150px}
}

/* --- 15. Gerak dikurangi ------------------------------------- */
@media(prefers-reduced-motion:reduce){
 .hero,.hero--live{height:auto}
 .hero--live .hero-pin{position:relative}
 .hero-media video,.film-media video{display:none}
 .scroll-hint{display:none!important}
 .film{height:auto}
 .film-pin{position:relative;height:min(70svh,560px)}
 .stage{position:relative;height:min(76svh,600px)}
 .steps{margin-top:0}
 .reel-pin{position:relative;height:min(60svh,460px)}
 .reel-copy{margin-top:0}
 .reel-copy p{min-height:0;padding:clamp(24px,4vw,40px) var(--gut)}
 .reel-copy p>span,.film-copy{position:static;opacity:1!important}
 .depth-card{transition:none}
 .step{min-height:0;padding:clamp(28px,4vw,44px) var(--gut)}
}

/* --- 16. Cetak ----------------------------------------------- */
@media print{
 body{background:#fff;color:#111;overflow:visible}
 .masthead,.hero-art,.film,.stage,.reel-pin,.scroll-hint{display:none}
 .author{border-color:#ccc;background:none}
 .steps,.reel-copy{margin-top:0}
 .reel-copy p{min-height:0;padding:8px 0}
 .hero{height:auto!important}
 .hero-pin{position:static!important;height:auto!important;overflow:visible!important}
 .hero-title,.hero-recap{position:static!important;opacity:1!important;transform:none!important;width:auto!important}
 .hero-recap,.chapter,footer,.step{max-width:none;padding:12px 0;min-height:0}
 .beat{min-height:0;padding:8px 0;text-align:left}
 .evidence{break-inside:avoid}
 .card{background:none;border-color:#ccc}
 figcaption,.dateline,.kicker{color:#555}
}


/* --- 17. Dua bahasa ------------------------------------------ */
/* Halaman lahir dalam bahasa Indonesia; judul Inggrisnya ikut di markup dan
   disembunyikan sampai diminta, supaya animasi masuknya tak perlu diulang. */
.masked[data-lang="en"]{display:none}
:root[data-lang="en"] .masked[data-lang="id"]{display:none}
:root[data-lang="en"] .masked[data-lang="en"]{display:block}

/* ORN berdiri sendiri di ujung kanan; tombol bahasa didorong ke sisinya,
   bukan ke ujung, supaya sudut kanan atas tetap milik lambang itu. */
.partner-logo--orn{margin-left:clamp(14px,2vw,26px)}
.lang{
 margin-left:auto;display:inline-flex;align-items:center;gap:6px;
 padding:6px 12px;border:1px solid var(--line-lit);border-radius:999px;
 background:rgba(238,244,249,.55);cursor:pointer;
 font:400 var(--micro)/1 var(--mono);letter-spacing:.12em;color:var(--salt-dim);
 transition:border-color .2s,background .2s;
}
.lang:hover{border-color:var(--amber);background:rgba(238,244,249,.85)}
.lang:focus-visible{outline:2px solid var(--amber);outline-offset:3px}
.lang-sep{opacity:.45}
/* yang sedang dipakai menyala; yang satunya adalah tawarannya */
.lang [data-for="id"]{color:var(--amber)}
:root[data-lang="en"] .lang [data-for="id"]{color:var(--salt-dim)}
:root[data-lang="en"] .lang [data-for="en"]{color:var(--amber)}
@media print{ .lang{display:none} }

/* --- 18. Dukungan di kaki halaman ---------------------------- */
.support{
 display:flex;flex-direction:column;align-items:flex-start;gap:12px;
 margin-top:clamp(28px,3.4vw,42px);padding-top:clamp(20px,2.4vw,28px);
 border-top:1px solid var(--line);
}
.support-note{
 /* aturan footer p memberi tiap paragraf garis atas sendiri; di sini garisnya
    milik blok dukungan, bukan milik barisnya */
 margin:0;padding-top:0;border-top:0;
 font:400 var(--micro)/1.4 var(--mono);
 letter-spacing:.14em;text-transform:uppercase;color:var(--salt-dim);
}
.support-logo{width:auto;height:30px;object-fit:contain;opacity:.86}

/* --- 19. Penyesuaian halaman terang --------------------------
   Lambang mitra dibuat untuk halaman gelap: seluruhnya putih.
   Di atas langit pucat mereka lenyap, jadi dibalik jadi tinta. */
.partner-logo,.support-logo{filter:brightness(0);opacity:.78}
.masthead::before{
 background:linear-gradient(180deg,rgba(238,244,249,.88) 0%,rgba(238,244,249,.55) 55%,rgba(238,244,249,0) 100%);
}

/* ============================================================
   20. Grafik milik bab ini
   Kotaknya meminjam kerangka .finding / .matrix Bab 1: selebar
   var(--wide), garis tipis mengelilinginya, judul kecil di atas.
   ============================================================ */
.graf{
 margin:clamp(40px,5vw,60px) 0;
 padding:clamp(22px,2.8vw,30px) clamp(20px,2.6vw,28px);
 border:1px solid var(--line);border-left:2px solid var(--amber);background:var(--deep);
 width:var(--wide);position:relative;left:50%;transform:translateX(-50%);
}
.graf .fig{
 font:400 var(--micro)/1.4 var(--mono);letter-spacing:.16em;text-transform:uppercase;
 color:var(--amber);margin-bottom:10px;
}
.graf h3{font-size:var(--h3);font-weight:600;line-height:1.2;margin-bottom:20px}
.graf figcaption{margin-top:18px;padding-left:0;border-left:0}
.graf--teal{border-left-color:var(--teal)}
.graf--teal .fig{color:var(--teal)}

/* --- 20a. Kalender jeda sinyal ------------------------------
   Satu baris satu hari. Batang di dalamnya adalah jam ketika
   sinyal kapal tidak terekam; hari kosong tetap ditampilkan
   supaya rapatnya jeda terbaca sebagai pola, bukan daftar. */
.kalender{display:grid;grid-template-columns:repeat(auto-fill,minmax(11rem,1fr));gap:2px 16px}
.hari{
 display:flex;align-items:center;gap:9px;width:100%;
 padding:3px 4px;cursor:pointer;text-align:left;
 background:none;border:0;border-radius:0;
}
.hari:hover .hari-track,.hari:focus-visible .hari-track{background:var(--hull)}
.hari:focus-visible{outline:2px solid var(--amber);outline-offset:1px}
.hari-label{
 flex:none;width:4.2rem;
 font:400 var(--micro)/1.4 var(--mono);letter-spacing:.02em;color:var(--salt-dim);
 font-variant-numeric:tabular-nums;
}
.hari-track{position:relative;flex:1;height:9px;background:var(--abyss);border:1px solid var(--line)}
.hari-jeda{position:absolute;top:0;bottom:0;background:var(--amber);opacity:.85}
.hari[aria-pressed="true"] .hari-track{border-color:var(--amber)}
.hari[aria-pressed="true"] .hari-label{color:var(--salt)}
.kalender-detail{
 margin-top:18px;padding-top:14px;border-top:1px solid var(--line);
 font:400 var(--caption)/1.65 var(--mono);color:var(--salt-mid);min-height:3.4em;
}

/* --- 20b. Peta Green Star yang menempel ---------------------
   Pola yang sama dengan .scrolly Bab 1: peta menempel setinggi
   layar, kartu langkah lewat di atasnya. */
.green{position:relative;margin:clamp(40px,5vw,64px) 0;background:var(--deep)}
.green-stage{position:sticky;top:0;height:100svh;overflow:hidden;background:var(--deep)}
.green-stage canvas{width:100%;height:100%}
.green-readout{
 position:absolute;z-index:2;left:var(--gut);bottom:calc(var(--gut) + 6px);
 padding:12px 16px;background:rgba(247,251,253,.96);border:1px solid var(--line-lit);
 box-shadow:0 18px 40px -26px rgba(20,45,70,.5);
 font:400 var(--caption)/1.5 var(--mono);color:var(--salt-mid);max-width:20rem;
}
.green-readout .ro-date{
 font-size:var(--micro);letter-spacing:.14em;text-transform:uppercase;color:var(--amber);
}
.green-readout .ro-num{
 display:block;margin:6px 0 8px;
 font:600 clamp(30px,4vw,46px)/1 var(--display);letter-spacing:-.02em;color:var(--salt);
 font-variant-numeric:tabular-nums;
}
.green-readout .ro-num span{font:400 var(--caption)/1 var(--mono);color:var(--salt-dim);margin-left:6px}
.green-steps{position:relative;z-index:1;margin-top:-100svh;pointer-events:none}
.green-step{
 min-height:96svh;display:flex;align-items:center;padding:8svh var(--gut);
 pointer-events:none;
}
.green-step .card{opacity:.35;transition:opacity .4s}
.green-step.is-current .card{opacity:1}
.green-step:nth-child(even) .card{margin-left:auto}

/* --- 20c. Sakelar identitas ---------------------------------
   Satu lambung, dua nama. Yang berpindah hanya nama di kertas;
   nomor IMO sengaja duduk di luar bidang yang berkedip. */
.identitas-sakelar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px}
.identitas-sakelar button{
 min-height:44px;padding:9px 15px;cursor:pointer;
 background:var(--hull);border:1px solid var(--line-lit);
 font:400 var(--caption)/1.3 var(--mono);color:var(--salt-mid);
 transition:color .2s,border-color .2s,background .2s;
}
.identitas-sakelar button:hover{color:var(--salt);border-color:var(--amber)}
.identitas-sakelar button[aria-pressed="true"]{background:var(--salt);border-color:var(--salt);color:var(--abyss)}
.identitas-kertas{
 padding:clamp(20px,2.6vw,28px);background:var(--abyss);border:1px solid var(--line);
}
.identitas-kertas.berganti #identitas-nama{animation:tukar .5s cubic-bezier(.16,1,.3,1) both}
@keyframes tukar{from{opacity:0;transform:translateY(.35em)}to{opacity:1;transform:none}}
#identitas-sumber{font:400 var(--micro)/1.4 var(--mono);letter-spacing:.16em;color:var(--salt-dim)}
#identitas-nama{
 display:block;margin:10px 0 14px;
 font:600 clamp(26px,3.4vw,42px)/1.06 var(--display);letter-spacing:-.02em;color:var(--salt);
}
#identitas-catatan{font:400 var(--caption)/1.7 var(--mono);color:var(--salt-mid)}
.imo-tetap{
 margin-top:18px;padding-top:14px;border-top:1px solid var(--line-lit);
 font:400 var(--caption)/1.6 var(--mono);color:var(--salt-mid);
}
.imo-tetap b{font-weight:400;color:var(--amber);font-variant-numeric:tabular-nums}

/* --- 20d. Rantai papasan ke pelabuhan ----------------------- */
.rantai{width:100%;overflow-x:auto}
.rantai svg{display:block;width:100%;min-width:34rem;height:auto}
.rantai text{font-family:Lekton,monospace;fill:var(--salt-dim)}
.rantai .rantai-kepala{letter-spacing:.16em;fill:var(--salt-dim)}
.rantai .rantai-kota{font-family:Newsreader,Georgia,serif;fill:var(--salt)}
.rantai .rantai-tanggal{fill:var(--salt-mid)}
.rantai .rantai-jumlah{fill:var(--amber)}
.rantai-jalur{
 fill:none;stroke:var(--line-lit);stroke-width:1;opacity:.5;
 transition:stroke .3s,opacity .3s,stroke-width .3s;
}
.rantai-jalur.is-on{stroke:var(--amber);stroke-width:1.6;opacity:1}
.rantai-titik{fill:var(--salt-dim)}
.rantai-cincin{fill:none;stroke:var(--line-lit);stroke-width:1.4}
.rantai-tombol{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0 16px}
.rantai-tombol button{
 min-height:44px;padding:8px 14px;cursor:pointer;text-align:left;
 background:var(--hull);border:1px solid var(--line-lit);
 font:400 var(--caption)/1.3 var(--mono);color:var(--salt-mid);
 transition:color .2s,border-color .2s,background .2s;
}
.rantai-tombol button span{display:block;font-size:var(--micro);color:var(--salt-dim);margin-top:3px}
.rantai-tombol button:hover{color:var(--salt);border-color:var(--amber)}
.rantai-tombol button[aria-pressed="true"]{background:var(--salt);border-color:var(--salt);color:var(--abyss)}
.rantai-tombol button[aria-pressed="true"] span{color:var(--hull)}
.rantai-detail{font:400 var(--caption)/1.7 var(--mono);color:var(--salt-mid)}
.rantai-detail p+p{margin-top:6px}
.tabel-gulir{margin-top:18px;overflow-x:auto;border:1px solid var(--line)}
.tabel-gulir table{border-collapse:collapse;width:100%;min-width:26rem}
.tabel-gulir th,.tabel-gulir td{
 padding:9px 14px;text-align:left;border-bottom:1px solid var(--line);
 font:400 var(--caption)/1.5 var(--mono);color:var(--salt-mid);
}
.tabel-gulir th{
 font-size:var(--micro);letter-spacing:.12em;text-transform:uppercase;
 color:var(--salt-dim);background:var(--hull);
}
.tabel-gulir td:last-child,.tabel-gulir th:last-child{text-align:right;font-variant-numeric:tabular-nums}
.tabel-gulir tr:last-child td{border-bottom:0}

/* --- 20e. Tabel di dalam naskah ------------------------------ */
.tabel{
 width:var(--wide);position:relative;left:50%;transform:translateX(-50%);
 margin:clamp(40px,5vw,60px) 0;
}
.tabel .fig{
 font:400 var(--micro)/1.4 var(--mono);letter-spacing:.16em;text-transform:uppercase;
 color:var(--amber);margin-bottom:12px;
}

/* --- 20f. Kartu peta armada --------------------------------- */
.card .big{
 display:block;margin:0 0 12px;
 font:600 clamp(30px,3.8vw,50px)/1 var(--display);letter-spacing:-.022em;color:var(--salt);
 font-variant-numeric:tabular-nums;
}
.dot--sus{border-radius:50%;background:var(--amber)}
.dot--dark{border-radius:50%;background:var(--rust)}
.dot--carrier{border-radius:50%;background:var(--teal)}
.dot--fleet{border-radius:50%;background:var(--line-lit)}

/* --- 20g. Layar kecil --------------------------------------- */
@media(max-width:760px){
 .graf,.tabel{width:auto;position:static;left:auto;transform:none}
 .kalender{grid-template-columns:1fr}
 .green-step{min-height:88svh;align-items:flex-end;padding-bottom:12svh}
 .green-step:nth-child(even) .card{margin-left:0}
 .green-readout{left:0;right:0;bottom:0;max-width:none;border-width:1px 0 0}
 .rantai svg{min-width:30rem}
}
@media(prefers-reduced-motion:reduce){
 .green-stage{position:relative;height:min(70svh,540px)}
 .green-steps{margin-top:0}
 .green-step{min-height:0;padding:clamp(28px,4vw,44px) var(--gut)}
 .green-step .card{opacity:1}
 .identitas-kertas.berganti #identitas-nama{animation:none}
}
@media print{
 .green-stage{display:none}
 .green-steps{margin-top:0}
 .green-step{min-height:0;padding:12px 0}
 .graf,.tabel{width:auto;position:static;left:auto;transform:none;background:none;border-color:#ccc}
}

/* Judul tabel: dipakai sebagai keterangan, bukan sebagai judul besar. */
.tabel-gulir caption{
 padding:10px 14px;text-align:left;caption-side:top;
 background:var(--hull);border-bottom:1px solid var(--line);
 font:400 var(--micro)/1.6 var(--mono);letter-spacing:.04em;color:var(--salt-dim);
}

/* --- 20h. Peta kutub ----------------------------------------------------
   Bola kutub berdiri sendiri di tengah kotak grafik. Lebarnya dibatasi
   supaya tidak menjadi lingkaran raksasa pada layar lebar. */
.kutub-tab{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.kutub-tab button{
 min-height:44px;padding:9px 15px;cursor:pointer;
 background:var(--hull);border:1px solid var(--line-lit);
 font:400 var(--caption)/1.3 var(--mono);color:var(--salt-mid);
 transition:color .2s,border-color .2s,background .2s;
}
.kutub-tab button:hover{color:var(--salt);border-color:var(--amber)}
.kutub-tab button[aria-selected="true"]{background:var(--salt);border-color:var(--salt);color:var(--abyss)}
.kutub-panggung{position:relative;width:min(100%,34rem);margin:0 auto}
.kutub-panggung svg{display:block;width:100%;height:auto}
.kutub-tip{
 position:absolute;z-index:3;pointer-events:none;width:max-content;max-width:15rem;
 padding:9px 12px;background:var(--abyss);
 border:1px solid var(--line-lit);border-top:2px solid var(--amber);
 box-shadow:0 18px 40px -26px rgba(20,45,70,.5);
 font:400 var(--caption)/1.5 var(--mono);color:var(--salt-mid);
}
.kutub-tip b{font-weight:400;color:var(--salt)}
.kutub-tip i{font-style:normal;color:var(--amber)}
.kutub-legenda{
 display:flex;flex-wrap:wrap;gap:7px 18px;margin-top:18px;
 font:400 var(--micro)/1.5 var(--mono);letter-spacing:.04em;color:var(--salt-dim);
}
.kutub-legenda span{display:inline-flex;align-items:center;gap:7px}
.kutub-legenda i{width:9px;height:9px;flex:none;border-radius:50%;display:inline-block}
.kutub-catatan{
 margin-top:14px;padding-top:12px;border-top:1px solid var(--line);
 font:400 var(--caption)/1.65 var(--mono);color:var(--salt-mid);
}
@media(max-width:760px){
 .kutub-panggung{width:100%}
 .kutub-tip{max-width:12rem}
}

/* --- 20i. Peta Pasifik Barat Laut --------------------------- */
.pasifik-tombol{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.pasifik-tombol button{
 display:inline-flex;align-items:center;gap:8px;
 min-height:44px;padding:9px 15px;cursor:pointer;
 background:var(--hull);border:1px solid var(--line-lit);
 font:400 var(--caption)/1.3 var(--mono);color:var(--salt-mid);
 transition:color .2s,border-color .2s,background .2s;
}
.pasifik-tombol button i{width:9px;height:9px;flex:none;border-radius:50%;display:inline-block}
.pasifik-tombol button:hover{color:var(--salt);border-color:var(--amber)}
.pasifik-tombol button[aria-pressed="true"]{background:var(--salt);border-color:var(--salt);color:var(--abyss)}
.pasifik-panggung{position:relative;width:100%}
.pasifik-panggung svg{display:block;width:100%;height:auto}
.pasifik-tip{
 position:absolute;z-index:3;pointer-events:none;width:max-content;max-width:16rem;
 padding:9px 12px;background:var(--abyss);
 border:1px solid var(--line-lit);border-top:2px solid var(--amber);
 box-shadow:0 18px 40px -26px rgba(20,45,70,.5);
 font:400 var(--caption)/1.5 var(--mono);color:var(--salt-mid);
}
.pasifik-tip b{font-weight:400;color:var(--salt)}
.pasifik-tip i{font-style:normal;color:var(--amber)}
/* Empat angka kejanggalan berjajar; di layar sempit turun jadi dua kolom. */
.pasifik-bacaan{
 display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(14px,2.4vw,26px);
 margin:22px 0 0;padding-top:18px;border-top:1px solid var(--line);
}
.pasifik-bacaan div{display:flex;flex-direction:column;gap:6px}
.pasifik-bacaan dt{
 font:400 var(--micro)/1.4 var(--mono);letter-spacing:.14em;text-transform:uppercase;
 color:var(--salt-dim);
}
.pasifik-bacaan dd{
 margin:0;font:600 clamp(26px,3.2vw,38px)/1 var(--display);letter-spacing:-.02em;
 color:var(--salt);font-variant-numeric:tabular-nums;
}
.pasifik-bacaan dd span{
 margin-left:6px;font:400 var(--caption)/1 var(--mono);color:var(--salt-dim);
 letter-spacing:0;
}
.pasifik-catatan{
 margin-top:16px;font:400 var(--caption)/1.7 var(--mono);color:var(--salt-mid);
 min-height:3.4em;
}
@media(max-width:760px){
 .pasifik-bacaan{grid-template-columns:1fr 1fr}
 .pasifik-tip{max-width:12rem}
}

/* Baris penutup di dalam kotak detail yang sedang terkunci. */
.kutub-tip u,.pasifik-tip u{
 display:block;margin-top:8px;padding-top:7px;border-top:1px solid var(--line);
 text-decoration:none;font-size:var(--micro);letter-spacing:.1em;
 text-transform:uppercase;color:var(--salt-dim);
}

/* --- 21. Teks tengah di atas rekaman -------------------------
   Dipakai pada bab Antartika: kalimatnya berdiri sendiri di
   tengah bingkai, bukan menempel di sudut bawah. Garis aksen
   pindah ke atas karena garis kiri pada blok terpusat menarik
   mata ke tepi, bukan ke kalimatnya. */
.film--tengah .film-copy{
 left:50%;right:auto;top:50%;bottom:auto;
 transform:translate(-50%,-50%);
 width:min(38rem,calc(100% - var(--gut) * 2));max-width:none;
 text-align:center;
 border-left:0;border-top:2px solid var(--amber);
 padding:clamp(20px,2.6vw,28px) clamp(20px,2.6vw,30px);
}
@media(max-width:760px){
 .film--tengah .film-copy{width:calc(100% - var(--gut) * 2)}
}
@media(prefers-reduced-motion:reduce){
 .film--tengah .film-copy{position:static;transform:none;width:auto;margin:0 auto}
}

/* --- 22. Naskah di atas rekaman yang gelap -------------------
   Alas panel 5% berlaku di seluruh halaman, dan itu bekerja di
   atas rekaman terang: es, laut, langit. Di atas adegan anjungan
   yang gelap, tinta biru-hitam pada alas setipis itu praktis tak
   terbaca. Bagian yang rekamannya gelap ditandai di markup, dan
   di sana tintanya yang dibalik — bukan alasnya yang ditebalkan,
   supaya rekamannya tetap terlihat seperti yang diminta. */
.pada-gelap .reel-copy p>span,
.pada-gelap .film-copy p{
 color:var(--abyss);
 text-shadow:0 1px 14px rgba(10,18,26,.95),0 0 38px rgba(10,18,26,.85);
}
.pada-gelap .reel-caption,
.pada-gelap .film figcaption{
 background:rgba(10,18,26,.55);color:var(--hull);
}

/* --- 23. Rekaman yang terlalu ramai --------------------------
   Adegan pelabuhan berisi langit terang dan lambung gelap dalam
   satu bidang: diukur, tidak ada warna tinta yang mencapai 3:1
   di seluruh blok teks, baik gelap maupun terang. Alas panel
   tetap 5% seperti bagian lain, tetapi di sini ditambah selubung
   gradasi setempat -- hanya di belakang kalimatnya, tidak
   menutup rekaman. */
.pada-ramai .film-copy{
 background:
  /* Gradasinya meluruh hanya di sepersepuluh terakhir. Sebelumnya ia sudah
     habis di tengah blok, jadi sepertiga kanan kalimatnya kembali duduk di
     atas rekaman telanjang dan kontrasnya jatuh. */
  linear-gradient(90deg,rgba(247,251,253,.9) 0%,rgba(247,251,253,.88) 82%,rgba(247,251,253,0) 100%),
  rgba(247,251,253,.05);
}
