🎮ArcadeLab

METAL GEAR 2: SOLID SNAKE — Fascicolo Operativo

by PrismRider28
1045 lines74.8 KB
▶ Play
<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>METAL GEAR 2: SOLID SNAKE — Fascicolo Operativo</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Black+Ops+One&family=Courier+Prime:wght@400;700&family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400;1,6..72,500&display=swap" rel="stylesheet">
    <style>
        :root {
            --paper: #e9e0c8;
            --paper-2: #ddd1ab;
            --ink: #2a2318;
            --ink-soft: #5a4f3a;
            --desk: #14150f;
            --desk-2: #1c2015;
            --olive: #57612c;
            --olive-dark: #39401e;
            --stamp: #8a3128;
            --amber: #e9a83e;
            --amber-dim: #a97a2e;
            --screen: #0e0f0a;
            --line: #b7924a;
        }
        * {
            box-sizing: border-box;
        }
        html {
            scroll-behavior: smooth;
        }
        @media (prefers-reduced-motion: reduce) {
            html {
                scroll-behavior: auto;
            }
            * {
                animation-duration: 0.001ms !important;
                animation-iteration-count: 1 !important;
                transition-duration: 0.001ms !important;
            }
        }
        body {
            margin: 0;
            background: radial-gradient(ellipse at 20% -10%, #23281a 0%, transparent 55%), var(--desk);
            color: var(--ink);
            font-family: 'Newsreader', serif;
            -webkit-font-smoothing: antialiased;
        }
        ::selection {
            background: var(--amber);
            color: #231b08;
        }
        #progress {
            position: fixed;
            top: 0;
            left: 0;
            height: 3px;
            width: 0%;
            background: linear-gradient(90deg, var(--amber-dim), var(--amber));
            z-index: 60;
        }
        nav.tabs {
            position: sticky;
            top: 0;
            z-index: 50;
            display: flex;
            align-items: center;
            gap: 0;
            background: var(--desk-2);
            border-bottom: 1px solid #000;
            overflow-x: auto;
            scrollbar-width: none;
            padding: 0 .5rem;
        }
        nav.tabs::-webkit-scrollbar {
            display: none;
        }
        .tab {
            flex: 0 0 auto;
            font-family: 'Courier Prime', monospace;
            font-weight: 700;
            font-size: .72rem;
            letter-spacing: .05em;
            color: #9aa07c;
            background: var(--olive-dark);
            border: none;
            padding: .6rem .85rem .5rem;
            margin: .5rem .12rem 0;
            cursor: pointer;
            clip-path: polygon(14% 0%, 86% 0%, 100% 100%, 0% 100%);
            transition: background .2s, color .2s, transform .15s;
        }
        .tab:hover {
            background: var(--olive);
            color: #eef0df;
        }
        .tab.active {
            background: var(--paper);
            color: var(--ink);
            transform: translateY(-2px);
        }
        .tab:focus-visible {
            outline: 2px dashed var(--amber);
            outline-offset: 2px;
        }
        .readout {
            font-family: 'Courier Prime', monospace;
            font-size: .68rem;
            color: var(--amber-dim);
            white-space: nowrap;
            padding-right: .9rem;
            display: none;
        }
        @media(min-width:720px) {
            .readout {
                display: block;
            }
        }
        main.sheet {
            position: relative;
            max-width: 760px;
            margin: 2.4rem auto 4rem;
            background: radial-gradient(ellipse at top left, rgba(255, 255, 255, .35), transparent 55%), radial-gradient(ellipse at bottom right, rgba(0, 0, 0, .06), transparent 60%), var(--paper);
            box-shadow: 0 30px 70px rgba(0, 0, 0, .55), 0 2px 0 rgba(0, 0, 0, .2);
            padding: 0 0 3rem;
        }
        @media(max-width:800px) {
            main.sheet {
                margin: 1rem auto 3rem;
            }
        }
        .cover {
            position: relative;
            text-align: center;
            padding: 3.4rem 1.6rem 2.6rem;
            border-bottom: 2px solid var(--ink);
            overflow: hidden;
        }
        .radar {
            position: absolute;
            top: 14px;
            right: 14px;
            width: 110px;
            height: 110px;
            opacity: .28;
            pointer-events: none;
        }
        .radar .sweep {
            transform-origin: 55px 55px;
            animation: spin 6s linear infinite;
        }
        @keyframes spin {
            to {
                transform: rotate(360deg);
            }
        }
        .eyebrow {
            font-family: 'Courier Prime', monospace;
            font-size: .72rem;
            letter-spacing: .14em;
            color: var(--ink-soft);
            text-transform: uppercase;
            margin: 0 0 1.1rem;
        }
        .cover h1 {
            font-family: 'Black Ops One', system-ui;
            font-weight: 400;
            line-height: 1.05;
            letter-spacing: .02em;
            font-size: clamp(2rem, 7vw, 3.4rem);
            margin: 0;
            color: var(--ink);
        }
        .cover h1 span {
            display: block;
            font-size: .62em;
            color: var(--stamp);
            margin-top: .35rem;
        }
        .cover .subtitle {
            font-family: 'Newsreader', serif;
            font-style: italic;
            font-size: 1.25rem;
            color: var(--ink-soft);
            margin: 1.1rem 0 0;
        }
        .meta-row {
            margin-top: 1.6rem;
            display: flex;
            flex-wrap: wrap;
            gap: .5rem;
            justify-content: center;
        }
        .meta-row span {
            font-family: 'Courier Prime', monospace;
            font-size: .66rem;
            letter-spacing: .04em;
            border: 1px solid var(--ink-soft);
            padding: .3rem .55rem;
            color: var(--ink-soft);
        }
        .stamp {
            position: absolute;
            top: 2.6rem;
            left: 50%;
            transform: translateX(-50%) rotate(-9deg);
            border: 3px solid var(--stamp);
            color: var(--stamp);
            font-family: 'Black Ops One', system-ui;
            font-size: .85rem;
            letter-spacing: .18em;
            padding: .35rem .8rem;
            opacity: .85;
            animation: stampIn .55s cubic-bezier(.2, 1.4, .4, 1) both;
        }
        @keyframes stampIn {
            0% {
                transform: translateX(-50%) rotate(-9deg) scale(2.6);
                opacity: 0;
            }
            60% {
                opacity: .9;
            }
            100% {
                transform: translateX(-50%) rotate(-9deg) scale(1);
                opacity: .85;
            }
        }
        .foreword {
            max-width: 52ch;
            margin: 1.8rem auto 0;
            font-size: .98rem;
            color: var(--ink-soft);
            line-height: 1.6;
        }
        .act {
            display: flex;
            align-items: center;
            gap: 1rem;
            padding: 2.2rem 1.8rem;
            margin: 0;
        }
        .act .bars {
            flex: 0 0 auto;
            display: flex;
            gap: 3px;
        }
        .act .bars i {
            display: block;
            width: 6px;
            height: 22px;
            background: var(--ink);
        }
        .act .bars i:nth-child(2) {
            height: 14px;
            margin-top: 8px;
        }
        .act .bars i:nth-child(3) {
            height: 18px;
            margin-top: 4px;
        }
        .act h3 {
            font-family: 'Black Ops One', system-ui;
            font-weight: 400;
            font-size: 1rem;
            letter-spacing: .06em;
            color: var(--ink);
            margin: 0;
        }
        .act p {
            font-family: 'Courier Prime', monospace;
            font-size: .7rem;
            color: var(--ink-soft);
            margin: .15rem 0 0;
        }
        .act::after {
            content: "";
            flex: 1 1 auto;
            height: 2px;
            background: repeating-linear-gradient(90deg, var(--ink) 0 10px, transparent 10px 16px);
            opacity: .35;
        }
        .page {
            padding: 2.4rem 1.8rem 0;
            opacity: 0;
            transform: translateY(16px);
            transition: opacity .6s ease, transform .6s ease;
        }
        .page.in-view {
            opacity: 1;
            transform: translateY(0);
        }
        .page-head {
            display: flex;
            align-items: baseline;
            gap: 1rem;
            border-bottom: 1px solid var(--ink-soft);
            padding-bottom: .7rem;
            margin-bottom: 1.3rem;
        }
        .page-num {
            font-family: 'Black Ops One', system-ui;
            font-size: 2.1rem;
            color: var(--stamp);
            line-height: 1;
            opacity: .85;
        }
        .page-eyebrow {
            font-family: 'Courier Prime', monospace;
            font-size: .68rem;
            letter-spacing: .06em;
            color: var(--ink-soft);
            text-transform: uppercase;
            margin: 0 0 .2rem;
        }
        .page-title {
            font-family: 'Newsreader', serif;
            font-style: italic;
            font-weight: 600;
            font-size: 1.55rem;
            margin: 0;
            color: var(--ink);
        }
        .page-body {
            max-width: 62ch;
        }
        .page-body p {
            font-size: 1.06rem;
            line-height: 1.78;
            margin: 0 0 1.05em;
            color: var(--ink);
        }
        .page-body p:first-of-type::first-letter {
            font-family: 'Black Ops One', system-ui;
            font-size: 2.6rem;
            float: left;
            line-height: .8;
            padding: .08em .1em 0 0;
            color: var(--stamp);
        }
        .portrait-wrap {
            display: inline-block;
            vertical-align: middle;
            margin: 0 .45rem;
            text-align: center;
            position: relative;
        }
        .portrait-wrap canvas {
            display: block;
            width: 64px;
            height: 96px;
            image-rendering: pixelated;
            border: 1px solid var(--ink-soft);
            background: var(--screen);
            box-shadow: 0 2px 4px rgba(0, 0, 0, .25);
        }
        .portrait-wrap .caption {
            font-family: 'Courier Prime', monospace;
            font-size: .52rem;
            color: var(--ink-soft);
            margin-top: .1rem;
            letter-spacing: .02em;
            line-height: 1.2;
            max-width: 64px;
        }
        .portrait-left {
            float: left;
            margin: .3rem 1rem .3rem 0;
        }
        .portrait-right {
            float: right;
            margin: .3rem 0 .3rem 1rem;
        }
        .portrait-center {
            display: block;
            margin: .8rem auto;
            text-align: center;
        }
        .portrait-center .portrait-wrap {
            display: inline-block;
            margin: 0 .6rem;
        }
        .clearfix::after {
            content: "";
            display: table;
            clear: both;
        }
        .intel-note {
            max-width: 62ch;
            margin: 1.6rem auto 1.9rem;
            background: var(--paper-2);
            border: 1px dashed var(--ink-soft);
            padding: 1rem 1.1rem 1.05rem 1rem;
            position: relative;
            font-family: 'Courier Prime', monospace;
            font-size: .85rem;
            line-height: 1.6;
            color: var(--ink-soft);
        }
        .intel-note.r1 {
            transform: rotate(-1.1deg);
        }
        .intel-note.r2 {
            transform: rotate(1deg);
        }
        .intel-note.r3 {
            transform: rotate(-.6deg);
        }
        .intel-pin {
            position: absolute;
            top: -10px;
            left: 22px;
            color: var(--olive-dark);
            background: var(--paper);
            border-radius: 50%;
            padding: 2px;
        }
        .intel-label {
            display: block;
            font-weight: 700;
            letter-spacing: .08em;
            color: var(--ink);
            font-size: .7rem;
            margin-bottom: .4rem;
        }
        .codec {
            max-width: 62ch;
            margin: 1.7rem auto 1.9rem;
            background: var(--screen);
            border: 1px solid #000;
            box-shadow: inset 0 0 0 1px rgba(233, 168, 62, .15);
            padding: .9rem 1.1rem 1rem;
        }
        .codec-top {
            display: flex;
            justify-content: space-between;
            align-items: center;
            font-family: 'Courier Prime', monospace;
            font-size: .65rem;
            color: var(--amber-dim);
            letter-spacing: .08em;
            margin-bottom: .55rem;
            border-bottom: 1px dotted rgba(233, 168, 62, .3);
            padding-bottom: .4rem;
        }
        .codec-top .dot {
            display: inline-block;
            width: 6px;
            height: 6px;
            border-radius: 50%;
            background: var(--amber);
            margin-right: .4rem;
            animation: blink 1.6s ease-in-out infinite;
        }
        @keyframes blink {
            0%,
            100% {
                opacity: 1;
            }
            50% {
                opacity: .25;
            }
        }
        .codec-line {
            font-family: 'Courier Prime', monospace;
            font-size: .92rem;
            line-height: 1.55;
            color: var(--amber);
            margin: 0 0 .5rem;
        }
        .codec-line:last-child {
            margin-bottom: 0;
        }
        .codec-line b {
            color: #f3c877;
            letter-spacing: .03em;
        }
        .refgrid {
            display: grid;
            gap: .7rem;
            max-width: 62ch;
            margin: 0 auto;
        }
        .refcard {
            border-left: 4px solid var(--olive);
            background: var(--paper-2);
            padding: .75rem .9rem;
            font-size: .92rem;
            line-height: 1.55;
        }
        .refcard b {
            color: var(--stamp);
            font-style: normal;
        }
        .caseclosed {
            text-align: center;
            padding: 2.6rem 1.5rem 1rem;
            margin-top: 1rem;
        }
        .caseclosed .bigstamp {
            display: inline-block;
            border: 3px solid var(--ink);
            color: var(--ink);
            font-family: 'Black Ops One', system-ui;
            font-size: 1.1rem;
            letter-spacing: .14em;
            padding: .5rem 1.1rem;
            transform: rotate(-4deg);
            opacity: .8;
        }
        .caseclosed p {
            font-style: italic;
            color: var(--ink-soft);
            margin-top: 1.3rem;
        }
        #top-btn {
            position: fixed;
            right: 1.1rem;
            bottom: 1.1rem;
            z-index: 55;
            width: 2.6rem;
            height: 2.6rem;
            background: var(--olive-dark);
            border: 1px solid #000;
            color: #dfe3cd;
            font-family: 'Courier Prime', monospace;
            font-size: 1rem;
            cursor: pointer;
            opacity: 0;
            pointer-events: none;
            transition: opacity .3s;
        }
        #top-btn.show {
            opacity: .9;
            pointer-events: auto;
        }
        #top-btn:hover {
            background: var(--olive);
        }
        #top-btn:focus-visible {
            outline: 2px dashed var(--amber);
            outline-offset: 2px;
        }
        .community-quote {
            font-style: italic;
            color: var(--stamp);
            border-left: 3px solid var(--olive);
            padding-left: .8rem;
            margin: 1.2rem 0;
        }
    </style>
