/* Registries for JS randomizer: lists of valid sets */
:root{
    --spine-sets: "oxide-rose ink-fog dust-amber kelp-grey midnight-paper blast-yellow signal-red cobalt-blue royal-purple polar-white creamsicle rocket-pop bubblegum mint-chip sunrise-punch cyber-grape frostfire gold-onyx sakura-ink citrus-soda glacier-neon ember-rose";
    --obi-sets: "berry-sand record-ebony kelp-cream blue-red slate-surf umber-cream coral-fog violet-canyon emerald-steel amber-ink horizon-teal neon-marine cyber-plum oxide-signal citrus-navy jade-brick orchid-olive teal-rust wine-sky";
    --stage-sets: "crimson-vinyl inkstone-sheen driftwood-haze amberglass kelp-foam moonlit-navy aurora-ice copper-dawn sagefield-veil pale-orchid graphite-smoke";
    --radial-sets: "cd-default cd-blue cd-red cd-black cd-sunset cd-cyber cd-silver";
    --conic-sets: "prism-default prism-aurora prism-sunset prism-ice";
    --conicangle-sets: "spin-150 spin-120 spin-210 spin-330";
    --stageimg-sets: "selfie jungle";
    --stampimg-sets: "astronaut shirt goggles";
    --stickerimg-sets: "holo";
    --imagefx-sets: "fx-mute fx-hardmute";
}

/* DEFAULT set (Berry Sand) */
:root{
    --ink-900:#11161e;
    --ink-800:#1b222d;
    --acc-700:#4f1124;
    --acc-600:#771835;
    --lite-200:#c0b6a0;
    --lite-100:#e4dbc8;

    --stage-bg:var(--acc-600);
    --stageimg-opacity: .25;
    --stageimg-blend: soft-light;

    --stage-image: url("/assets/img/stage/normal.jpg");

    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);

    --spine-a: var(--stage-bg);
    --spine-b: color-mix(in srgb, var(--spine-a) 70%, white 30%);
    --spine-gloss: soft-light;
    --spine-noise-opacity: .12;
    --spine-rib-opacity: .08;
    --spine-bg: var(--ink-800);
    --spine-veil-opacity: 1;
    --spine-veil-mix: normal;
    --spine-backdrop: saturate(.65) contrast(.9) brightness(.92);

    --stamp-image: url("/assets/img/stamp/astronaut.jpg");

    --hub-r: 64;
    --hub-g: 54;
    --hub-b: 53;
    --r1:  var(--stage-bg);
    --r2a: rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.4);
    --r2:  rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.3);
    --r3:  rgba(255,255,255,0.2);
    --r4:  rgba(51,23,23,0.2);
    --r5:  rgba(232,209,209,0.2);
    --r6:  rgba(232,209,209,0.2);
    --r7:  rgba(212,201,201,0.2);
    --r8:  rgba(194,172,172,0.2);
    --r9:  rgba(224,206,206,0.2);
    --r10: rgba(255,247,250,0.2);
    --r11: rgba(72,79,89,0.2);
    --r12: rgba(195,211,222,0.2);
    --r13: rgba(33,93,133,0.3);
    --r14: rgba(9,46,59,0.2);
    --r15: rgba(195,211,222,0.2);
    --r16: rgba(119,24,53,0.1);
    --r17: var(--stage-bg);

    --conic-from: 150deg;

    --c1: rgba(255,  0, 55, 0.3);
    --c2: rgba(201, 96,118, 0.4);
    --c3: rgba(  0,204,255, 0.4);
    --c4: rgba(255,255,255, 0.8);
    --c5: rgba(  0,204,255, 0.4);
    --c6: rgba(129,177,209, 0.4);
    --c7: rgba(255,255,255, 0.7);
    --c8: rgba(255,  0, 55, 0.3);
    
}

/* Spine and Obi */
:root {
    /* Spine */
    --spine-min: 48px;
    --spine-ideal: 10vw;
    --spine-max: 78px;
    --spine-w: clamp(var(--spine-min), var(--spine-ideal), var(--spine-max));

    /* Obi */
    --obi-min: 200px;
    --obi-ideal: 70vw;
    --obi-max: 512px;
    --obi-w:   clamp(var(--obi-min), var(--obi-ideal),   var(--obi-max));
}