</head>
<body>
    <div id="progress"></div>
    <nav class="tabs" id="tabs" aria-label="Indice del fascicolo">
        <span class="readout" id="readout">// posizione: copertina</span>
    </nav>
    <main class="sheet">
        <header class="cover">
            <svg class="radar" viewBox="0 0 110 110" aria-hidden="true">
                <circle cx="55" cy="55" r="50" fill="none" stroke="#57612c" stroke-width="1" />
                <circle cx="55" cy="55" r="34" fill="none" stroke="#57612c" stroke-width="1" />
                <circle cx="55" cy="55" r="18" fill="none" stroke="#57612c" stroke-width="1" />
                <line x1="5" y1="55" x2="105" y2="55" stroke="#57612c" stroke-width="1" />
                <line x1="55" y1="5" x2="55" y2="105" stroke="#57612c" stroke-width="1" />
                <g class="sweep">
                    <line x1="55" y1="55" x2="55" y2="5" stroke="#e9a83e" stroke-width="2" />
                </g>
            </svg>
            <div class="stamp">TOP SECRET</div>
            <p class="eyebrow" style="margin-top:3.4rem;">Fascicolo operativo · FOXHOUND Intelligence · Uso riservato</p>
            <h1>METAL GEAR 2<span>SOLID SNAKE</span></h1>
            <p class="subtitle">La caduta di Zanzibar Land</p>
            <div class="portrait-center">
                <div class="portrait-wrap">
                    <canvas id="portrait-snake" width="64" height="96" aria-label="Ritratto pixel-art di Solid Snake"></canvas>
                    <span class="caption">Solid Snake</span>
                </div>
            </div>
            <div class="meta-row">
                <span>Operazione Intrude F104</span>
                <span>Zanzibar Land, 1999</span>
                <span>Il vero prototipo di MGS1</span>
            </div>
            <p class="foreword">Il dossier che segue ricostruisce, missione per missione, gli eventi di Metal Gear 2: Solid Snake — la naturale prosecuzione del fascicolo su Outer Heaven, e l'ultimo passo prima di Shadow Moses. <strong>Occhio alle note a margine: nascondono le chicche più sorprendenti di questo capolavoro 8-bit.</strong></p>
        </header>

        <section class="page" id="prologo" data-tab="PRO" data-title="Prologo — Un mondo senza guerre, quasi">
            <div class="page-head">
                <span class="page-num">00</span>
                <div>
                    <p class="page-eyebrow">Contesto globale — 1999</p>
                    <h2 class="page-title">Un mondo senza guerre, quasi</h2>
                </div>
            </div>
            <div class="page-body">
                <p>Il mondo respira per la prima volta da decenni senza il fiato sul collo della guerra nucleare. Le due superpotenze hanno abbassato le armi, i trattati si moltiplicano, e sembra davvero che l'umanità stia imparando a convivere in pace. Ma la pace, si sa, ha un prezzo: il petrolio scarseggia. Le riserve mondiali si prosciugano molto più in fretta del previsto, e senza energia nemmeno la pace regge a lungo.</p>
                <p>È in questo scenario fragile che un biologo cecoslovacco, il dottor Kio Marv, annuncia una scoperta che potrebbe cambiare tutto: OILIX, un microrganismo capace di produrre petrolio come scarto del proprio metabolismo. Un pozzo infinito, vivente, silenzioso. Marv si mette in viaggio verso una conferenza negli Stati Uniti per presentarlo al mondo.</p>
                <p>Non ci arriverà mai. A rapirlo sono gli agenti di Zanzibar Land, una giovane nazione fortificata dell'Asia centrale, già in possesso — unica al mondo — di testate nucleari sottratte agli arsenali in fase di smantellamento. Con Marv nelle loro mani, Zanzibar Land avrebbe in pugno sia le armi che l'energia: il potere assoluto.</p>
                <p>FOXHOUND non può restare a guardare. E il suo nuovo comandante, Roy Campbell, sa esattamente chi mandare.</p>
            </div>
            <aside class="intel-note r1">
                <svg class="intel-pin" width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12.5V6a3 3 0 0 1 6 0v9a5 5 0 0 1-10 0V7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" /></svg>
                <span class="intel-label">Kojima conferma: la vera invenzione non è lo stealth</span>
                «La più grande innovazione di Metal Gear, perfezionata qui, è il radio-transceiver interattivo. Permette di raccontare la storia in parallelo all'azione: il giocatore non si sente mai distaccato dal dramma perché tutto accade "in diretta". Molti sparatutto moderni l'hanno copiata, ma all'epoca tutti lodavano solo lo stealth.»
            </aside>
        </section>

        <div class="act">
            <div class="bars"><i></i><i></i><i></i></div>
            <div>
                <h3>ATTO I — L'infiltrazione</h3>
                <p>Zanzibar Land, Edificio Primo</p>
            </div>
        </div>

        <section class="page" id="cap1" data-tab="01" data-title="Cap. 1 — Richiamato in servizio">
            <div class="page-head">
                <span class="page-num">01</span>
                <div>
                    <p class="page-eyebrow">Base FOXHOUND — Briefing</p>
                    <h2 class="page-title">Richiamato in servizio</h2>
                </div>
            </div>
            <div class="page-body clearfix">
                <div class="portrait-wrap portrait-right">
                    <canvas id="portrait-miller" width="64" height="96" aria-label="Ritratto pixel-art di Master Miller"></canvas>
                    <span class="caption">Master Miller</span>
                </div>
                <p>Solid Snake si era lasciato Outer Heaven alle spalle. Aveva sperato di essersene lasciato alle spalle anche gli incubi, ma quando la chiamata arriva, non esita.</p>
                <p>"Operazione Intrude F104", la definisce Campbell al briefing. Obiettivo: infiltrarsi a Zanzibar Land, rintracciare e salvare il dottor Marv, impedire che l'OILIX cada nelle mani sbagliate. Ad assisterlo via radio, oltre a Campbell, ci sono volti quasi familiari: Master Miller, veterano delle tecniche di sopravvivenza, George Kasler, esperto di armi e mercenari, e Johan Jacobsen, uno zoologo che si rivelerà utile in modi che Snake non si aspetta.</p>
                <p>Sul campo, Snake non è solo. Un'agente sotto copertura, Holly White, si è infiltrata settimane prima fingendosi giornalista. È lei la prima voce amica che sente crepitare dalla radio non appena mette piede nella base.</p>
            </div>
            <div class="codec">
                <div class="codec-top"><span><span class="dot"></span>trasmissione in entrata</span><span>freq 140.85</span></div>
                <p class="codec-line"><b>CAMPBELL:</b> Snake, il mondo non ti ha dimenticato. Abbiamo bisogno di te un'ultima volta.</p>
            </div>
            <aside class="intel-note r2">
                <svg class="intel-pin" width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12.5V6a3 3 0 0 1 6 0v9a5 5 0 0 1-10 0V7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" /></svg>
                <span class="intel-label">Miller sfonda la quarta parete</span>
                Il maestro di sopravvivenza non si limita a darti consigli bellici: ti ricorda di non giocare entro 30 minuti dai pasti, di non sputare in pubblico e di aspettare la digestione per non avere riflessi lenti. Puro Kojima.
            </aside>
        </section>

        <section class="page" id="cap2" data-tab="02" data-title="Cap. 2 — Il ninja nero">
            <div class="page-head">
                <span class="page-num">02</span>
                <div>
                    <p class="page-eyebrow">Edificio Primo — Terzo piano</p>
                    <h2 class="page-title">Il ninja nero</h2>
                </div>
            </div>
            <div class="page-body">
                <p>Zanzibar Land non è Outer Heaven. Le guardie qui non si limitano a fissare dritto davanti a sé: girano la testa, pattugliano più stanze, imparano a riconoscere i rumori. Ogni passo di troppo può tradire Snake. Ma anche il rumore, usato bene, diventa un'arma: un tonfo nel corridoio sbagliato, e una guardia lascia il proprio posto.</p>
                <p>Grazie al segnale di un trasmettitore nascosto in un dente del dottor Marv, Snake raggiunge il terzo piano. Ad attenderlo non trova lo scienziato, ma una figura in nero, rapida come un'ombra, che si muove tra le travi come se la gravità fosse un suggerimento.</p>
                <p>Il combattimento è breve e brutale. Quando la maschera cade, Snake resta a fissare un volto che non si aspettava di rivedere: Kyle Schneider, l'ex leader della resistenza di Outer Heaven.</p>
                <p>Schneider non porta rancore. Racconta a Snake ciò che è successo dopo la distruzione della fortezza: il bombardamento NATO, i civili, i bambini orfani di guerra lasciati morire tra le macerie perché nessuno voleva più occuparsene. E racconta di come qualcuno sia arrivato a salvarlo, offrendogli una nuova bandiera sotto cui vivere: Zanzibar Land. Prima di congedarsi, indica a Snake la strada: un uomo con il basco verde, che sorveglia una cella. Seguitelo, dice, e vi porterà dal dottor Marv.</p>
            </div>
            <aside class="intel-note r3">
                <svg class="intel-pin" width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12.5V6a3 3 0 0 1 6 0v9a5 5 0 0 1-10 0V7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" /></svg>
                <span class="intel-label">Il Black Ninja della NASA (sì, avete letto bene)</span>
                La tuta è bianca, dice di appartenere a un'unità anti-extraterrestri, si teletrasporta e lancia shuriken. E quando muore esplode. Puro nonsense kojimiano, eppure perfettamente in tono con la follia della saga.
            </aside>
        </section>

        <section class="page" id="cap3" data-tab="03" data-title="Cap. 3 — Il dottor Madnar">
            <div class="page-head">
                <span class="page-num">03</span>
                <div>
                    <p class="page-eyebrow">Edificio Primo — Cella di detenzione</p>
                    <h2 class="page-title">Il dottor Madnar</h2>
                </div>
            </div>
            <div class="page-body clearfix">
                <div class="portrait-wrap portrait-right">
                    <canvas id="portrait-madnar" width="64" height="96" aria-label="Ritratto pixel-art del Dr. Madnar"></canvas>
                    <span class="caption">Dr. Madnar</span>
                </div>
                <p>Pedinare la guardia dal basco verde porta Snake fuori, e poi dentro un edificio silenzioso. Nessuna guardia in vista, solo il suono di colpi ritmati contro una parete: un codice.</p>
                <p>Decifrato il messaggio, Snake si trova davanti un volto che ricorda fin troppo bene: il dottor Drago Pettrovich Madnar, il progettista del primo Metal Gear. Racconta di essere stato catturato mentre viaggiava insieme a Marv, suo vecchio amico d'accademia, e di essere tenuto in vita per un unico motivo: Zanzibar Land vuole un nuovo Metal Gear, e lui è l'unico che sa costruirlo. "Metal Gear D", lo chiama — un'evoluzione del progetto originale, già completata, con l'obiettivo di realizzarne presto una versione più leggera per la produzione in serie.</p>
                <p>Quando Snake gli chiede chi ci sia dietro tutto questo, la risposta arriva secca: "Big Boss." Sopravvissuto alla distruzione di Outer Heaven, l'ex comandante di FOXHOUND ha ricostruito il proprio impero da zero, radunando mercenari da ogni angolo del mondo.</p>
                <p>Madnar non può muoversi — un muro li separa fisicamente — ma indica a Snake la direzione: il dottor Marv si trova in una torre, a qualche chilometro di distanza.</p>
            </div>
        </section>

        <section class="page" id="cap4" data-tab="04" data-title="Cap. 4 — Verso la torre">
            <div class="page-head">
                <span class="page-num">04</span>
                <div>
                    <p class="page-eyebrow">Palude e Torre di comunicazione</p>
                    <h2 class="page-title">Verso la torre</h2>
                </div>
            </div>
            <div class="page-body">
                <p>La strada per la torre non è mai libera. Attraverso una palude, Snake incrocia Running Man, ex velocista olimpico caduto in disgrazia dopo uno scandalo di doping e finito tra le fila di un gruppo terroristico, dove la sua velocità è diventata uno strumento per piazzare esplosivi. Lo scontro è rapido quanto lui: Snake ha la meglio.</p>
                <p>Poco dopo, il cielo si oscura di un'ombra rotante: un elicottero Hind D lo attacca dall'alto. Snake trova riparo, recupera dei missili Stinger dall'arsenale della base e lo abbatte, proprio come aveva già fatto una volta, a Outer Heaven.</p>
                <p>Raggiunta la base della torre, la radio si accende con la voce di Holly. È stata scoperta: la sua copertura è saltata ed è prigioniera, in un settore sotterraneo di cui conosce solo pochi indizi. Seguendo quegli indizi frammentari, Snake la libera. Lei lo ringrazia col suo solito tono scherzoso, poi torna seria: il dottor Marv ha mandato un messaggio tramite un piccione viaggiatore, volato però proprio sull'ascensore della torre. Bisogna trovarlo, e in fretta.</p>
            </div>
            <div class="codec">
                <div class="codec-top"><span><span class="dot"></span>trasmissione in entrata</span><span>freq 140.15</span></div>
                <p class="codec-line"><b>HOLLY:</b> Snake... mi hanno scoperta. Sono agli arresti, da qualche parte sotto la torre.</p>
            </div>
            <aside class="intel-note r1">
                <svg class="intel-pin" width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12.5V6a3 3 0 0 1 6 0v9a5 5 0 0 1-10 0V7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" /></svg>
                <span class="intel-label">Running Man: il boss che "corre"</span>
                Il suo piano geniale è riempire la stanza di gas e fare jogging. Lo uccidi piazzando mine sul suo percorso. Un boss che ha fatto la storia del nonsense videoludico.
            </aside>
        </section>

        <div class="act">
            <div class="bars"><i></i><i></i><i></i></div>
            <div>
                <h3>ATTO II — Il cuore di Zanzibar Land</h3>
                <p>La Torre e i sotterranei della fortezza</p>
            </div>
        </div>

        <section class="page" id="cap5" data-tab="05" data-title="Cap. 5 — Il messaggio del piccione">
            <div class="page-head">
                <span class="page-num">05</span>
                <div>
                    <p class="page-eyebrow">Torre — Piani superiori</p>
                    <h2 class="page-title">Il messaggio del piccione</h2>
                </div>
            </div>
            <div class="page-body">
                <p>Salire la torre significa affrontare Red Blaster, un demolitore addestrato nello Spetsnaz che si arrampica tra le sporgenze lanciando granate come se fossero saluti. Anche lui cade, e Snake continua a salire, piano dopo piano, fino al tetto.</p>
                <p>Lì, finalmente, il piccione. Recuperato il messaggio, Snake scopre la frequenza radio segreta del dottor Marv. Lo chiama, e per un attimo sembra fatta. Poi Marv risponde. In ceco.</p>
                <p>Nessuno del team riesce a tradurre, finché Madnar non suggerisce un nome: Gustava Heffner, un'agente della StB — la polizia segreta cecoslovacca — infiltrata anche lei nella base, in uniforme nemica. È l'unica che parla la lingua di Marv. Trovarla non sarà semplice: per riconoscerla, Snake dovrà individuare l'unica soldatessa nella base, e aspettare che si allontani verso il bagno delle donne.</p>
            </div>
            <aside class="intel-note r2">
                <svg class="intel-pin" width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12.5V6a3 3 0 0 1 6 0v9a5 5 0 0 1-10 0V7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" /></svg>
                <span class="intel-label">Il piccione troll</span>
                Un esperto ti dice che i piccioni fuggono se ti muovi, e che vanno attirati con piselli e patate. La soluzione reale è corrergli dritto addosso. Un troll perfetto di Kojima, che si prende gioco del giocatore e delle guide.
            </aside>
        </section>

        <section class="page" id="cap6" data-tab="06" data-title="Cap. 6 — Gustava">
            <div class="page-head">
                <span class="page-num">06</span>
                <div>
                    <p class="page-eyebrow">Torre — Blocco servizi</p>
                    <h2 class="page-title">Gustava</h2>
                </div>
            </div>
            <div class="page-body">
                <p>Individuata la soldatessa sospetta, Snake attende, e alla fine la incrocia proprio dove si aspettava. Gustava Heffner non è una guardia qualunque: un tempo pattinatrice su ghiaccio di livello olimpico, oggi è la guardia del corpo — e traduttrice di fiducia — del dottor Madnar.</p>
                <p>Messa in comunicazione con Marv, Gustava traduce: lo scienziato si trova dall'altra parte della base, oltre un profondo crepaccio. Prima ancora di muoversi, guida Snake fino alla cella dove è rinchiuso Madnar, e lo libera. I tre si mettono in cammino insieme.</p>
                <p>Lungo la strada, mentre Madnar si allontana per qualche minuto — dice di dover sbrigare "un certo affare" — Snake e Gustava si fermano a parlare. È in quella pausa che lei si apre: racconta della madre, sopravvissuta all'orrore della Seconda guerra mondiale fuggendo attraverso le fogne di Varsavia, e di un amore perduto, un uomo dell'Ovest di nome Frank Hunter. Aveva chiesto asilo politico per stargli vicino. Le fu negato. Non lo rivide mai più.</p>
                <p>Snake ascolta. Non ha una storia simile da raccontare — non ha famiglia, dice, solo il campo di battaglia — ma qualcosa, in quel momento, li avvicina. Poi Madnar torna, e i tre riprendono il cammino verso un ponte sospeso sul crepaccio.</p>
            </div>
        </section>

        <section class="page" id="cap7" data-tab="07" data-title="Cap. 7 — Il ponte">
            <div class="page-head">
                <span class="page-num">07</span>
                <div>
                    <p class="page-eyebrow">Il ponte sul crepaccio</p>
                    <h2 class="page-title">Il ponte</h2>
                </div>
            </div>
            <div class="page-body">
                <p>Il ponte regge un solo peso alla volta. Madnar attraversa per primo. Tocca a Gustava. A metà del passaggio, un missile lo centra in pieno. Il ponte esplode, Gustava precipita, mortalmente ferita. Prima di spirare, affida a Snake una spilla — l'ultima cosa che aveva — e un ultimo pensiero, un nome sussurrato: Frank.</p>
                <p>Sull'altro lato, tra il fumo, emerge una sagoma enorme: Metal Gear D, pilotato da un uomo che Snake non si sarebbe mai aspettato di rivedere in quella posizione. Gray Fox, il compagno che un tempo aveva salvato da Outer Heaven, ora al servizio di Big Boss, trascina via Madnar tra le guardie e invita Snake a tornarsene a casa. Snake rifiuta. Non ha scelta: deve proseguire.</p>
            </div>
            <aside class="intel-note r3">
                <svg class="intel-pin" width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12.5V6a3 3 0 0 1 6 0v9a5 5 0 0 1-10 0V7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" /></svg>
                <span class="intel-label">La chiave di memoria di forma (e il backtracking infernale)</span>
                La spilla di Gustava è una lega a memoria di forma: va portata in una sauna al polo opposto della mappa, congelata, e poi usata come chiave. Tutti odiano quella parte, ma è diventata iconica. Il backtracking è fuori controllo.
            </aside>
        </section>

        <section class="page" id="cap8" data-tab="08" data-title="Cap. 8 — Attraverso il baratro">
            <div class="page-head">
                <span class="page-num">08</span>
                <div>
                    <p class="page-eyebrow">Settore centrale — Fortezza interna</p>
                    <h2 class="page-title">Attraverso il baratro</h2>
                </div>
            </div>
            <div class="page-body">
                <p>Trovata un'altra via per superare il crepaccio — un deltaplano recuperato grazie ai consigli di Holly — Snake continua ad addentrarsi nel cuore di Zanzibar Land. Il percorso è pattugliato da avversari sempre più letali: i Four Horsemen, un'unità d'assassini scelti tra i ranghi di SAS, GSG-9 e forze speciali subacquee, specializzati in omicidi in spazi ristretti; Jungle Evil, un veterano di guerriglia la cui mimetica inganna persino i radar; e infine Night Fright, l'ultimo superstite di un'unità di guerriglieri nordvietnamiti, invisibile a occhio nudo — l'unico modo per stanarlo è affidarsi all'udito, ascoltando i suoi passi.</p>
                <p>Uno dopo l'altro, cadono tutti. Durante il tragitto, Snake incontra anche i bambini che vivono nella base — orfani di guerra recuperati da Big Boss — pronti a offrire informazioni preziose, purché nessuno faccia loro del male.</p>
            </div>
            <div class="codec">
                <div class="codec-top"><span><span class="dot"></span>trasmissione non identificata</span><span>freq scramble</span></div>
                <p class="codec-line"><b>MITTENTE SCONOSCIUTO:</b> Attento. Più avanti c'è un campo minato. Fatti guidare... da un tuo ammiratore.</p>
            </div>
        </section>

        <section class="page" id="cap9" data-tab="09" data-title="Cap. 9 — La verità del dottor Madnar">
            <div class="page-head">
                <span class="page-num">09</span>
                <div>
                    <p class="page-eyebrow">Cella del dottor Marv</p>
                    <h2 class="page-title">La verità del dottor Madnar</h2>
                </div>
            </div>
            <div class="page-body">
                <p>Superate le ultime difese, Snake raggiunge finalmente la stanza dove dovrebbe trovarsi il dottor Marv. Arriva troppo tardi. Marv è morto, e accanto al suo corpo c'è Madnar.</p>
                <p>È Holly, via radio, a far crollare tutto: le sue indagini con la CIA hanno rivelato che, dopo Outer Heaven, la comunità scientifica aveva bollato Madnar come un pazzo, deridendo le sue teorie e cacciandolo dai propri ranghi. Umiliato e rifiutato dall'Ovest che pure aveva servito, Madnar si è offerto a Zanzibar Land in cambio di una cosa sola: la possibilità di continuare il proprio lavoro su Metal Gear.</p>
                <p>Messo alle strette, Madnar confessa tutto. È stato lui a far rapire, indirettamente, anche Marv; lui a ucciderlo per il suo rifiuto di condividere i segreti dell'OILIX; lui a contattare Gray Fox proprio durante quella pausa sul sentiero, condannando Gustava. Prima di essere fermato da Snake, rivela un'ultima cosa: Marv aveva nascosto una copia di riserva dei suoi dati in una cartuccia MSX, chiusa in un armadietto che solo la spilla di Gustava può aprire.</p>
                <p>Poi si avventa su Snake, nel disperato tentativo di impedirgli di portare a termine la missione. Ma è un uomo ormai esausto, e Snake ha la meglio. Recuperata la cartuccia grazie alla spilla — trasformata in chiave dal freddo — la missione sembra quasi compiuta. Quasi.</p>
            </div>
            <aside class="intel-note r1">
                <svg class="intel-pin" width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12.5V6a3 3 0 0 1 6 0v9a5 5 0 0 1-10 0V7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" /></svg>
                <span class="intel-label">Quarta parete infranta: la cartuccia MSX</span>
                Marv ha salvato tutto su una cartuccia per il "computer più venduto al mondo", l'MSX. I personaggi commentano: "Che razza di fanatico gioca ancora con un MSX?". Kojima rompe la quarta parete con classe.
            </aside>
        </section>

        <div class="act">
            <div class="bars"><i></i><i></i><i></i></div>
            <div>
                <h3>ATTO III — Fantasmi</h3>
                <p>Hangar sotterraneo e sala di comando</p>
            </div>
        </div>

        <section class="page" id="cap10" data-tab="10" data-title="Cap. 10 — Metal Gear D">
            <div class="page-head">
                <span class="page-num">10</span>
                <div>
                    <p class="page-eyebrow">Hangar sotterraneo</p>
                    <h2 class="page-title">Metal Gear D</h2>
                </div>
            </div>
            <div class="page-body">
                <p>Il pavimento cede sotto i piedi di Snake, che precipita in un hangar sotterraneo. Ad attenderlo, imponente, Metal Gear D. Alla guida, Gray Fox.</p>
                <p>Ricordando ciò che Madnar gli aveva rivelato — l'armatura più sottile si trova sulle giunture delle gambe — Snake schiva raffiche e missili, aspettando il momento giusto per colpire. Un attacco, poi un altro. Le articolazioni cedono, il gigante meccanico crolla tra le fiamme.</p>
                <p>Dell'equipaggiamento di Snake, però, non resta quasi nulla: bruciato, disperso nell'esplosione. Dal fumo emerge Gray Fox, a mani nude, pronto per un ultimo scontro.</p>
            </div>
        </section>

        <section class="page" id="cap11" data-tab="11" data-title="Cap. 11 — Frank Jaeger">
            <div class="page-head">
                <span class="page-num">11</span>
                <div>
                    <p class="page-eyebrow">Camera del campo minato</p>
                    <h2 class="page-title">Frank Jaeger</h2>
                </div>
            </div>
            <div class="page-body clearfix">
                <div class="portrait-wrap portrait-left">
                    <canvas id="portrait-grayfox" width="64" height="96" aria-label="Ritratto pixel-art di Gray Fox"></canvas>
                    <span class="caption">Gray Fox</span>
                </div>
                <p>Il combattimento si sposta in una stanza disseminata di mine. Ogni passo può essere l'ultimo, per entrambi. È durante lo scontro che George Kasler, via radio, rivela a Snake il vero nome del suo avversario: Frank Jaeger — <em>Jäger</em>, "cacciatore" in tedesco, "Hunter" in inglese. Ed è così che Snake capisce: l'uomo che Gustava aveva amato e perduto era proprio lui. Gray Fox era Frank Hunter.</p>
                <p>Sconfitto, Gray Fox smette di combattere. Ammette di odiare la guerra tanto quanto Snake, ma spiega che uomini come lui — nati e cresciuti sul campo di battaglia — non saprebbero più vivere altrove. Big Boss gli ha salvato la vita due volte, e in cambio gli ha dato un motivo per esistere: combattere. È tutto ciò che conosce.</p>
                <p>Prima di morire, rivela un'ultima verità: è stato lui, per tutto il gioco, l'ammiratore misterioso che ha guidato Snake via radio, aiutandolo nei momenti più difficili. Un modo, forse, per farsi perdonare. Snake gli fa una promessa silenziosa: non diventerà mai come lui. Poi gli dice che, da qualche parte, Gustava lo sta aspettando.</p>
            </div>
            <aside class="intel-note r2">
                <svg class="intel-pin" width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12.5V6a3 3 0 0 1 6 0v9a5 5 0 0 1-10 0V7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" /></svg>
                <span class="intel-label">La tragedia di Gustava e Frank</span>
                Lei muore uccisa dal Metal Gear D, pilotato proprio dal suo amato Frank Jaeger. Un colpo al cuore che anticipa tutte le storie d'amore impossibili della saga. Molti recensori hanno ammesso di essersi commossi.
            </aside>
        </section>

        <section class="page" id="cap12" data-tab="12" data-title="Cap. 12 — Il signore di Zanzibar Land">
            <div class="page-head">
                <span class="page-num">12</span>
                <div>
                    <p class="page-eyebrow">Sala di comando di Big Boss</p>
                    <h2 class="page-title">Il signore di Zanzibar Land</h2>
                </div>
            </div>
            <div class="page-body clearfix">
                <div class="portrait-wrap portrait-right">
                    <canvas id="portrait-bigboss" width="64" height="96" aria-label="Ritratto pixel-art di Big Boss"></canvas>
                    <span class="caption">Big Boss</span>
                </div>
                <p>Nell'ultima stanza della base, una voce chiama Snake per nome. Big Boss, creduto morto, è vivo, ed è lui il vero architetto di Zanzibar Land.</p>
                <p>Senza armi — tutto l'equipaggiamento di Snake è andato distrutto nello scontro precedente — l'unica possibilità è improvvisare. Nella base ormai in fiamme, tra le stanze che Big Boss incendia inseguendolo, Snake raccoglie ciò che trova: un accendino, una bomboletta spray. Un lanciafiamme di fortuna, costruito dal nulla. Basta a fermarlo.</p>
                <p>Il discorso finale di Big Boss è agghiacciante: «Vi danno per scontati, io vi darò una guerra eterna». Usa i bambini soldato, che incontri nei corridoi a giocare e che lo chiamano "papà". Snake lo brucia, ma il peso delle sue parole resta.</p>
            </div>
            <div class="codec">
                <div class="codec-top"><span><span class="dot"></span>trasmissione in entrata</span><span>freq 140.85</span></div>
                <p class="codec-line"><b>BIG BOSS:</b> Snake, la guerra è l'unico posto dove uomini come noi possono esistere davvero. Io ho creato un paradiso per soldati.</p>
                <p class="codec-line"><b>SNAKE:</b> Non ci sarà nessun paradiso. Solo la fine del tuo incubo.</p>
            </div>
        </section>

        <section class="page" id="epilogo" data-tab="EPI" data-title="Epilogo — Un uomo libero">
            <div class="page-head">
                <span class="page-num">13</span>
                <div>
                    <p class="page-eyebrow">Punto d'estrazione</p>
                    <h2 class="page-title">Un uomo libero</h2>
                </div>
            </div>
            <div class="page-body">
                <p>Con l'OILIX al sicuro nella cartuccia MSX, Snake raggiunge Holly, ormai armata anch'essa, e insieme corrono verso il punto d'estrazione. Circondati, quasi senza munizioni, la situazione precipita — finché non arriva, all'ultimo secondo, l'elicottero di soccorso.</p>
                <p>Tornato alla base, Snake consegna la cartuccia a Campbell, che gli propone di rientrare ufficialmente in servizio. Snake rifiuta. Pensa a Gray Fox, a Gustava, ai bambini soldato. «Non diventerò come lui. La pace è l'unico modo per vivere in questo mondo.» Scaccia così gli incubi.</p>
                <p>Si torna a casa giusto in tempo per il Natale. Un tocco di umanità dopo l'inferno.</p>
            </div>
            <div class="codec">
                <div class="codec-top"><span><span class="dot"></span>trasmissione in entrata</span><span>freq 140.85</span></div>
                <p class="codec-line"><b>CAMPBELL:</b> Torna in servizio, Snake. FOXHOUND ha ancora bisogno di uomini come te.</p>
                <p class="codec-line"><b>SNAKE:</b> I miei incubi sono finiti, colonnello. Adesso sono un uomo libero.</p>
            </div>
        </section>

        <section class="page" id="dopo" data-tab="REF" data-title="Riferimenti incrociati — verso MGS1">
            <div class="page-head">
                <span class="page-num">R</span>
                <div>
                    <p class="page-eyebrow">Riferimenti incrociati — Fascicolo MGS1</p>
                    <h2 class="page-title">Dopo Zanzibar Land</h2>
                </div>
            </div>
            <div class="page-body">
                <p>Ora che hai anche questo capitolo, sei pronta per Metal Gear Solid — e ti accorgerai che Kojima non ha semplicemente "continuato" la storia: l'ha rispecchiata, quasi scena per scena. Qualche indizio da tenere d'occhio, senza spoiler sulla trama vera e propria:</p>
            </div>
            <div class="refgrid">
                <div class="refcard"><b>Freq 140.85 —</b> il colonnello Campbell risponde ancora a questa frequenza.</div>
                <div class="refcard"><b>La donna sotto copertura —</b> come Holly qui, in MGS ci sarà un personaggio femminile da salvare dopo che la sua identità viene scoperta, raggiungibile su una frequenza specifica.</div>
                <div class="refcard"><b>Il bagno delle donne —</b> lo stesso trucco per scovare una spia infiltrata torna identico.</div>
                <div class="refcard"><b>L'oggetto che cambia forma col calore —</b> la spilla di Gustava ha un gemello quasi perfetto.</div>
                <div class="refcard"><b>Sigarette, torri, ascensori, Hind D, l'ammiratore nel campo minato —</b> tutto questo ritornerà, con la stessa struttura ma un volto nuovo.</div>
            </div>

            <div class="refgrid" style="margin-top:1.8rem;">
                <div class="refcard"><b>Colonna sonora —</b> brani come Theme of Solid Snake, Zanzibar Breeze e Nightfall sono già classici. Molti sono stati riutilizzati nelle missioni VR di MGS1 e in Smash Bros.</div>
                <div class="refcard"><b>Critiche —</b> il backtracking è fuori controllo (specialmente per la chiave), e molti ammettono di aver avuto bisogno di una guida per codici morse e frequenze radio.</div>
            </div>

            <p class="eyebrow" style="margin-top:2rem;">La community ha deciso:</p>
            <div class="community-quote">«The true beginning of the Metal Gear series.»</div>
            <div class="community-quote">«It's like an 8-bit MGS1. The blueprint. You'll forget it's an 8-bit game.»</div>
            <div class="community-quote">«Metal Gear 2 is the father of MGS1.»</div>
            <div class="community-quote">«Depressing how miniscule the amount of 'AAA' action games that have come since have been designed this well.»</div>
        </section>

        <div class="portrait-center" style="margin-top:2.5rem; border-top:1px dashed var(--ink-soft); padding-top:2rem;">
            <p class="eyebrow" style="margin-bottom:1rem;">Schedario personaggi — MG2: Solid Snake</p>
            <div class="portrait-wrap">
                <canvas id="portrait-snake2" width="64" height="96" aria-label="Solid Snake"></canvas>
                <span class="caption">Solid Snake</span>
            </div>
            <div class="portrait-wrap">
                <canvas id="portrait-bigboss2" width="64" height="96" aria-label="Big Boss"></canvas>
                <span class="caption">Big Boss</span>
            </div>
            <div class="portrait-wrap">
                <canvas id="portrait-grayfox2" width="64" height="96" aria-label="Gray Fox"></canvas>
                <span class="caption">Gray Fox</span>
            </div>
            <div class="portrait-wrap">
                <canvas id="portrait-madnar2" width="64" height="96" aria-label="Dr. Madnar"></canvas>
                <span class="caption">Dr. Madnar</span>
            </div>
            <div class="portrait-wrap">
                <canvas id="portrait-miller2" width="64" height="96" aria-label="Master Miller"></canvas>
                <span class="caption">Master Miller</span>
            </div>
        </div>

        <footer class="caseclosed">
            <div class="bigstamp">FASCICOLO CHIUSO</div>
            <p>Buona lettura — e buona infiltrazione a Shadow Moses.</p>
        </footer>
    </main>

    <button id="top-btn" aria-label="Torna all'inizio del fascicolo">↑</button>

    <script>
        // build tabs
        const tabsNav = document.getElementById('tabs');
        const readout = document.getElementById('readout');
        const sections = Array.from(document.querySelectorAll('[data-tab]'));
        sections.forEach(sec => {
            const btn = document.createElement('button');
            btn.className = 'tab';
            btn.textContent = sec.dataset.tab;
            btn.title = sec.dataset.title;
            btn.setAttribute('aria-label', sec.dataset.title);
            btn.addEventListener('click', () => sec.scrollIntoView({ behavior: 'smooth', block: 'start' }));
            tabsNav.appendChild(btn);
        });
        const tabButtons = Array.from(tabsNav.querySelectorAll('.tab'));

        const observer = new IntersectionObserver((entries) => {
            entries.forEach(entry => { if (entry.isIntersecting) entry.target.classList.add('in-view'); });
        }, { threshold: 0.12 });
        sections.forEach(s => observer.observe(s));

        const activeObserver = new IntersectionObserver((entries) => {
            entries.forEach(entry => {
                if (entry.isIntersecting) {
                    const idx = sections.indexOf(entry.target);
                    tabButtons.forEach(b => b.classList.remove('active'));
                    if (tabButtons[idx]) tabButtons[idx].classList.add('active');
                    readout.textContent = '// posizione: ' + entry.target.dataset.title;
                }
            });
        }, { threshold: 0, rootMargin: '-45% 0px -50% 0px' });
        sections.forEach(s => activeObserver.observe(s));

        const progress = document.getElementById('progress');
        const topBtn = document.getElementById('top-btn');
        window.addEventListener('scroll', () => {
            const h = document.documentElement;
            const scrolled = (h.scrollTop) / (h.scrollHeight - h.clientHeight) * 100;
            progress.style.width = scrolled + '%';
            topBtn.classList.toggle('show', h.scrollTop > 600);
        }, { passive: true });
        topBtn.addEventListener('click', () => window.scrollTo({ top: 0, behavior: 'smooth' }));

        // Pixel-art portraits rendering
        const portraitData = {
            bigboss: 'data:image/bmp;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABgCAYAAACtxXToAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAEA0lEQVR4nOybvXEbMRCFrxSHLkEhS3DoEhwqVKgSHDpUqBIcOnQJCtUJTd5oMdQ7Pr5dAEeeib2ZndEPeQDeftgfHDm9vb3vj/bz+Wm216dvZ+3978sq9uflcTa8Wu+HZv/Ha0oBPggwuzYBaxGlzNZbCBhWALX3700AW3iJAcMLYIqYQvdOAM0CwwugYoA3uHjtVgTYljcrBAwrwPP33f7UagW49d73CmDrLGlweAF+v/7aH81LQG+PRbNOr61aCEgBbkSAjRfdy62xwMYtQTAF+CDAu7euRUCvbGDjTNP0yWzdhYDhBVAxAKNzax3QmwCbH3raxsH5LggYVgAshFRhtFbUbl1wtA6gpfDwAqjKqtZTa3ncS6KbgBSgMwHs/SoIYv72khRty1cn4L8RYPf1y2xMgNYzQrwfCsDSV/T+Khvg/1MARQCeo9tlhYRZFE30ONsC7H44Pl542FtNwPACoKe8xggwoZmHMSgzD+OF77Nx0LA0lgQMJ0Dtgr1m47C9zSau7qeaODMUKgXwKt2bAIzOUc8rcxOQAlyZAHZAod5XDjAEWex1myFgcwIs/rBRAVAIM3zYiQ7F9LpweAqwMQLYPNTRHTNVaG2OgJsLsJYQamJeITDoRZ8WpwAsDdIo2dnz9ndFAHsdQzm6Bcr6UgAgwJTv1Q5HCWg9hFW2IDwFIHvdezDC9lorAeq+UbN1UAKGFQAnhvm1dkBvVF5bCHQknkekACz/Rz2nUFNngYqA2nlgG0wJGF6AWiFYDY73ieZ1RgIbj80L5y+fDqcAggDlCVbTewlQT6Nru75uBNydAGyhUQHUGZ/KBqwL9UZ5JoB6DpECsL69NwFRU5VoKwEnY6UAZ/eo98QFibDfF19OcnqeffJDBTPVQ1xo7lKATwSgB5Xn7XX2URpGgCLC/q4++4NEqEqUxQ5KQAoAHmRdHXoUv4avCGDmvZAQRoDNp5qA4QRQT1sxWnsFqM0y7MKYwYI5m1cK0EpANM97T3awgmP38xKAhJ65bwpwsRfAeiDqaVa5RU938X5sfBYDjBRKwPACqDTHDky80b22K4z2JGbmcSRAZoHhBWAFipcAljVqzUuaFTiYHbAOCGeBYQRgeRYNv2qrJo4lKnZ7aKykZePgFzpYV3nhg5YpwKzE4yE3H415kinL+nHmeW+Tw+6DSHt7BLST9Q4uwO7HYZ8djAlgFt27OFE2YXax96uFe3uUFIARYL+r6M7STNRzrQREu1JJwHAC2A9eAVgerl1o6xVd+CLmpQCEgCgJ2H+vdbH05i3B3QQMJwAuvJcQaKqeUK/H8aLnDilALQFREtCU573dW/TE6WH3MBsSUNaTAlyJgFpTZ3/K85shYKsC/AMAAP//OjHGWgAAAAZJREFUAwAV4HqYU0OWaQAAAABJRU5ErkJggg==',
            madnar: 'data:image/bmp;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABgCAYAAACtxXToAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAD4UlEQVR4nOyaPXLbMBCFdZSUKXMEHSFlyhwhZcqUOkZKly5TpswRVPoIuQEz0ng1o0d/fgsQ+om4mNkZmxQB8O2HxQLg5vfPb1PGpr/7h7CXP89ntlm9ANNrWRsBUUoAR8DT989HWy0BJUAR8OBDYL9/mQ526SGg8+/NZ50SoJGAMOdJvX8tYprJKQEWEnDt4LU0NszILAFeCfj1/DQdTD1NdisCRseUIL8EUAJcLLg1Ab3tpwkoAQwBNO9fOqNbWi/OAq0EPKwAP75sj+YyO9eRbAdbx/LSTLAEIAJ2u910sCwBWU/1EqB5Ryv62t9ZO1JKACUgbFTQaiXgUkE02ov3i9hXAugsMIoAR8LdELB6AdTzownYfvxwNJpdKPqP7ocSEO2UAKFIeKqXhFBYPRn16nV9nghQ640RWs+MgBIACAjbbDYpi3rIaKdJHRGWbVeN3qOZgNUKsLQDowQY1Y8SIEsAKX/KnIzS8TtHgK7WXD9a2ycSS4BsIkQkxOpR7+t1qocIoN+5dvS6BsHIF/T/EiAIoCipCn/dfjozN830EkCzBI3lbMaIBJQAhgDyGJlLrFoJoP0C8rzuXjsiLAGrEyA7ZtVchqcdydbndppon4FevARoJSDrKTck1CO0n6D19p5P0InWbK1TApjMq9fzFNSyBOh8bU98TH3ar9kQKAFM5qX3ncKRk9Ps0EsA7UFmd6fDov4ZASVAJwHq+V4CaL53z9F9mt2GE/DfChB/OCHc2NcX18yrVwBKgZ0QlNprv0oAR4CSQJneUgJaT3bcLKKLr24CViMALYNJAB1rKoDuILXGgOwOFMUA6n8JoAS4PTaaDfS6O6FRjxIBcV+fj+I2QogAXYuc6l69AHSGpomMIyD25dV6z/TU8/F1N5HgCKBYVQLQGRsRQGdu4fE4mwvrJUHLUgLeaasEeNcTjgDyvBLgYoPep0IkuN3gNAElwJUIIHNFCaBpXD1/+jr8Xgi4WwHoSwzN5MJc9B/14lGifpcZkgBvCFECnHneEeCIUDLUaKi4Qp6O/tBhaNw/rR7nJKxcAOqQiwFOCBpa7sWpfc08NSjPDj3l+RKglwDN3MjD17IsAXFfh1AJ4AhQj2vw6iUh+/vWejXnD89TvlACjCIg6zGdHeibHTVXLz3nCFASSgAlQKOryw9cokRfhGRN63XrfMov0gSUADLPZjNFGvO9nqfTYfK8zvuLCSgBOglQEpZ6nhY/lBnSBsrVCCgBBgnhPK9bdVRuRsDDCDBKiGw+4Nb1s+8MTMHvCkqAQQRkSSBPuK0u8vzdEFACNMaCVguPtXr+7gi4VwH+AQAA//+rCOsKAAAABklEQVQDAP5uvckhQUYxAAAAAElFTkSuQmCC',
            miller: 'data:image/bmp;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABgCAYAAACtxXToAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADDUlEQVR4nOybO1LEMAyGcxRKSo6wR6Ck5AiUlJR7DEpKSkpuBszOmNnRRPl/ybKTtbUzavaROJ8+v5TssizLz1Y8nx5W4/v9ZTXenk6m0I4j4+P1kQqtvaf7u9X4u8YEYDIAZao209EhMy6vx2zANACsF3700MaGBIAM2DtzrU1IAKMZUNYDrAkJQDOAJXm0YNsNV4IJIA2YvAv0akj0hSeANGDbPLoeMC2A8sFoAOjdYAJQDGALG+V7RzNAK4zQBiQAowG9Mq8ZoLXDPQhOA0DrQ6hP7138ZIuy8j5BAhjNAGQCnAUSAMj0rdUKwwwYFkB5o3wBlcgkAHa6uRp1TVELXAPwf47pAUhCWiZkJjUDrJnWTEHmWM0oBpfjlVcCYA1AGbP27SgzrCFfCUBbMaHMaH0NGXE1/3Y1opwXGpAAggzQxoiVlViIAWj0//r8uEQ3A24GgFwIeQGUE6GGo/etfZ6d/wsAGQnAagC70pKq147i2pq+uwEJAJCWJrDP7LKZP7wBwwJgTyinw3I8FoR2wd5HbxMAMkBmWDOAJS5DZp7NsBbWh7ZL+xMAMgCF1wC0VGYz7v2nSmn/+Xy+RAKwGtC6DF67yZE3Q8MNmB5Aq8xb53EUrAEyoAEJIChjrQ3Q/jfY3YDhAKATspWcXmPBxvOAqyASADLAun1t9Xwgm3l5/moDpgdgLWSgTHr/keo1AJlArwSnB4BAsJlsZQAae6oNSADgVpY2/7K/85rA/n6jPTYDpgFwtV++hPqUVVAkgL0NKB+UzMsvyhqdd/RHBqBR3bvZ2uiakwOQF24dDFkAXsW1z63HSwDIAHa0lrW2qN0huvfn3WWiFWsCsM7XmgHWQUt+fzcDpgcgHxtDs4HW99kMsTW8qNkEGjA9AFkj8xrgneejMy/7Pjp+AvDu3mQfi8pcVOZpAxJApQGt7gN4R3k282EGJIDGBsjMsrvVYQw4LIDa+VsWVrTwticBtDbAmgEtUB1BWzHK82uGIRMTQJQBUYMpexdYmre7AQmgswFoDzK8AVEAfgEAAP//MfudygAAAAZJREFUAwA87UphnYaZxQAAAABJRU5ErkJggg==',
            grayfox: 'data:image/bmp;base64,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',
            snake: 'data:image/bmp;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABgCAYAAACtxXToAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAD0klEQVR4nOycsXHcMBBFrxSHLkHhleDQJThUqFBlOFSoEhwqdBkqwR2cbzRaWf7kv/8XBCjxuMHOaI53IPH2Y7EAFzrcfz+e5uzp4XbWjl+/zNrhcBhieJ94PnZfvI7fm3xeAITnkTwjjL8brQimBPY5VW4BSI79x7tv/5lSQu8YwRTgjvm0Aq4ewPPvh9N7i46p6M9AjQbAoj6aHPvRRgEABTAlqOgf30cPjMoHWH4wUcCP8zA9G7Z3c7x5sYkCdgcAG2IgGAAEtXbH3+y1o8yw4wUgFHB79tp7Qw+EElgmyGaNUZ5HD4Y1K6AAgALQFFHXg67nmYeVZT1PFVAABJAw5YHWsf/pFFAATBAqCrsK6aWANw+PUkABELPEaAW4v8OUuLsCNg8g/tg6APe+BYANga0poZsCCgCZ1tZSAFOCqwA3D7HzgN0BYD/onRr3AtCr4wXgH9D5KLqWApTn2fXmqD+dcQrAEAUoRTDPqrygV54xXAGbA8CsdZbAB1APiADcsW10sAAsUoBraymg1/MWAKaA1v381lgy0LOz/Zl5iVoALAX8evz5Yks90Kos9vrbvT+WAKUVsBsA6oYBwgXC6g5UUVPvMY9vrwuAUsDpz/OsZSUYHsd21JBwK0NYlZjyfAFQCmCec0nj2FftRKVJVgnZYu8ZBReAi2OYxQKM6kgYr7sKYDFGRXVl2K4cAgVgJQVg8TVTwtUq4NMDiAYUgGiQXW8FoGICluy6VeoFYKkC0NPZ60oBTAksH1CeZ/lCAXBzehxjSxWAtcZoLHdXmaHyPFbBFwBXAbhGUFFeGVOAWr25GyvM880KKACQGCkFBOGsAtDD2fwAFaCOBKUVUABMBaASmIcZaJUf4P4Btospehg+9zAFFAACotXzat53d4RWV8DVAcDojgBU9A9zO65WgwiA5RMXVosFIPfe/5UcUwCTpJuruw5h7XVXwG4BuLU/DMBHmdtxmQnuFkC2/MwF4K4S2c6NO0RwumMdLwCogNYCRCSLnlKpsVrtZfcD2Ha9VMBuAWQ7zqq6sAMzKecic2MCq0TBjsvzAgWgsa4Pc3J3/Z9VghoCTKH2iZEC0KgA3JFhOzW9Y0QEO3Z9soMU/eitgM0ByB50cAHEDVmHL+zSpmKBCwA7XgDCkezgo3vURSkAlaC2zLIKcNcIVMkFQCx3swpgwUftFbrBsJfnJwooAABi6bSEY7q3AljscT1PFbA7ANgQHoTM5gEMgKrsaF0rsN8nnnvnADDzY0diW2eD7Pzeq+P2ydICQM7Xu/8aw1WA+57/wxWwNwB/AQAA//8gSGQVAAAABklEQVQDACbSFQH9hKxQAAAAAElFTkSuQmCC'
        };

        function renderAllPortraits() {
            Object.keys(portraitData).forEach(name => {
                const ids = name === 'snake' ? ['portrait-snake', 'portrait-snake2'] :
                    name === 'bigboss' ? ['portrait-bigboss', 'portrait-bigboss2'] :
                    name === 'madnar' ? ['portrait-madnar', 'portrait-madnar2'] :
                    name === 'miller' ? ['portrait-miller', 'portrait-miller2'] :
                    name === 'grayfox' ? ['portrait-grayfox', 'portrait-grayfox2'] : [];
                ids.forEach(id => {
                    const canvas = document.getElementById(id);
                    if (!canvas) return;
                    const ctx = canvas.getContext('2d');
                    canvas.width = 64;
                    canvas.height = 96;
                    const img = new Image();
                    img.src = portraitData[name];
                    img.onload = () => ctx.drawImage(img, 0, 0, 64, 96, 0, 0, 64, 96);
                });
            });
        }

        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', renderAllPortraits);
        } else {
            renderAllPortraits();
        }
    </script>
</body>
</html>

Game Source: METAL GEAR 2: SOLID SNAKE — Fascicolo Operativo

Creator: PrismRider28

Libraries: none

Complexity: complex (1045 lines, 74.8 KB)

The full source code is displayed above on this page.

Remix Instructions

To remix this game, copy the source code above and modify it. Add a ARCADELAB header at the top with "remix_of: metal-gear-2-solid-snake-fascicolo-opera-prismrider28-mskq5yv9" to link back to the original. Then publish at arcadelab.ai/publish.