/* OBI sets */
:root[data-obi="berry-sand"]{
    --ink-900:#11161e;
    --ink-800:#1b222d;
    --acc-700:#4f1124;
    --acc-600:#771835;
    --lite-200:#c0b6a0;
    --lite-100:#e4dbc8;

    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="record-ebony"] {
    --ink-900:#0e1218;
    --ink-800:#161a20;
    --acc-700:#6e6e6e;
    --acc-600:#1c1c1c;
    --lite-100:#f5f5f5;
    --lite-200:#e8e8e8;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="kelp-cream"]{
    --ink-900:#2b2a28;
    --ink-800:#3a3936;
    --acc-700:#7a4b20;
    --acc-600:#126a4e;
    --lite-100:#f1eadd;
    --lite-200:#d9cfbd;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="blue-red"]{
    --ink-900:#141414;
    --ink-800:#5c5c5c;
    --acc-700:#0d1b58;
    --acc-600:#9c0b2f;
    --lite-100:#f7f7f7;
    --lite-200:#dddddd;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="slate-surf"]{
    --ink-900:#0f141c;
    --ink-800:#1c2330;
    --acc-700:#1b6f8a;
    --acc-600:#329cb7;
    --lite-100:#e5ebee;
    --lite-200:#c7d2d7;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="umber-cream"]{
    --ink-900:#201812;
    --ink-800:#37281e;
    --acc-700:#915e33;
    --acc-600:#b97e45;
    --lite-100:#f3ece3;
    --lite-200:#e1d2c3;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="coral-fog"]{
    --ink-900:#2a2d32;
    --ink-800:#3f4348;
    --acc-700:#f4625c;
    --acc-600:#ff897f;
    --lite-100:#f8f7f5;
    --lite-200:#e4e3e1;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="violet-canyon"]{
    --ink-900:#1d1a22;
    --ink-800:#2b2633;
    --acc-700:#6b2c7a;
    --acc-600:#a945e0;
    --lite-100:#f7efe7;
    --lite-200:#dfd3c5;

    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="emerald-steel"]{
    --ink-900:#0f1a1a;
    --ink-800:#1f2c2c;
    --acc-700:#0d7a55;
    --acc-600:#12a06f;
    --lite-100:#e5f1ef;
    --lite-200:#cdddda;

    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="amber-ink"]{
    --ink-900:#191716;
    --ink-800:#2e2a28;
    --acc-700:#b87a1c;
    --acc-600:#e3a43e;
    --lite-100:#f5efe6;
    --lite-200:#ded4c4;

    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="horizon-teal"]{
    --ink-900:#22201b;
    --ink-800:#322f28;
    --acc-700:#00747e;
    --acc-600:#00a8b3;
    --lite-100:#faf7f0;
    --lite-200:#e3ddcf;

    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="neon-marine"]{
    --ink-900:#0b1114;
    --ink-800:#162126;
    --acc-700:#0ef0e8;
    --acc-600:#06b7b0;
    --lite-100:#0ef0e8;
    --lite-200:#06b7b0;

    --obi-surface:var(--ink-900);
    --obi-bg:var(--ink-800);
    --obi-text:var(--lite-100);
    --obi-accent:var(--acc-700);
    --obi-accent-2:var(--acc-600);
}

:root[data-obi="cyber-plum"]{
    --ink-900:#140e1b;
    --ink-800:#211429;
    --acc-700:#e555ff;
    --acc-600:#a62ae6;
    --lite-100:#e555ff;
    --lite-200:#a62ae6;

    --obi-surface:var(--ink-900);
    --obi-bg:var(--ink-800);
    --obi-text:var(--lite-100);
    --obi-accent:var(--acc-700);
    --obi-accent-2:var(--acc-600);
}

:root[data-obi="oxide-signal"]{
    --ink-900:#161515;
    --ink-800:#1d1c1c;
    --acc-700:#ff7167;
    --acc-600:#e9382b;
    --lite-100:#ffb7b0;
    --lite-200:#e6e6e6;

    --obi-surface:var(--ink-900);
    --obi-bg:var(--ink-800);
    --obi-text:var(--lite-100);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="citrus-navy"]{
    --ink-900:#181b22;
    --ink-800:#242a32;
    --acc-700:#0a1e63;
    --acc-600:#d2a300;
    --lite-100:#f7f6ef;
    --lite-200:#e0dfd4;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="jade-brick"]{
    --ink-900:#1c1c18;
    --ink-800:#2c2b27;
    --acc-700:#8f2f26;
    --acc-600:#1d8e72;
    --lite-100:#f5f2e8;
    --lite-200:#dcd6c7;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="orchid-olive"]{
    --ink-900:#202024;
    --ink-800:#2c2c31;
    --acc-700:#666a1e;
    --acc-600:#b048c8;
    --lite-100:#f4f2f7;
    --lite-200:#dcd8e1;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="teal-rust"]{
    --ink-900:#151a1a;
    --ink-800:#232b2c;
    --acc-700:#a4441e;
    --acc-600:#0e7f84;
    --lite-100:#edf4f4;
    --lite-200:#ced9d9;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

:root[data-obi="wine-sky"]{
    --ink-900:#1b181d;
    --ink-800:#2a262e;
    --acc-700:#7a1f3c;
    --acc-600:#3d87d9;
    --lite-100:#f6f4f3;
    --lite-200:#dedad8;
    --obi-surface:var(--lite-100);
    --obi-bg:var(--lite-200);
    --obi-text:var(--ink-800);
    --obi-accent:var(--acc-600);
    --obi-accent-2:var(--acc-700);
}

/* SPINE background */
:root[data-spine="oxide-rose"]     { --spine-a:#55303b; --spine-b:#7a4b56; }
:root[data-spine="ink-fog"]        { --spine-a:#2a3037; --spine-b:#4a5561; }
:root[data-spine="dust-amber"]     { --spine-a:#5f4b33; --spine-b:#8b7353; }
:root[data-spine="kelp-grey"]      { --spine-a:#30483f; --spine-b:#4d675c; }
:root[data-spine="midnight-paper"] { --spine-a:#191c21; --spine-b:#323740; }
:root[data-spine="blast-yellow"]   { --spine-a:#b8a42a; --spine-b:#d8c66a; }
:root[data-spine="signal-red"]     { --spine-a:#9d2c3b; --spine-b:#c25a66; }
:root[data-spine="cobalt-blue"]    { --spine-a:#2b47a8; --spine-b:#5c79d0; }
:root[data-spine="royal-purple"]   { --spine-a:#553b91; --spine-b:#907ad8; }
:root[data-spine="polar-white"]    { --spine-a:#d9dde3; --spine-b:#f3f5f7; }
:root[data-spine="creamsicle"]     { --spine-a:#d96e37; --spine-b:#f4d7bd; }
:root[data-spine="rocket-pop"]     { --spine-a:#3a55a7; --spine-b:#c14e59; }
:root[data-spine="bubblegum"]      { --spine-a:#d35c95; --spine-b:#91bddc; }
:root[data-spine="mint-chip"]      { --spine-a:#4ea68a; --spine-b:#2c6d59; }
:root[data-spine="sunrise-punch"]  { --spine-a:#d94e74; --spine-b:#e5874c; }
:root[data-spine="cyber-grape"]    { --spine-a:#5b3c94; --spine-b:#3ba39b; }
:root[data-spine="frostfire"]      { --spine-a:#6ea0cc; --spine-b:#d468a5; }
:root[data-spine="gold-onyx"]      { --spine-a:#a48b47; --spine-b:#1c1c1c; }
:root[data-spine="sakura-ink"]     { --spine-a:#d889a4; --spine-b:#1c1e22; }
:root[data-spine="citrus-soda"]    { --spine-a:#9fc65e; --spine-b:#3f9a70; }
:root[data-spine="glacier-neon"]   { --spine-a:#bcdce6; --spine-b:#40bcd3; }
:root[data-spine="ember-rose"]     { --spine-a:#c24f3b; --spine-b:#4e1b25; }

/* RADIAL disc */
:root[data-radial="cd-default"]{
    --hub-r: 64;
    --hub-g: 54;
    --hub-b: 53;
    --r1:  var(--stage-bg);
    --r2a: rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.4);
    --r2:  rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.3);
    /* DISC CORE */
    --r3:  rgba(255,255,255,0.2);
    --r4:  rgba(51,23,23,0.2);
    --r5:  rgba(232,209,209,0.2);
    --r6:  rgba(232,209,209,0.2);
    --r7:  rgba(212,201,201,0.2);
    --r8:  rgba(194,172,172,0.2);
    --r9:  rgba(224,206,206,0.2);
    --r10: rgba(255,247,250,0.2);
    --r11: rgba(72,79,89,0.2);
    /* DISC FACE */
    --r12: rgba(195,211,222,0.2);
    --r13: rgba(33,93,133,0.3);
    --r14: rgba(9,46,59,0.2);
    /* CROWN + EDGE */
    --r15: rgba(195,211,222,0.2);
    --r16: rgba(119,24,53,0.1);
    --r17: var(--stage-bg);
}

:root[data-radial="cd-blue"]{
    --hub-r: 10;
    --hub-g: 20;
    --hub-b: 60;
    --r1:  var(--stage-bg);
    --r2a: rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.40);
    --r2:  rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.30);
    /* DISC CORE */
    --r3:  rgba(255,255,255,0.20);
    --r4:  rgba(12,16,32,0.20);
    --r5:  rgba(198,210,242,0.20);
    --r6:  rgba(198,210,242,0.20);
    --r7:  rgba(172,188,230,0.20);
    --r8:  rgba(144,162,214,0.20);
    --r9:  rgba(184,202,238,0.20);
    --r10: rgba(224,238,255,0.20);
    --r11: rgba(28,34,70,0.20);
    /* DISC FACE */
    --r12: rgba( 54,132,255,0.24);
    --r13: rgba( 22, 60,168,0.34);
    --r14: rgba( 12, 24, 66,0.22);
    /* CROWN + EDGE */
    --r15: rgba( 54,132,255,0.20);
    --r16: rgba( 10, 16, 34,0.10);
    --r17: var(--stage-bg);
}

:root[data-radial="cd-red"]{
    --hub-r: 30;
    --hub-g:  6;
    --hub-b:  8;
    --r1:  var(--stage-bg);
    --r2a: rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.40);
    --r2:  rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.30);
    /* DISC CORE */
    --r3:  rgba(255,255,255,0.20);
    --r4:  rgba(56, 6,10,0.20);
    --r5:  rgba(242,196,196,0.20);
    --r6:  rgba(242,196,196,0.20);
    --r7:  rgba(222,170,170,0.20);
    --r8:  rgba(198,132,132,0.20);
    --r9:  rgba(228,176,176,0.20);
    --r10: rgba(255,224,228,0.20);
    --r11: rgba(84, 20,24,0.20);
    /* DISC FACE */
    --r12: rgba(240,110,120,0.20);
    --r13: rgba(150, 18, 30,0.30);
    --r14: rgba( 78,  8, 14,0.20);
    /* DISC EDGE */
    --r15: rgba(240,110,120,0.20);
    --r16: rgba(46,  6,  8,0.10);
    --r17: var(--stage-bg);
}

:root[data-radial="cd-black"]{
    --hub-r: 6;
    --hub-g: 6;
    --hub-b: 10;
    --r1:  var(--stage-bg);
    --r2a: rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.10);
    --r2:  rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.10);
    /* DISC CORE */
    --r3:  rgba(255,255,255,0.40);
    --r4:  rgba(24,24,24,0.20);
    --r5:  rgba(205,208,220,0.20);
    --r6:  rgba(205,208,220,0.20);
    --r7:  rgba(168,172,186,0.20);
    --r8:  rgba(132,136,150,0.20);
    --r9:  rgba(176,180,198,0.20);
    --r10: rgba(220,224,240,0.20);
    --r11: rgba(22,22,30,0.20);
    /* DISC FACE */
    --r12: rgba( 32, 38, 72,0.22);
    --r13: rgba(  8,  8, 14,0.34);
    --r14: rgba(  0,  0,  0,0.20);
    /* DISC EDGE */
    --r15: rgba(135,145,255,0.18);
    --r16: rgba(  0,  0,  0,0.10);
    --r17: var(--stage-bg);
}

:root[data-radial="cd-sunset"]{
    --hub-r: 40;
    --hub-g: 20;
    --hub-b:  8;
    --r1:  var(--stage-bg);
    --r2a: rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.40);
    --r2:  rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.30);
    /* DISC CORE */
    --r3:  rgba(255,255,255,0.20);
    --r4:  rgba(96,48,20,0.20);
    --r5:  rgba(255,214,188,0.20);
    --r6:  rgba(255,214,188,0.20);
    --r7:  rgba(244,190,154,0.20);
    --r8:  rgba(232,168,128,0.20);
    --r9:  rgba(252,202,170,0.20);
    --r10: rgba(255,236,225,0.20);
    --r11: rgba(112,70,46,0.20);
    /* DISC FACE */
    --r12: rgba(255,196,150,0.20);
    --r13: rgba(232,120, 62,0.30);
    --r14: rgba(132, 64, 28,0.20);
    /* DISC EDGE */
    --r15: rgba(255,196,150,0.20);
    --r16: rgba(96,50,26,0.10);
    --r17: var(--stage-bg);
}

:root[data-radial="cd-cyber"]{
    --hub-r: 25;
    --hub-g: 40;
    --hub-b:  00;
    --r1:  var(--stage-bg);
    --r2a: rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.40);
    --r2:  rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.30);
    /* DISC CORE */
    --r3:  rgba(255,255,255,0.20);
    --r4:  rgba(84,88,18,0.20);
    --r5:  rgba(244,255,190,0.20);
    --r6:  rgba(244,255,190,0.20);
    --r7:  rgba(230,248,148,0.20);
    --r8:  rgba(206,222,120,0.20);
    --r9:  rgba(238,250,172,0.20);
    --r10: rgba(252,255,220,0.20);
    --r11: rgba(92,96,22,0.20);
    /* DISC FACE */
    --r12: rgba(236,255,178,0.20);
    --r13: rgba(192,212, 24,0.30);
    --r14: rgba(108,112, 18,0.20);
    /* CROWN + EDGE */
    --r15: rgba(236,255,178,0.20);
    --r16: rgba(78,82,16,0.10);
    --r17: var(--stage-bg);
}

:root[data-radial="cd-silver"]{
    --hub-r: 15;
    --hub-g: 10;
    --hub-b: 5;
    --r1:  var(--stage-bg);
    --r2a: rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.40);
    --r2:  rgba(var(--hub-r), var(--hub-g), var(--hub-b), 0.30);
    /* DISC CORE */
    --r3:  rgba(255,255,255,0.20);
    --r4:  rgba(72,79,89,0.20);
    --r5:  rgba(226,233,238,0.20);
    --r6:  rgba(226,233,238,0.20);
    --r7:  rgba(206,213,220,0.20);
    --r8:  rgba(188,195,204,0.20);
    --r9:  rgba(218,226,234,0.20);
    --r10: rgba(246,250,255,0.20);
    --r11: rgba(96,104,116,0.20);
    /* DISC FACE */
    --r12: rgba(230,238,248,0.20);
    --r13: rgba(148,156,170,0.30);
    --r14: rgba(82,88,100,0.20);
    /* CROWN + EDGE */
    --r15: rgba(230,238,248,0.20);
    --r16: rgba(110,118,130,0.10);
    --r17: var(--stage-bg);
}

/* STAGE color set */
:root[data-stage="crimson-vinyl"]     { --stage-bg:#7b1f36; }
:root[data-stage="inkstone-sheen"]    { --stage-bg:#161b24; }
:root[data-stage="driftwood-haze"]    { --stage-bg:#4e443c; }
:root[data-stage="amberglass"]        { --stage-bg:#6b4622; }
:root[data-stage="kelp-foam"]         { --stage-bg:#165d46; }
:root[data-stage="moonlit-navy"]      { --stage-bg:#1c274a; }
:root[data-stage="aurora-ice"]        { --stage-bg:#2a6a7a; }
:root[data-stage="copper-dawn"]       { --stage-bg:#8f3e1e; }
:root[data-stage="sagefield-veil"]    { --stage-bg:#5a6c4a; }
:root[data-stage="pale-orchid"]       { --stage-bg:#7e6a85; }
:root[data-stage="graphite-smoke"]    { --stage-bg:#32363c; }

/* ANGLE set */
:root[data-conicangle="spin-150"] { --conic-from: 150deg; }
:root[data-conicangle="spin-120"] { --conic-from: 120deg; }
:root[data-conicangle="spin-210"] { --conic-from: 210deg; }
:root[data-conicangle="spin-330"] { --conic-from: 330deg; }

/* CONIC set */
:root[data-conic="prism-default"]{
    --c1: rgba(255,  0, 55, 0.3);
    --c2: rgba(201, 96,118, 0.4);
    --c3: rgba(  0,204,255, 0.4);
    --c4: rgba(255,255,255, 0.8);
    --c5: rgba(  0,204,255, 0.4);
    --c6: rgba(129,177,209, 0.4);
    --c7: rgba(255,255,255, 0.7);
    --c8: rgba(255,  0, 55, 0.3);
}
:root[data-conic="prism-aurora"]{
    --c1: rgba(163,113,247,0.32);
    --c2: rgba( 62,237,201,0.36);
    --c3: rgba( 48,161,255,0.40);
    --c4: rgba(255,255,255,0.80);
    --c5: rgba( 41,205,140,0.38);
    --c6: rgba(129,177,209,0.38);
    --c7: rgba(255,255,255,0.72);
    --c8: rgba(163,113,247,0.32);
}
:root[data-conic="prism-sunset"]{
    --c1: rgba(255, 90, 60,0.32);
    --c2: rgba(255,150, 90,0.36);
    --c3: rgba(255,205,120,0.38);
    --c4: rgba(255,255,255,0.80);
    --c5: rgba(255,160,110,0.36);
    --c6: rgba(210,140,110,0.36);
    --c7: rgba(255,255,255,0.70);
    --c8: rgba(255, 90, 60,0.32);
}
:root[data-conic="prism-ice"]{
    --c1: rgba( 80,175,255,0.32);
    --c2: rgba(120,220,255,0.36);
    --c3: rgba(180,235,255,0.40);
    --c4: rgba(255,255,255,0.82);
    --c5: rgba(140,225,255,0.38);
    --c6: rgba(129,177,209,0.38);
    --c7: rgba(255,255,255,0.74);
    --c8: rgba( 80,175,255,0.32);
}

/* STAGE set */
:root[data-stageimg="selfie"]    { --stage-image: url("/assets/img/stage/selfie.jpg"); }
:root[data-stageimg="jungle"]    { --stage-image: url("/assets/img/stage/jungle.jpg"); }

/* STAMP Set */
:root[data-stampimg="astronaut"] { --stamp-image: url("/assets/img/stamp/astronaut.jpg"); }
:root[data-stampimg="shirt"]     { --stamp-image: url("/assets/img/stamp/shirt.jpg"); }
:root[data-stampimg="goggles"]     { --stamp-image: url("/assets/img/stamp/goggles.jpg"); }
:root[data-stampimg="pilot"]     { --stamp-image: url("/assets/img/ani/pilot.gif"); }

/* IMAGE-FX Set */
:root[data-imagefx="fx-soft"]{
    --stageimg-opacity: .55;
    --stageimg-blend: soft-light;
}
:root[data-imagefx="fx-hard"]{
    --stageimg-opacity: .55;
    --stageimg-blend: hard-light;
}
:root[data-imagefx="fx-contrast"]{
    --stageimg-opacity: .65;
    --stageimg-blend: overlay;
}
:root[data-imagefx="fx-glow"]{
    --stageimg-opacity: .45;
    --stageimg-blend: screen;
}
:root[data-imagefx="fx-ink"]{
    --stageimg-opacity: .45;
    --stageimg-blend: multiply;
}
:root[data-imagefx="fx-burn"]{
    --stageimg-opacity: .55;
    --stageimg-blend: color-burn;
}
:root[data-imagefx="fx-dodge"]{
    --stageimg-opacity: .25;
    --stageimg-blend: color-dodge;
}
:root[data-imagefx="fx-lumo"]{
    --stageimg-opacity: .35;
    --stageimg-blend: luminosity;
}

:root[data-imagefx="fx-mute"]{
    --stageimg-opacity: .45;
    --stageimg-blend: exclusion;
}
:root[data-imagefx="fx-hardmute"]{
    --stageimg-opacity: .85;
    --stageimg-blend: exclusion;
}

/* BODY Tokens */
:root{
    --bg:   var(--stage-bg);
    --text: var(--obi-text);
}

/* Base */
*,
*::before,
*::after { box-sizing: border-box; }

html,
body {
    height: auto;
    min-height: 100%;
}

body {
    margin: 0;
    overflow-x: hidden;
    overflow-y: auto;
    background-color: var(--bg);
    color: var(--text);
    font: 16px/1.5 "Fira Mono", monospace, system-ui, -apple-system, Segoe UI, Roboto, "Helvetica Neue", Arial, sans-serif;
}

::selection { color: var(--obi-surface); background-color: var(--obi-accent); }

/* Font helpers */
.fira { font-family: "Fira Mono", monospace; }
.mplus { font-family: "M PLUS 2", sans-serif; }
.lang-ja, .lang-he { font-feature-settings: "pkna"; }

:root{
    --disc-size: clamp(420px, 70vmin, 1100px);
}

/* Accessible text helper */
.sr-only {
    position:absolute; width:1px; height:1px; padding:0; margin:-1px;
    overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;
}
