/* ==================================================================
   ANIME
   ------------------------------------------------------------------
   A desk by a window at night, as an illustration behind the whole
   page. The other skins draw their world in CSS; this one is a painting
   with the interface floating on it, so almost everything here is about
   getting out of the artwork's way - translucent panels, no borders
   competing with the drawing, and the scene's own lamp and mug left
   visible down the sides.

   Everything is driven off the palette below, so the whole skin can be
   re-tuned from one block instead of hunting hex codes through 400
   lines.
   ================================================================== */

body.skin-anime {
    /* ---- palette ---- */
    --a-night:    #1a1638;   /* what shows before the artwork loads */
    --a-glass:    rgba(24,21,54,.60);
    --a-glass-2:  rgba(14,17,42,.78);
    --a-edge:     rgba(168,186,255,.20);
    --a-edge-lit: rgba(200,216,255,.42);
    --a-text:     #eaf0ff;
    --a-text-dim: #a6b6e0;

    --a-paper:    #fbf5e9;   /* the resume itself */
    --a-paper-2:  #f2e9d6;
    --a-ink:      #1b2432;
    --a-ink-2:    #4a4a52;
    --a-ink-dim:  #868073;

    --a-blue:     #2f7fd6;   /* section rules, links, Edit buttons */
    --a-blue-lit: #6c8bff;   /* the selected resume, primary actions */
    --a-violet:   #8b6cf0;
    --a-pink:     #ee6fa8;   /* Export PDF, alternating timeline nodes */
    --a-gold:     #ffd98a;   /* the moon, and nothing else */

    /* A script face for the handwritten notes pinned around the room.
       System faces only - nothing here should reach out to a font CDN
       at page load. Anything without one of these falls back to the
       browser's cursive, which is close enough for two short lines. */
    --a-hand: 'Segoe Script', 'Bradley Hand', 'Snell Roundhand',
              'Brush Script MT', 'Comic Sans MS', cursive;

    /* Drawn decoration, held here so the long data URI is written once
       and referenced wherever it is needed. --a-sakura is a spray of
       blossom for the paper's corners; --a-drift is the loose petals
       tiled sparsely across it. */
    --a-sakura: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='160' viewBox='0 0 200 160'%3E%3Cg transform='translate(150,44) rotate(14) scale(1.25)'%3E%3Cg transform='rotate(0)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f5bdd2'/%3E%3C/g%3E%3Cg transform='rotate(72)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23fbd3e0'/%3E%3C/g%3E%3Cg transform='rotate(144)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f5bdd2'/%3E%3C/g%3E%3Cg transform='rotate(216)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23fbd3e0'/%3E%3C/g%3E%3Cg transform='rotate(288)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f5bdd2'/%3E%3C/g%3E%3Ccircle r='3.4' fill='%23fff3f7'/%3E%3Cg transform='rotate(0)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(60)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(120)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(180)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(240)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(300)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3C/g%3E%3Cg transform='translate(186,92) rotate(-28) scale(1.0)'%3E%3Cg transform='rotate(0)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f5bdd2'/%3E%3C/g%3E%3Cg transform='rotate(72)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23fbd3e0'/%3E%3C/g%3E%3Cg transform='rotate(144)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f5bdd2'/%3E%3C/g%3E%3Cg transform='rotate(216)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23fbd3e0'/%3E%3C/g%3E%3Cg transform='rotate(288)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f5bdd2'/%3E%3C/g%3E%3Ccircle r='3.4' fill='%23fff3f7'/%3E%3Cg transform='rotate(0)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(60)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(120)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(180)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(240)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(300)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3C/g%3E%3Cg transform='translate(112,96) rotate(40) scale(0.8)'%3E%3Cg transform='rotate(0)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f5bdd2'/%3E%3C/g%3E%3Cg transform='rotate(72)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23fbd3e0'/%3E%3C/g%3E%3Cg transform='rotate(144)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f5bdd2'/%3E%3C/g%3E%3Cg transform='rotate(216)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23fbd3e0'/%3E%3C/g%3E%3Cg transform='rotate(288)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f5bdd2'/%3E%3C/g%3E%3Ccircle r='3.4' fill='%23fff3f7'/%3E%3Cg transform='rotate(0)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(60)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(120)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(180)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(240)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3Cg transform='rotate(300)'%3E%3Ccircle cy='-5.6' r='1.1' fill='%23e58bb0'/%3E%3C/g%3E%3C/g%3E%3Cg opacity='.85'%3E%3Cg transform='translate(74,42) rotate(35) scale(.85)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f7c6d8'/%3E%3C/g%3E%3Cg transform='translate(122,148) rotate(-50) scale(.7)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f7c6d8'/%3E%3C/g%3E%3Cg transform='translate(178,140) rotate(20) scale(.6)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f7c6d8'/%3E%3C/g%3E%3C/g%3E%3Cg fill='%23e9c98a' opacity='.9'%3E%3Cpath d='M64 96 65.4 102 71.4 103.4 65.4 104.8 64 110.8 62.6 104.8 56.6 103.4 62.6 102z'/%3E%3Cpath d='M96 24 97 28.4 101.4 29.4 97 30.4 96 34.8 95 30.4 90.6 29.4 95 28.4z'/%3E%3C/g%3E%3C/svg%3E");
    --a-drift: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='360' height='340' viewBox='0 0 360 340'%3E%3Cg opacity='.5'%3E%3Cg transform='translate(48,62) rotate(28) scale(.75)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f6c7d9'/%3E%3C/g%3E%3Cg transform='translate(238,132) rotate(-42) scale(.62)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f6c7d9'/%3E%3C/g%3E%3Cg transform='translate(132,246) rotate(64) scale(.7)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f6c7d9'/%3E%3C/g%3E%3Cg transform='translate(322,286) rotate(-15) scale(.55)'%3E%3Cpath d='M0 0 C 6 -3 10 -10 8 -19 C 7.4 -22 5 -24 2.6 -22.6 L0 -20.4 L-2.6 -22.6 C-5 -24 -7.4 -22 -8 -19 C-10 -10 -6 -3 0 0 z' fill='%23f6c7d9'/%3E%3C/g%3E%3C/g%3E%3Cg fill='%23e6c489' opacity='.55'%3E%3Cpath d='M300 40 301.1 44.4 305.5 45.5 301.1 46.6 300 51 298.9 46.6 294.5 45.5 298.9 44.4z'/%3E%3Cpath d='M92 176 93.1 180.4 97.5 181.5 93.1 182.6 92 187 90.9 182.6 86.5 181.5 90.9 180.4z'/%3E%3C/g%3E%3C/svg%3E");

    background-color: var(--a-night);
    /* Pages outside the studio paint their own gradient with the
       background shorthand. Setting only a colour here leaves that
       gradient sitting on top, so it has to be cancelled explicitly. */
    background-image: none;
    color: var(--a-text);
    font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Roboto, sans-serif;
}

/* The artwork is a fixed layer of its own rather than a background on
   the body. background-attachment: fixed is sized against the document
   on iOS, so a long resume stretched the painting to several screens
   tall and cropped everything but a strip of desk. A fixed pseudo-
   element is sized against the viewport, which is what was wanted all
   along, and it scrolls correctly everywhere.

   The ?v= is a cache-buster. Overwrite the two .webp files in place and
   bump the number; without it the old artwork sits in browser caches
   for as long as the host's expiry header says. */
body.skin-anime:after {
    content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none;
    background-image: url('/resume/images/anime-desk.webp?v=2');
    background-size: cover;
    background-position: center center;
    background-repeat: no-repeat;
}

/* ---- chrome ------------------------------------------------------ */
body.skin-anime .topbar {
    background: rgba(20,17,44,.62);
    border-bottom: 1px solid var(--a-edge);
    -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
}
/* Room for the tagline underneath the wordmark. */
body.skin-anime .studio .brand { align-items: flex-start; padding: 2px 0; }
body.skin-anime .bn {
    display: inline-block; line-height: 1.15;
    font-size: 19px; font-weight: 700; letter-spacing: -.01em; color: #f4f7ff;
}
body.skin-anime .bn span {
    background: linear-gradient(92deg, var(--a-blue-lit) 0%, var(--a-violet) 100%);
    -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent; color: transparent;
}
/* Written under the name, the way it is on the sign-in art. */
/* Scoped to the studio. The wordmark is shared with every other page,
   and the dashboard is served for AllyDate as well - a Resume Moon
   tagline appearing under someone else's brand is not a small bug. */
body.skin-anime.studio .bn:after {
    content: "Build a brighter you \2726";
    display: block; margin-top: 1px;
    font-family: var(--a-hand);
    font-size: 12.5px; font-weight: 400; letter-spacing: .01em;
    color: #cdd8ff; opacity: .85;
    -webkit-text-fill-color: #cdd8ff;
}
/* The mark is a real image, so the old CSS crescent was painting behind
   it and never showed. It only needs the lamp-light around it.

   No filter beyond the glow, on any skin. The mark stays blue
   everywhere - tinting it to match a skin's palette was tried and it
   read as a different product's logo. */
body.skin-anime .logo {
    background: transparent; border-radius: 50%;
    filter: drop-shadow(0 0 10px rgba(255,214,140,.55));
}

/* ---- buttons ----------------------------------------------------- */
body.skin-anime .ghost,
body.skin-anime .act,
body.skin-anime .mini,
body.skin-anime .go {
    font-size: 13.5px; font-weight: 600; letter-spacing: .01em;
    border-radius: 999px;
    background: rgba(255,255,255,.11);
    border: 1px solid rgba(200,212,255,.32);
    color: var(--a-text);
    -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
}
/* ---- the look picker ---- */
/* The button is a .ghost, so it is already dressed by the rules below.
   Only the menu needs its own treatment: the same dark glass the panels
   use, so it reads as part of the room rather than a system dropdown
   pasted over it. */
body.skin-anime .skinmenu {
    background: linear-gradient(180deg, rgba(24,28,60,.97), rgba(14,18,40,.98));
    border: 1px solid var(--a-edge);
    border-radius: 14px;
    box-shadow: 0 22px 40px -18px rgba(0,0,0,.95);
}
body.skin-anime .skinmenu-h { color: var(--a-text-dim); letter-spacing: .16em; }
body.skin-anime .skinopt { color: var(--a-text); border-radius: 9px; }
body.skin-anime .skinopt:hover { background: rgba(255,255,255,.11); }
body.skin-anime .skinopt.on {
    background: linear-gradient(135deg, var(--a-blue-lit) 0%, var(--a-violet) 100%);
    color: #fff;
}
body.skin-anime .tick { color: #fff; }
body.skin-anime .sw i { border-color: rgba(255,255,255,.3); }

body.skin-anime .ghost:hover,
body.skin-anime .act:hover,
body.skin-anime .mini:hover,
body.skin-anime .go:hover {
    background: rgba(255,255,255,.2); border-color: var(--a-edge-lit);
}
/* Primary actions take the same blue-to-violet as the selected resume,
   so one colour means "this is the live thing" everywhere on the page. */
body.skin-anime .act.key,
body.skin-anime .act.live,
body.skin-anime .go,
body.skin-anime .mini.key {
    background: linear-gradient(135deg, var(--a-blue-lit) 0%, var(--a-violet) 100%);
    border-color: rgba(190,205,255,.75); color: #0e1330;
    box-shadow: 0 6px 18px -6px rgba(120,140,255,.75);
}
/* Export PDF is the one warm button in the bar. */
body.skin-anime .act.pdf {
    background: linear-gradient(135deg, #f78fc0 0%, #e0559a 100%);
    border-color: rgba(255,190,220,.8); color: #400f28;
    box-shadow: 0 6px 18px -6px rgba(224,85,154,.6);
}
body.skin-anime .act.danger {
    background: rgba(120,40,54,.55); border-color: rgba(255,150,170,.5); color: #ffc2cc;
}
body.skin-anime .acts-note { color: var(--a-text-dim); font-size: 13px; }

/* ---- manga captions over the four actions ------------------------
   Drawn in CSS on the real buttons rather than added to the markup, so
   no other skin has to know about them.

   Each bubble takes the colour of the button it belongs to instead of
   all four being comic-book red, which was the one loud thing left on
   a page that had otherwise gone quiet. One shared rule reads the
   colour from --a-bubble, so recolouring a bubble is a one-line change
   in the block just below. */
/* Only the padding, to make headroom for the bubbles. The bubbles are
   positioned against each button, not against this row, so it needs no
   position of its own - and setting one here is what stopped the action
   bar going fixed to the bottom of the phone. The base stylesheet does
   that inside a media query, which this rule out-specified at every
   width. */
body.skin-anime .acts { padding-top: 34px; }
body.skin-anime #btnImprove,
body.skin-anime #btnTailor,
body.skin-anime #btnVoice,
body.skin-anime .acts .pdf { position: relative; overflow: visible; }

body.skin-anime #btnImprove       { --a-bubble: #5b78ef; }
body.skin-anime #btnTailor        { --a-bubble: #8b6cf0; }
body.skin-anime #btnVoice         { --a-bubble: #2f96c8; }
body.skin-anime .acts .pdf        { --a-bubble: #d94f92; }

body.skin-anime #btnImprove:before,
body.skin-anime #btnTailor:before,
body.skin-anime #btnVoice:before,
body.skin-anime .acts .pdf:before {
    position: absolute; top: -26px; left: 50%; transform: translateX(-50%);
    background: #fffdf7; color: var(--a-bubble); border: 2.5px solid var(--a-bubble);
    border-radius: 50% / 46%; padding: 3px 12px 4px;
    font-size: 12px; font-weight: 700; white-space: nowrap; line-height: 1.25;
    /* A soft drop instead of the hard offset block - the sharp shadow
       belonged with the red outline. */
    box-shadow: 0 3px 8px -2px rgba(10,14,40,.55);
}
/* The tail: a small circle overlapping the bubble's lower edge. */
body.skin-anime #btnImprove:after,
body.skin-anime #btnTailor:after,
body.skin-anime #btnVoice:after,
body.skin-anime .acts .pdf:after {
    content: ""; position: absolute; top: -8px; left: 38%;
    width: 11px; height: 11px; background: #fffdf7;
    border: 2.5px solid var(--a-bubble); border-radius: 50%;
    transform: rotate(20deg);
}
body.skin-anime #btnImprove:before { content: "\6539\5584"; }
body.skin-anime #btnTailor:before  { content: "\6C42\4EBA"; }
body.skin-anime #btnVoice:before   { content: "\58F0"; }
body.skin-anime .acts .pdf:before  { content: "\5370\5237"; }

/* Nothing to hang a bubble on when the bar is fixed to the bottom of a
   phone, and the short labels say the same thing. */
@media (max-width: 860px) {
    body.skin-anime #btnImprove:before, body.skin-anime #btnTailor:before,
    body.skin-anime #btnVoice:before, body.skin-anime .acts .pdf:before,
    body.skin-anime #btnImprove:after, body.skin-anime #btnTailor:after,
    body.skin-anime #btnVoice:after, body.skin-anime .acts .pdf:after {
        display: none;
    }
    body.skin-anime .acts { padding-top: 10px; }
}

/* The bar the base stylesheet fixes to the foot of a phone is white,
   which is right for plain and wrong here. Given as its own block so it
   stays with the bubbles it belongs beside. */
@media (max-width: 860px) {
    body.skin-anime .acts {
        background: rgba(16,13,38,.94);
        border-top: 1px solid var(--a-edge);
    }
    body.skin-anime .acts .act {
        background: rgba(255,255,255,.11);
        border: 1px solid rgba(200,212,255,.32);
    }
    body.skin-anime .acts .act.key {
        background: linear-gradient(135deg, var(--a-blue-lit) 0%, var(--a-violet) 100%);
        border-color: rgba(190,205,255,.75);
    }
    body.skin-anime .acts .act.pdf {
        background: linear-gradient(135deg, #f78fc0 0%, #e0559a 100%);
        border-color: rgba(255,190,220,.8);
    }
    body.skin-anime .acts .act.danger {
        background: rgba(120,40,54,.7); border-color: rgba(255,150,170,.5);
    }
}

/* ---- the rail: sticky notes on the desk --------------------------
   Small notes with the room showing between them - the point of the
   column is that it does not become a solid panel over the artwork.
   Colour cycles per resume, not per row: keying off :nth-child within a
   group made every card come out the same pink. */
body.skin-anime .rail {
    max-width: 232px;
    background: none; border: none; box-shadow: none; padding-right: 2px;
}
body.skin-anime .rail-h {
    color: var(--a-gold); letter-spacing: .18em; font-size: 11.5px; font-weight: 700;
    text-shadow: 0 2px 6px rgba(0,0,0,.9);
}
/* Each group carries its own paper colour as variables, so the note,
   its lighter version notes and the stack under the open one all stay
   in the same family without repeating three gradients per colour.
   Colour cycles per resume, not per row: keying off :nth-child within a
   group made every card come out the same pink. */
body.skin-anime .rgroup {
    background: none; border: none; box-shadow: none; overflow: visible;

    --n1: #ffe37a; --n2: #ffd34a; --n3: #f5c231; --n-ink: #3d2c00;
    --ns1: #fff6c6; --ns2: #ffefa4; --ns3: #ffe680; --ns-ink: #4a3a05;
    --n-tilt: -.5deg;
}
body.skin-anime .rgroup:nth-of-type(3n) {
    --n1: #9ed6ff; --n2: #6cbcfb; --n3: #3f9ce6; --n-ink: #06263f;
    --ns1: #d8eeff; --ns2: #b9e0ff; --ns3: #93cdf7; --ns-ink: #06304f;
    --n-tilt: .6deg;
}
body.skin-anime .rgroup:nth-of-type(3n+1) {
    --n1: #ffb3d2; --n2: #ff92c0; --n3: #f56ba4; --n-ink: #4b0d2b;
    --ns1: #ffdcea; --ns2: #ffc4dd; --ns3: #ffa6c9; --ns-ink: #5a1234;
    --n-tilt: -.35deg;
}

body.skin-anime .v {
    position: relative;
    border-radius: 3px; margin-bottom: 7px; padding: 9px 12px;
    /* The paper is held in a variable so the open and hovered states can
       reuse it instead of restating three colour stops each. */
    --n-bg: linear-gradient(168deg, var(--n1) 0%, var(--n2) 60%, var(--n3) 100%);
    background: var(--n-bg);
    color: var(--n-ink);
    box-shadow: 0 8px 16px -9px rgba(0,0,0,.85), inset 0 1px 0 rgba(255,255,255,.6);
    transform: rotate(var(--n-tilt));
    /* Which colour the pile under an open note is drawn in. Overridden
       on .sub so a version's pile is its own lighter paper. */
    --n-stack: var(--n3);
}
body.skin-anime .v .n { font-size: 13.5px; font-weight: 700; }
body.skin-anime .v .d { font-size: 11px; font-weight: 600; opacity: .72; }
body.skin-anime .rgroup .v:hover { filter: brightness(1.08); }

/* The open resume is a note lifted off the desk and set down on a pad
   of them. Nothing else on the page has a stack under it, so it reads
   at a glance without needing colour or a border to carry the message -
   and it is the one note lying straight while the rest sit askew.

   The pile is box-shadow, which takes no layout space, so the note
   below has to be pushed clear by hand with the larger margin. */
/* The open note keeps its own paper in every state. Without these the
   base stylesheet's .v.on:hover and .v.on .n take over - three classes
   each, which out-specify a plain body.skin-anime .v - and the note
   turns near-white with blue text the moment the pointer touches it.
   The extra .rgroup in the selector is what wins that. */
body.skin-anime .rgroup .v.on,
body.skin-anime .rgroup .v.on:hover,
body.skin-anime .rgroup .v.sub.on,
body.skin-anime .rgroup .v.sub.on:hover { background: var(--n-bg); }
body.skin-anime .rgroup .v.on .n,
body.skin-anime .rgroup .v.on .d { color: inherit; }

body.skin-anime .v.on,
body.skin-anime .rgroup .v.on:hover {
    transform: rotate(0deg) scale(1.035);
    margin-bottom: 30px;
    z-index: 2;
    filter: brightness(1.04);
    box-shadow:
        inset 0 1px 0 rgba(255,255,255,.7),
        0  4px 0 -1px var(--n-stack),
        0  5px 2px -1px rgba(0,0,0,.30),
        0  8px 0 -2px var(--n-stack),
        0  9px 2px -2px rgba(0,0,0,.27),
        0 12px 0 -3px var(--n-stack),
        0 13px 2px -3px rgba(0,0,0,.24),
        0 16px 0 -4px var(--n-stack),
        0 17px 3px -4px rgba(0,0,0,.21),
        0 20px 0 -5px var(--n-stack),
        0 21px 3px -5px rgba(0,0,0,.18),
        0 26px 22px -10px rgba(0,0,0,.85);
}

/* Versions: the same paper a few shades lighter, stepped in under the
   resume they belong to. */
body.skin-anime .v.sub {
    margin-left: 36px; padding: 8px 11px; border-top: none;
    --n-bg: linear-gradient(168deg, var(--ns1) 0%, var(--ns2) 60%, var(--ns3) 100%);
    background: var(--n-bg);
    color: var(--ns-ink);
    --n-stack: var(--ns3);
}
body.skin-anime .v.sub .n { font-size: 12.5px; }
/* The arrow says "this one hangs off the note above". As a text glyph
   it was a hairline over a busy painting and disappeared; this is a
   drawn one instead - thick gold stroke inside a dark ink outline, with
   a sparkle at the tip, the way an arrow is drawn in a panel rather
   than typed. Inline SVG, so there is no image file to upload and
   nothing to go missing.

   It lives in the margin the note is stepped in by, not outside it -
   the rail scrolls on its own on desktop, so anything hanging off the
   left edge would either be clipped or push a sideways scrollbar. */
body.skin-anime .v.sub:before {
    content: "";
    left: -34px; top: 0;
    width: 32px; height: 29px;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='38' height='34' viewBox='0 0 38 34'%3E%3Cg fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 3 V19 H21' stroke='%232b1b47' stroke-width='11'/%3E%3Cpath d='M15 10 L28 19 L15 28 Z' fill='%232b1b47' stroke='%232b1b47' stroke-width='7'/%3E%3Cpath d='M8 3 V19 H20' stroke='%23ffd45c' stroke-width='4.5'/%3E%3Cpath d='M17 13 L25 19 L17 25 Z' fill='%23ffd45c' stroke='none'/%3E%3C/g%3E%3Cpath d='M32 2 33.1 6.4 37.5 7.5 33.1 8.6 32 13 30.9 8.6 26.5 7.5 30.9 6.4z' fill='%23fff3c4'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: left top;
    background-size: contain;
    filter: drop-shadow(0 2px 4px rgba(0,0,0,.85));
}

/* Still dashed - it makes a new thing rather than opening one - but on
   a solid enough panel to be seen. A 1px dash at half opacity over the
   painting was the quietest item in the column. */
body.skin-anime .v-add {
    background: rgba(20,24,54,.62);
    border: 2px dashed var(--a-blue-lit);
    border-radius: 8px; color: #dce4ff; font-weight: 700;
}
body.skin-anime .v-add:hover {
    background: rgba(40,46,96,.72); border-color: #fff; color: #fff;
    border-style: solid;
}

/* A line of handwriting at the foot of the list, the way it is pinned
   to the wall in the artwork. Decorative, so it goes away as soon as
   the column does. */
body.skin-anime .rail:after {
    content: "Good resumes, brighter futures.";
    display: block; margin: 18px 6px 0;
    font-family: var(--a-hand); font-size: 14.5px; line-height: 1.45;
    color: #cdd8ff; opacity: .8; text-align: center;
    text-shadow: 0 2px 8px rgba(0,0,0,.9);
}

/* ---- controls: a panel floating over the room -------------------- */
/* No backdrop-filter here. With the artwork on a fixed layer behind it,
   iOS Safari composites a blurred panel as a plain white rectangle that
   clips straight through whatever text is under it. The panel is 88-93%
   opaque anyway, so the blur was buying almost nothing. */
body.skin-anime .panel {
    background: linear-gradient(180deg, rgba(22,26,56,.88), rgba(13,16,38,.93));
    border: 1px solid var(--a-edge);
    border-radius: 16px;
    box-shadow: 0 26px 46px -22px rgba(0,0,0,.95);
}
body.skin-anime .dochead { border-bottom-color: rgba(150,175,255,.18); }
body.skin-anime .dh-t { font-size: 19px; font-weight: 600; color: #f2f5ff; }
body.skin-anime .dh-s { color: var(--a-text-dim); }
body.skin-anime .pencil, body.skin-anime .subact { color: #cdd8ff; }
body.skin-anime .dh-t:hover .pencil,
body.skin-anime .subact:hover {
    background: rgba(140,160,255,.2); border-color: var(--a-blue-lit); color: #fff;
}

body.skin-anime .state, body.skin-anime .undo {
    border-radius: 999px; padding: 7px 14px; font-size: 12.5px;
    letter-spacing: .1em; text-transform: uppercase; font-weight: 700;
    background-image: none; box-shadow: none; text-shadow: none;
}
body.skin-anime .state {
    background: rgba(30,90,70,.6); color: #8fffcf;
    border: 1px solid rgba(143,255,207,.45);
}
body.skin-anime .state.busy {
    background: rgba(84,64,20,.6); color: var(--a-gold); border-color: rgba(255,217,138,.45);
}
body.skin-anime .state.bad {
    background: rgba(90,30,40,.6); color: #ffb3ba; border-color: rgba(255,179,186,.45);
}
body.skin-anime .undo {
    background: rgba(255,255,255,.1); color: #dbe4ff;
    border: 1px solid rgba(200,212,255,.3);
}

body.skin-anime .toggle {
    background: rgba(255,255,255,.1); border: 1px solid rgba(200,212,255,.3);
    border-radius: 999px;
}
body.skin-anime .tg-label, body.skin-anime .tg-word { color: #dbe4ff; text-shadow: none; }
body.skin-anime .tg-track { background: rgba(10,14,32,.8); border-radius: 999px; box-shadow: none; }
body.skin-anime .tg-knob {
    background-image: linear-gradient(180deg, #eaf0ff, #b9c8ff);
    border-radius: 50%;
}
body.skin-anime .toggle[aria-pressed="true"] .tg-knob {
    background-image: linear-gradient(180deg, #fff, var(--a-blue-lit));
    box-shadow: 0 0 12px rgba(120,140,255,.9);
}

/* ---- the document: a page taped to the screen -------------------- */
body.skin-anime .sheet {
    background: none; border: none; padding: 0; box-shadow: none;
    font-family: 'Segoe UI', -apple-system, sans-serif; color: var(--a-ink);
}
/* The page is slightly see-through, so the room reads through it and it
   sits in the scene rather than on top of it. Not blurred: the same iOS
   compositing bug that hit the panel applies here, and a blurred sheet
   of paper the height of a resume is the most expensive thing on the
   page to repaint while scrolling. */
body.skin-anime .tube {
    position: relative;
    /* Layer order is top-down: the two blossom sprays sit on the paper,
       the loose petals tile over it, and the paper itself is the last
       layer underneath. */
    background-image:
        var(--a-sakura),
        var(--a-sakura),
        var(--a-drift),
        linear-gradient(180deg,
            rgba(251,245,233,.90) 0%, rgba(242,233,214,.93) 100%);
    background-repeat: no-repeat, no-repeat, repeat, no-repeat;
    background-position:
        right -14px top -10px,
        right 6px bottom 40px,
        left 30px top 120px,
        0 0;
    background-size:
        210px 168px,
        150px 120px,
        360px 340px,
        auto;
    border-radius: 4px;
    box-shadow: 0 22px 40px -16px rgba(0,0,0,.9);
}
/* Washi tape across the top edge. */
body.skin-anime .tube:before {
    content: ""; position: absolute; top: -11px; left: 50%; margin-left: -58px;
    width: 116px; height: 24px; z-index: 2;
    background: repeating-linear-gradient(135deg,
        rgba(126,200,255,.9) 0px, rgba(126,200,255,.9) 7px,
        rgba(180,225,255,.9) 7px, rgba(180,225,255,.9) 14px);
    transform: rotate(-1.4deg);
    box-shadow: 0 2px 5px rgba(0,0,0,.28);
}
/* The frame: two thin rules a few millimetres apart, the way a
   certificate or a bookplate is ruled. box-shadow draws the inner one,
   so it is still a single element. */
body.skin-anime .tube:after {
    content: ""; position: absolute; inset: 11px; z-index: 1;
    pointer-events: none; border-radius: 2px;
    border: 1px solid rgba(196,157,103,.55);
    box-shadow: inset 0 0 0 5px transparent, inset 0 0 0 6px rgba(196,157,103,.34);
}
/* A small star at each corner of the frame, outside it. Four background
   layers on one element rather than four elements. */
body.skin-anime .sheet { position: relative; }
body.skin-anime .sheet:before {
    content: ""; position: absolute; inset: 4px; z-index: 2;
    pointer-events: none;
    background-repeat: no-repeat;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'%3E%3Cpath d='M9 0 10.5 7.5 18 9 10.5 10.5 9 18 7.5 10.5 0 9 7.5 7.5z' fill='%23d3ab74'/%3E%3C/svg%3E"), url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'%3E%3Cpath d='M9 0 10.5 7.5 18 9 10.5 10.5 9 18 7.5 10.5 0 9 7.5 7.5z' fill='%23d3ab74'/%3E%3C/svg%3E"), url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'%3E%3Cpath d='M9 0 10.5 7.5 18 9 10.5 10.5 9 18 7.5 10.5 0 9 7.5 7.5z' fill='%23d3ab74'/%3E%3C/svg%3E"), url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'%3E%3Cpath d='M9 0 10.5 7.5 18 9 10.5 10.5 9 18 7.5 10.5 0 9 7.5 7.5z' fill='%23d3ab74'/%3E%3C/svg%3E");
    background-size: 15px 15px;
    background-position: left top, right top, left bottom, right bottom;
    opacity: .85;
}

/* The name is the one serif thing on the page, the way it is set on a
   printed resume, with a sparkle after it. */
body.skin-anime .cname {
    font-family: Georgia, 'Times New Roman', serif;
    font-size: 30px; font-weight: 700; letter-spacing: -.01em;
    color: #131a22; text-transform: none;
}
body.skin-anime .cname:after {
    content: "\2726";
    font-family: 'Segoe UI', sans-serif; font-size: 19px;
    margin-left: 10px; vertical-align: 4px;
    color: var(--a-blue-lit);
}
body.skin-anime .cmeta { color: var(--a-ink-dim); }

/* Section headings: a four-point star, the label in blue caps, and the
   rule running out to the button. The rule is the base stylesheet's own
   border-bottom on a flex:1 heading - it only ever needed a colour. */
body.skin-anime .sec-h h2 {
    display: flex; align-items: center; gap: 8px;
    font-family: inherit; font-size: 11.5px; letter-spacing: .2em;
    color: var(--a-blue); font-weight: 700;
    /* The rule is a gradient, so it has to be a background rather than a
       border - fading from the heading's blue to the pink the timeline
       ends in, which ties the two together down the page. */
    border-bottom: none;
    background-image: linear-gradient(90deg, #7aa8ff 0%, #f79ec8 100%);
    background-repeat: no-repeat;
    background-position: left bottom;
    background-size: 100% 2px;
    padding-bottom: 7px;
}
body.skin-anime .sec-h h2:before {
    content: "\2726";
    font-size: 13px; letter-spacing: 0; color: var(--a-blue-lit);
    line-height: 1; flex-shrink: 0;
}

body.skin-anime .card p,
body.skin-anime .jbul li,
body.skin-anime .jpara { color: #35302a; font-size: 15px; font-weight: 400; }
body.skin-anime .jt {
    font-size: 17px; font-weight: 700; color: #171512;
    text-transform: none; letter-spacing: 0;
}
body.skin-anime .je { color: var(--a-ink-dim); }
body.skin-anime .jd { color: #8a8474; }

/* A timeline down the jobs and schools: a gradient spine with a node
   at each entry, alternating blue and pink so a long history reads as
   a sequence rather than a wall. */
body.skin-anime .card { position: relative; }
/* Each entry gets its own panel, a shade lighter than the paper, so a
   long history reads as a stack of cards rather than one column of
   text. The negative margin is the base stylesheet's; it has to be
   cancelled or the panel hangs off both edges of the page. */
body.skin-anime #viewJobs .card,
body.skin-anime #viewEducation .card {
    margin: 0 0 12px; padding: 13px 16px 13px 36px;
    background: rgba(255,252,245,.72);
    border: 1px solid rgba(224,208,178,.7);
    border-radius: 12px;
}
body.skin-anime #viewJobs .card:before,
body.skin-anime #viewEducation .card:before {
    content: ""; position: absolute; left: 18px; top: 26px; bottom: 14px;
    width: 3px; border-radius: 2px;
    background: linear-gradient(180deg, var(--a-blue-lit) 0%, var(--a-pink) 100%);
}
/* An open ring on the line - a hollow node reads as a point on a line,
   where a filled dot reads as a bullet. It sits below the job title and
   the employer rather than beside them: at the head of the card it
   landed on the first letter of the title, and a title that wraps to
   two lines made that worse. */
body.skin-anime #viewJobs .card:after,
body.skin-anime #viewEducation .card:after {
    content: ""; position: absolute; left: 9px; top: 56px;
    width: 15px; height: 15px; border-radius: 50%;
    background: transparent; border: 3px solid var(--a-blue-lit);
    box-shadow: 0 0 0 3px rgba(255,252,245,.9);
}
body.skin-anime .card:hover { background: rgba(126,200,255,.09); }
body.skin-anime .card.editing { background: #fdf6e6; border-color: #e0d5bb; }

body.skin-anime .chip {
    background: #e6f2fd; border: 1px solid #bfdff8; color: #17537f;
    border-radius: 999px; font-weight: 600;
}
body.skin-anime .jbul li:before { color: var(--a-blue-lit); }
body.skin-anime .empty { color: var(--a-ink-dim); }

/* Edit, Add and Remove become soft pills on the page instead of bare
   blue words - it is the one place the interface is allowed to sit on
   top of the paper, so it may as well look deliberate. */
body.skin-anime .edit,
body.skin-anime .contact-edit,
body.skin-anime .card-tools button {
    font-family: inherit; text-transform: none; letter-spacing: 0;
    font-size: 12.5px; font-weight: 650;
    color: var(--a-blue);
    background: #eaf4ff;
    border: 1px solid #b9d8f5;
    border-radius: 999px;
    padding: 6px 15px;
    box-shadow: 0 1px 2px rgba(30,50,80,.08);
}
body.skin-anime .edit:hover,
body.skin-anime .contact-edit:hover,
body.skin-anime .card-tools button:hover {
    background: #f2f8ff; border-color: #9fc9ee;
}
body.skin-anime .card-tools button.danger {
    color: #d1436b; background: #fff0f4; border-color: #f6c3d2;
}
body.skin-anime .card-tools button.danger:hover { background: #ffe3ec; border-color: #eda3bd; }

/* Save and Cancel live inside the sheet, where the dark glass pills the
   rest of the skin uses would be a hole punched in the paper. */
body.skin-anime .sheet .mini {
    background: #fff; border: 1px solid #cfe3f7; color: var(--a-blue);
    -webkit-backdrop-filter: none; backdrop-filter: none;
}
body.skin-anime .sheet .mini:hover { background: #f2f8ff; border-color: #9fc9ee; }
body.skin-anime .sheet .mini.key {
    background: linear-gradient(135deg, var(--a-blue-lit) 0%, var(--a-violet) 100%);
    border-color: rgba(140,160,240,.9); color: #fff;
    box-shadow: 0 4px 12px -4px rgba(120,140,255,.8);
}
body.skin-anime .hintline { color: #7a7365; }

body.skin-anime .cedit input, body.skin-anime .cedit textarea,
body.skin-anime .editor input, body.skin-anime .editor textarea,
body.skin-anime .ask-input {
    background: #fffdf6; border-color: #ddd2b8; color: var(--a-ink);
    font-family: inherit; border-radius: 8px;
}
body.skin-anime .drawer textarea {
    background: rgba(255,253,246,.95); border-color: #ddd2b8; color: var(--a-ink);
}
body.skin-anime .drawer {
    background: rgba(20,26,56,.55); border-bottom-color: rgba(150,175,255,.2);
}
body.skin-anime .drawer label { color: #cfd9f5; }

body.skin-anime .sugg, body.skin-anime .tip {
    background: #fff6dc; border-color: #e8d9a8; color: #6b5320;
}
body.skin-anime .tip button { background: #fffdf6; border-color: #e0cf9e; color: #6b5320; }
body.skin-anime .tip button.apply { background: #c98a2b; border-color: #c98a2b; color: #fff8e6; }

body.skin-anime .notice.good { background: rgba(30,90,70,.75); color: #8fffcf; }
body.skin-anime .notice.bad { background: rgba(90,30,40,.75); color: #ffb3ba; }

body.skin-anime .working-card, body.skin-anime .ask-card {
    background: linear-gradient(180deg, rgba(24,28,60,.97), rgba(14,18,40,.98));
    border: 1px solid rgba(160,180,255,.3); border-radius: 16px;
}
body.skin-anime .working-t, body.skin-anime .ask-t {
    font-family: inherit; color: #f2f5ff; font-size: 17px;
    text-transform: none; letter-spacing: 0;
}
body.skin-anime .working-s, body.skin-anime .ask-b { color: var(--a-text-dim); }
body.skin-anime .working-bar { background: rgba(10,14,32,.9); }
body.skin-anime .working-fill {
    background: linear-gradient(90deg, var(--a-violet), var(--a-blue-lit));
}

/* Sparkles and petals. Four-point stars and a few blossom shapes,
   tiled and fixed, so they sit over the room without moving when the
   page scrolls - and behind everything, so nothing has to make room
   for them. */
body.skin-anime:before {
    content: ""; position: fixed; inset: 0; z-index: 0; pointer-events: none;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='420' height='420'%3E%3Cg fill='%23ffffff'%3E%3Cpath d='M60 22 62 46 86 48 62 50 60 74 58 50 34 48 58 46z' opacity='.55'/%3E%3Cpath d='M300 90 301.4 106 317 107.5 301.4 109 300 125 298.6 109 283 107.5 298.6 106z' opacity='.4'/%3E%3Cpath d='M180 250 181.8 270 202 271.8 181.8 273.6 180 294 178.2 273.6 158 271.8 178.2 270z' opacity='.45'/%3E%3Cpath d='M370 320 371.2 333 384 334.2 371.2 335.4 370 348 368.8 335.4 356 334.2 368.8 333z' opacity='.35'/%3E%3Cpath d='M92 360 93.4 376 109 377.4 93.4 378.8 92 395 90.6 378.8 75 377.4 90.6 376z' opacity='.5'/%3E%3Cpath d='M248 176 249 187 260 188 249 189 248 200 247 189 236 188 247 187z' opacity='.3'/%3E%3C/g%3E%3Cg fill='%23ffc8de'%3E%3Cpath d='M140 120c5-6 12-5 13 1 1 5-4 9-9 8-4-1-6-5-4-9z' opacity='.3'/%3E%3Cpath d='M336 232c5-6 12-5 13 1 1 5-4 9-9 8-4-1-6-5-4-9z' opacity='.22'/%3E%3Cpath d='M44 288c5-6 12-5 13 1 1 5-4 9-9 8-4-1-6-5-4-9z' opacity='.26'/%3E%3Cpath d='M262 372c5-6 12-5 13 1 1 5-4 9-9 8-4-1-6-5-4-9z' opacity='.2'/%3E%3C/g%3E%3C/svg%3E");
}
/* Everything the page draws sits above them. */
/* Everything the page draws sits above them. The top bar keeps the
   sticky position and high stacking order it has in the base stylesheet
   - flattening it to z-index 1 here dropped it out of sticky and, worse,
   put it below the foreground layer below. */
body.skin-anime .shell { position: relative; z-index: 1; }
body.skin-anime .topbar { position: sticky; top: 0; z-index: 30; }

/* ---- stickers in front of the page -------------------------------
   Two of them, pinned to the bottom-right of the window and sitting
   above the sheet, so the page is tucked under something rather than
   laid flat over an empty desk.

   Drawn rather than cut out of the artwork, so they stay crisp at any
   size and there is no second image file to upload. pointer-events is
   off, so anything underneath is still clickable, and z-index 5 puts
   them over the paper but under the fixed action bar (20) and the top
   bar (30) - nothing you need to press ends up behind one. */
body.skin-anime .shell:after {
    content: ""; position: fixed; bottom: 0; right: 0; z-index: 5;
    width: 216px; height: 117px;
    margin-right: -12px; margin-bottom: 6px;
    pointer-events: none;
    background-repeat: no-repeat;
    background-position: bottom center;
    background-size: contain;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='130' viewBox='0 0 240 130'%3E%3Cg font-family='Segoe Script, Bradley Hand, Snell Roundhand, cursive'%3E%3Cg transform='translate(14,12) rotate(-3.5)'%3E%3Crect x='3' y='5' width='206' height='50' rx='25.0' fill='%231a1024' opacity='.38'/%3E%3Crect x='0' y='0' width='206' height='50' rx='25.0' fill='%23fffdf8'/%3E%3Crect x='5' y='5' width='196' height='40' rx='20.0' fill='%23f9e0ea'/%3E%3Crect x='5' y='5' width='196' height='40' rx='20.0' fill='none' stroke='%23e3a8c2' stroke-width='1.5' opacity='.7'/%3E%3Ctext x='103.0' y='31.0' text-anchor='middle' font-size='17' fill='%238a3f61'%3EGood Skills%3C/text%3E%3C/g%3E%3Cg transform='translate(22,66) rotate(2.5)'%3E%3Crect x='3' y='5' width='198' height='50' rx='25.0' fill='%231a1024' opacity='.38'/%3E%3Crect x='0' y='0' width='198' height='50' rx='25.0' fill='%23fffdf8'/%3E%3Crect x='5' y='5' width='188' height='40' rx='20.0' fill='%23dde7fa'/%3E%3Crect x='5' y='5' width='188' height='40' rx='20.0' fill='none' stroke='%2393b3e4' stroke-width='1.5' opacity='.7'/%3E%3Ctext x='99.0' y='31.0' text-anchor='middle' font-size='17' fill='%2339568c'%3EAmazing Things%3C/text%3E%3C/g%3E%3Cpath d='M212 6 c3.5-4.5 10-3.5 10 2.2 0 4.6-5.6 8-10 11.4 -4.4-3.4-10-6.8-10-11.4 0-5.7 6.5-6.7 10-2.2z' fill='%23e2698f'/%3E%3Cpath d='M14 108 15.4 114 21.4 115.4 15.4 116.8 14 122.8 12.6 116.8 6.6 115.4 12.6 114z' fill='%23e9c98a'/%3E%3C/g%3E%3C/svg%3E");
}

body.skin-anime .lamp { background: rgba(255,255,255,.25); }
body.skin-anime .act.running .lamp { background: var(--a-gold); box-shadow: 0 0 9px var(--a-gold); }
body.skin-anime .act.done .lamp { background: #ff5c6e; box-shadow: 0 0 9px rgba(255,92,110,.9); }

@media (max-width: 860px) {
    /* The portrait crop, composed for a phone: sky and city in the top
       two thirds, desk along the bottom edge. Because the artwork is a
       fixed viewport-sized layer now, this needs nothing but the swap. */
    body.skin-anime:after {
        background-image: url('/resume/images/anime-desk-phone.webp?v=2');
        background-position: center center;
    }
    /* Same iOS compositing problem as the panel, and the bottom action
       bar is a fixed element sitting directly on the fixed artwork -
       the worst case for it. Solid-enough backgrounds instead. */
    body.skin-anime .topbar,
    body.skin-anime .ghost, body.skin-anime .act,
    body.skin-anime .mini, body.skin-anime .go {
        -webkit-backdrop-filter: none; backdrop-filter: none;
    }
    body.skin-anime .topbar { background: rgba(20,17,44,.88); }
    body.skin-anime .ghost, body.skin-anime .act, body.skin-anime .mini {
        background: rgba(46,42,86,.85);
    }
    body.skin-anime .cname { font-size: 23px; }
    body.skin-anime .dh-t { font-size: 17px; }

    /* Smaller here - about 60% - and lifted clear of the fixed action
       bar. At this size the lettering on the spines is decoration
       rather than something anyone reads. */
    /* Just clear of the fixed action bar. The safe-area inset is NOT
       added here: the base stylesheet already builds it into that bar's
       own bottom padding, so counting it again floated the stickers a
       whole home-indicator too high. 68px is the bar plus a small gap. */
    body.skin-anime .shell:after {
        width: 132px; height: 72px;
        margin-right: -8px;
        margin-bottom: 68px;
        opacity: .93;
    }

    /* ---- the notes shrink to their words -------------------------
       Full-bleed notes across a phone were bars, not paper, and they
       hid the room they are supposed to be lying in. Making the group
       a column of flex-start items is what shrink-wraps them: a block
       child fills its parent, a flex item aligned to the start does
       not. max-width keeps a long resume name from running off the
       side - the name ellipsises at that point, as it already does in
       the narrow desktop rail. */
    body.skin-anime .rail { max-width: 100%; }
    body.skin-anime .rail:after { display: none; }
    /* The list moves off the left edge so the pencils, lamp and mug in
       the artwork are not permanently behind paper. One number: raise
       it to push the notes further right, drop it to give them more
       room for long names. Padding rather than margin, so the notes'
       max-width below still measures against what is left. */
    body.skin-anime .rail { padding-left: 30%; padding-right: 4px; }
    body.skin-anime .rgroup {
        display: flex; flex-direction: column; align-items: flex-start;
    }
    body.skin-anime .v {
        max-width: 100%;
        padding: 8px 13px;
    }
    body.skin-anime .v .n { font-size: 13px; }
    body.skin-anime .v .d { font-size: 10.5px; }
    /* The tilt stays now that they are small - a dozen little notes at
       slightly different angles is the pile the artwork wants. It was
       only ever turned off because a full-width note leaning over
       pushed a scrollbar onto the page. */
    body.skin-anime .v.sub { margin-left: 40px; }
    body.skin-anime .v.sub:before { left: -38px; width: 36px; height: 32px; }
    body.skin-anime .v.on { margin-bottom: 28px; }
    /* Shrink-wrapped too, so it reads as another note rather than a
       banner across the top of the list. */
    body.skin-anime .v-add {
        display: inline-block;
        width: -webkit-fit-content; width: fit-content;
        max-width: 100%;
        padding: 10px 16px;
    }

    body.skin-anime .bn { font-size: 17px; }
    body.skin-anime.studio .bn:after { font-size: 11.5px; }
}

/* ==================================================================
   RETRO
   ------------------------------------------------------------------
   Moved here wholesale from studio.php's own <style> block, rule for
   rule unchanged. It used to live inside the studio, which meant no
   other page could wear it - a dashboard with skin-retro on its body
   rendered plain, because the rules simply weren't on that page.

   Everything a skin does now lives in this one file, which any page can
   link. Source order still puts these after the studio's base rules, so
   which rule wins hasn't changed.

   Only ever colour, type and surface - no layout is moved, nothing is
   hidden or shown. The plain and retro versions draw the same markup,
   so a change to the studio's behaviour can't work in one and break in
   the other.
   ================================================================== */

body.skin-retro {
    background: #16130f;
    background-image: none;
    color: #f0b866;
    font-family: 'Courier New', Courier, monospace;
}

/* ---- chrome ---- */
body.skin-retro .topbar {
    background: #1c1712; border-bottom: 2px solid #3d3226;
}
body.skin-retro .bn {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #ffce8a; letter-spacing: .08em;
    text-transform: uppercase; font-size: 18px; font-weight: 400;
    text-shadow: 1px 0 0 currentColor; }
body.skin-retro .bn span {
    background: none; -webkit-text-fill-color: #d98f2b; color: #d98f2b;
}
body.skin-retro .ghost {
    font-family: 'DotGothic16', 'Courier New', monospace;
    background: #3a2f21; border-color: #6b5330; color: #ffd79b;
    text-transform: uppercase; letter-spacing: .05em; font-size: 14px; font-weight: 400;
    text-shadow: 1px 0 0 currentColor;
    box-shadow: inset 0 -2px 0 rgba(0,0,0,.3);
}
body.skin-retro .skinmenu {
    background: #241d16; border: 2px solid #6b5330; border-radius: 4px;
    box-shadow: 0 10px 30px -10px rgba(0,0,0,.8);
}
body.skin-retro .skinmenu-h {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #b98f52; letter-spacing: .14em;
}
body.skin-retro .skinopt {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #ffd79b; border-radius: 3px; text-transform: uppercase;
    letter-spacing: .05em;
}
body.skin-retro .skinopt:hover { background: #5c4a30; color: #fff0d0; }
body.skin-retro .tick { color: #f0b866; }

body.skin-retro .ghost:hover {
    background: #5c4a30; border-color: #d9a457; color: #fff0d0;
    box-shadow: inset 0 1px 0 rgba(255,240,200,.4),
                inset 0 -2px 0 rgba(0,0,0,.3),
                0 0 12px rgba(217,143,43,.35);
}

/* ---- rail: one lit LCD module, not a stack of buttons ---- */
body.skin-retro .rail-h {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #e0bb8a; letter-spacing: .14em; font-size: 13px; font-weight: 400;
    text-shadow: 1px 0 0 currentColor;
}
/* A lit panel behind a dot grid, rather than a flat orange rectangle.
   The grid is what makes it read as a character display; keeping it
   faint keeps the text legible on top of it. */
body.skin-retro .rgroup {
    background-color: #ec9c32;
    background-image:
        repeating-linear-gradient(to right,
            rgba(150,80,0,.20) 0px, rgba(150,80,0,.20) 1px,
            rgba(0,0,0,0) 1px, rgba(0,0,0,0) 6px),
        repeating-linear-gradient(to bottom,
            rgba(150,80,0,.20) 0px, rgba(150,80,0,.20) 1px,
            rgba(0,0,0,0) 1px, rgba(0,0,0,0) 6px),
        radial-gradient(130% 100% at 50% 40%, #ffce7e 0%, #f4a72c 68%, #e0920f 100%);
    border: 12px solid #0a0a0a;
    border-radius: 7px;
    box-shadow:
        inset 0 0 0 2px #241403,
        0 3px 8px rgba(0,0,0,.7);
    overflow: hidden;
}
body.skin-retro .v { color: #1c0e00; }
body.skin-retro .v .n {
    font-family: 'DotGothic16', 'Courier New', monospace;
    -webkit-font-smoothing: none; font-smooth: never;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    font-size: 17px; line-height: 1.32; letter-spacing: .11em;
    text-transform: uppercase; font-weight: 400; color: #140900;
    text-shadow: 1px 0 0 #140900, 0 1px 0 #140900, 1px 1px 0 #140900;
}
body.skin-retro .v .d {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #3a1c00; font-size: 13.5px; letter-spacing: .09em; font-weight: 400;
    margin-top: 4px;
    text-shadow: 1px 0 0 #3a1c00;
}
/* Rows read as keys on a panel: a lit top edge and a dark bottom one,
   so they look raised, and the reverse when pressed. Flat text on glass
   gave nothing to say "this can be pressed". */
/* Every state is a tint over the panel, never a solid fill. A row that
   paints its own background hides the dot grid underneath, which is the
   thing that makes this look like a display at all - so hover and
   selection are translucent, and the lines show through all three
   states. */
body.skin-retro .v {
    background: transparent;
    box-shadow: inset 0 1px 0 rgba(255,240,210,.45),
                inset 0 -2px 0 rgba(140,70,0,.22);
    border-radius: 2px;
    margin-bottom: 1px;
}
body.skin-retro .rgroup .v:hover {
    background-color: rgba(255,246,220,.38);
    box-shadow: inset 0 1px 0 rgba(255,250,230,.6),
                inset 0 -2px 0 rgba(140,70,0,.24);
}
/* Selection inverts, the way these panels actually show it. */
/* Inverted selection, the way a character display shows it - and with
   the dot grid dropped, since the cells go dark under the block. */
/* Pressed: sunk into the panel, still lit. Inverting to near-black
   read as a hole rather than a key - you could not tell what it was,
   only that something was missing. Now it stays amber, goes a shade
   deeper, and gets a dark inner edge at the top with a lit one at the
   bottom: the exact reverse of the raised state. */
/* Pressed: a shade of the same panel, sunk in. Translucent, so the
   cells stay visible - a solid fill read as a different object sitting
   on top rather than a key pushed into the surface. */
/* Pressed, and unmistakably so: sunk in, and with a lit bar down the
   left edge. The tint alone was too quiet once contrast came down - you
   could see something was different without seeing which. */
body.skin-retro .v.on {
    background-color: rgba(130,62,0,.30);
    background-image: none;
    box-shadow: inset 5px 0 0 #2b1400,
                inset 0 3px 6px rgba(90,42,0,.45),
                inset 0 -2px 0 rgba(255,230,180,.4);
    padding-left: 20px;
}
body.skin-retro .v.sub.on { padding-left: 38px; }
body.skin-retro .v.on .n:after {
    content: " \25C0"; font-size: 12px; color: #2b1400;
}
/* Selected rows ignore hover entirely. The hover rule is more specific
   than the selected one, so it was replacing the whole box-shadow -
   taking the left bar with it, which is the only thing saying which row
   you are on. Nothing to gain by lighting a row you are already in. */
body.skin-retro .rgroup .v.on:hover,
body.skin-retro .rgroup .v.sub.on:hover {
    background-color: rgba(130,62,0,.30);
    box-shadow: inset 5px 0 0 #2b1400,
                inset 0 3px 6px rgba(90,42,0,.45),
                inset 0 -2px 0 rgba(255,230,180,.4);
}
body.skin-retro .v.on .n { color: #100700; }
body.skin-retro .v.on .d { color: #331a00; }
body.skin-retro .v.on .n {
    text-shadow: 1px 0 0 #1a0d00, 0 1px 0 #1a0d00, 1px 1px 0 #1a0d00;
}
body.skin-retro .v.on .d { text-shadow: 1px 0 0 #4a2400; }
body.skin-retro .v.sub { background: rgba(120,58,0,.13); border-top-color: rgba(90,45,0,.3); }
body.skin-retro .v.sub.on { background-color: rgba(130,62,0,.30); background-image: none; }
body.skin-retro .v.sub:before {
    color: #40200a; font-size: 20px; top: 7px; left: 8px;
    text-shadow: 1px 0 0 #40200a, 0 1px 0 #40200a;
}
body.skin-retro .v.sub.on:before { color: #1a0d00; }

/* Dashed, in full amber rather than the muted brown it was - which on
   a near-black cabinet read as an empty slot rather than a control. */
body.skin-retro .v-add {
    font-family: 'DotGothic16', 'Courier New', monospace;
    background: #1c1712; border: 2px dashed #d98f2b; color: #ffce8a;
    text-transform: uppercase; letter-spacing: .07em; font-size: 15px; font-weight: 400;
    text-shadow: 1px 0 0 currentColor;
}
body.skin-retro .v-add:hover {
    background: #33291d; border-color: #ffce8a; color: #fff0d0;
    border-style: solid;
}

/* ---- controls ---- */
body.skin-retro .panel {
    background: #241d16; border: 2px solid #3d3226;
}
body.skin-retro .dochead { border-bottom-color: #3d3226; }
body.skin-retro .pencil {
    font-family: 'DotGothic16', 'Courier New', monospace;
    background: none; border: 1px solid transparent; color: #a08a63;
    border-radius: 3px; font-size: 12px; padding: 2px 7px;
    text-shadow: none;
}
/* The same blue the switch lights with, so the two read as one family
   of "this is live" rather than two unrelated highlights. */
body.skin-retro .dh-t:hover .pencil,
body.skin-retro .subact:hover {
    background: #0f2740; border-color: #4a9be0; color: #bfe2ff;
    box-shadow: 0 0 10px rgba(90,170,255,.55), inset 0 0 8px rgba(70,150,240,.35);
    text-shadow: 0 0 6px rgba(160,215,255,.7);
}

body.skin-retro .dh-t {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #ffce8a; letter-spacing: .04em;
    text-transform: uppercase; font-size: 19px; font-weight: 400;
    text-shadow: 1px 0 0 currentColor; }
body.skin-retro .dh-s { color: #bda078; letter-spacing: .06em; }
body.skin-retro .subact {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #a08a63; font-size: 12px; border-radius: 3px;
}



/* Both read as little panel displays: recessed, dot grid, glowing
   characters. Same colours as before - only the surface changes. */
/* Small dot-matrix readouts: square corners, a coarse visible cell
   grid, characters thickened by a whole dot and given a phosphor glow.
   Rounded corners and fine grids read as modern UI; these should read
   as two little segments bolted to a panel. */
/* Silkscreen for these two only: square pixels, a real bold, and blocky
   enough at this size to read as segments rather than type. Press Start
   2P was smoother and brighter than it looked - fine letterforms, wrong
   texture. */
body.skin-retro .state, body.skin-retro .undo {
    font-family: 'Silkscreen', 'Courier New', monospace;
    font-weight: 700;
    /* Back to the smaller size - 20px pushed these two off the row on a
       phone. Roughness comes from turning antialiasing off instead,
       which stops the browser softening the pixel edges, and costs no
       width at all. */
    font-size: 13px; letter-spacing: .1em; text-transform: uppercase;
    -webkit-font-smoothing: none; font-smooth: never;
    text-rendering: optimizeSpeed;
    border-radius: 0; padding: 10px 13px;
    background-image:
        repeating-linear-gradient(to right,
            rgba(0,0,0,.45) 0px, rgba(0,0,0,.45) 1px,
            rgba(0,0,0,0) 1px, rgba(0,0,0,0) 6px),
        repeating-linear-gradient(to bottom,
            rgba(0,0,0,.45) 0px, rgba(0,0,0,.45) 1px,
            rgba(0,0,0,0) 1px, rgba(0,0,0,0) 6px);
    box-shadow: inset 0 0 0 2px #0a0a0a,
                inset 0 3px 7px rgba(0,0,0,.9);
}
body.skin-retro .state {
    text-shadow: 0 0 5px rgba(127,224,138,.45);
}
body.skin-retro .undo:not(:disabled) {
    text-shadow: 0 0 5px rgba(232,163,63,.4);
}
body.skin-retro .undo:disabled { text-shadow: none; }
body.skin-retro .state {
    background-color: #16240f; color: #7fe08a; border: 1px solid #35603a;
}
body.skin-retro .state.busy { background: #2a1e0a; color: #e0b45f; border-color: #6b501c; }
body.skin-retro .state.bad { background: #2a0f0f; color: #e08080; border-color: #6b2626; }
body.skin-retro .toggle {
    background: #3a2f21; border-color: #6b5330; color: #cbb187;
    font-family: 'DotGothic16', 'Courier New', monospace;
    text-transform: uppercase; letter-spacing: .05em; font-size: 13px;
    text-shadow: 1px 0 0 currentColor;
}

body.skin-retro .undo {
    background-color: #2a1a08; border: 1px solid #6b4a1c; color: #e8a33f;
}
body.skin-retro .undo:disabled { opacity: .45; }

body.skin-retro .act {
    font-family: 'DotGothic16', 'Courier New', monospace;
    background: #3a2f21; border: 2px solid #6b5330; color: #ffd79b;
    text-transform: uppercase; letter-spacing: .06em; font-size: 15px; font-weight: 400;
    text-shadow: 1px 0 0 currentColor;
    box-shadow: inset 0 -3px 0 rgba(0,0,0,.3);
}
/* A border shift alone was invisible against the cabinet. Hovering now
   lifts the whole key: brighter face, lit top edge, and a glow. */
body.skin-retro .act:hover {
    background: #5c4a30; border-color: #d9a457; color: #fff0d0;
    box-shadow: inset 0 1px 0 rgba(255,240,200,.4),
                inset 0 -3px 0 rgba(0,0,0,.3),
                0 0 12px rgba(217,143,43,.35);
}
body.skin-retro .act.key:hover, body.skin-retro .act.live:hover {
    background: #f0a94a; border-color: #fff0d0;
    box-shadow: inset 0 -3px 0 rgba(0,0,0,.25), 0 0 16px rgba(240,169,74,.55);
}
body.skin-retro .act.danger:hover {
    background: #6b2e18; border-color: #ff7a45; color: #ffd0bd;
    box-shadow: 0 0 12px rgba(255,122,69,.35);
}
body.skin-retro .act.key,
body.skin-retro .act.live {
    background: #d98f2b; border-color: #ffce8a; color: #241a09;
    box-shadow: inset 0 -3px 0 rgba(0,0,0,.25);
}
body.skin-retro .acts-note { color: #bda078; letter-spacing: .05em; font-size: 12px; }

/* ---- drawers ---- */
body.skin-retro .drawer { background: #1c1712; border-bottom-color: #3d3226; }
body.skin-retro .drawer label { color: #c2a271; }
body.skin-retro .drawer textarea,
body.skin-retro .cedit input, body.skin-retro .cedit textarea,
body.skin-retro .editor input, body.skin-retro .editor textarea {
    background: #16130f; border-color: #5a4527; color: #f0b866;
    font-family: 'Courier New', Courier, monospace;
}
body.skin-retro .go {
    background: #d98f2b; color: #241a09;
    text-transform: uppercase; letter-spacing: .13em;
    box-shadow: inset 0 -3px 0 rgba(0,0,0,.25);
}
body.skin-retro .act.danger { color: #ff7a45; border-color: #7a3a1c; }

body.skin-retro .notice.good { background: #16240f; color: #7fe08a; }
body.skin-retro .notice.bad { background: #2a0f0f; color: #e08080; }

/* ---- the document: a CRT with a light screen ----
   Dark text on light, deliberately. Amber-on-black looks the part and
   is genuinely hard to read for the length of a career history, which
   is the one thing this page exists to let you do. */
/* The cabinet: a deep moulded bezel with the tube seated inside it. */
body.skin-retro .sheet {
    background: linear-gradient(155deg, #e6dcc4 0%, #cfc4ad 40%, #a89c85 100%);
    border: none;
    border-radius: 34px;
    box-shadow: inset 0 2px 3px rgba(255,255,255,.6),
                inset 0 -3px 6px rgba(0,0,0,.28),
                0 10px 30px -12px rgba(0,0,0,.6);
    padding: 20px;
    font-family: 'Courier New', Courier, monospace;
    color: #000;
}

/* The glass. What reads as "curved" is three things together: corners
   rounded far more than the cabinet's and on an elliptical radius, so
   the curve differs across and down; a bright middle falling away into
   the corners; and the glass turning darker where it bends away. No
   images and no script - the browser draws all of it. */
body.skin-retro .tube {
    position: relative;
    border-radius: 46px / 34px;
    background: radial-gradient(120% 120% at 50% 42%,
        #ffffff 0%, #f8fafb 46%, #e2e8ed 78%, #bcc6cf 100%);
    box-shadow:
        inset 0 0 30px rgba(70,95,120,.26),
        inset 0 0 90px rgba(70,95,120,.16),
        inset 0 3px 0 rgba(255,255,255,.9),
        0 0 0 3px #5f5648,
        0 0 0 6px #8d8371;
    overflow: hidden;
}
/* Darkening into the corners, strongest where the glass turns away. */
body.skin-retro .tube:after {
    content: ""; position: absolute; inset: 0; pointer-events: none;
    border-radius: 46px / 34px;
    box-shadow: inset 0 0 60px rgba(40,60,80,.2),
                inset 0 0 22px rgba(40,60,80,.26);
}
body.skin-retro .doc {
    background-image: repeating-linear-gradient(
        to bottom, rgba(0,0,0,0) 0px, rgba(0,0,0,0) 2px,
        rgba(40,60,80,.035) 3px, rgba(40,60,80,.035) 4px);
}
body.skin-retro .cname {
    letter-spacing: .11em; text-transform: uppercase;
    font-size: 22px; color: #000; font-weight: 700;
}
body.skin-retro .cmeta { color: #1f1f1f; letter-spacing: .04em; }
body.skin-retro .sec-h h2 {
    color: #000; letter-spacing: .26em; border-bottom: 2px solid #000;
    font-family: 'Courier New', Courier, monospace; font-weight: 700;
}
body.skin-retro .edit, body.skin-retro .contact-edit,
body.skin-retro .card-tools button {
    color: #14507a; font-family: 'Courier New', Courier, monospace;
    text-transform: uppercase; letter-spacing: .08em; font-size: 12px; font-weight: 700;
}
body.skin-retro .card-tools button.danger { color: #96240f; }
body.skin-retro .card p, body.skin-retro .jbul li, body.skin-retro .jpara {
    color: #111; font-weight: 700;
}
body.skin-retro .jt { color: #000; letter-spacing: .06em; text-transform: uppercase; font-weight: 700; }
body.skin-retro .je { color: #1f1f1f; font-weight: 700; }
body.skin-retro .jd { color: #1f1f1f; font-weight: 700; }
body.skin-retro .card:hover { background: rgba(60,90,120,.05); }
body.skin-retro .card.editing { background: #e8edf1; border-color: #b3bfca; }
body.skin-retro .chip { background: #e6e6e6; color: #000; border-radius: 3px; font-weight: 700; }
body.skin-retro .empty { color: #4a4a4a; }
body.skin-retro .mini { background: #dde4ea; border-color: #b3bfca; color: #1c2530;
    text-transform: uppercase; letter-spacing: .1em; }
body.skin-retro .mini.key { background: #2e6d99; border-color: #2e6d99; color: #fff; }
body.skin-retro .hintline { color: #3d3d3d; }

body.skin-retro .sugg { background: #f2ead8; border-color: #d8c9a4; }
body.skin-retro .tip { background: #f2ead8; border-color: #d8c9a4; color: #5c4a20; }
body.skin-retro .tip button { background: #fff; border-color: #c9b78d; color: #5c4a20;
    text-transform: uppercase; letter-spacing: .09em; }
body.skin-retro .tip button.apply { background: #77602c; border-color: #77602c; color: #fff; }

body.skin-retro .ask-card { background: #241d16; border: 2px solid #5a4527; }
body.skin-retro .ask-t {
    color: #ffce8a; text-transform: uppercase; letter-spacing: .06em;
    font-family: 'DotGothic16', 'Courier New', monospace; font-size: 19px;
    text-shadow: 1px 0 0 currentColor;
}
body.skin-retro .ask-b { color: #cbb187; }
body.skin-retro .ask-input {
    background: #16130f; border-color: #5a4527; color: #f0b866;
    font-family: 'DotGothic16', 'Courier New', monospace;
}
body.skin-retro .ask-row .go.danger { background: #8a2a14; color: #ffd0bd; }

body.skin-retro .working-card { background: #241d16; }
body.skin-retro .working-t { color: #ffce8a; text-transform: uppercase; letter-spacing: .12em; }
body.skin-retro .working-s { color: #cbb187; }
body.skin-retro .working-bar { background: #33291d; }
body.skin-retro .working-fill { background: #d98f2b; }

/* ---- brass switch ----
   A knurled lever on a brushed plate, thrown left and right. Same
   markup as the plain toggle - the track is the plate, the knob is
   the lever. */
body.skin-retro .toggle {
    padding: 4px 12px 4px 10px; gap: 10px;
    background: linear-gradient(160deg, #c2a86e 0%, #a08653 22%, #7e6739 60%, #5c4a28 100%);
    border: 1px solid #43371d;
    box-shadow: inset 0 1px 0 rgba(255,238,190,.35),
                inset 0 -2px 4px rgba(0,0,0,.4),
                0 1px 2px rgba(0,0,0,.5);
}
body.skin-retro .tg-track {
    width: 44px; height: 22px; border-radius: 3px;
    /* The slot cut through the plate. */
    background: linear-gradient(180deg, #120e08 0%, #241c11 55%, #0d0a06 100%);
    box-shadow: inset 0 2px 5px rgba(0,0,0,.95),
                inset 0 0 0 1px #2e2413,
                0 1px 0 rgba(255,230,175,.28);
    transition: none;
}
body.skin-retro .tg-knob {
    width: 21px; height: 15px; top: 3px; left: 3px; margin-left: 0;
    border-radius: 3px;
    /* Brass, with knurling milled across it. */
    background-image:
        repeating-linear-gradient(90deg,
            rgba(60,44,18,.5) 0px, rgba(60,44,18,.5) 1px,
            rgba(0,0,0,0) 1px, rgba(0,0,0,0) 3px),
        linear-gradient(180deg, #f6e6b4 0%, #cbab68 38%, #967c42 72%, #6b5730 100%);
    box-shadow: 0 1px 2px rgba(0,0,0,.8), inset 0 1px 0 rgba(255,248,220,.6);
    transition: left .12s;
}
body.skin-retro .toggle[aria-pressed="true"] .tg-knob {
    left: 20px;
    box-shadow: 0 1px 2px rgba(0,0,0,.8),
                inset 0 1px 0 rgba(255,248,220,.6),
                0 0 11px rgba(90,170,255,.9),
                0 0 22px rgba(60,140,255,.5);
}
/* The slot lights too, so the glow reads as the circuit closing
   rather than as a highlight on the lever. */
body.skin-retro .toggle[aria-pressed="true"] .tg-track {
    box-shadow: inset 0 2px 5px rgba(0,0,0,.95),
                inset 0 0 0 1px #2e5f8a,
                inset 0 0 10px rgba(70,150,240,.5),
                0 1px 0 rgba(255,230,175,.28);
}
/* Dark engraved letters with a light edge under them, the way text
   stamped into a metal plate catches the light. Amber on brass had
   almost no contrast to work with. */
body.skin-retro .tg-label, body.skin-retro .tg-word {
    color: #1a1204;
    text-shadow: 0 1px 0 rgba(255,240,200,.5), 1px 0 0 #1a1204;
    font-size: 14px; letter-spacing: .1em;
}
body.skin-retro .toggle[aria-pressed="true"] .tg-word {
    color: #0d2338;
    text-shadow: 0 1px 0 rgba(255,240,200,.5), 1px 0 0 #0d2338;
}
body.skin-retro .tg-word { min-width: 30px; }

/* ---- the lamp on a running action ---- */
body.skin-retro .lamp { background: #4a3a22; box-shadow: inset 0 1px 2px rgba(0,0,0,.8); }
body.skin-retro .act.running .lamp { background: #ffb020; box-shadow: 0 0 10px #ffb020; }
body.skin-retro .act.done .lamp {
background: #ff2a1c;
box-shadow: 0 0 10px rgba(255,42,28,1), 0 0 20px rgba(255,42,28,.6);
}
/* The key keeps its lit face while the lamp is red - dimming the whole
   thing made "done" look like "broken". */
body.skin-retro .act.key.done {
background: #d98f2b; border-color: #ffce8a; color: #241a09; opacity: .9;
}

@media (max-width: 860px) {
    /* Two lines then ellipsis, so a long name is readable in a
       full-width rail. Was written alongside the base rule in
       studio.php; the base half stayed there. */
    body.skin-retro .v .n {
        white-space: normal; line-height: 1.35;
        display: -webkit-box; -webkit-line-clamp: 2;
        -webkit-box-orient: vertical; overflow: hidden;
    }

    body.skin-retro .dh-s { letter-spacing: 0; }
    body.skin-retro .subact { font-size: 11px; }

    /* The panel was sized for a 296px column. At full width the same
       type reads as oversized, and the chunky bezel eats the screen.
       Back to roughly what it was before the desktop rail widened. */
    body.skin-retro .rgroup { border-width: 8px; border-radius: 5px; }
    body.skin-retro .v { padding: 9px 11px; }
    body.skin-retro .v .n { font-size: 14px; letter-spacing: .07em; }
    body.skin-retro .v .d { font-size: 11.5px; letter-spacing: .05em; margin-top: 3px; }
    body.skin-retro .v.sub { padding: 8px 11px 8px 26px; }
    body.skin-retro .v.sub .n { font-size: 13px; }
    body.skin-retro .v.sub:before { font-size: 16px; left: 7px; top: 7px; }
    body.skin-retro .v.on { padding-left: 16px; }
    body.skin-retro .v.sub.on { padding-left: 30px; }
    body.skin-retro .v-add { font-size: 13px; padding: 10px; }
    body.skin-retro .rail-h { font-size: 11px; }

    /* A gentler curve and a thinner bezel: at this width the deep
       version takes the corners off the text. */
    body.skin-retro .sheet { padding: 12px; border-radius: 22px; }
    body.skin-retro .tube,
    body.skin-retro .tube:after { border-radius: 26px / 20px; }

    body.skin-retro .state, body.skin-retro .undo {
        font-size: 12px; padding: 9px 10px; letter-spacing: .06em;
    }
}


/* ==================================================================
   LOOK PICKER - unskinned base
   ------------------------------------------------------------------
   The picker's own layout and its plain-look colours. It used to live
   in studio.php's <style>, which meant a picker dropped onto any other
   page had no styling at all. The button is a .ghost, so each skin's
   chrome already covers it; only the menu needs restyling, and each
   skin does that in a handful of rules further down.
   ================================================================== */

.skinpick { position: relative; }
.skinbtn { display: inline-flex; align-items: center; gap: 8px; }
.skinbtn .chev { font-size: 10px; opacity: .7; }
.sw { display: inline-flex; gap: 3px; flex-shrink: 0; }
.sw i { width: 11px; height: 11px; border-radius: 2px; display: block;
    border: 1px solid rgba(0,0,0,.14); }
.skinmenu {
    position: absolute; right: 0; top: calc(100% + 8px); z-index: 40;
    min-width: 194px; padding: 6px;
    background: #fff; border: 1px solid rgba(20,20,50,.12); border-radius: 12px;
    box-shadow: 0 10px 30px -12px rgba(20,20,40,.35);
    text-align: left;
}
.skinmenu[hidden] { display: none; }
.skinmenu-h { font-size: 11px; letter-spacing: .12em; text-transform: uppercase;
    color: #9292a3; padding: 6px 10px 8px; }
.skinopt { display: flex; align-items: center; gap: 10px; width: 100%;
    padding: 8px 10px; border: none; background: none; border-radius: 8px;
    font: inherit; font-size: 14px; color: inherit; text-align: left;
    cursor: pointer; }
.skinopt:hover { background: #eef0ff; }
.skinname { flex: 1; min-width: 0; }
/* Kept in the layout rather than hidden, so the rows do not shift by a
   tick's width as the selection moves. */
.tick { visibility: hidden; font-size: 13px; color: #5b6cff; }
.skinopt.on .tick { visibility: visible; }


/* ==================================================================
   SHARED PAGE VOCABULARY
   ------------------------------------------------------------------
   Class names that mean the same thing on every page, so one set of
   rules per skin covers all of them and page number seven inherits
   every skin without a line being written for it.

   The studio already used .topbar, .brand, .bn, .logo, .topright,
   .ghost, .shell and .panel; the four below are what the pages outside
   it needed on top of those. Anything genuinely unique to one page
   still gets styled by that page.

     .tile        a card that is a link - the dashboard's app entries
     .tile-label  its heading
     .tile-desc   its explanatory line
     .muted       secondary text: an address, a date, a caption
     .slink       a plain text link in a body of content
   ================================================================== */

/* Dark glass at 70%, not a 7% white wash. The wash let almost the whole
   painting through, so the artwork won on every tile and the words on
   them were hard to read. The room still shows, just less of it - the
   .70 is the number to move if it wants to be more or less see-through. */
body.skin-anime .tile {
    background: rgba(20,24,54,.70);
    border: 1px solid var(--a-edge);
    color: var(--a-text);
}
body.skin-anime .tile:hover {
    background: rgba(30,35,72,.80);
    border-color: var(--a-edge-lit);
    box-shadow: 0 10px 26px -14px rgba(0,0,0,.9);
}
/* The little glyph chip on a tile. White with a dark mark is right on
   a light page and wrong on both dark ones, so it inverts: the chip
   takes the surface and the glyph takes the ink. Covers the dashboard's
   app icons and the three cards on start.php, which now call it the
   same thing. */
body.skin-anime .tile .icon {
    background: rgba(255,255,255,.10);
    border: 1px solid var(--a-edge);
    color: #dbe4ff;
    box-shadow: none;
}
body.skin-anime .tile-label { color: #f0f4ff; }
body.skin-anime .tile-desc,
body.skin-anime .muted { color: var(--a-text-dim); }
body.skin-anime .slink { color: #bcd0ff; }
body.skin-anime .slink:hover { color: #fff; }

body.skin-retro .tile {
    background: #241d16; border: 2px solid #5a4527; border-radius: 4px;
    color: #ffd79b;
}
body.skin-retro .tile:hover {
    background: #33291d; border-color: #d98f2b; box-shadow: none;
}
body.skin-retro .tile .icon {
    background: #1c1712;
    border: 2px solid #6b5330;
    border-radius: 4px;
    color: #f0b866;
    box-shadow: inset 0 -2px 0 rgba(0,0,0,.3);
}
body.skin-retro .tile-label {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #ffce8a; text-transform: uppercase; letter-spacing: .06em;
    text-shadow: 1px 0 0 currentColor;
}
body.skin-retro .tile-desc,
body.skin-retro .muted { color: #bda078; letter-spacing: .04em; }
body.skin-retro .slink {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #f0b866; text-transform: uppercase; letter-spacing: .05em;
}
body.skin-retro .slink:hover { color: #ffe4b0; }


/* Forms inside a .panel. The studio has no .field anywhere, so these
   can't reach it - and the auth-card rules further up can't help here,
   because that card is .card and this one is .panel. Same treatment,
   different container. */
body.skin-anime .panel .field > label { color: var(--a-text-dim); }
body.skin-anime .panel .field input[type=email],
body.skin-anime .panel .field input[type=password],
body.skin-anime .panel .field input[type=text] {
    background: rgba(10,13,34,.75);
    border: 1px solid rgba(180,196,255,.28);
    color: var(--a-text);
}
body.skin-anime .panel .field input:focus-visible {
    border-color: var(--a-blue-lit);
    box-shadow: 0 0 0 3px rgba(108,139,255,.25);
}
body.skin-anime .panel button[type=submit] {
    background: linear-gradient(135deg, var(--a-blue-lit) 0%, var(--a-violet) 100%);
    color: #0e1330;
}
body.skin-anime .panel .toggle-eye { color: #93a6d8; background: none; }
body.skin-anime .panel .toggle-eye:hover { color: #eaf0ff; }
/* The dashed pick-a-file box, dressed like the rail's new-resume note. */
body.skin-anime .panel .file-drop {
    background: rgba(255,255,255,.06);
    border: 1.5px dashed rgba(190,205,255,.42);
    color: var(--a-text);
}
body.skin-anime .panel .file-drop:hover {
    background: rgba(255,255,255,.12); border-color: var(--a-edge-lit);
}
body.skin-anime .panel .file-sub { color: var(--a-text-dim); }
body.skin-anime .panel .progress-bar-track { background: rgba(10,14,32,.8); }
body.skin-anime .panel .progress-bar-fill {
    background: linear-gradient(90deg, var(--a-violet), var(--a-blue-lit));
}
body.skin-anime .panel .progress-label { color: var(--a-text-dim); }
body.skin-anime .panel .result { color: #ffb3ba; }

body.skin-retro .panel .field > label {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #c2a271; text-transform: uppercase; letter-spacing: .06em;
}
body.skin-retro .panel .field input[type=email],
body.skin-retro .panel .field input[type=password],
body.skin-retro .panel .field input[type=text] {
    background: #16130f; border: 1px solid #5a4527; color: #f0b866;
    border-radius: 3px; font-family: 'Courier New', Courier, monospace;
}
body.skin-retro .panel .field input:focus-visible {
    border-color: #d98f2b; box-shadow: 0 0 0 3px rgba(217,143,43,.25);
}
body.skin-retro .panel button[type=submit] {
    font-family: 'DotGothic16', 'Courier New', monospace;
    background: #d98f2b; color: #241a09; border-radius: 3px;
    text-transform: uppercase; letter-spacing: .1em; font-weight: 400;
    box-shadow: inset 0 -3px 0 rgba(0,0,0,.25);
}
body.skin-retro .panel .toggle-eye { color: #a08a63; background: none; }
body.skin-retro .panel .toggle-eye:hover { color: #ffd79b; }
body.skin-retro .panel .file-drop {
    background: #1c1712; border: 2px dashed #8a6230; border-radius: 4px;
    color: #ffbe63;
}
body.skin-retro .panel .file-drop:hover { background: #241d16; border-color: #d98f2b; }
body.skin-retro .panel .file-main {
    font-family: 'DotGothic16', 'Courier New', monospace;
    text-transform: uppercase; letter-spacing: .06em;
}
body.skin-retro .panel .file-sub { color: #bda078; }
body.skin-retro .panel .progress-bar-track { background: #33291d; }
body.skin-retro .panel .progress-bar-fill { background: #d98f2b; }
body.skin-retro .panel .progress-label { color: #bda078; }
body.skin-retro .panel .result { color: #e08080; }


/* ==================================================================
   THE AUTH CARD
   ------------------------------------------------------------------
   style.css draws one centred card and six pages use it: login,
   register, forgot, reset, change password and TOTP setup. Styling its
   class names here covers all six at once.

   Four of those are logged out, so they can never be anything but
   plain - a page has to know who is asking before it can know whose
   look to wear. Only the two behind a login actually change.

   Every rule needs .authcard on the body as well as .card. The name
   collides: style.css calls the centred panel .card, and the studio
   calls every job, education and summary entry .card too. Without the
   marker these rules painted the whole resume dark - which is exactly
   what happened the first time. The two pages that have an auth card
   put authcard on their body; nothing else does.

   Scoped to .card rather than to bare element selectors for the same
   reason. style.css styles `button` directly, and this file loads on
   every page in the app.
   ================================================================== */

body.skin-anime.authcard .card {
    background: linear-gradient(180deg, rgba(22,26,56,.90) 0%, rgba(13,16,38,.94) 100%);
    border: 1px solid var(--a-edge);
    box-shadow: 0 26px 46px -22px rgba(0,0,0,.95);
}
body.skin-anime.authcard .card h2 { color: #f2f5ff; }
body.skin-anime.authcard .card .field label { color: var(--a-text-dim); }
body.skin-anime.authcard .card .field input {
    background: rgba(10,13,34,.75);
    border: 1px solid rgba(180,196,255,.28);
    color: var(--a-text);
    border-radius: 10px;
}
body.skin-anime.authcard .card .field input:focus {
    border-color: var(--a-blue-lit);
    box-shadow: 0 0 0 3px rgba(108,139,255,.25);
}
body.skin-anime.authcard .card .field input::placeholder { color: rgba(166,182,224,.6); }
/* Not the eye toggle - that is a button too, and it sits inside the
   field rather than under it. */
body.skin-anime.authcard .card button:not(.toggle-eye) {
    background: linear-gradient(135deg, var(--a-blue-lit) 0%, var(--a-violet) 100%);
    color: #0e1330; border-radius: 999px;
    box-shadow: 0 6px 18px -6px rgba(120,140,255,.75);
}
body.skin-anime.authcard .card .toggle-eye { color: #93a6d8; }
body.skin-anime.authcard .card .toggle-eye:hover { color: #eaf0ff; }
body.skin-anime.authcard .card .result { color: var(--a-text-dim); }
body.skin-anime.authcard .card .links a { color: #bcd0ff; }
body.skin-anime.authcard .card .brand-logo .brand-name::after {
    background: linear-gradient(92deg, var(--a-blue-lit) 0%, var(--a-violet) 100%);
    -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent; color: transparent;
}

body.skin-retro.authcard .card {
    background: #241d16; border: 2px solid #3d3226; border-radius: 6px;
    box-shadow: 0 10px 30px -12px rgba(0,0,0,.8);
}
body.skin-retro.authcard .card h2 {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #ffce8a; text-transform: uppercase; letter-spacing: .06em;
    font-weight: 400; text-shadow: 1px 0 0 currentColor;
}
body.skin-retro.authcard .card .field label {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #c2a271; text-transform: uppercase; letter-spacing: .06em;
}
body.skin-retro.authcard .card .field input {
    background: #16130f; border: 1px solid #5a4527; color: #f0b866;
    border-radius: 3px;
    font-family: 'Courier New', Courier, monospace;
}
body.skin-retro.authcard .card .field input:focus {
    border-color: #d98f2b; box-shadow: 0 0 0 3px rgba(217,143,43,.25);
}
body.skin-retro.authcard .card button:not(.toggle-eye) {
    font-family: 'DotGothic16', 'Courier New', monospace;
    background: #d98f2b; color: #241a09;
    border-radius: 3px; text-transform: uppercase; letter-spacing: .1em;
    font-weight: 400;
    box-shadow: inset 0 -3px 0 rgba(0,0,0,.25);
}
body.skin-retro.authcard .card .toggle-eye { color: #a08a63; }
body.skin-retro.authcard .card .toggle-eye:hover { color: #ffd79b; }
body.skin-retro.authcard .card .result { color: #cbb187; }
body.skin-retro.authcard .card .links a {
    font-family: 'DotGothic16', 'Courier New', monospace;
    color: #f0b866; text-transform: uppercase; letter-spacing: .05em;
}
/* Flat, not a gradient - the wordmark is set the same way in the top
   bar on every other retro page. */
body.skin-retro.authcard .card .brand-logo .brand-name::after {
    background: none;
    -webkit-text-fill-color: #d98f2b; color: #d98f2b;
    font-family: 'DotGothic16', 'Courier New', monospace;
    text-transform: uppercase; letter-spacing: .08em;
}


/* ==================================================================
   NOCTURNE
   ------------------------------------------------------------------
   Oak, parchment, oxblood and brass. Where anime is a painting with the
   interface floating on it, this one is an object: a bound page on a
   desk, with a ribbon marking the place and a seal in the corner.

   No artwork files. The ribbon and the seal are inline SVG, the foxing
   on the paper is six radial gradients, and the marbled edge of the
   board is a five-stop linear gradient - so adding this skin cost one
   row in skins.php and this block, and nothing to upload.

   Set in a serif throughout, which is the sharpest break from the other
   three: they are all sans. The script face is used exactly three times
   - the wordmark, the rail heading, and the tips in the margin - so it
   stays an accent rather than becoming the voice. Menus and buttons are
   italic serif instead: script at 13px is decoration pretending to be
   navigation, and it falls back to something arbitrary when the font
   does not load.

   The document on screen is dressed like a page from a book. The PDF is
   not: it is always the plain resume, whatever is on screen here.
   ================================================================== */

body.skin-nocturne {
    /* ---- palette ---- */
    --n-oak:      #241b12;   /* the desk, and the board the page sits on */
    --n-oak-lit:  #312619;
    --n-board:    #2a2118;
    --n-parch:    #ece3cd;   /* the page */
    --n-parch-2:  #ddd1b2;
    --n-ink:      #241c12;
    --n-ink-2:    #4a3f2c;
    --n-ink-dim:  #6d604a;
    --n-rule:     #a68a52;   /* the ruled frame and the hairlines */
    --n-brass:    #b08d3f;
    --n-brass-lit:#d9b871;
    --n-blood:    #5c1f1f;   /* headings, the ribbon, the seal */
    --n-blood-lit:#8f2f2f;
    --n-edge:     rgba(176,141,63,.30);

    --n-serif:  'EB Garamond', Georgia, 'Times New Roman', serif;
    --n-script: 'Tangerine', 'Snell Roundhand', 'Segoe Script', cursive;

    background: var(--n-oak);
    background-image: none;
    color: #e0d4b4;
    font-family: var(--n-serif);
}

/* ---- chrome ---- */
body.skin-nocturne .topbar {
    background: var(--n-oak-lit);
    border-bottom: 2px solid var(--n-edge);
}
body.skin-nocturne .bn {
    font-family: var(--n-serif); font-style: italic;
    font-size: 24px; font-weight: 600; letter-spacing: .01em; color: #efe6cf;
}
/* The one place the script earns its keep in the chrome. Tangerine is a
   light face, so it needs a size above the words beside it to hold. */
body.skin-nocturne .bn span {
    font-family: var(--n-script); font-style: normal;
    font-size: 34px; font-weight: 700; line-height: 1;
    background: none; -webkit-text-fill-color: var(--n-brass); color: var(--n-brass);
}
/* The mark is the mark on every skin - never recoloured, never
   filtered. All it gets here is brass light behind it, the same job the
   glow does on anime. */
body.skin-nocturne .logo {
    background: transparent; border-radius: 50%;
    filter: drop-shadow(0 0 9px rgba(176,141,63,.55));
}

body.skin-nocturne .ghost,
body.skin-nocturne .act,
body.skin-nocturne .mini,
body.skin-nocturne .go,
body.skin-nocturne .undo,
body.skin-nocturne .toggle {
    font-family: var(--n-serif); font-style: italic;
    font-size: 15px; font-weight: 500; letter-spacing: .01em;
    background: transparent; border: 1px solid #6b5330; border-radius: 4px;
    color: #e6dabb;
}
body.skin-nocturne .ghost:hover,
body.skin-nocturne .act:hover,
body.skin-nocturne .mini:hover,
body.skin-nocturne .undo:hover:not(:disabled) {
    background: #3a2c1a; border-color: var(--n-brass); color: #fff3d6;
}
body.skin-nocturne .act.key,
body.skin-nocturne .act.live,
body.skin-nocturne .go,
body.skin-nocturne .mini.key {
    background: var(--n-brass); border: 1px solid #d9b871; color: #241a09;
    font-style: normal; font-weight: 600;
}
body.skin-nocturne .act.pdf { background: transparent; border-color: #6b5330; }
body.skin-nocturne .act.danger { color: #d98080; border-color: #6b3030; }
body.skin-nocturne .act.danger:hover { background: #3a1c1c; border-color: #a34a4a; }
body.skin-nocturne .acts-note { color: #9d8a63; font-style: italic; }

/* ---- the look picker ---- */
body.skin-nocturne .skinmenu {
    background: var(--n-oak); border: 1px solid #6b5330; border-radius: 6px;
    box-shadow: 0 16px 34px -16px rgba(0,0,0,.9);
}
body.skin-nocturne .skinmenu-h {
    font-family: var(--n-serif); font-style: italic;
    color: #8f7c57; letter-spacing: .16em; text-transform: none;
}
body.skin-nocturne .skinopt {
    font-family: var(--n-serif); font-style: italic; font-size: 15px;
    color: #d5c69f; border-radius: 4px;
}
body.skin-nocturne .skinopt:hover { background: #3a2c1a; color: #fff3d6; }
body.skin-nocturne .skinopt.on { background: #3a2c1a; color: #f0e4c4; }
body.skin-nocturne .tick { color: var(--n-brass); }
body.skin-nocturne .sw i { border-color: rgba(176,141,63,.45); }

/* ---- the rail: a card catalogue ---- */
body.skin-nocturne .rail { background: none; }
/* The second script accent. */
body.skin-nocturne .rail-h {
    font-family: var(--n-script); font-size: 25px; font-weight: 700;
    letter-spacing: 0; text-transform: none; color: var(--n-brass);
    padding-bottom: 6px;
}
body.skin-nocturne .rgroup {
    background: none; border: none; box-shadow: none; overflow: visible;
    margin-bottom: 10px;
}
/* Buff index cards. The open one is in lighter stock with an oxblood
   spine, the way a card pulled forward in a drawer catches the light. */
body.skin-nocturne .v {
    background: linear-gradient(180deg, #ded2b4 0%, #d0c19d 100%);
    color: #2f2618; border-radius: 3px; margin-bottom: 6px;
    box-shadow: 0 4px 10px -6px rgba(0,0,0,.85);
}
body.skin-nocturne .v .n { font-family: var(--n-serif); font-size: 15px; font-weight: 600; }
body.skin-nocturne .v .d { font-family: var(--n-serif); font-style: italic; font-size: 12.5px; color: #6d604a; }
body.skin-nocturne .rgroup .v:hover { background: linear-gradient(180deg, #e7dcc1 0%, #dacca8 100%); }
body.skin-nocturne .rgroup .v.on,
body.skin-nocturne .rgroup .v.on:hover {
    background: linear-gradient(180deg, #efe7d2 0%, #e2d7bb 100%);
    box-shadow: inset 5px 0 0 var(--n-blood), 0 8px 18px -8px rgba(0,0,0,.9);
    padding-left: 18px;
}
body.skin-nocturne .rgroup .v.on .n,
body.skin-nocturne .rgroup .v.on .d { color: inherit; }
body.skin-nocturne .v.sub {
    background: linear-gradient(180deg, #d6c9a8 0%, #c9b993 100%);
    border-top: none; margin-left: 18px;
}
body.skin-nocturne .v.sub .n { font-style: italic; font-weight: 500; }
body.skin-nocturne .v.sub:before { color: #7a6543; font-size: 16px; }
body.skin-nocturne .v-add {
    font-family: var(--n-serif); font-style: italic; font-size: 15px;
    background: transparent; border: 2px dashed #8a6f3d;
    border-radius: 4px; color: #c9ab6a; font-weight: 500;
}
body.skin-nocturne .v-add:hover { background: #3a2c1a; border-style: solid; border-color: var(--n-brass); }

/* ---- controls ---- */
body.skin-nocturne .panel {
    background: var(--n-oak-lit); border: 1px solid var(--n-edge); border-radius: 6px;
}
body.skin-nocturne .dochead { border-bottom-color: var(--n-edge); }
body.skin-nocturne .dh-t { font-family: var(--n-serif); font-size: 21px; font-weight: 600; color: #efe6cf; }
body.skin-nocturne .dh-s { font-family: var(--n-serif); font-style: italic; color: #9d8a63; }
body.skin-nocturne .pencil,
body.skin-nocturne .subact {
    font-family: var(--n-serif); font-style: italic; text-transform: none;
    letter-spacing: 0; color: #9d8a63;
}
body.skin-nocturne .dh-t:hover .pencil,
body.skin-nocturne .subact:hover {
    color: #fff3d6; border-color: var(--n-brass); background: #3a2c1a;
}
body.skin-nocturne .state {
    font-family: var(--n-serif); font-style: italic; font-weight: 500;
    background: #23301f; color: #a8c99a; border: 1px solid #46603c; border-radius: 4px;
}
body.skin-nocturne .state.busy { background: #33280f; color: #d9b871; border-color: #6b5330; }
body.skin-nocturne .state.bad { background: #341a1a; color: #d98080; border-color: #6b3030; }
body.skin-nocturne .tg-label, body.skin-nocturne .tg-word { color: #d5c69f; }
body.skin-nocturne .tg-track { background: #16100a; border-radius: 3px; box-shadow: inset 0 1px 3px rgba(0,0,0,.9); }
body.skin-nocturne .tg-knob { background-image: linear-gradient(180deg, #e7d3a0, #b08d3f); border-radius: 2px; }
body.skin-nocturne .toggle[aria-pressed="true"] .tg-track { background: #3a2c1a; }
body.skin-nocturne .toggle[aria-pressed="true"] .tg-knob {
    background-image: linear-gradient(180deg, #fff3d6, #d9b871);
    box-shadow: 0 0 9px rgba(217,184,113,.8);
}
body.skin-nocturne .lamp { background: #4a3a22; }
body.skin-nocturne .act.running .lamp { background: var(--n-brass); box-shadow: 0 0 8px var(--n-brass); }
body.skin-nocturne .act.done .lamp { background: var(--n-blood-lit); box-shadow: 0 0 8px rgba(143,47,47,.9); }

/* ---- the document: a page in a bound book ----
   .sheet is the board the page is mounted on, with a marbled strip down
   its left edge - what you would actually see of an endpaper. .tube is
   the page itself. */
body.skin-nocturne .sheet {
    background: var(--n-board);
    background-image: linear-gradient(100deg,
        #4a3a24 0%, #6b5330 18%, #3d2f1d 34%, #7d6438 52%, #42331f 68%,
        var(--n-board) 68%, var(--n-board) 100%);
    background-size: 100% 100%;
    border: none; border-radius: 4px;
    padding: 14px 14px 14px 22px;
    box-shadow: 0 22px 44px -20px rgba(0,0,0,.95);
    font-family: var(--n-serif); color: var(--n-ink);
    position: relative;
}

/* Parchment, with foxing. Six soft radial gradients rather than a
   texture image - old paper is blotchy, and flat cream reads as card
   stock rather than as something that has been in a drawer. */
body.skin-nocturne .tube {
    position: relative;
    border-radius: 2px;
    background-image:
        radial-gradient(ellipse 52px 40px at 8% 10%, rgba(169,127,69,.20), rgba(169,127,69,0) 70%),
        radial-gradient(ellipse 44px 34px at 92% 8%, rgba(169,127,69,.16), rgba(169,127,69,0) 70%),
        radial-gradient(ellipse 58px 45px at 12% 88%, rgba(169,127,69,.18), rgba(169,127,69,0) 70%),
        radial-gradient(ellipse 40px 32px at 88% 92%, rgba(169,127,69,.15), rgba(169,127,69,0) 70%),
        radial-gradient(ellipse 70px 55px at 52% 44%, rgba(169,127,69,.10), rgba(169,127,69,0) 70%),
        linear-gradient(180deg, var(--n-parch) 0%, var(--n-parch-2) 100%);
}

/* The place-marker, hanging from behind the top edge of the page. */
body.skin-nocturne .tube:before {
    content: ""; position: absolute; top: -14px; right: 46px;
    width: 30px; height: 150px; z-index: 3;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='150' viewBox='0 0 30 150'%3E%3Cdefs%3E%3ClinearGradient id='r' x1='0' y1='0' x2='1' y2='0'%3E%3Cstop offset='0' stop-color='%237d2a2a'/%3E%3Cstop offset='45%25' stop-color='%23a33c3c'/%3E%3Cstop offset='100%25' stop-color='%235c1f1f'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M0 0 h30 v138 l-15 -13 -15 13z' fill='url(%23r)'/%3E%3C/svg%3E");
    background-repeat: no-repeat; background-size: contain;
    filter: drop-shadow(1px 3px 3px rgba(0,0,0,.5));
    transform: none; box-shadow: none;
}

/* Two ruled lines a few millimetres apart, the way a bookplate is
   ruled. box-shadow draws the inner one, so it stays one element. */
body.skin-nocturne .tube:after {
    content: ""; position: absolute; inset: 16px; z-index: 1;
    pointer-events: none; border-radius: 0;
    border: 1px solid var(--n-rule);
    box-shadow: inset 0 0 0 5px transparent, inset 0 0 0 6px rgba(166,138,82,.5);
    background: none; opacity: .85;
}

/* The seal, pressed into the foot of the page. pointer-events off so it
   never takes a click from anything under it. */
body.skin-nocturne .sheet:before {
    content: ""; position: absolute; right: 34px; bottom: 30px;
    width: 60px; height: 60px; z-index: 4; pointer-events: none;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='60' height='60' viewBox='0 0 60 60'%3E%3Cpolygon points='59.4,30.0 58.1,36.4 57.5,43.2 52.4,47.8 48.8,53.5 42.8,56.6 36.4,57.8 30.0,60.0 23.7,57.8 17.1,56.8 12.2,52.3 7.6,47.9 3.2,42.9 -0.3,36.9 1.2,30.0 1.6,23.5 2.6,16.8 5.4,10.4 11.1,6.3 17.1,3.3 23.0,-0.8 30.0,1.5 36.9,-0.4 42.7,3.6 48.0,7.5 52.5,12.1 56.5,17.3 60.3,23.1' fill='%23732626'/%3E%3Ccircle cx='30' cy='30' r='22' fill='none' stroke='%233f1414' stroke-width='1' opacity='.5'/%3E%3Cpath d='M32 17 a13 13 0 1 0 8 23 A15 15 0 0 1 32 17z' fill='%233f1414' opacity='.6'/%3E%3C/svg%3E");
    background-repeat: no-repeat; background-size: contain;
    filter: drop-shadow(1px 3px 4px rgba(0,0,0,.55));
    inset: auto 34px 30px auto; opacity: .95;
}
/* Room reserved for it, so it never lands on the last entry. */
body.skin-nocturne .doc { padding-bottom: 96px; }

/* The name set as a title page rather than a heading. */
body.skin-nocturne .cname {
    font-family: var(--n-serif); font-size: 30px; font-weight: 500;
    letter-spacing: .12em; text-transform: uppercase; text-align: center;
    color: var(--n-ink);
}
body.skin-nocturne .cmeta {
    font-style: italic; color: var(--n-ink-dim); text-align: center;
}
body.skin-nocturne .contact-edit { display: block; margin: 8px auto 0; }

/* Oxblood small caps over a hairline rule, with an ornament instead of
   a star. */
body.skin-nocturne .sec-h h2 {
    font-family: var(--n-serif); font-size: 13px; font-weight: 500;
    letter-spacing: .32em; text-transform: uppercase;
    color: var(--n-blood);
    border-bottom: 1px solid rgba(166,138,82,.6);
    padding-bottom: 6px;
}
body.skin-nocturne .sec-h h2:before {
    content: "\2766"; margin-right: 9px; letter-spacing: 0;
    font-size: 13px; color: var(--n-rule);
}
body.skin-nocturne .edit,
body.skin-nocturne .contact-edit,
body.skin-nocturne .card-tools button {
    font-family: var(--n-serif); font-style: italic; font-size: 14px;
    text-transform: none; letter-spacing: 0; color: var(--n-blood);
    background: none; border: none; padding: 2px 4px;
}
body.skin-nocturne .card-tools button.danger { color: #96240f; }
body.skin-nocturne .sheet .mini {
    background: #efe7d2; border: 1px solid var(--n-rule); color: var(--n-ink);
    font-family: var(--n-serif); font-style: italic;
}
body.skin-nocturne .sheet .mini.key {
    background: var(--n-blood); border-color: var(--n-blood); color: #f3e7cf;
    font-style: normal;
}

/* Entries divided by a rule rather than boxed - which is how a book
   separates one thing from the next. */
body.skin-nocturne #viewJobs .card,
body.skin-nocturne #viewEducation .card,
body.skin-nocturne #viewCerts .card {
    border: none; border-bottom: 1px solid rgba(166,138,82,.4);
    border-radius: 0; background: none;
    margin: 0 0 4px; padding: 12px 2px;
}
body.skin-nocturne #viewJobs .card:last-child,
body.skin-nocturne #viewEducation .card:last-child,
body.skin-nocturne #viewCerts .card:last-child { border-bottom: none; }
body.skin-nocturne .card:hover { background: rgba(166,138,82,.08); }
body.skin-nocturne .card.editing {
    background: #f4eeda; border: 1px solid var(--n-rule); border-radius: 2px;
}
body.skin-nocturne .card p,
body.skin-nocturne .jbul li,
body.skin-nocturne .jpara { font-size: 16px; line-height: 1.6; color: #332a1e; }
body.skin-nocturne .jt { font-size: 18px; font-weight: 600; color: var(--n-ink); text-transform: none; }
body.skin-nocturne .je { font-style: italic; color: var(--n-ink-dim); font-size: 15px; }
body.skin-nocturne .jd { font-style: italic; color: var(--n-ink-dim); font-size: 14px; }
body.skin-nocturne .jbul li:before { color: var(--n-rule); }
body.skin-nocturne .chip {
    background: rgba(166,138,82,.16); border: 1px solid rgba(166,138,82,.4);
    color: #40341f; border-radius: 2px; font-size: 14px;
}
body.skin-nocturne .empty { color: var(--n-ink-dim); }
body.skin-nocturne .hintline { color: #7a6b4f; font-style: italic; }
body.skin-nocturne .cedit input, body.skin-nocturne .cedit textarea,
body.skin-nocturne .editor input, body.skin-nocturne .editor textarea,
body.skin-nocturne .ask-input {
    background: #f7f2e2; border-color: var(--n-rule); color: var(--n-ink);
    font-family: var(--n-serif); font-size: 15px; border-radius: 2px;
}

/* ---- tips as marginalia ----
   Annotations in a book are handwritten, so this is the third and last
   place the script appears. Set larger than the text around it, because
   Tangerine is a light face and matching sizes would leave it faint. */
body.skin-nocturne .sugg,
body.skin-nocturne .tip {
    background: none; border: none; border-left: 2px solid rgba(166,138,82,.55);
    border-radius: 0; padding: 4px 0 4px 14px; color: #5f4f2c;
    font-family: var(--n-script); font-size: 21px; line-height: 1.35;
}
body.skin-nocturne .sugg h3 { font-family: var(--n-serif); font-style: italic; font-size: 14px; }
body.skin-nocturne .sugg li { font-size: 21px; line-height: 1.35; color: #5f4f2c; }
body.skin-nocturne .tip button {
    font-family: var(--n-serif); font-style: italic; font-size: 13px;
    background: #efe7d2; border: 1px solid var(--n-rule); color: var(--n-ink);
    border-radius: 2px;
}
body.skin-nocturne .tip button.apply { background: var(--n-blood); border-color: var(--n-blood); color: #f3e7cf; }

/* ---- drawers, notices, dialogs ---- */
body.skin-nocturne .drawer { background: #2f251a; border-bottom-color: var(--n-edge); }
body.skin-nocturne .drawer label { color: #d5c69f; font-style: italic; }
body.skin-nocturne .drawer textarea {
    background: #f7f2e2; border-color: var(--n-rule); color: var(--n-ink);
    font-family: var(--n-serif); font-size: 15px;
}
body.skin-nocturne .notice.good { background: #23301f; color: #a8c99a; }
body.skin-nocturne .notice.bad { background: #341a1a; color: #d98080; }
body.skin-nocturne .working-card,
body.skin-nocturne .ask-card {
    background: var(--n-oak-lit); border: 1px solid #6b5330; border-radius: 6px;
}
body.skin-nocturne .working-t, body.skin-nocturne .ask-t {
    font-family: var(--n-serif); font-size: 20px; font-weight: 500; color: #efe6cf;
    text-transform: none; letter-spacing: 0;
}
body.skin-nocturne .working-s, body.skin-nocturne .ask-b { color: #b6a67f; font-style: italic; }
body.skin-nocturne .working-bar { background: #16100a; }
body.skin-nocturne .working-fill { background: linear-gradient(90deg, #7d6438, var(--n-brass)); }

/* ---- shared vocabulary: the pages outside the studio ---- */
body.skin-nocturne .tile {
    background: rgba(49,38,25,.78); border: 1px solid var(--n-edge); color: #e0d4b4;
    border-radius: 4px;
}
body.skin-nocturne .tile:hover { background: #3a2c1a; border-color: var(--n-brass); }
body.skin-nocturne .tile .icon {
    background: rgba(176,141,63,.14); border: 1px solid var(--n-edge);
    color: var(--n-brass); box-shadow: none; border-radius: 4px;
}
body.skin-nocturne .tile-label { font-family: var(--n-serif); font-size: 19px; color: #f0e4c4; }
body.skin-nocturne .tile-desc,
body.skin-nocturne .muted { color: #a8956f; }
body.skin-nocturne .slink { font-style: italic; color: var(--n-brass); }
body.skin-nocturne .slink:hover { color: #fff3d6; }

/* ---- the auth card ---- */
body.skin-nocturne.authcard .card {
    background: var(--n-oak-lit); border: 1px solid #6b5330; border-radius: 6px;
}
body.skin-nocturne.authcard .card h2 { font-family: var(--n-serif); font-weight: 500; color: #efe6cf; }
body.skin-nocturne.authcard .card .field label { color: #b6a67f; font-style: italic; }
body.skin-nocturne.authcard .card .field input {
    background: #f7f2e2; border: 1px solid var(--n-rule); color: var(--n-ink);
    font-family: var(--n-serif); border-radius: 2px;
}
body.skin-nocturne.authcard .card button:not(.toggle-eye) {
    background: var(--n-brass); color: #241a09; border-radius: 3px; font-weight: 600;
}
body.skin-nocturne.authcard .card .toggle-eye { color: #9d8a63; }
body.skin-nocturne.authcard .card .result { color: #b6a67f; }
body.skin-nocturne.authcard .card .links a { color: var(--n-brass); font-style: italic; }

/* ---- panel forms, off the studio ---- */
body.skin-nocturne .panel .field > label { color: #b6a67f; font-style: italic; }
body.skin-nocturne .panel .field input[type=email],
body.skin-nocturne .panel .field input[type=password],
body.skin-nocturne .panel .field input[type=text] {
    background: #f7f2e2; border: 1px solid var(--n-rule); color: var(--n-ink);
}
body.skin-nocturne .panel button[type=submit] { background: var(--n-brass); color: #241a09; }
body.skin-nocturne .panel .file-drop {
    background: rgba(176,141,63,.10); border: 2px dashed #8a6f3d; color: #e0d4b4;
}
body.skin-nocturne .panel .file-drop:hover { background: #3a2c1a; border-color: var(--n-brass); }
body.skin-nocturne .panel .file-sub { color: #9d8a63; }
body.skin-nocturne .panel .progress-bar-track { background: #16100a; }
body.skin-nocturne .panel .progress-bar-fill { background: var(--n-brass); }
body.skin-nocturne .panel .result { color: #d98080; }

@media (max-width: 860px) {
    /* The ribbon and the seal are the two things with nowhere to go on a
       phone: the page runs the full width, so both would sit on text. */
    body.skin-nocturne .tube:before,
    body.skin-nocturne .sheet:before { display: none; }
    body.skin-nocturne .doc { padding-bottom: 28px; }
    body.skin-nocturne .sheet { padding: 8px 8px 8px 14px; }
    body.skin-nocturne .tube:after { inset: 10px; }
    body.skin-nocturne .cname { font-size: 24px; letter-spacing: .08em; }
    body.skin-nocturne .rail-h { font-size: 22px; }
    body.skin-nocturne .bn { font-size: 20px; }
    body.skin-nocturne .bn span { font-size: 28px; }
    body.skin-nocturne .acts { background: var(--n-oak-lit); border-top: 1px solid var(--n-edge); }
}


/* ==================================================================
   CARBON
   ------------------------------------------------------------------
   The lights off, and nothing else. No ornament, no artwork, no second
   typeface - the same layout, spacing and face as plain, with the
   values turned over. The other three dark-ish skins are all costumes;
   this is for someone who just wants a dark screen.

   Four decisions carry it:

   Surfaces step UP, not down. Page is the darkest thing and each layer
   above it is lighter - #0b0b0b, #151515, #1d1d1d - because on a dark
   interface, closer to the eye reads as lighter. Shadows do nothing on
   black, so this is the only way depth registers.

   The greys are neutral. No blue in them, which is what makes it read
   as flat black rather than as a dark-blue theme.

   Body text is #dcdcdc, not white. Pure white on near-black vibrates,
   and this is a page people read a whole career history on.

   The accent is #9aa4ff, lifted and desaturated from the plain skin's
   #5b6cff, which glares on black.
   ================================================================== */

body.skin-carbon {
    --c-page:   #0b0b0b;
    --c-panel:  #151515;
    --c-card:   #1d1d1d;
    --c-lift:   #262626;   /* hover, and anything raised off a card */
    --c-line:   #2b2b2b;
    --c-line-2: #3a3a3a;

    --c-ink:    #dcdcdc;
    --c-ink-2:  #b4b4b4;
    --c-dim:    #909090;
    --c-faint:  #6a6a6a;

    --c-accent: #9aa4ff;
    --c-accent-soft: rgba(154,164,255,.13);
    --c-good:   #5fbf90;
    --c-bad:    #e08585;

    background: var(--c-page);
    background-image: none;
    color: var(--c-ink);
}

/* ---- chrome ---- */
body.skin-carbon .topbar { background: var(--c-panel); border-bottom: 1px solid var(--c-line); }
body.skin-carbon .bn { color: #eaeaea; }
body.skin-carbon .bn span {
    background: none; -webkit-text-fill-color: var(--c-accent); color: var(--c-accent);
}
/* Only separation, never a recolour - the mark is the mark on every
   skin. */
body.skin-carbon .logo { filter: drop-shadow(0 0 8px rgba(154,164,255,.35)); }

body.skin-carbon .ghost,
body.skin-carbon .act,
body.skin-carbon .mini,
body.skin-carbon .undo,
body.skin-carbon .toggle {
    background: var(--c-card); border: 1px solid var(--c-line); color: var(--c-ink);
}
body.skin-carbon .ghost:hover,
body.skin-carbon .act:hover,
body.skin-carbon .mini:hover,
body.skin-carbon .undo:hover:not(:disabled) {
    background: var(--c-lift); border-color: var(--c-line-2); box-shadow: none;
}
body.skin-carbon .act.key,
body.skin-carbon .act.live {
    background: rgba(154,164,255,.10); border: 2px solid #3f4470; color: var(--c-accent);
}
body.skin-carbon .go, body.skin-carbon .mini.key {
    background: var(--c-accent); border-color: var(--c-accent); color: #10121f;
}
body.skin-carbon .act.danger { color: var(--c-bad); border-color: #4a2c30; }
body.skin-carbon .act.danger:hover { background: #241a1c; border-color: #6b4045; }
body.skin-carbon .acts-note { color: var(--c-faint); }

/* ---- the look picker ---- */
body.skin-carbon .skinmenu {
    background: var(--c-panel); border: 1px solid var(--c-line);
    box-shadow: 0 16px 32px -14px rgba(0,0,0,.9);
}
body.skin-carbon .skinmenu-h { color: var(--c-faint); }
body.skin-carbon .skinopt { color: var(--c-ink); }
body.skin-carbon .skinopt:hover { background: var(--c-lift); }
body.skin-carbon .skinopt.on { background: var(--c-accent-soft); color: var(--c-accent); }
body.skin-carbon .tick { color: var(--c-accent); }
body.skin-carbon .sw i { border-color: rgba(255,255,255,.22); }

/* ---- rail ---- */
body.skin-carbon .rail-h { color: var(--c-faint); }
body.skin-carbon .rgroup { background: var(--c-card); border: 1px solid var(--c-line); }
body.skin-carbon .v { color: var(--c-ink); }
body.skin-carbon .v .d { color: var(--c-dim); }
body.skin-carbon .rgroup .v:hover { background: var(--c-lift); }
body.skin-carbon .rgroup .v.on,
body.skin-carbon .rgroup .v.on:hover {
    background: var(--c-accent-soft); box-shadow: inset 3px 0 0 var(--c-accent);
}
body.skin-carbon .rgroup .v.on .n { color: var(--c-accent); }
body.skin-carbon .rgroup .v.on .d { color: var(--c-dim); }
body.skin-carbon .v.sub { background: #171717; border-top: 1px solid var(--c-line); }
body.skin-carbon .v.sub:hover { background: var(--c-lift); }
body.skin-carbon .v.sub.on { background: var(--c-accent-soft); }
body.skin-carbon .v.sub:before { color: #5a5a5a; }
body.skin-carbon .v-add {
    background: transparent; border: 2px dashed #4a5570; color: var(--c-accent);
}
body.skin-carbon .v-add:hover { background: var(--c-accent-soft); border-style: solid; }

/* ---- controls ---- */
body.skin-carbon .panel { background: var(--c-panel); border: 1px solid var(--c-line); }
body.skin-carbon .dochead { border-bottom-color: var(--c-line); }
body.skin-carbon .dh-t { color: #eaeaea; }
body.skin-carbon .dh-s { color: var(--c-dim); }
body.skin-carbon .pencil, body.skin-carbon .subact { color: var(--c-dim); }
body.skin-carbon .dh-t:hover .pencil,
body.skin-carbon .subact:hover {
    color: var(--c-accent); border-color: #3f4470; background: var(--c-accent-soft);
}
body.skin-carbon .state { background: #16281f; color: var(--c-good); }
body.skin-carbon .state.busy { background: #2a2313; color: #d9b871; }
body.skin-carbon .state.bad { background: #241a1c; color: var(--c-bad); }
body.skin-carbon .tg-label, body.skin-carbon .tg-word { color: var(--c-ink-2); }
body.skin-carbon .tg-track { background: #2f2f2f; }
body.skin-carbon .tg-knob { background: #d0d0d0; }
body.skin-carbon .toggle[aria-pressed="true"] .tg-track { background: var(--c-accent); }
body.skin-carbon .toggle[aria-pressed="true"] .tg-knob { background: #fff; }
body.skin-carbon .lamp { background: #3a3a3a; }
body.skin-carbon .act.running .lamp { background: #d9b871; box-shadow: 0 0 7px #d9b871; }
body.skin-carbon .act.done .lamp { background: var(--c-bad); box-shadow: 0 0 8px rgba(224,133,133,.8); }

/* ---- the document ----
   The sheet stays dark. Someone who chose this did not do it to be
   handed a white page in the middle of it. */
body.skin-carbon .sheet {
    background: var(--c-panel); border: 1px solid var(--c-line);
    box-shadow: none; color: var(--c-ink);
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
body.skin-carbon .cname { color: #f0f0f0; }
body.skin-carbon .cmeta { color: var(--c-dim); }
body.skin-carbon .sec-h h2 { color: var(--c-accent); border-bottom-color: var(--c-line); }
body.skin-carbon .card p,
body.skin-carbon .jbul li,
body.skin-carbon .jpara { color: var(--c-ink); }
body.skin-carbon .jt { color: #eaeaea; }
body.skin-carbon .je { color: var(--c-ink-2); }
body.skin-carbon .jd { color: var(--c-dim); }
body.skin-carbon .jbul li:before { color: #4a4a4a; }
body.skin-carbon .card:hover { background: rgba(255,255,255,.03); }
body.skin-carbon .card.editing { background: var(--c-card); border-color: var(--c-line-2); }
body.skin-carbon .chip { background: var(--c-card); border: 1px solid var(--c-line); color: var(--c-ink-2); }
body.skin-carbon .empty { color: var(--c-faint); }
body.skin-carbon .hintline { color: var(--c-faint); }
body.skin-carbon .edit,
body.skin-carbon .contact-edit,
body.skin-carbon .card-tools button { color: var(--c-accent); }
body.skin-carbon .card-tools button.danger { color: var(--c-bad); }
body.skin-carbon .sheet .mini { background: var(--c-card); border-color: var(--c-line); color: var(--c-ink); }
body.skin-carbon .sheet .mini.key { background: var(--c-accent); border-color: var(--c-accent); color: #10121f; }

body.skin-carbon .cedit input, body.skin-carbon .cedit textarea,
body.skin-carbon .editor input, body.skin-carbon .editor textarea,
body.skin-carbon .ask-input, body.skin-carbon .drawer textarea {
    background: #101010; border-color: var(--c-line-2); color: var(--c-ink);
}
body.skin-carbon .drawer { background: #101010; border-bottom-color: var(--c-line); }
body.skin-carbon .drawer label { color: var(--c-ink-2); }

body.skin-carbon .sugg, body.skin-carbon .tip {
    background: #1c1a14; border: 1px solid #3a3524; color: #d5c9a4;
}
body.skin-carbon .tip button { background: var(--c-card); border-color: #3a3524; color: #d5c9a4; }
body.skin-carbon .tip button.apply { background: #8a7434; border-color: #8a7434; color: #14120c; }
body.skin-carbon .notice.good { background: #16281f; color: var(--c-good); }
body.skin-carbon .notice.bad { background: #241a1c; color: var(--c-bad); }
body.skin-carbon .working-card,
body.skin-carbon .ask-card { background: var(--c-panel); border: 1px solid var(--c-line); }
body.skin-carbon .working-t, body.skin-carbon .ask-t { color: #eaeaea; }
body.skin-carbon .working-s, body.skin-carbon .ask-b { color: var(--c-dim); }
body.skin-carbon .working-bar { background: #0b0b0b; }
body.skin-carbon .working-fill { background: linear-gradient(90deg, #6b74c8, var(--c-accent)); }

/* ---- shared vocabulary, off the studio ---- */
body.skin-carbon .tile { background: var(--c-card); border: 1px solid var(--c-line); color: var(--c-ink); }
body.skin-carbon .tile:hover { background: var(--c-lift); border-color: var(--c-line-2); box-shadow: none; }
body.skin-carbon .tile .icon {
    background: var(--c-accent-soft); border: 1px solid var(--c-line); color: var(--c-accent);
    box-shadow: none;
}
body.skin-carbon .tile-label { color: #eaeaea; }
body.skin-carbon .tile-desc, body.skin-carbon .muted { color: var(--c-dim); }
body.skin-carbon .slink { color: var(--c-accent); }
body.skin-carbon .slink:hover { color: #c3c9ff; }

body.skin-carbon.authcard .card { background: var(--c-panel); border: 1px solid var(--c-line); }
body.skin-carbon.authcard .card h2 { color: #eaeaea; }
body.skin-carbon.authcard .card .field label { color: var(--c-ink-2); }
body.skin-carbon.authcard .card .field input {
    background: #101010; border: 1px solid var(--c-line-2); color: var(--c-ink);
}
body.skin-carbon.authcard .card button:not(.toggle-eye) { background: var(--c-accent); color: #10121f; }
body.skin-carbon.authcard .card .toggle-eye { color: var(--c-dim); }
body.skin-carbon.authcard .card .result { color: var(--c-dim); }
body.skin-carbon.authcard .card .links a { color: var(--c-accent); }

body.skin-carbon .panel .field > label { color: var(--c-ink-2); }
body.skin-carbon .panel .field input[type=email],
body.skin-carbon .panel .field input[type=password],
body.skin-carbon .panel .field input[type=text] {
    background: #101010; border: 1px solid var(--c-line-2); color: var(--c-ink);
}
body.skin-carbon .panel button[type=submit] { background: var(--c-accent); color: #10121f; }
body.skin-carbon .panel .file-drop {
    background: var(--c-card); border: 2px dashed #4a5570; color: var(--c-ink);
}
body.skin-carbon .panel .file-drop:hover { background: var(--c-lift); border-color: var(--c-accent); }
body.skin-carbon .panel .file-sub { color: var(--c-dim); }
body.skin-carbon .panel .progress-bar-track { background: #0b0b0b; }
body.skin-carbon .panel .progress-bar-fill { background: var(--c-accent); }
body.skin-carbon .panel .result { color: var(--c-bad); }

@media (max-width: 860px) {
    body.skin-carbon .acts { background: var(--c-panel); border-top: 1px solid var(--c-line); }
    body.skin-carbon .acts .act { background: var(--c-card); border: 1px solid var(--c-line); }
    body.skin-carbon .acts .act.key { background: rgba(154,164,255,.10); border-color: #3f4470; }
    body.skin-carbon .acts .act.danger { background: #241a1c; border-color: #4a2c30; }
}


/* ==================================================================
   SHONEN
   ------------------------------------------------------------------
   Ink on paper. Where anime is a painting with the interface floating
   over it, this is the opposite - everything is drawn: 3px black
   outlines, hard offset shadows with no blur, halftone screentone, and
   panels rotated half a degree so nothing sits quite square.

   It suits a resume better than it sounds, because manga is black ink
   on off-white paper. The document stays as readable as plain; only the
   chrome gets loud.

   Three techniques carry the whole skin, and none of them is an image:

     halftone   a radial-gradient tiled at 6px, which is a screentone
     speed lines a repeating-conic-gradient burst behind the one button
                that matters
     the press  every button sits on a hard offset shadow and moves INTO
                it on :active, so clicking feels like pressing paper

   The rotations are deliberately tiny - half a degree. Enough that the
   eye reads it as a laid-out page rather than a form, not enough to
   look broken. They are on the panels only; the rail items stay square,
   because a list of things each leaning a different way gets restless
   fast.
   ================================================================== */

body.skin-shonen {
    --s-ink:      #12100f;
    --s-paper:    #fdfcf7;
    --s-page:     #efece2;
    --s-red:      #e63329;
    --s-gold:     #ffc93c;
    --s-green:    #1f7a4d;
    --s-grey:     #5c574e;
    --s-grey-2:   #8b8579;

    --s-display: 'Anton', 'Arial Narrow', Impact, sans-serif;
    --s-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;

    /* The page: screentone, with faint speed lines running under it. */
    background-color: var(--s-page);
    background-image:
        radial-gradient(var(--s-ink) 1.4px, transparent 1.5px),
        repeating-linear-gradient(114deg,
            rgba(18,16,15,.05) 0px, rgba(18,16,15,.05) 1px,
            transparent 1px, transparent 9px);
    background-size: 7px 7px, auto;
    color: var(--s-ink);
    font-family: var(--s-body);
}

/* One shadow, used by everything. Hard, no blur - a drop shadow with a
   gradient in it is a photograph, and this is a drawing. */
body.skin-shonen .panel,
body.skin-shonen .sheet,
body.skin-shonen .rgroup,
body.skin-shonen .v-add,
body.skin-shonen .ghost,
body.skin-shonen .act,
body.skin-shonen .mini,
body.skin-shonen .go,
body.skin-shonen .undo,
body.skin-shonen .toggle,
body.skin-shonen .working-card,
body.skin-shonen .ask-card,
body.skin-shonen .skinmenu {
    border-radius: 0;
    box-shadow: 5px 6px 0 var(--s-ink);
}
/* Pressed: the thing moves into its own shadow. */
body.skin-shonen .ghost:active,
body.skin-shonen .act:active,
body.skin-shonen .mini:active,
body.skin-shonen .go:active,
body.skin-shonen .undo:active,
body.skin-shonen .toggle:active,
body.skin-shonen .v-add:active {
    transform: translate(4px, 5px);
    box-shadow: 1px 1px 0 var(--s-ink);
}

/* ---- chrome ---- */
body.skin-shonen .topbar {
    background: var(--s-ink); border-bottom: none;
    box-shadow: 0 5px 0 rgba(18,16,15,.25);
}
body.skin-shonen .bn {
    font-family: var(--s-display); font-style: italic;
    font-size: 25px; font-weight: 400; letter-spacing: .01em; color: var(--s-paper);
}
body.skin-shonen .bn span {
    background: none; -webkit-text-fill-color: var(--s-gold); color: var(--s-gold);
}
/* Speed lines off the mark. The logo itself is untouched, as on every
   skin - the rays are drawn behind it. */
body.skin-shonen .brand { position: relative; }
body.skin-shonen .brand:before {
    content: ""; position: absolute; left: -16px; top: 50%;
    width: 120px; height: 120px; margin-top: -60px; z-index: 0;
    background: repeating-conic-gradient(from 0deg,
        var(--s-red) 0deg 3.5deg, transparent 3.5deg 13deg);
    -webkit-mask-image: radial-gradient(closest-side, #000 30%, transparent 82%);
    mask-image: radial-gradient(closest-side, #000 30%, transparent 82%);
    opacity: .85; pointer-events: none;
}
body.skin-shonen .logo, body.skin-shonen .bn { position: relative; z-index: 1; }
body.skin-shonen .logo {
    background: var(--s-paper); border-radius: 50%;
    box-shadow: 0 0 0 3px var(--s-ink);
}

body.skin-shonen .ghost,
body.skin-shonen .act,
body.skin-shonen .mini,
body.skin-shonen .undo,
body.skin-shonen .toggle,
body.skin-shonen .go {
    font-family: var(--s-display); font-weight: 400; letter-spacing: .04em;
    text-transform: uppercase; font-size: 15px;
    background: var(--s-paper); border: 3px solid var(--s-ink); color: var(--s-ink);
}
body.skin-shonen .ghost:hover,
body.skin-shonen .act:hover,
body.skin-shonen .mini:hover,
body.skin-shonen .undo:hover:not(:disabled) {
    background: var(--s-gold); border-color: var(--s-ink); box-shadow: 5px 6px 0 var(--s-ink);
}
body.skin-shonen .act.key, body.skin-shonen .act.live,
body.skin-shonen .go, body.skin-shonen .mini.key {
    background: var(--s-gold); border: 3px solid var(--s-ink); color: var(--s-ink);
    font-style: italic;
}
body.skin-shonen .act.pdf { background: var(--s-paper); }
body.skin-shonen .act.danger { background: var(--s-red); color: var(--s-paper); border-color: var(--s-ink); }
body.skin-shonen .act.danger:hover { background: #c02219; }
body.skin-shonen .acts-note { color: var(--s-grey); font-size: 12.5px; }

/* ---- sound effects on the four actions ----
   Drawn on the real buttons, like the manga bubbles on the anime skin -
   but jagged rather than a speech balloon, because these are impacts,
   not dialogue. clip-path makes the burst; nothing is added to the
   markup. */
body.skin-shonen .acts { padding-top: 34px; }
body.skin-shonen #btnImprove,
body.skin-shonen #btnTailor,
body.skin-shonen #btnVoice,
body.skin-shonen .acts .pdf { position: relative; overflow: visible; }
body.skin-shonen #btnImprove:before,
body.skin-shonen #btnTailor:before,
body.skin-shonen #btnVoice:before,
body.skin-shonen .acts .pdf:before {
    position: absolute; top: -27px; left: 50%; transform: translateX(-50%) rotate(-4deg);
    background: var(--s-red); color: var(--s-paper);
    font-family: var(--s-display); font-size: 13px; letter-spacing: .06em;
    padding: 6px 16px; white-space: nowrap; line-height: 1;
    clip-path: polygon(0% 40%, 8% 12%, 22% 30%, 34% 0%, 47% 26%, 60% 4%,
                       72% 28%, 86% 10%, 100% 42%, 92% 66%, 100% 92%,
                       84% 82%, 70% 100%, 56% 78%, 42% 98%, 30% 76%,
                       16% 94%, 6% 68%);
}
body.skin-shonen #btnImprove:before { content: "\6539\5584"; }
body.skin-shonen #btnTailor:before  { content: "\6A19\7684"; }
body.skin-shonen #btnVoice:before   { content: "\58F0"; }
body.skin-shonen .acts .pdf:before  { content: "\5370\5237"; }
@media (max-width: 860px) {
    body.skin-shonen #btnImprove:before, body.skin-shonen #btnTailor:before,
    body.skin-shonen #btnVoice:before, body.skin-shonen .acts .pdf:before { display: none; }
    body.skin-shonen .acts { padding-top: 10px; }
}

/* The impact burst behind the one button that goes away and does
   something. Only while it runs - a page that is always exploding says
   nothing when something actually happens. */
body.skin-shonen .act.key.running:after {
    content: ""; position: absolute; left: 50%; top: 50%;
    width: 210px; height: 210px; margin: -105px 0 0 -105px; z-index: -1;
    background: repeating-conic-gradient(from 0deg,
        var(--s-gold) 0deg 5deg, transparent 5deg 15deg);
    -webkit-mask-image: radial-gradient(closest-side, #000 22%, transparent 78%);
    mask-image: radial-gradient(closest-side, #000 22%, transparent 78%);
    pointer-events: none;
}

/* ---- the look picker ---- */
body.skin-shonen .skinmenu { background: var(--s-paper); border: 3px solid var(--s-ink); }
body.skin-shonen .skinmenu-h {
    font-family: var(--s-display); color: var(--s-ink); letter-spacing: .12em;
}
body.skin-shonen .skinopt {
    font-family: var(--s-display); text-transform: uppercase; letter-spacing: .03em;
    font-size: 15px; color: var(--s-ink); border-radius: 0;
}
body.skin-shonen .skinopt:hover { background: var(--s-gold); }
body.skin-shonen .skinopt.on { background: var(--s-ink); color: var(--s-paper); }
body.skin-shonen .tick { color: var(--s-gold); }
body.skin-shonen .sw i { border: 2px solid var(--s-ink); border-radius: 0; }

/* ---- rail: panels on a page ----
   The cards stay square. Rotating each one a different way looks
   deliberate at three and restless at twelve, and the rail is the one
   part of the page that grows without limit. */
body.skin-shonen .rail-h {
    font-family: var(--s-display); font-size: 15px; letter-spacing: .14em;
    color: var(--s-ink); font-weight: 400;
}
body.skin-shonen .rgroup {
    background: var(--s-paper); border: 3px solid var(--s-ink); overflow: visible;
}
body.skin-shonen .v { color: var(--s-ink); }
body.skin-shonen .v .n { font-family: var(--s-display); font-weight: 400;
    letter-spacing: .03em; text-transform: uppercase; font-size: 15px; }
body.skin-shonen .v .d { color: var(--s-grey); }
body.skin-shonen .rgroup .v:hover { background: var(--s-gold); }

/* The open one inverts and gets screentone - in manga the panel that
   matters is the inked one. */
body.skin-shonen .rgroup .v.on,
body.skin-shonen .rgroup .v.on:hover {
    position: relative;
    background-color: var(--s-ink);
    background-image: radial-gradient(rgba(253,252,247,.28) 1.4px, transparent 1.5px);
    background-size: 7px 7px;
    box-shadow: inset 0 0 0 3px var(--s-red);
}
body.skin-shonen .rgroup .v.on .n { color: var(--s-paper); }
body.skin-shonen .rgroup .v.on .d { color: #c9c4b8; }
/* A cursor in the margin, pointing at where you are. */
body.skin-shonen .rgroup .v.on:after {
    content: ""; position: absolute; left: -17px; top: 50%; margin-top: -9px;
    border: 9px solid transparent; border-left-color: var(--s-red);
    border-right-width: 0;
}
body.skin-shonen .v.sub { background: #f4f1e6; border-top: 3px solid var(--s-ink); }
body.skin-shonen .v.sub:hover { background: var(--s-gold); }
body.skin-shonen .v.sub:before { color: var(--s-ink); font-weight: 700; }
body.skin-shonen .v-add {
    font-family: var(--s-display); text-transform: uppercase; letter-spacing: .06em;
    font-size: 16px; background: var(--s-paper);
    border: 3px dashed var(--s-ink); color: var(--s-ink);
}
body.skin-shonen .v-add:hover { background: var(--s-gold); border-style: solid; }

/* ---- controls ---- */
body.skin-shonen .panel {
    background: var(--s-paper); border: 4px solid var(--s-ink);
    transform: rotate(-.35deg);
}
body.skin-shonen .dochead { border-bottom: 3px solid var(--s-ink); }
body.skin-shonen .dh-t {
    font-family: var(--s-display); font-size: 22px; font-weight: 400;
    letter-spacing: .02em; text-transform: uppercase; color: var(--s-ink);
}
body.skin-shonen .dh-s { color: var(--s-grey); }
body.skin-shonen .pencil, body.skin-shonen .subact {
    font-family: var(--s-display); letter-spacing: .06em; color: var(--s-grey);
    border-radius: 0;
}
body.skin-shonen .dh-t:hover .pencil,
body.skin-shonen .subact:hover {
    background: var(--s-gold); border-color: var(--s-ink); color: var(--s-ink);
}
body.skin-shonen .state, body.skin-shonen .undo {
    font-family: var(--s-display); letter-spacing: .08em; text-transform: uppercase;
    border-radius: 0; border: 3px solid var(--s-ink);
}
body.skin-shonen .state { background: var(--s-green); color: var(--s-paper); }
body.skin-shonen .state.busy { background: var(--s-gold); color: var(--s-ink); }
body.skin-shonen .state.bad { background: var(--s-red); color: var(--s-paper); }
body.skin-shonen .tg-label, body.skin-shonen .tg-word {
    font-family: var(--s-display); letter-spacing: .06em; color: var(--s-ink);
}
body.skin-shonen .tg-track {
    background: var(--s-paper); border: 2px solid var(--s-ink); border-radius: 0;
    width: 34px;
}
body.skin-shonen .tg-knob { background: var(--s-ink); border-radius: 0; }
body.skin-shonen .toggle[aria-pressed="true"] .tg-track { background: var(--s-gold); }
body.skin-shonen .toggle[aria-pressed="true"] .tg-knob { left: 17px; background: var(--s-red); }
body.skin-shonen .lamp { background: var(--s-paper); box-shadow: 0 0 0 2px var(--s-ink); border-radius: 0; }
body.skin-shonen .act.running .lamp { background: var(--s-red); }
body.skin-shonen .act.done .lamp { background: var(--s-ink); }

/* ---- the document: a manga page ---- */
body.skin-shonen .sheet {
    background: var(--s-paper); border: 4px solid var(--s-ink);
    transform: rotate(.25deg);
    font-family: var(--s-body); color: var(--s-ink);
}
/* Screentone in the corner, the way a panel is shaded. */
body.skin-shonen .tube {
    position: relative;
    background-image: radial-gradient(rgba(18,16,15,.55) 1.4px, transparent 1.5px);
    background-size: 7px 7px;
    background-repeat: no-repeat;
    background-position: right -6px top -6px;
    background-attachment: local;
}
body.skin-shonen .tube:after {
    content: ""; position: absolute; top: 0; right: 0; width: 150px; height: 150px;
    z-index: 0; pointer-events: none;
    background-image: radial-gradient(var(--s-ink) 1.5px, transparent 1.6px);
    background-size: 7px 7px;
    -webkit-mask-image: linear-gradient(225deg, #000 8%, transparent 62%);
    mask-image: linear-gradient(225deg, #000 8%, transparent 62%);
    opacity: .5; box-shadow: none; border: none;
}
body.skin-shonen .doc { position: relative; z-index: 1; }

body.skin-shonen .cname {
    font-family: var(--s-display); font-size: 34px; font-weight: 400;
    letter-spacing: .04em; text-transform: uppercase; text-align: center;
    color: var(--s-ink);
}
body.skin-shonen .cmeta { color: var(--s-grey); text-align: center; }
body.skin-shonen .contact-edit { display: block; margin: 8px auto 0; }

/* An inked slab, skewed like a caption box. The label is padded to fit
   inside it rather than sized to the words. */
body.skin-shonen .sec-h h2 {
    display: inline-block; flex: 0 0 auto;
    font-family: var(--s-display); font-size: 14px; font-weight: 400;
    letter-spacing: .18em; text-transform: uppercase;
    background: var(--s-ink); color: var(--s-paper);
    padding: 7px 20px 7px 16px; border: none;
    transform: skewX(-9deg);
}
body.skin-shonen .sec-h h2 > * { display: inline-block; transform: skewX(9deg); }
body.skin-shonen .sec-h { border-bottom: 3px solid var(--s-ink); padding-bottom: 0; gap: 14px; }
body.skin-shonen .edit,
body.skin-shonen .contact-edit,
body.skin-shonen .card-tools button {
    font-family: var(--s-display); letter-spacing: .05em; text-transform: uppercase;
    font-size: 13px; color: var(--s-ink);
}
body.skin-shonen .card-tools button.danger { color: var(--s-red); }

/* Each entry gets a red spine, which is the panel edge. */
body.skin-shonen #viewJobs .card,
body.skin-shonen #viewEducation .card,
body.skin-shonen #viewCerts .card {
    border: none; border-left: 5px solid var(--s-red); border-radius: 0;
    margin: 0 0 10px; padding: 8px 12px;
}
body.skin-shonen .card:hover { background: rgba(255,201,60,.20); }
body.skin-shonen .card.editing { background: #fff8e2; border: 3px solid var(--s-ink); }
body.skin-shonen .jt {
    font-family: var(--s-display); font-size: 19px; font-weight: 400;
    letter-spacing: .02em; color: var(--s-ink); text-transform: none;
}
body.skin-shonen .je { color: var(--s-grey); }
body.skin-shonen .jd { color: var(--s-grey); font-weight: 600; }
body.skin-shonen .card p,
body.skin-shonen .jbul li,
body.skin-shonen .jpara { color: #1c1a17; font-size: 14.5px; }
body.skin-shonen .jbul li:before { color: var(--s-red); }
body.skin-shonen .chip {
    background: var(--s-ink); color: var(--s-paper); border-radius: 0;
    font-family: var(--s-display); letter-spacing: .05em; font-size: 12.5px;
}
body.skin-shonen .empty { color: var(--s-grey-2); }
body.skin-shonen .hintline { color: var(--s-grey); }
body.skin-shonen .cedit input, body.skin-shonen .cedit textarea,
body.skin-shonen .editor input, body.skin-shonen .editor textarea,
body.skin-shonen .ask-input, body.skin-shonen .drawer textarea {
    background: var(--s-paper); border: 2px solid var(--s-ink); border-radius: 0;
    color: var(--s-ink);
}

/* ---- tips: advice, shouted ----
   A spiked bubble rather than the soft yellow box - in a panel, advice
   from the sidelines gets a jagged edge. */
body.skin-shonen .sugg, body.skin-shonen .tip {
    background: var(--s-gold); border: none; border-radius: 0;
    color: var(--s-ink); padding: 14px 18px;
    clip-path: polygon(0% 8%, 4% 0%, 12% 7%, 22% 1%, 33% 8%, 45% 1%, 57% 8%,
                       69% 1%, 80% 8%, 90% 1%, 97% 8%, 100% 0%, 100% 92%,
                       95% 100%, 86% 93%, 75% 99%, 64% 92%, 52% 99%,
                       40% 92%, 28% 99%, 17% 92%, 7% 99%, 0% 92%);
}
body.skin-shonen .sugg h3 { font-family: var(--s-display); letter-spacing: .08em; font-size: 14px; }
body.skin-shonen .sugg li { color: #3a3126; }
body.skin-shonen .tip button {
    font-family: var(--s-display); letter-spacing: .05em; text-transform: uppercase;
    background: var(--s-paper); border: 2px solid var(--s-ink); color: var(--s-ink);
    border-radius: 0;
}
body.skin-shonen .tip button.apply { background: var(--s-ink); color: var(--s-paper); }

body.skin-shonen .drawer { background: #f4f1e6; border-bottom: 3px solid var(--s-ink); }
body.skin-shonen .drawer label { color: var(--s-ink); }
body.skin-shonen .notice { border-radius: 0; border: 3px solid var(--s-ink); }
body.skin-shonen .notice.good { background: var(--s-green); color: var(--s-paper); }
body.skin-shonen .notice.bad { background: var(--s-red); color: var(--s-paper); }
body.skin-shonen .notice button { border-radius: 0; border: 2px solid var(--s-ink); }
body.skin-shonen .working-card, body.skin-shonen .ask-card {
    background: var(--s-paper); border: 4px solid var(--s-ink);
}
body.skin-shonen .working-t, body.skin-shonen .ask-t {
    font-family: var(--s-display); font-size: 21px; letter-spacing: .04em;
    text-transform: uppercase;
}
body.skin-shonen .working-s, body.skin-shonen .ask-b { color: var(--s-grey); }
body.skin-shonen .working-bar { background: var(--s-paper); border: 3px solid var(--s-ink); border-radius: 0; }
body.skin-shonen .working-fill { background: var(--s-red); border-radius: 0; }

/* ---- shared vocabulary, off the studio ---- */
body.skin-shonen .tile {
    background: var(--s-paper); border: 3px solid var(--s-ink); border-radius: 0;
    color: var(--s-ink); box-shadow: 5px 6px 0 var(--s-ink);
}
body.skin-shonen .tile:hover { background: var(--s-gold); box-shadow: 5px 6px 0 var(--s-ink); }
body.skin-shonen .tile .icon {
    background: var(--s-ink); color: var(--s-gold); border-radius: 0; box-shadow: none;
}
body.skin-shonen .tile-label {
    font-family: var(--s-display); letter-spacing: .03em; text-transform: uppercase;
}
body.skin-shonen .tile-desc, body.skin-shonen .muted { color: var(--s-grey); }
body.skin-shonen .slink {
    font-family: var(--s-display); letter-spacing: .05em; text-transform: uppercase;
    color: var(--s-ink);
}
body.skin-shonen .slink:hover { color: var(--s-red); }

body.skin-shonen.authcard .card {
    background: var(--s-paper); border: 4px solid var(--s-ink); border-radius: 0;
    box-shadow: 6px 7px 0 var(--s-ink);
}
body.skin-shonen.authcard .card h2 {
    font-family: var(--s-display); letter-spacing: .04em; text-transform: uppercase;
}
body.skin-shonen.authcard .card .field label { color: var(--s-ink); font-weight: 700; }
body.skin-shonen.authcard .card .field input {
    background: var(--s-paper); border: 2px solid var(--s-ink); border-radius: 0;
    color: var(--s-ink);
}
body.skin-shonen.authcard .card button:not(.toggle-eye) {
    background: var(--s-gold); color: var(--s-ink); border: 3px solid var(--s-ink);
    border-radius: 0; font-family: var(--s-display); letter-spacing: .06em;
    text-transform: uppercase;
}
body.skin-shonen.authcard .card .toggle-eye { color: var(--s-grey); }
body.skin-shonen.authcard .card .result { color: var(--s-grey); }
body.skin-shonen.authcard .card .links a { color: var(--s-red); font-weight: 700; }

body.skin-shonen .panel .field > label { color: var(--s-ink); font-weight: 700; }
body.skin-shonen .panel .field input[type=email],
body.skin-shonen .panel .field input[type=password],
body.skin-shonen .panel .field input[type=text] {
    background: var(--s-paper); border: 2px solid var(--s-ink); border-radius: 0;
    color: var(--s-ink);
}
body.skin-shonen .panel button[type=submit] {
    background: var(--s-gold); color: var(--s-ink); border: 3px solid var(--s-ink);
    border-radius: 0; font-family: var(--s-display); text-transform: uppercase;
}
body.skin-shonen .panel .file-drop {
    background: var(--s-paper); border: 3px dashed var(--s-ink); border-radius: 0;
}
body.skin-shonen .panel .file-drop:hover { background: var(--s-gold); border-style: solid; }
body.skin-shonen .panel .file-sub { color: var(--s-grey); }
body.skin-shonen .panel .progress-bar-track {
    background: var(--s-paper); border: 2px solid var(--s-ink); border-radius: 0;
}
body.skin-shonen .panel .progress-bar-fill { background: var(--s-red); }
body.skin-shonen .panel .result { color: var(--s-red); font-weight: 700; }

@media (max-width: 860px) {
    /* Square on a phone. A rotated panel at full width pushes a
       sideways scrollbar onto the page, and the tilt reads as a
       rendering fault rather than a choice. */
    body.skin-shonen .panel, body.skin-shonen .sheet { transform: none; }
    body.skin-shonen .panel, body.skin-shonen .sheet,
    body.skin-shonen .rgroup { box-shadow: 4px 5px 0 var(--s-ink); }
    body.skin-shonen .acts {
        background: var(--s-paper); border-top: 4px solid var(--s-ink);
    }
    body.skin-shonen .acts .act { box-shadow: 3px 4px 0 var(--s-ink); }
    body.skin-shonen .cname { font-size: 26px; }
    body.skin-shonen .rgroup .v.on:after { display: none; }
}


/* ==================================================================
   CYBER NEON
   ------------------------------------------------------------------
   A heads-up display. Monospace throughout the chrome, square corners,
   1px hairlines, scanlines across the page. Thin and precise rather
   than glowing - a HUD is drawn in lines, and neon that is on
   everywhere reads as a blur rather than as light.

   Cyan carries the whole skin. Magenta appears in exactly three places
   - the selected resume, the section labels, and anything gone wrong -
   so it always means "this one" rather than being a second decoration.

   The document keeps a proportional face. Monospace would be more
   authentic and much harder to read down a full career history, which
   is the same trade retro settled the same way.
   ================================================================== */

body.skin-cyber {
    --y-void:   #05070a;
    --y-panel:  #0b1016;
    --y-panel2: #080d12;
    --y-line:   #164450;
    --y-line-2: #123640;

    --y-cyan:   #00e5ff;
    --y-mag:    #ff2d95;
    --y-ink:    #d6f6ff;
    --y-ink-2:  #8fd4e0;
    --y-dim:    #4f8f9c;
    --y-faint:  #3f7a86;

    --y-mono: 'SFMono-Regular', Menlo, Consolas, 'DejaVu Sans Mono', monospace;

    background-color: var(--y-void);
    /* Scanlines. 3px apart and barely there - at full strength they
       fight the text they are drawn over. */
    background-image: repeating-linear-gradient(180deg,
        rgba(0,229,255,.045) 0px, rgba(0,229,255,.045) 1px,
        transparent 1px, transparent 3px);
    color: var(--y-ink);
}

body.skin-cyber .topbar,
body.skin-cyber .panel,
body.skin-cyber .sheet,
body.skin-cyber .rgroup,
body.skin-cyber .skinmenu,
body.skin-cyber .working-card,
body.skin-cyber .ask-card,
body.skin-cyber .ghost,
body.skin-cyber .act,
body.skin-cyber .mini,
body.skin-cyber .go,
body.skin-cyber .undo,
body.skin-cyber .toggle,
body.skin-cyber .v-add,
body.skin-cyber .state,
body.skin-cyber .chip { border-radius: 0; }

/* ---- chrome ---- */
body.skin-cyber .topbar {
    background: var(--y-panel2);
    border-bottom: 1px solid rgba(0,229,255,.55);
}
body.skin-cyber .bn {
    font-family: var(--y-mono); font-size: 15px; font-weight: 600;
    letter-spacing: .04em; text-transform: uppercase; color: var(--y-ink);
}
body.skin-cyber .bn span {
    background: none; -webkit-text-fill-color: var(--y-mag); color: var(--y-mag);
}
body.skin-cyber .logo {
    background: var(--y-panel); border-radius: 50%;
    box-shadow: 0 0 0 1px var(--y-cyan), 0 0 12px rgba(0,229,255,.45);
}

body.skin-cyber .ghost,
body.skin-cyber .act,
body.skin-cyber .mini,
body.skin-cyber .undo,
body.skin-cyber .toggle,
body.skin-cyber .go {
    font-family: var(--y-mono); font-size: 12.5px; font-weight: 500;
    letter-spacing: .06em; text-transform: uppercase;
    background: transparent; border: 1px solid var(--y-line); color: var(--y-ink-2);
}
body.skin-cyber .ghost:hover,
body.skin-cyber .act:hover,
body.skin-cyber .mini:hover,
body.skin-cyber .undo:hover:not(:disabled) {
    border-color: var(--y-cyan); color: var(--y-cyan);
    background: rgba(0,229,255,.07);
    box-shadow: 0 0 10px rgba(0,229,255,.25); }
body.skin-cyber .act.key, body.skin-cyber .act.live,
body.skin-cyber .go, body.skin-cyber .mini.key {
    background: rgba(0,229,255,.10); border: 1px solid var(--y-cyan); color: var(--y-cyan);
    box-shadow: inset 0 0 12px rgba(0,229,255,.15);
}
body.skin-cyber .act.danger { color: var(--y-mag); border-color: #5c1638; }
body.skin-cyber .act.danger:hover {
    border-color: var(--y-mag); background: rgba(255,45,149,.09);
    box-shadow: 0 0 10px rgba(255,45,149,.25); color: var(--y-mag);
}
body.skin-cyber .acts-note { font-family: var(--y-mono); font-size: 11.5px; color: var(--y-faint); }

/* ---- picker ---- */
body.skin-cyber .skinmenu { background: var(--y-panel); border: 1px solid var(--y-line); box-shadow: none; }
body.skin-cyber .skinmenu-h { font-family: var(--y-mono); color: var(--y-faint); }
body.skin-cyber .skinopt { font-family: var(--y-mono); font-size: 13px; color: var(--y-ink-2); border-radius: 0; }
body.skin-cyber .skinopt:hover { background: rgba(0,229,255,.08); color: var(--y-cyan); }
body.skin-cyber .skinopt.on { background: rgba(255,45,149,.12); color: var(--y-mag); }
body.skin-cyber .tick { color: var(--y-mag); }
body.skin-cyber .sw i { border: 1px solid var(--y-line); border-radius: 0; }

/* ---- rail ---- */
body.skin-cyber .rail-h {
    font-family: var(--y-mono); color: var(--y-faint); letter-spacing: .1em;
}
body.skin-cyber .rgroup { background: var(--y-panel2); border: 1px solid var(--y-line-2); }
body.skin-cyber .v { color: var(--y-ink-2); }
body.skin-cyber .v .n { font-family: var(--y-mono); font-size: 13px; letter-spacing: .03em;
    text-transform: uppercase; font-weight: 500; }
body.skin-cyber .v .d { font-family: var(--y-mono); font-size: 11px; color: var(--y-faint); }
body.skin-cyber .rgroup .v:hover { background: rgba(0,229,255,.06); }
body.skin-cyber .rgroup .v.on,
body.skin-cyber .rgroup .v.on:hover {
    background: var(--y-panel);
    box-shadow: inset 0 0 0 1px var(--y-cyan), inset 3px 0 0 var(--y-mag);
}
body.skin-cyber .rgroup .v.on .n { color: var(--y-ink); }
body.skin-cyber .rgroup .v.on .d { color: var(--y-dim); }
body.skin-cyber .v.sub { background: rgba(255,255,255,.02); border-top: 1px solid var(--y-line-2); }
body.skin-cyber .v.sub:before { color: var(--y-faint); }
body.skin-cyber .v-add {
    font-family: var(--y-mono); font-size: 12.5px; letter-spacing: .06em; text-transform: uppercase;
    background: transparent; border: 1px dashed var(--y-line); color: var(--y-cyan);
}
body.skin-cyber .v-add:hover { border-color: var(--y-cyan); background: rgba(0,229,255,.07); border-style: solid; }

/* ---- controls ---- */
body.skin-cyber .panel { background: var(--y-panel); border: 1px solid var(--y-line); }
body.skin-cyber .dochead { border-bottom-color: var(--y-line-2); }
body.skin-cyber .dh-t { font-family: var(--y-mono); font-size: 17px; letter-spacing: .03em;
    text-transform: uppercase; color: var(--y-ink); font-weight: 500; }
body.skin-cyber .dh-s { font-family: var(--y-mono); font-size: 11.5px; color: var(--y-dim); }
body.skin-cyber .pencil, body.skin-cyber .subact {
    font-family: var(--y-mono); color: var(--y-faint); border-radius: 0;
}
body.skin-cyber .dh-t:hover .pencil,
body.skin-cyber .subact:hover {
    color: var(--y-cyan); border-color: var(--y-cyan); background: rgba(0,229,255,.08);
}
body.skin-cyber .state {
    font-family: var(--y-mono); background: transparent;
    border: 1px solid #1f7a5a; color: #3ddba0;
}
body.skin-cyber .state.busy { border-color: #7a6a1f; color: #e0c65f; }
body.skin-cyber .state.bad { border-color: #5c1638; color: var(--y-mag); }
body.skin-cyber .tg-label, body.skin-cyber .tg-word {
    font-family: var(--y-mono); font-size: 11.5px; color: var(--y-ink-2);
}
body.skin-cyber .tg-track { background: var(--y-void); border: 1px solid var(--y-line); border-radius: 0; }
body.skin-cyber .tg-knob { background: var(--y-ink-2); border-radius: 0; }
body.skin-cyber .toggle[aria-pressed="true"] .tg-track { background: rgba(0,229,255,.15); }
body.skin-cyber .toggle[aria-pressed="true"] .tg-knob {
    background: var(--y-cyan); box-shadow: 0 0 8px var(--y-cyan);
}
body.skin-cyber .lamp { background: var(--y-line); border-radius: 0; }
body.skin-cyber .act.running .lamp { background: var(--y-cyan); box-shadow: 0 0 8px var(--y-cyan); }
body.skin-cyber .act.done .lamp { background: var(--y-mag); box-shadow: 0 0 8px var(--y-mag); }

/* ---- the document ---- */
body.skin-cyber .sheet {
    background: var(--y-panel2); border: 1px solid var(--y-line);
    box-shadow: none; color: var(--y-ink);
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
body.skin-cyber .cname {
    font-family: var(--y-mono); font-size: 24px; font-weight: 500;
    letter-spacing: .06em; text-transform: uppercase; text-align: center; color: #eafcff;
}
body.skin-cyber .cmeta { font-family: var(--y-mono); font-size: 12px; color: var(--y-dim); text-align: center; }
body.skin-cyber .contact-edit { display: block; margin: 8px auto 0; }
/* Bracketed, the way a label is written in a readout. */
body.skin-cyber .sec-h h2 {
    font-family: var(--y-mono); font-size: 11.5px; font-weight: 500;
    letter-spacing: .12em; color: var(--y-mag);
    border-bottom: 1px solid var(--y-line);
}
body.skin-cyber .sec-h h2:before { content: "[ "; }
body.skin-cyber .sec-h h2:after { content: " ]"; }
body.skin-cyber .card p, body.skin-cyber .jbul li, body.skin-cyber .jpara { color: #b9dde5; }
body.skin-cyber .jt { font-family: var(--y-mono); font-size: 15px; font-weight: 500;
    letter-spacing: .02em; color: var(--y-ink); text-transform: none; }
body.skin-cyber .je { color: var(--y-dim); }
body.skin-cyber .jd { font-family: var(--y-mono); font-size: 12px; color: var(--y-faint); }
body.skin-cyber .jbul li:before { color: var(--y-cyan); }
body.skin-cyber .card:hover { background: rgba(0,229,255,.04); }
body.skin-cyber .card.editing { background: var(--y-panel); border-color: var(--y-line); }
body.skin-cyber .chip {
    font-family: var(--y-mono); font-size: 11.5px;
    background: rgba(0,229,255,.08); border: 1px solid var(--y-line-2); color: var(--y-ink-2);
}
body.skin-cyber .empty { color: var(--y-faint); }
body.skin-cyber .hintline { font-family: var(--y-mono); font-size: 11px; color: var(--y-faint); }
body.skin-cyber .edit, body.skin-cyber .contact-edit, body.skin-cyber .card-tools button {
    font-family: var(--y-mono); font-size: 11.5px; letter-spacing: .05em;
    text-transform: uppercase; color: var(--y-cyan);
}
body.skin-cyber .card-tools button.danger { color: var(--y-mag); }
body.skin-cyber .cedit input, body.skin-cyber .cedit textarea,
body.skin-cyber .editor input, body.skin-cyber .editor textarea,
body.skin-cyber .ask-input, body.skin-cyber .drawer textarea {
    background: var(--y-void); border: 1px solid var(--y-line); border-radius: 0;
    color: var(--y-ink); font-family: var(--y-mono); font-size: 13px;
}
body.skin-cyber .drawer { background: var(--y-panel2); border-bottom-color: var(--y-line-2); }
body.skin-cyber .drawer label { font-family: var(--y-mono); font-size: 12.5px; color: var(--y-ink-2); }
body.skin-cyber .sugg, body.skin-cyber .tip {
    background: rgba(255,45,149,.06); border: 1px solid #5c1638; border-radius: 0;
    color: #f0a8ca; font-family: var(--y-mono); font-size: 12px;
}
body.skin-cyber .tip button {
    font-family: var(--y-mono); background: transparent; border: 1px solid #5c1638;
    color: #f0a8ca; border-radius: 0;
}
body.skin-cyber .tip button.apply { background: var(--y-mag); border-color: var(--y-mag); color: #14030c; }
body.skin-cyber .notice { border-radius: 0; }
body.skin-cyber .notice.good { background: rgba(61,219,160,.10); color: #3ddba0; }
body.skin-cyber .notice.bad { background: rgba(255,45,149,.10); color: var(--y-mag); }
body.skin-cyber .working-card, body.skin-cyber .ask-card {
    background: var(--y-panel); border: 1px solid var(--y-cyan);
    box-shadow: 0 0 24px rgba(0,229,255,.16);
}
body.skin-cyber .working-t, body.skin-cyber .ask-t {
    font-family: var(--y-mono); font-size: 15px; letter-spacing: .06em; text-transform: uppercase;
}
body.skin-cyber .working-s, body.skin-cyber .ask-b { color: var(--y-dim); }
body.skin-cyber .working-bar { background: var(--y-void); border: 1px solid var(--y-line); border-radius: 0; }
body.skin-cyber .working-fill { background: var(--y-cyan); border-radius: 0; box-shadow: 0 0 10px var(--y-cyan); }

/* ---- shared vocabulary ---- */
body.skin-cyber .tile { background: var(--y-panel2); border: 1px solid var(--y-line-2); border-radius: 0; color: var(--y-ink-2); }
body.skin-cyber .tile:hover { border-color: var(--y-cyan); background: rgba(0,229,255,.05); box-shadow: 0 0 12px rgba(0,229,255,.18); }
body.skin-cyber .tile .icon { background: rgba(0,229,255,.08); border: 1px solid var(--y-line); color: var(--y-cyan); border-radius: 0; box-shadow: none; }
body.skin-cyber .tile-label { font-family: var(--y-mono); text-transform: uppercase; letter-spacing: .04em; color: var(--y-ink); }
body.skin-cyber .tile-desc, body.skin-cyber .muted { color: var(--y-dim); }
body.skin-cyber .slink { font-family: var(--y-mono); text-transform: uppercase; letter-spacing: .05em; color: var(--y-cyan); }
body.skin-cyber .slink:hover { color: #7ff3ff; }

body.skin-cyber.authcard .card { background: var(--y-panel); border: 1px solid var(--y-line); border-radius: 0; }
body.skin-cyber.authcard .card h2 { font-family: var(--y-mono); text-transform: uppercase; letter-spacing: .06em; color: var(--y-ink); }
body.skin-cyber.authcard .card .field label { font-family: var(--y-mono); color: var(--y-ink-2); }
body.skin-cyber.authcard .card .field input {
    background: var(--y-void); border: 1px solid var(--y-line); border-radius: 0;
    color: var(--y-ink); font-family: var(--y-mono);
}
body.skin-cyber.authcard .card button:not(.toggle-eye) {
    background: rgba(0,229,255,.12); border: 1px solid var(--y-cyan); color: var(--y-cyan);
    border-radius: 0; font-family: var(--y-mono); text-transform: uppercase; letter-spacing: .08em;
}
body.skin-cyber.authcard .card .toggle-eye { color: var(--y-dim); }
body.skin-cyber.authcard .card .result { color: var(--y-dim); }
body.skin-cyber.authcard .card .links a { color: var(--y-cyan); font-family: var(--y-mono); }

body.skin-cyber .panel .field > label { font-family: var(--y-mono); color: var(--y-ink-2); }
body.skin-cyber .panel .field input[type=email],
body.skin-cyber .panel .field input[type=password],
body.skin-cyber .panel .field input[type=text] {
    background: var(--y-void); border: 1px solid var(--y-line); border-radius: 0;
    color: var(--y-ink); font-family: var(--y-mono);
}
body.skin-cyber .panel button[type=submit] {
    background: rgba(0,229,255,.12); border: 1px solid var(--y-cyan); color: var(--y-cyan);
    border-radius: 0; font-family: var(--y-mono); text-transform: uppercase;
}
body.skin-cyber .panel .file-drop {
    background: transparent; border: 1px dashed var(--y-line); border-radius: 0; color: var(--y-ink-2);
}
body.skin-cyber .panel .file-drop:hover { border-color: var(--y-cyan); background: rgba(0,229,255,.06); }
body.skin-cyber .panel .file-sub { color: var(--y-faint); }
body.skin-cyber .panel .progress-bar-track { background: var(--y-void); border: 1px solid var(--y-line); border-radius: 0; }
body.skin-cyber .panel .progress-bar-fill { background: var(--y-cyan); }
body.skin-cyber .panel .result { color: var(--y-mag); }

@media (max-width: 860px) {
    body.skin-cyber .acts { background: var(--y-panel2); border-top: 1px solid var(--y-line); }
    body.skin-cyber .acts .act { background: transparent; border: 1px solid var(--y-line); }
    body.skin-cyber .acts .act.key { background: rgba(0,229,255,.10); border-color: var(--y-cyan); }
}


/* ==================================================================
   SYNTHWAVE
   ------------------------------------------------------------------
   An album cover. Where cyber neon is a grid of hairlines, this has an
   actual scene behind it: a sunset over a perspective grid, drawn on a
   fixed layer the way anime's artwork is - except this one is CSS, not
   a painting, so there is nothing to upload.

   The grid is a pair of repeating-linear-gradients skewed toward a
   vanishing point, masked so it fades out before it reaches the middle
   of the screen. The sun is one radial-gradient behind it.

   Warm where cyber is cold: magenta and orange carry it, cyan is the
   accent rather than the subject. Rounded corners, bold italic display,
   and a chrome gradient on the name - white through cyan through
   magenta, which is the one effect this genre is actually about.
   ================================================================== */

body.skin-synthwave {
    --w-deep:   #1a0b2e;
    --w-mid:    #241040;
    --w-panel:  #2a1049;
    --w-line:   #5c3a91;
    --w-line-2: #3f2468;

    --w-mag:    #ff4ecd;
    --w-cyan:   #9ee7ff;
    --w-gold:   #ffd76e;
    --w-orange: #ff7a3d;

    --w-ink:    #f0e2ff;
    --w-ink-2:  #d8c4ff;
    --w-dim:    #a887d4;
    --w-faint:  #7d5fa8;

    background-color: var(--w-deep);
    background-image: none;
    color: var(--w-ink);
}

/* The scene. A fixed layer, so it stays put while a long resume scrolls
   over it - the same reason anime's artwork is a fixed pseudo-element
   rather than a background on the body. */
body.skin-synthwave:after {
    content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none;
    background-color: var(--w-deep);
    background-image:
        /* the horizon grid, running to a vanishing point */
        repeating-linear-gradient(90deg,
            rgba(255,78,205,.34) 0px, rgba(255,78,205,.34) 1px,
            transparent 1px, transparent 58px),
        repeating-linear-gradient(180deg,
            rgba(255,78,205,.30) 0px, rgba(255,78,205,.30) 1px,
            transparent 1px, transparent 34px),
        /* the sun */
        radial-gradient(closest-side at 50% 100%,
            var(--w-gold) 0%, var(--w-orange) 42%, var(--w-mag) 74%, transparent 100%),
        /* the sky */
        linear-gradient(180deg, var(--w-deep) 0%, #3d1259 62%, #7a2263 100%);
    background-size: 100% 100%, 100% 100%, 620px 320px, 100% 100%;
    background-position: 50% 100%, 50% 100%, 50% 100%, 0 0;
    background-repeat: no-repeat;
    /* Grid only near the floor, and only the sun's own patch of sky. */
    -webkit-mask-image: none; mask-image: none;
}
/* The grid faded out above the horizon, drawn as its own layer so the
   mask does not take the sky with it. */
body.skin-synthwave:before {
    content: ""; position: fixed; inset: 0; z-index: 0; pointer-events: none;
    background-image: repeating-linear-gradient(180deg,
        rgba(255,78,205,.12) 0px, rgba(255,78,205,.12) 1px,
        transparent 1px, transparent 26px);
    -webkit-mask-image: linear-gradient(180deg, transparent 62%, #000 100%);
    mask-image: linear-gradient(180deg, transparent 62%, #000 100%);
}
/* The top bar keeps the sticky position and high stacking order it has
   in the base stylesheet. Flattening it to z-index 1 - as this line
   used to - dropped it below the shell, which is also 1 and comes later
   in the DOM, so the picker menu opened behind the panels. */
body.skin-synthwave .shell { position: relative; z-index: 1; }
body.skin-synthwave .topbar { position: sticky; top: 0; z-index: 30; }

/* ---- chrome ---- */
body.skin-synthwave .topbar {
    background: rgba(29,10,53,.92);
    border-bottom: 2px solid var(--w-mag);
    -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
}
body.skin-synthwave .bn {
    font-size: 21px; font-weight: 800; font-style: italic; letter-spacing: -.01em;
    /* Chrome type: white through cyan through magenta through gold. The
       one effect this whole genre is actually about. */
    background: linear-gradient(180deg, #ffffff 0%, var(--w-cyan) 44%,
                                var(--w-mag) 56%, var(--w-gold) 100%);
    -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent; color: transparent;
}
body.skin-synthwave .bn span {
    background: inherit; -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent; color: transparent;
}
body.skin-synthwave .logo {
    background: var(--w-panel); border-radius: 50%;
    box-shadow: 0 0 0 2px var(--w-mag), 0 0 16px rgba(255,78,205,.55);
}

body.skin-synthwave .ghost,
body.skin-synthwave .act,
body.skin-synthwave .mini,
body.skin-synthwave .undo,
body.skin-synthwave .toggle,
body.skin-synthwave .go {
    font-weight: 700; border-radius: 999px;
    background: rgba(42,16,73,.85); border: 1px solid var(--w-line); color: var(--w-ink-2);
}
body.skin-synthwave .ghost:hover,
body.skin-synthwave .act:hover,
body.skin-synthwave .mini:hover,
body.skin-synthwave .undo:hover:not(:disabled) {
    border-color: var(--w-mag); color: #fff;
    box-shadow: 0 0 14px rgba(255,78,205,.35);
}
body.skin-synthwave .act.key, body.skin-synthwave .act.live,
body.skin-synthwave .go, body.skin-synthwave .mini.key {
    background: linear-gradient(135deg, var(--w-mag) 0%, #b23bff 100%);
    border-color: rgba(255,180,235,.7); color: #22042f;
    box-shadow: 0 0 18px rgba(255,78,205,.45);
}
body.skin-synthwave .act.pdf {
    background: linear-gradient(135deg, var(--w-gold) 0%, var(--w-orange) 100%);
    border-color: rgba(255,215,110,.7); color: #3a1503;
}
body.skin-synthwave .act.danger { background: rgba(120,20,60,.6); border-color: #a3336b; color: #ffb3d8; }
body.skin-synthwave .acts-note { color: var(--w-dim); }

/* ---- picker ---- */
body.skin-synthwave .skinmenu {
    background: rgba(36,16,64,.97); border: 1px solid var(--w-line); border-radius: 14px;
    box-shadow: 0 20px 44px -18px rgba(0,0,0,.9), 0 0 22px rgba(255,78,205,.18);
}
body.skin-synthwave .skinmenu-h { color: var(--w-faint); }
body.skin-synthwave .skinopt { color: var(--w-ink-2); border-radius: 9px; }
body.skin-synthwave .skinopt:hover { background: rgba(255,78,205,.12); }
body.skin-synthwave .skinopt.on {
    background: linear-gradient(135deg, var(--w-mag) 0%, #b23bff 100%); color: #fff;
}
body.skin-synthwave .tick { color: #fff; }
body.skin-synthwave .sw i { border-color: rgba(255,255,255,.3); }

/* ---- rail ---- */
body.skin-synthwave .rail-h { color: #c48fe8; letter-spacing: .16em; }
body.skin-synthwave .rgroup {
    background: rgba(36,16,64,.82); border: 1px solid var(--w-line-2); border-radius: 12px;
}
body.skin-synthwave .v { color: var(--w-ink); }
body.skin-synthwave .v .d { color: var(--w-dim); }
body.skin-synthwave .rgroup .v:hover { background: rgba(255,78,205,.10); }
body.skin-synthwave .rgroup .v.on,
body.skin-synthwave .rgroup .v.on:hover {
    background: rgba(255,78,205,.16);
    box-shadow: inset 0 0 0 2px var(--w-mag), 0 0 16px rgba(255,78,205,.25);
}
body.skin-synthwave .rgroup .v.on .n { color: #ffd9f4; }
body.skin-synthwave .rgroup .v.on .d { color: #e5b8f0; }
body.skin-synthwave .v.sub { background: rgba(255,255,255,.04); border-top: 1px solid var(--w-line-2); }
body.skin-synthwave .v.sub:before { color: var(--w-faint); }
body.skin-synthwave .v-add {
    background: transparent; border: 2px dashed var(--w-cyan); border-radius: 12px;
    color: var(--w-cyan); font-weight: 700;
}
body.skin-synthwave .v-add:hover {
    background: rgba(158,231,255,.10); border-style: solid;
    box-shadow: 0 0 14px rgba(158,231,255,.3);
}

/* ---- controls ---- */
body.skin-synthwave .panel {
    background: rgba(42,16,73,.90); border: 1px solid var(--w-line); border-radius: 14px;
}
body.skin-synthwave .dochead { border-bottom-color: var(--w-line-2); }
body.skin-synthwave .dh-t { color: #ffd9f4; font-weight: 800; }
body.skin-synthwave .dh-s { color: var(--w-dim); }
body.skin-synthwave .pencil, body.skin-synthwave .subact { color: var(--w-dim); }
body.skin-synthwave .dh-t:hover .pencil,
body.skin-synthwave .subact:hover { color: #fff; border-color: var(--w-mag); background: rgba(255,78,205,.14); }
body.skin-synthwave .state { background: rgba(31,92,74,.75); color: #8dffd0; border: 1px solid #3ddb9e; }
body.skin-synthwave .state.busy { background: rgba(122,80,20,.7); color: var(--w-gold); border-color: var(--w-gold); }
body.skin-synthwave .state.bad { background: rgba(120,20,60,.7); color: #ffb3d8; border-color: #a3336b; }
body.skin-synthwave .tg-label, body.skin-synthwave .tg-word { color: var(--w-ink-2); }
body.skin-synthwave .tg-track { background: rgba(14,4,26,.85); }
body.skin-synthwave .tg-knob { background: var(--w-cyan); }
body.skin-synthwave .toggle[aria-pressed="true"] .tg-track { background: rgba(255,78,205,.35); }
body.skin-synthwave .toggle[aria-pressed="true"] .tg-knob {
    background: var(--w-mag); box-shadow: 0 0 12px var(--w-mag);
}
body.skin-synthwave .lamp { background: rgba(255,255,255,.25); }
body.skin-synthwave .act.running .lamp { background: var(--w-cyan); box-shadow: 0 0 9px var(--w-cyan); }
body.skin-synthwave .act.done .lamp { background: var(--w-mag); box-shadow: 0 0 9px var(--w-mag); }

/* ---- the document ---- */
body.skin-synthwave .sheet {
    background: rgba(36,16,64,.94); border: 1px solid var(--w-line); border-radius: 14px;
    box-shadow: 0 22px 48px -22px rgba(0,0,0,.9);
    color: var(--w-ink);
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
body.skin-synthwave .cname {
    font-size: 30px; font-weight: 800; letter-spacing: .01em; text-align: center;
    background: linear-gradient(180deg, #ffffff 0%, var(--w-cyan) 44%,
                                var(--w-mag) 56%, var(--w-gold) 100%);
    -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent; color: transparent;
}
body.skin-synthwave .cmeta { color: var(--w-dim); text-align: center; }
body.skin-synthwave .contact-edit { display: block; margin: 8px auto 0; }
body.skin-synthwave .sec-h h2 {
    font-size: 11.5px; letter-spacing: .2em; color: var(--w-cyan);
    border-bottom: 2px solid rgba(255,78,205,.55);
}
body.skin-synthwave .card p, body.skin-synthwave .jbul li, body.skin-synthwave .jpara { color: #e6d7ff; }
body.skin-synthwave .jt { font-size: 17px; font-weight: 700; color: #ffd9f4; text-transform: none; }
body.skin-synthwave .je { color: var(--w-dim); }
body.skin-synthwave .jd { color: var(--w-faint); }
body.skin-synthwave .jbul li:before { color: var(--w-mag); }
body.skin-synthwave .card:hover { background: rgba(255,78,205,.07); }
body.skin-synthwave .card.editing { background: rgba(42,16,73,.9); border-color: var(--w-line); }
body.skin-synthwave .chip {
    background: rgba(158,231,255,.12); border: 1px solid rgba(158,231,255,.35); color: var(--w-cyan);
}
body.skin-synthwave .empty { color: var(--w-faint); }
body.skin-synthwave .hintline { color: var(--w-faint); }
body.skin-synthwave .edit, body.skin-synthwave .contact-edit,
body.skin-synthwave .card-tools button { color: var(--w-cyan); }
body.skin-synthwave .card-tools button.danger { color: #ff8ab8; }
body.skin-synthwave .cedit input, body.skin-synthwave .cedit textarea,
body.skin-synthwave .editor input, body.skin-synthwave .editor textarea,
body.skin-synthwave .ask-input, body.skin-synthwave .drawer textarea {
    background: rgba(14,4,26,.8); border: 1px solid var(--w-line); color: var(--w-ink);
}
body.skin-synthwave .drawer { background: rgba(26,11,46,.8); border-bottom-color: var(--w-line-2); }
body.skin-synthwave .drawer label { color: var(--w-ink-2); }
body.skin-synthwave .sugg, body.skin-synthwave .tip {
    background: rgba(158,231,255,.08); border: 1px solid rgba(158,231,255,.3);
    color: #cfeeff;
}
body.skin-synthwave .tip button {
    background: rgba(14,4,26,.6); border: 1px solid rgba(158,231,255,.35); color: #cfeeff;
}
body.skin-synthwave .tip button.apply { background: var(--w-cyan); border-color: var(--w-cyan); color: #062430; }
body.skin-synthwave .notice.good { background: rgba(31,92,74,.8); color: #8dffd0; }
body.skin-synthwave .notice.bad { background: rgba(120,20,60,.8); color: #ffb3d8; }
body.skin-synthwave .working-card, body.skin-synthwave .ask-card {
    background: rgba(42,16,73,.97); border: 1px solid var(--w-mag);
    box-shadow: 0 0 34px rgba(255,78,205,.28);
}
body.skin-synthwave .working-t, body.skin-synthwave .ask-t { color: #ffd9f4; }
body.skin-synthwave .working-s, body.skin-synthwave .ask-b { color: var(--w-dim); }
body.skin-synthwave .working-bar { background: rgba(14,4,26,.9); }
body.skin-synthwave .working-fill { background: linear-gradient(90deg, var(--w-cyan), var(--w-mag)); }

/* ---- shared vocabulary ---- */
body.skin-synthwave .tile {
    background: rgba(36,16,64,.85); border: 1px solid var(--w-line-2); color: var(--w-ink);
}
body.skin-synthwave .tile:hover {
    background: rgba(255,78,205,.12); border-color: var(--w-mag);
    box-shadow: 0 0 18px rgba(255,78,205,.25);
}
body.skin-synthwave .tile .icon {
    background: rgba(255,78,205,.16); border: 1px solid rgba(255,78,205,.4);
    color: var(--w-cyan); box-shadow: none;
}
body.skin-synthwave .tile-label { color: #ffd9f4; }
body.skin-synthwave .tile-desc, body.skin-synthwave .muted { color: var(--w-dim); }
body.skin-synthwave .slink { color: var(--w-cyan); }
body.skin-synthwave .slink:hover { color: #fff; }

body.skin-synthwave.authcard .card {
    background: rgba(42,16,73,.94); border: 1px solid var(--w-line);
}
body.skin-synthwave.authcard .card h2 { color: #ffd9f4; }
body.skin-synthwave.authcard .card .field label { color: var(--w-ink-2); }
body.skin-synthwave.authcard .card .field input {
    background: rgba(14,4,26,.8); border: 1px solid var(--w-line); color: var(--w-ink);
}
body.skin-synthwave.authcard .card button:not(.toggle-eye) {
    background: linear-gradient(135deg, var(--w-mag) 0%, #b23bff 100%); color: #fff;
    border-radius: 999px;
}
body.skin-synthwave.authcard .card .toggle-eye { color: var(--w-dim); }
body.skin-synthwave.authcard .card .result { color: var(--w-dim); }
body.skin-synthwave.authcard .card .links a { color: var(--w-cyan); }

body.skin-synthwave .panel .field > label { color: var(--w-ink-2); }
body.skin-synthwave .panel .field input[type=email],
body.skin-synthwave .panel .field input[type=password],
body.skin-synthwave .panel .field input[type=text] {
    background: rgba(14,4,26,.8); border: 1px solid var(--w-line); color: var(--w-ink);
}
body.skin-synthwave .panel button[type=submit] {
    background: linear-gradient(135deg, var(--w-mag) 0%, #b23bff 100%); color: #fff;
}
body.skin-synthwave .panel .file-drop {
    background: rgba(158,231,255,.07); border: 2px dashed var(--w-cyan); color: var(--w-ink);
}
body.skin-synthwave .panel .file-drop:hover { background: rgba(158,231,255,.14); }
body.skin-synthwave .panel .file-sub { color: var(--w-dim); }
body.skin-synthwave .panel .progress-bar-track { background: rgba(14,4,26,.9); }
body.skin-synthwave .panel .progress-bar-fill { background: linear-gradient(90deg, var(--w-cyan), var(--w-mag)); }
body.skin-synthwave .panel .result { color: #ffb3d8; }

@media (max-width: 860px) {
    /* Same iOS compositing problem the anime skin hit: a blurred bar
       fixed over a fixed background paints as a plain rectangle. */
    body.skin-synthwave .topbar {
        -webkit-backdrop-filter: none; backdrop-filter: none;
        background: rgba(29,10,53,.97);
    }
    body.skin-synthwave .acts {
        background: rgba(29,10,53,.97); border-top: 1px solid var(--w-mag);
    }
    body.skin-synthwave .acts .act { background: rgba(42,16,73,.9); border: 1px solid var(--w-line); }
    body.skin-synthwave .cname { font-size: 24px; }
}


/* ==================================================================
   NATURAL
   ------------------------------------------------------------------
   Daylight. Every other skin in the set is a machine, a screen or a
   room at night; this one is a desk by a window in the morning.

   Warm ivory rather than white - #fbf8f1 against #ffffff is the
   difference between paper and a lightbox, and it is the single change
   that makes a light interface comfortable to sit in front of.

   Sage carries structure, clay carries anything that acts. Keeping
   those two jobs separate is what stops it looking like a garden centre
   leaflet: the green is never a button, and the clay is never a border.

   The botanical is wallpaper, not decoration - one sprig tiled at
   260px and about 4% opaque. If anyone notices it, it is too strong.
   ================================================================== */

body.skin-natural {
    --g-ivory:  #fbf8f1;
    --g-ivory-2:#f4efe4;
    --g-page:   #efe9db;
    --g-line:   #ded6c4;
    --g-line-2: #cfc5ae;

    --g-sage:   #7d9b7c;
    --g-sage-d: #5d7a5d;
    --g-euc:    #6f8f80;
    --g-clay:   #c17554;
    --g-clay-d: #a85c3d;
    --g-wood:   #c9ad8a;

    --g-ink:    #2f342e;
    --g-ink-2:  #545c50;
    --g-dim:    #7b8477;
    --g-faint:  #9aa294;

    background-color: var(--g-page);
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='260' viewBox='0 0 260 260'%3E%3Cg fill='none' stroke='%237d9b7c' stroke-width='1.3' stroke-linecap='round'%3E%3Cpath d='M40 30 C40 60 48 84 62 104'/%3E%3Cpath d='M44 46 C30 44 22 36 20 24 C34 24 42 32 44 46z' fill='%237d9b7c' fill-opacity='.5' stroke='none'/%3E%3Cpath d='M48 66 C62 62 70 52 71 40 C57 42 49 52 48 66z' fill='%237d9b7c' fill-opacity='.5' stroke='none'/%3E%3Cpath d='M54 88 C40 86 31 78 29 66 C43 66 52 74 54 88z' fill='%237d9b7c' fill-opacity='.5' stroke='none'/%3E%3Cpath d='M186 190 C186 160 178 136 164 116'/%3E%3Cpath d='M182 174 C196 176 204 184 206 196 C192 196 184 188 182 174z' fill='%237d9b7c' fill-opacity='.5' stroke='none'/%3E%3Cpath d='M178 154 C164 158 156 168 155 180 C169 178 177 168 178 154z' fill='%237d9b7c' fill-opacity='.5' stroke='none'/%3E%3Cpath d='M172 132 C186 134 195 142 197 154 C183 154 174 146 172 132z' fill='%237d9b7c' fill-opacity='.5' stroke='none'/%3E%3C/g%3E%3C/svg%3E");
    background-size: 260px 260px;
    color: var(--g-ink);
}

/* ---- chrome ---- */
body.skin-natural .topbar {
    background: var(--g-ivory);
    border-bottom: 1px solid var(--g-line);
}
body.skin-natural .bn { color: var(--g-ink); font-weight: 650; }
body.skin-natural .bn span {
    background: none; -webkit-text-fill-color: var(--g-sage-d); color: var(--g-sage-d);
}
body.skin-natural .logo { background: transparent; }

body.skin-natural .ghost,
body.skin-natural .act,
body.skin-natural .mini,
body.skin-natural .undo,
body.skin-natural .toggle {
    background: var(--g-ivory); border: 1px solid var(--g-line-2); color: var(--g-ink-2);
    border-radius: 10px;
}
body.skin-natural .ghost:hover,
body.skin-natural .act:hover,
body.skin-natural .mini:hover,
body.skin-natural .undo:hover:not(:disabled) {
    background: var(--g-ivory-2); border-color: var(--g-sage); color: var(--g-ink);
    box-shadow: none;
}
/* Clay for anything that acts, sage for anything that is structure.
   Mixing the two is what makes this palette look like a leaflet. */
body.skin-natural .act.key, body.skin-natural .act.live,
body.skin-natural .go, body.skin-natural .mini.key {
    background: var(--g-clay); border: 1px solid var(--g-clay-d); color: #fff8f3;
}
body.skin-natural .act.pdf { background: var(--g-ivory); }
body.skin-natural .act.danger { color: #a5432f; border-color: #e0bcae; }
body.skin-natural .act.danger:hover { background: #f8ece6; border-color: #c58a75; }
body.skin-natural .acts-note { color: var(--g-dim); }

/* ---- picker ---- */
body.skin-natural .skinmenu {
    background: var(--g-ivory); border: 1px solid var(--g-line);
    box-shadow: 0 14px 30px -16px rgba(60,55,40,.35);
}
body.skin-natural .skinmenu-h { color: var(--g-faint); }
body.skin-natural .skinopt { color: var(--g-ink-2); }
body.skin-natural .skinopt:hover { background: var(--g-ivory-2); }
body.skin-natural .skinopt.on { background: rgba(125,155,124,.18); color: var(--g-sage-d); }
body.skin-natural .tick { color: var(--g-sage-d); }
body.skin-natural .sw i { border-color: var(--g-line-2); }

/* ---- rail ---- */
body.skin-natural .rail-h { color: var(--g-faint); }
body.skin-natural .rgroup {
    background: var(--g-ivory); border: 1px solid var(--g-line); border-radius: 12px;
}
body.skin-natural .v { color: var(--g-ink); }
body.skin-natural .v .d { color: var(--g-dim); }
body.skin-natural .rgroup .v:hover { background: var(--g-ivory-2); }
body.skin-natural .rgroup .v.on,
body.skin-natural .rgroup .v.on:hover {
    background: rgba(125,155,124,.16);
    box-shadow: inset 3px 0 0 var(--g-sage-d);
}
body.skin-natural .rgroup .v.on .n { color: var(--g-sage-d); }
body.skin-natural .rgroup .v.on .d { color: var(--g-ink-2); }
body.skin-natural .v.sub { background: var(--g-ivory-2); border-top: 1px solid var(--g-line); }
body.skin-natural .v.sub:hover { background: #ece6d8; }
body.skin-natural .v.sub:before { color: var(--g-faint); }
body.skin-natural .v-add {
    background: var(--g-ivory); border: 2px dashed var(--g-sage);
    border-radius: 12px; color: var(--g-sage-d);
}
body.skin-natural .v-add:hover { background: rgba(125,155,124,.12); border-style: solid; }

/* ---- controls ---- */
body.skin-natural .panel {
    background: var(--g-ivory); border: 1px solid var(--g-line); border-radius: 14px;
}
body.skin-natural .dochead { border-bottom-color: var(--g-line); }
body.skin-natural .dh-t { color: var(--g-ink); }
body.skin-natural .dh-s { color: var(--g-dim); }
body.skin-natural .pencil, body.skin-natural .subact { color: var(--g-faint); }
body.skin-natural .dh-t:hover .pencil,
body.skin-natural .subact:hover {
    color: var(--g-sage-d); border-color: var(--g-sage); background: rgba(125,155,124,.12);
}
body.skin-natural .state { background: rgba(125,155,124,.20); color: var(--g-sage-d); }
body.skin-natural .state.busy { background: rgba(193,117,84,.16); color: var(--g-clay-d); }
body.skin-natural .state.bad { background: #f6e3dc; color: #a5432f; }
body.skin-natural .tg-label, body.skin-natural .tg-word { color: var(--g-ink-2); }
body.skin-natural .tg-track { background: var(--g-line); }
body.skin-natural .tg-knob { background: var(--g-ivory); }
body.skin-natural .toggle[aria-pressed="true"] .tg-track { background: var(--g-sage); }
body.skin-natural .toggle[aria-pressed="true"] .tg-knob { background: #fff; }
body.skin-natural .lamp { background: var(--g-line-2); }
body.skin-natural .act.running .lamp { background: var(--g-clay); box-shadow: 0 0 7px rgba(193,117,84,.6); }
body.skin-natural .act.done .lamp { background: var(--g-sage-d); box-shadow: none; }

/* ---- the document: actual paper ----
   A shade lighter than everything around it, so the page reads as paper
   laid on a desk rather than as another panel.

   Four layers on .tube, top-down as CSS lists them:

     no sprigs    they are on the page behind the sheet, not on the
                  sheet itself. Two botanicals competing on one screen
                  was one too many, and the page is where they belong.
     the crinkle  a photograph of handmade paper, cut to a tile that
                  repeats without a seam. feTurbulence was tried first
                  and could not do it: procedural noise makes grain,
                  not creases, and at any strength that showed it read
                  as static rather than as paper. Drawn laid lines were
                  tried too and read as graph paper.

   All of it is decoration on the page, never behind the words: the
   heaviest layer here is at 5% and the sprigs never reach the text
   column. */
body.skin-natural .sheet {
    background: #fffdf8;
    border: none; border-radius: 0;
    color: var(--g-ink);
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;

    /* A torn edge, as five mask layers: one ragged strip tiled along
       each side, plus a solid rectangle filling the middle. Mask layers
       are added together by default, so the five make one shape.

       This replaced a single mask stretched to the element's size,
       which was the whole problem: the sheet is much taller than the
       mask, so the vertical wobble got multiplied while the horizontal
       frequency compressed, and the top and bottom came out as spikes.
       Tiled strips keep the deckle at 14px whatever the resume's
       length, and the tiles are seamless because each ragged line ends
       at the height it started.

       The shadow is a filter rather than box-shadow: a mask clips
       everything an element paints, box-shadow included, so a
       box-shadow would sit square behind a ragged page. */
    --deckle-top:    url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='14' viewBox='0 0 260 14'%3E%3Cpath d='M0 14 L0.0 9.9 L11.0 10.1 L22.0 9.7 L33.0 4.2 L44.0 7.6 L55.0 6.5 L66.0 7.2 L77.0 4.5 L88.0 4.9 L99.0 6.6 L110.0 5.1 L121.0 6.7 L132.0 3.8 L143.0 4.2 L154.0 8.4 L165.0 6.5 L176.0 7.1 L187.0 8.6 L198.0 6.0 L209.0 4.0 L220.0 8.9 L231.0 7.6 L242.0 8.1 L253.0 7.8 L260.0 9.9 L260 14 Z' fill='%23fff'/%3E%3C/svg%3E");
    --deckle-bottom: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='14' viewBox='0 0 260 14'%3E%3Cpath d='M0 0 L0.0 7.9 L11.0 5.2 L22.0 7.9 L33.0 6.5 L44.0 5.9 L55.0 8.3 L66.0 9.8 L77.0 7.2 L88.0 5.5 L99.0 6.4 L110.0 7.4 L121.0 6.0 L132.0 9.2 L143.0 9.2 L154.0 8.2 L165.0 4.9 L176.0 9.1 L187.0 9.6 L198.0 9.7 L209.0 10.1 L220.0 8.5 L231.0 6.5 L242.0 4.8 L253.0 8.2 L260.0 7.9 L260 0 Z' fill='%23fff'/%3E%3C/svg%3E");
    --deckle-left:   url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='260' viewBox='0 0 14 260'%3E%3Cpath d='M14 0 L5.6 0.0 L5.7 11.0 L8.9 22.0 L7.3 33.0 L5.4 44.0 L4.3 55.0 L8.9 66.0 L8.4 77.0 L9.2 88.0 L5.2 99.0 L7.3 110.0 L9.8 121.0 L7.6 132.0 L10.0 143.0 L4.7 154.0 L10.2 165.0 L4.0 176.0 L6.4 187.0 L3.8 198.0 L9.1 209.0 L8.3 220.0 L10.2 231.0 L9.1 242.0 L10.1 253.0 L5.6 260.0 L14 260 Z' fill='%23fff'/%3E%3C/svg%3E");
    --deckle-right:  url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='260' viewBox='0 0 14 260'%3E%3Cpath d='M0 0 L3.7 0.0 L5.3 11.0 L8.0 22.0 L3.8 33.0 L7.8 44.0 L9.1 55.0 L9.9 66.0 L7.2 77.0 L9.1 88.0 L4.1 99.0 L3.9 110.0 L8.9 121.0 L9.7 132.0 L6.8 143.0 L9.2 154.0 L6.7 165.0 L4.9 176.0 L8.7 187.0 L7.5 198.0 L4.3 209.0 L7.4 220.0 L8.1 231.0 L4.3 242.0 L4.9 253.0 L3.7 260.0 L0 260 Z' fill='%23fff'/%3E%3C/svg%3E");

    -webkit-mask-image:
        var(--deckle-top), var(--deckle-bottom),
        var(--deckle-left), var(--deckle-right),
        linear-gradient(#000, #000);
    mask-image:
        var(--deckle-top), var(--deckle-bottom),
        var(--deckle-left), var(--deckle-right),
        linear-gradient(#000, #000);
    -webkit-mask-repeat: repeat-x, repeat-x, repeat-y, repeat-y, no-repeat;
    mask-repeat: repeat-x, repeat-x, repeat-y, repeat-y, no-repeat;
    -webkit-mask-size:
        260px 14px, 260px 14px, 14px 260px, 14px 260px,
        calc(100% - 24px) calc(100% - 24px);
    mask-size:
        260px 14px, 260px 14px, 14px 260px, 14px 260px,
        calc(100% - 24px) calc(100% - 24px);
    -webkit-mask-position: left top, left bottom, left top, right top, 12px 12px;
    mask-position: left top, left bottom, left top, right top, 12px 12px;

    filter: drop-shadow(0 10px 22px rgba(90,80,60,.26));
}
body.skin-natural .tube {
    border-radius: 0;
    background-image:
        url('/resume/images/paper.webp?v=2'),
        linear-gradient(180deg, #fffdf8 0%, #fdfaf3 100%);
    background-repeat: repeat, no-repeat;
    background-size: 420px 420px, auto;
    /* multiply on the texture only. The tile is baked into the 236-255
       range, so it takes at most 7% off the paper - at 214 it read as
       grey rather than as ivory. The colour comes from the gradient
       underneath; the photograph only supplies the creases. */
    background-blend-mode: multiply, normal;
}

body.skin-natural .doc { position: relative; z-index: 1; }
body.skin-natural .cname { color: #23281f; font-weight: 700; letter-spacing: -.01em; }
body.skin-natural .cmeta { color: var(--g-dim); }
/* A short rule in clay before the label - the one place the two colours
   sit together, and the reason the sections read as sections. */
body.skin-natural .sec-h h2 {
    display: flex; align-items: center; gap: 10px;
    color: var(--g-sage-d); letter-spacing: .14em;
    border-bottom: 1px solid var(--g-line);
}
body.skin-natural .sec-h h2:before {
    content: ""; width: 18px; height: 2px; background: var(--g-clay);
    flex-shrink: 0; border-radius: 1px;
}
body.skin-natural .card p, body.skin-natural .jbul li, body.skin-natural .jpara { color: #3a4036; }
body.skin-natural .jt { color: #23281f; }
body.skin-natural .je { color: var(--g-ink-2); }
body.skin-natural .jd { color: var(--g-faint); }
body.skin-natural .jbul li:before { color: var(--g-sage); }
body.skin-natural .card:hover { background: rgba(125,155,124,.07); }
body.skin-natural .card.editing { background: var(--g-ivory-2); border-color: var(--g-line-2); }
body.skin-natural .chip {
    background: rgba(125,155,124,.16); border: 1px solid rgba(125,155,124,.35); color: #46583f;
}
body.skin-natural .empty { color: var(--g-faint); }
body.skin-natural .hintline { color: var(--g-faint); }
body.skin-natural .edit, body.skin-natural .contact-edit,
body.skin-natural .card-tools button { color: var(--g-clay-d); }
body.skin-natural .card-tools button.danger { color: #a5432f; }
body.skin-natural .cedit input, body.skin-natural .cedit textarea,
body.skin-natural .editor input, body.skin-natural .editor textarea,
body.skin-natural .ask-input, body.skin-natural .drawer textarea {
    background: #fffdf8; border: 1px solid var(--g-line-2); color: var(--g-ink);
}
body.skin-natural .drawer { background: var(--g-ivory-2); border-bottom-color: var(--g-line); }
body.skin-natural .drawer label { color: var(--g-ink-2); }
body.skin-natural .sugg, body.skin-natural .tip {
    background: rgba(201,173,138,.16); border: 1px solid rgba(201,173,138,.5); color: #6b5535;
}
body.skin-natural .tip button { background: #fffdf8; border-color: rgba(201,173,138,.6); color: #6b5535; }
body.skin-natural .tip button.apply { background: var(--g-clay); border-color: var(--g-clay); color: #fff8f3; }
body.skin-natural .notice.good { background: rgba(125,155,124,.20); color: #3f5c3f; }
body.skin-natural .notice.bad { background: #f6e3dc; color: #a5432f; }
body.skin-natural .working-card, body.skin-natural .ask-card {
    background: var(--g-ivory); border: 1px solid var(--g-line); border-radius: 16px;
}
body.skin-natural .working-t, body.skin-natural .ask-t { color: var(--g-ink); }
body.skin-natural .working-s, body.skin-natural .ask-b { color: var(--g-ink-2); }
body.skin-natural .working-bar { background: var(--g-line); }
body.skin-natural .working-fill { background: linear-gradient(90deg, var(--g-sage), var(--g-clay)); }

/* ---- shared vocabulary ---- */
body.skin-natural .tile {
    background: var(--g-ivory); border: 1px solid var(--g-line); color: var(--g-ink);
}
body.skin-natural .tile:hover {
    background: #fffdf8; border-color: var(--g-sage);
    box-shadow: 0 8px 20px -14px rgba(90,80,60,.5);
}
body.skin-natural .tile .icon {
    background: rgba(125,155,124,.18); border: 1px solid rgba(125,155,124,.35);
    color: var(--g-sage-d); box-shadow: none;
}
body.skin-natural .tile-label { color: var(--g-ink); }
body.skin-natural .tile-desc, body.skin-natural .muted { color: var(--g-dim); }
body.skin-natural .slink { color: var(--g-clay-d); }
body.skin-natural .slink:hover { color: var(--g-clay); }

body.skin-natural.authcard .card { background: var(--g-ivory); border: 1px solid var(--g-line); }
body.skin-natural.authcard .card h2 { color: var(--g-ink); }
body.skin-natural.authcard .card .field label { color: var(--g-ink-2); }
body.skin-natural.authcard .card .field input {
    background: #fffdf8; border: 1px solid var(--g-line-2); color: var(--g-ink);
}
body.skin-natural.authcard .card button:not(.toggle-eye) {
    background: var(--g-clay); color: #fff8f3;
}
body.skin-natural.authcard .card .toggle-eye { color: var(--g-faint); }
body.skin-natural.authcard .card .result { color: var(--g-ink-2); }
body.skin-natural.authcard .card .links a { color: var(--g-clay-d); }

body.skin-natural .panel .field > label { color: var(--g-ink-2); }
body.skin-natural .panel .field input[type=email],
body.skin-natural .panel .field input[type=password],
body.skin-natural .panel .field input[type=text] {
    background: #fffdf8; border: 1px solid var(--g-line-2); color: var(--g-ink);
}
body.skin-natural .panel button[type=submit] { background: var(--g-clay); color: #fff8f3; }
body.skin-natural .panel .file-drop {
    background: var(--g-ivory-2); border: 2px dashed var(--g-sage); color: var(--g-ink);
}
body.skin-natural .panel .file-drop:hover { background: rgba(125,155,124,.14); }
body.skin-natural .panel .file-sub { color: var(--g-dim); }
body.skin-natural .panel .progress-bar-track { background: var(--g-line); }
body.skin-natural .panel .progress-bar-fill { background: var(--g-sage); }
body.skin-natural .panel .result { color: #a5432f; }

@media (max-width: 860px) {
    body.skin-natural .acts { background: var(--g-ivory); border-top: 1px solid var(--g-line); }
}


/* ==================================================================
   EXECUTIVE
   ------------------------------------------------------------------
   Navy, cream and brass. The quietest skin in the set and the one that
   takes the most restraint to keep quiet - luxury here is what has been
   left out, not what has been added.

   Three rules held it together:

   Nothing glows and nothing has a gradient. Every other skin uses one
   or both. A gradient reads as a screen effect; this should read as
   materials - a navy blotter, a cream card, a brass rule.

   Brass is a hairline, never a fill. The moment it becomes a button it
   stops looking like a fitting and starts looking like gold plastic.

   One stripe, in one place. The repp band under the top bar is the
   only ornament in the whole skin, and it works because there is
   nothing else competing with it.

   The document is the cream card the rest of the palette is built
   around, set in a serif - which is what a resume actually is.
   ================================================================== */

body.skin-executive {
    --x-navy:   #14243f;
    --x-navy-d: #0f1c33;
    --x-navy-l: #1d3252;
    --x-line:   #2b4269;
    --x-line-2: #22354f;

    --x-cream:  #f4f2ec;
    --x-cream-2:#e9e5db;
    --x-paper:  #fbfaf6;

    --x-brass:  #b99a5b;
    --x-brass-l:#d4b878;
    --x-crimson:#8f2d3c;

    --x-ink:    #dfe4ec;
    --x-ink-2:  #aab4c4;
    --x-dim:    #8792a3;
    --x-faint:  #6b7688;

    --x-serif: Georgia, 'Times New Roman', serif;

    background-color: var(--x-navy);
    background-image: none;
    color: var(--x-ink);
}

/* ---- chrome ----
   The one ornament: a repp stripe under the bar, the width of a
   hairline band. Two gradients, no image. */
body.skin-executive .topbar {
    background: var(--x-navy-d);
    border-bottom: none;
    position: sticky; top: 0; z-index: 30;
}
/* Gold rope, under the bar - the one ornament in the skin.
   A repp stripe was here first and did not survive contact with the
   height available: a diagonal stripe needs vertical room to read as
   woven, and at border height it came out as hazard tape. A drawn
   CSS rope came next and read as a row of gold beads - the strand
   period was too long and the highlight bloomed in the middle of each
   twist.
   This is a photograph instead, cut to a single strand period so it
   tiles without a seam. About 4KB, and at 9px tall it holds the fine
   twist that neither of the drawn versions could.
   background-size sets only the height; auto keeps the tile's own
   proportion, so the twist never stretches. Bump the ?v= if the file
   is ever replaced. */
body.skin-executive .topbar:after {
    content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 9px;
    background-image: url('/resume/images/rope.webp?v=2');
    background-repeat: repeat-x;
    background-size: auto 9px;
    box-shadow: inset 0 1px 0 rgba(0,0,0,.45);
}

body.skin-executive .bn {
    font-family: var(--x-serif); font-size: 20px; font-weight: 400;
    letter-spacing: .06em; color: var(--x-cream);
}
body.skin-executive .bn span {
    background: none; -webkit-text-fill-color: var(--x-brass); color: var(--x-brass);
    font-style: italic;
}
body.skin-executive .logo {
    background: transparent; border-radius: 50%;
    box-shadow: 0 0 0 1px rgba(185,154,91,.55);
}

body.skin-executive .ghost,
body.skin-executive .act,
body.skin-executive .mini,
body.skin-executive .undo,
body.skin-executive .toggle,
body.skin-executive .go {
    font-size: 13px; font-weight: 600; letter-spacing: .04em;
    background: transparent; border: 1px solid var(--x-line); color: var(--x-ink);
    border-radius: 3px;
}
body.skin-executive .ghost:hover,
body.skin-executive .act:hover,
body.skin-executive .mini:hover,
body.skin-executive .undo:hover:not(:disabled) {
    background: var(--x-navy-l); border-color: var(--x-brass); color: #fff; box-shadow: none;
}
/* Cream, not brass. Brass stays a hairline throughout - a filled brass
   button is gold plastic. */
body.skin-executive .act.key, body.skin-executive .act.live,
body.skin-executive .go, body.skin-executive .mini.key {
    background: var(--x-cream); border: 1px solid var(--x-cream); color: var(--x-navy);
}
body.skin-executive .act.danger { color: #d98d99; border-color: #4a2531; }
body.skin-executive .act.danger:hover { background: #33202a; border-color: var(--x-crimson); }
body.skin-executive .acts-note { color: var(--x-faint); }

/* ---- picker ---- */
body.skin-executive .skinmenu {
    background: var(--x-navy-d); border: 1px solid var(--x-line); border-radius: 4px;
    box-shadow: 0 18px 38px -18px rgba(0,0,0,.8);
}
body.skin-executive .skinmenu-h { color: var(--x-faint); letter-spacing: .16em; }
body.skin-executive .skinopt { color: var(--x-ink-2); border-radius: 3px; }
body.skin-executive .skinopt:hover { background: var(--x-navy-l); color: #fff; }
body.skin-executive .skinopt.on { background: var(--x-navy-l); color: var(--x-brass-l); }
body.skin-executive .tick { color: var(--x-brass); }
body.skin-executive .sw i { border-color: rgba(185,154,91,.45); border-radius: 2px; }

/* ---- rail ---- */
body.skin-executive .rail-h { color: var(--x-faint); letter-spacing: .16em; }
body.skin-executive .rgroup {
    background: var(--x-navy-d); border: 1px solid var(--x-line-2); border-radius: 4px;
}
body.skin-executive .v { color: var(--x-ink); }
body.skin-executive .v .d { color: var(--x-dim); }
body.skin-executive .rgroup .v:hover { background: var(--x-navy-l); }
/* A brass rule down the edge - the fitting on the open drawer. */
body.skin-executive .rgroup .v.on,
body.skin-executive .rgroup .v.on:hover {
    background: var(--x-navy-l);
    box-shadow: inset 3px 0 0 var(--x-brass);
}
body.skin-executive .rgroup .v.on .n { color: var(--x-brass-l); }
body.skin-executive .rgroup .v.on .d { color: var(--x-ink-2); }
body.skin-executive .v.sub { background: rgba(255,255,255,.03); border-top: 1px solid var(--x-line-2); }
body.skin-executive .v.sub:before { color: var(--x-faint); }
body.skin-executive .v-add {
    background: transparent; border: 1px dashed var(--x-line); border-radius: 4px;
    color: var(--x-brass); font-weight: 600; letter-spacing: .04em;
}
body.skin-executive .v-add:hover { border-color: var(--x-brass); background: var(--x-navy-l); border-style: solid; }

/* ---- controls ---- */
body.skin-executive .panel {
    background: var(--x-navy-d); border: 1px solid var(--x-line-2); border-radius: 4px;
}
body.skin-executive .dochead { border-bottom-color: var(--x-line-2); }
body.skin-executive .dh-t {
    font-family: var(--x-serif); font-size: 20px; font-weight: 400;
    letter-spacing: .02em; color: var(--x-cream);
}
body.skin-executive .dh-s { color: var(--x-dim); }
body.skin-executive .pencil, body.skin-executive .subact { color: var(--x-faint); border-radius: 3px; }
body.skin-executive .dh-t:hover .pencil,
body.skin-executive .subact:hover { color: var(--x-brass-l); border-color: var(--x-line); background: var(--x-navy-l); }
body.skin-executive .state {
    background: transparent; border: 1px solid #2f5c46; color: #7fc4a0; border-radius: 3px;
}
body.skin-executive .state.busy { border-color: #6b5a2c; color: var(--x-brass-l); }
body.skin-executive .state.bad { border-color: #4a2531; color: #d98d99; }
body.skin-executive .undo { border-radius: 3px; }
body.skin-executive .tg-label, body.skin-executive .tg-word { color: var(--x-ink-2); }
body.skin-executive .tg-track { background: var(--x-navy); border: 1px solid var(--x-line-2); }
body.skin-executive .tg-knob { background: var(--x-ink-2); }
body.skin-executive .toggle[aria-pressed="true"] .tg-track { background: var(--x-navy-l); }
body.skin-executive .toggle[aria-pressed="true"] .tg-knob { background: var(--x-brass); box-shadow: none; }
body.skin-executive .lamp { background: var(--x-line); }
body.skin-executive .act.running .lamp { background: var(--x-brass); box-shadow: none; }
body.skin-executive .act.done .lamp { background: var(--x-crimson); box-shadow: none; }

/* ---- the document: the cream card ---- */
body.skin-executive .sheet {
    background: var(--x-paper); border: 1px solid #ddd8cb; border-radius: 3px;
    box-shadow: 0 18px 40px -22px rgba(0,0,0,.75);
    color: #1e222a; font-family: var(--x-serif);
}
body.skin-executive .cname {
    font-family: var(--x-serif); font-size: 28px; font-weight: 400;
    letter-spacing: .14em; text-transform: uppercase; text-align: center;
    color: #14243f;
}
body.skin-executive .cmeta { color: #6b7280; text-align: center; }
body.skin-executive .contact-edit { display: block; margin: 8px auto 0; }
/* Navy small caps over a brass hairline. */
body.skin-executive .sec-h h2 {
    font-family: var(--x-serif); font-size: 12px; font-weight: 400;
    letter-spacing: .26em; text-transform: uppercase; color: #14243f;
    border-bottom: 1px solid var(--x-brass);
}
body.skin-executive .card p, body.skin-executive .jbul li,
body.skin-executive .jpara { color: #2a2f38; font-size: 15.5px; }
body.skin-executive .jt { font-size: 17px; font-weight: 700; color: #14243f; text-transform: none; }
body.skin-executive .je { color: #5b6472; font-style: italic; }
body.skin-executive .jd { color: #7a828f; font-style: italic; }
body.skin-executive .jbul li:before { color: var(--x-brass); }
body.skin-executive .card:hover { background: rgba(20,36,63,.045); }
body.skin-executive .card.editing { background: var(--x-cream); border-color: #d5cfc0; }
body.skin-executive .chip {
    background: transparent; border: 1px solid #c9c2b1; color: #3a414c; border-radius: 2px;
}
body.skin-executive .empty { color: #8b93a0; }
body.skin-executive .hintline { color: #8b93a0; }
body.skin-executive .edit, body.skin-executive .contact-edit,
body.skin-executive .card-tools button { color: #14243f; font-weight: 700; }
body.skin-executive .card-tools button.danger { color: var(--x-crimson); }
body.skin-executive .sheet .mini {
    background: var(--x-paper); border: 1px solid #c9c2b1; color: #14243f;
}
body.skin-executive .sheet .mini.key { background: #14243f; border-color: #14243f; color: var(--x-cream); }
body.skin-executive .cedit input, body.skin-executive .cedit textarea,
body.skin-executive .editor input, body.skin-executive .editor textarea {
    background: var(--x-paper); border: 1px solid #c9c2b1; color: #1e222a;
    font-family: var(--x-serif); border-radius: 2px;
}
body.skin-executive .ask-input, body.skin-executive .drawer textarea {
    background: var(--x-navy); border: 1px solid var(--x-line); color: var(--x-ink); border-radius: 3px;
}
body.skin-executive .drawer { background: var(--x-navy); border-bottom-color: var(--x-line-2); }
body.skin-executive .drawer label { color: var(--x-ink-2); }
body.skin-executive .sugg, body.skin-executive .tip {
    background: transparent; border: 1px solid var(--x-brass); border-radius: 2px; color: #5b4a24;
}
body.skin-executive .tip button { background: var(--x-paper); border: 1px solid #c9c2b1; color: #14243f; }
body.skin-executive .tip button.apply { background: #14243f; border-color: #14243f; color: var(--x-cream); }
body.skin-executive .notice.good { background: rgba(47,92,70,.25); color: #7fc4a0; }
body.skin-executive .notice.bad { background: rgba(143,45,60,.25); color: #d98d99; }
body.skin-executive .working-card, body.skin-executive .ask-card {
    background: var(--x-navy-d); border: 1px solid var(--x-line); border-radius: 4px;
}
body.skin-executive .working-t, body.skin-executive .ask-t {
    font-family: var(--x-serif); font-weight: 400; letter-spacing: .04em; color: var(--x-cream);
}
body.skin-executive .working-s, body.skin-executive .ask-b { color: var(--x-dim); }
body.skin-executive .working-bar { background: var(--x-navy); border: 1px solid var(--x-line-2); }
body.skin-executive .working-fill { background: var(--x-brass); }

/* ---- shared vocabulary ---- */
body.skin-executive .tile {
    background: var(--x-navy-d); border: 1px solid var(--x-line-2); border-radius: 4px;
    color: var(--x-ink);
}
body.skin-executive .tile:hover { background: var(--x-navy-l); border-color: var(--x-brass); box-shadow: none; }
body.skin-executive .tile .icon {
    background: transparent; border: 1px solid var(--x-line); color: var(--x-brass);
    border-radius: 3px; box-shadow: none;
}
body.skin-executive .tile-label { font-family: var(--x-serif); font-weight: 400; letter-spacing: .03em; color: var(--x-cream); }
body.skin-executive .tile-desc, body.skin-executive .muted { color: var(--x-dim); }
body.skin-executive .slink { color: var(--x-brass); letter-spacing: .03em; }
body.skin-executive .slink:hover { color: var(--x-brass-l); }

body.skin-executive.authcard .card {
    background: var(--x-navy-d); border: 1px solid var(--x-line); border-radius: 4px;
}
body.skin-executive.authcard .card h2 { font-family: var(--x-serif); font-weight: 400; color: var(--x-cream); }
body.skin-executive.authcard .card .field label { color: var(--x-ink-2); }
body.skin-executive.authcard .card .field input {
    background: var(--x-navy); border: 1px solid var(--x-line); color: var(--x-ink); border-radius: 3px;
}
body.skin-executive.authcard .card button:not(.toggle-eye) {
    background: var(--x-cream); color: var(--x-navy); border-radius: 3px;
}
body.skin-executive.authcard .card .toggle-eye { color: var(--x-dim); }
body.skin-executive.authcard .card .result { color: var(--x-dim); }
body.skin-executive.authcard .card .links a { color: var(--x-brass); }

body.skin-executive .panel .field > label { color: var(--x-ink-2); }
body.skin-executive .panel .field input[type=email],
body.skin-executive .panel .field input[type=password],
body.skin-executive .panel .field input[type=text] {
    background: var(--x-navy); border: 1px solid var(--x-line); color: var(--x-ink); border-radius: 3px;
}
body.skin-executive .panel button[type=submit] { background: var(--x-cream); color: var(--x-navy); border-radius: 3px; }
body.skin-executive .panel .file-drop {
    background: transparent; border: 1px dashed var(--x-line); color: var(--x-ink); border-radius: 4px;
}
body.skin-executive .panel .file-drop:hover { background: var(--x-navy-l); border-color: var(--x-brass); }
body.skin-executive .panel .file-sub { color: var(--x-dim); }
body.skin-executive .panel .progress-bar-track { background: var(--x-navy); border: 1px solid var(--x-line-2); }
body.skin-executive .panel .progress-bar-fill { background: var(--x-brass); }
body.skin-executive .panel .result { color: #d98d99; }

@media (max-width: 860px) {
    body.skin-executive .acts { background: var(--x-navy-d); border-top: 1px solid var(--x-line-2); }
    body.skin-executive .acts .act { background: transparent; border: 1px solid var(--x-line); }
    body.skin-executive .acts .act.key { background: var(--x-cream); color: var(--x-navy); }
    body.skin-executive .cname { font-size: 22px; letter-spacing: .1em; }
}


/* ==================================================================
   GOTHIC
   ------------------------------------------------------------------
   A library at candlelight, with the resume as a manuscript leaf laid
   on the desk. Same idea as the anime skin - a photograph with the
   interface floating on it - but the room is busy where that one is
   calm, so almost every decision here is about keeping the page
   readable without covering the picture.

   Three things do that:

   The document column is narrow. A full-width sheet buried the globe,
   the candle and the shelves, which is the whole reason for the skin.

   The leaf is 75% opaque, not 100. The room shows through it and it
   reads as paper laid on a desk rather than a panel pasted over one.
   90 was tried first and is not worth having: a tenth of a dark room
   through a light page is invisible.

   The rail carries its own light. Dark glass over a dark room is
   unreadable, so those panels are warmer and lit from within - a
   candle-coloured glow rather than a heavier background, which would
   have blocked out the shelves entirely.

   The arch is a border-radius, not a clip-path: an elliptical radius
   gives the same dome and keeps the shadow, which a clip would cut off
   square. The page has padding above the name so the dome stays empty
   paper, the way a manuscript leaves room above the text.
   ================================================================== */

body.skin-gothic {
    /* Darker than they would need on solid paper. The page is
       translucent, so the room behind it lifts everything a shade -
       ink that reads on opaque parchment goes grey over a bookshelf. */
    --k-ink:      #1f1710;   /* on the leaf */
    --k-ink-2:    #4d3f2b;
    --k-gold:     #c2a05a;   /* rules, edges, the wordmark's second word */
    --k-gold-d:   #9a7735;
    --k-ruby:     #a8322f;   /* the arch ornament, the open resume */
    --k-cobalt:   #2f6fb0;   /* section ornaments */
    --k-candle:   #d9a441;   /* the one lit button */

    --k-glass:    rgba(18,11,7,.86);
    --k-glass-2:  rgba(10,5,3,.90);
    --k-edge:     #3d2f18;
    --k-text:     #f0e3c2;
    --k-text-2:   #c4b18b;
    --k-dim:      #a08f6c;

    --k-display: 'Cinzel', Georgia, serif;
    --k-black:   'UnifrakturCook', Georgia, serif;
    --k-body:    Georgia, 'Times New Roman', serif;

    background-color: #120b07;
    background-image: none;
    color: var(--k-text);
    font-family: var(--k-display);
}

/* The room. A fixed layer sized to the window, so a long resume scrolls
   over it rather than stretching it - the same reason the anime skin
   does it this way. */
body.skin-gothic:after {
    content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none;
    background-image: url('/resume/images/library-desk.webp?v=1');
    background-size: cover; background-position: center center;
    background-repeat: no-repeat;
}

/* ---- chrome ---- */
body.skin-gothic .topbar {
    background: rgba(10,5,3,.90);
    border-bottom: none;
    box-shadow: inset 0 -1.5px 0 var(--k-gold);
    position: sticky; top: 0; z-index: 30;
}
body.skin-gothic .bn {
    font-family: var(--k-black); font-size: 25px; font-weight: 700;
    letter-spacing: .01em; color: #efe1bc;
}
body.skin-gothic .bn span {
    background: none; -webkit-text-fill-color: var(--k-gold); color: var(--k-gold);
}
body.skin-gothic .logo {
    background: rgba(22,13,8,.8); border-radius: 50%;
    box-shadow: 0 0 0 1px var(--k-gold), 0 0 14px rgba(217,164,65,.35);
}

body.skin-gothic .ghost,
body.skin-gothic .act,
body.skin-gothic .mini,
body.skin-gothic .undo,
body.skin-gothic .toggle,
body.skin-gothic .go {
    font-family: var(--k-display); font-size: 13px; font-weight: 400;
    letter-spacing: .08em; text-transform: uppercase;
    background: var(--k-glass); border: 1px solid #5c4726; border-radius: 3px;
    color: var(--k-text-2);
}
body.skin-gothic .ghost:hover,
body.skin-gothic .act:hover,
body.skin-gothic .mini:hover,
body.skin-gothic .undo:hover:not(:disabled) {
    background: rgba(42,26,16,.9); border-color: var(--k-gold); color: #fff6dd;
    box-shadow: 0 0 14px rgba(217,164,65,.22);
}
/* The one lit thing in the room. */
body.skin-gothic .act.key, body.skin-gothic .act.live,
body.skin-gothic .go, body.skin-gothic .mini.key {
    background: var(--k-candle); border-color: #e8c078; color: #1a1108;
    box-shadow: 0 0 18px rgba(217,164,65,.35);
}
body.skin-gothic .act.danger { color: #d98080; border-color: #6b3030; background: rgba(40,14,14,.7); }
body.skin-gothic .act.danger:hover { border-color: #a8322f; background: rgba(70,22,22,.8); }
body.skin-gothic .acts-note { font-family: var(--k-body); color: var(--k-dim); font-style: italic; }

/* ---- picker ---- */
body.skin-gothic .skinmenu {
    background: rgba(10,5,3,.96); border: 1px solid #5c4726; border-radius: 3px;
    box-shadow: 0 18px 40px -16px #000;
}
body.skin-gothic .skinmenu-h { font-family: var(--k-display); color: var(--k-dim); letter-spacing: .2em; }
body.skin-gothic .skinopt {
    font-family: var(--k-display); font-size: 14px; letter-spacing: .04em;
    color: var(--k-text-2); border-radius: 2px;
}
body.skin-gothic .skinopt:hover { background: rgba(60,38,20,.7); color: #fff6dd; }
body.skin-gothic .skinopt.on { background: rgba(60,38,20,.9); color: var(--k-gold); }
body.skin-gothic .tick { color: var(--k-gold); }
body.skin-gothic .sw i { border-color: rgba(194,160,90,.5); border-radius: 2px; }

/* ---- rail: lit from within ----
   Dark panels on a dark room disappear. These carry a candle-coloured
   glow and a warmer fill, which is what makes the names readable
   without shutting the shelves out behind them. */
body.skin-gothic .rail { max-width: 232px; }
body.skin-gothic .rail-h {
    font-family: var(--k-display); font-size: 11.5px; letter-spacing: .22em;
    color: #d6bd8c; text-shadow: 0 0 12px rgba(217,164,65,.5), 0 2px 6px #000;
}
body.skin-gothic .rgroup {
    background: rgba(26,16,9,.88);
    border: 1px solid var(--k-edge); border-radius: 3px;
    box-shadow: 0 0 26px rgba(217,164,65,.14), 0 10px 26px -14px #000;
}
body.skin-gothic .v { color: var(--k-text); }
body.skin-gothic .v .n {
    font-family: var(--k-display); font-size: 14px; letter-spacing: .02em;
    color: #f4e8ca; text-shadow: 0 1px 3px rgba(0,0,0,.8);
}
body.skin-gothic .v .d {
    font-family: var(--k-body); font-style: italic; font-size: 12px; color: #b09b76;
}
body.skin-gothic .rgroup .v:hover { background: rgba(60,38,20,.55); }
body.skin-gothic .rgroup .v.on,
body.skin-gothic .rgroup .v.on:hover {
    background: rgba(70,42,22,.65);
    box-shadow: inset 3px 0 0 var(--k-ruby), inset 0 0 30px rgba(217,164,65,.16);
}
body.skin-gothic .rgroup .v.on .n { color: #fff3d4; }
body.skin-gothic .rgroup .v.on .d { color: #c8b58e; }
body.skin-gothic .v.sub { background: rgba(10,6,3,.5); border-top: 1px solid #33270f; }
body.skin-gothic .v.sub .n { font-family: var(--k-body); font-style: italic; font-size: 13px; }
body.skin-gothic .v.sub:before { color: var(--k-gold-d); }
body.skin-gothic .v-add {
    font-family: var(--k-display); font-size: 13px; letter-spacing: .08em;
    text-transform: uppercase;
    background: rgba(18,11,7,.7); border: 2px dashed #7a5f2f; border-radius: 3px;
    color: var(--k-gold);
}
body.skin-gothic .v-add:hover {
    border-style: solid; border-color: var(--k-gold);
    background: rgba(60,38,20,.7); box-shadow: 0 0 16px rgba(217,164,65,.25);
}

/* ---- controls ---- */
body.skin-gothic .panel {
    background: var(--k-glass-2); border: 1px solid var(--k-edge); border-radius: 3px;
}
body.skin-gothic .dochead { border-bottom-color: var(--k-edge); }
body.skin-gothic .dh-t {
    font-family: var(--k-display); font-size: 20px; font-weight: 400;
    letter-spacing: .03em; color: var(--k-text);
}
body.skin-gothic .dh-s { font-family: var(--k-body); font-style: italic; color: var(--k-dim); }
body.skin-gothic .pencil, body.skin-gothic .subact {
    font-family: var(--k-display); letter-spacing: .08em; color: var(--k-dim); border-radius: 2px;
}
body.skin-gothic .dh-t:hover .pencil,
body.skin-gothic .subact:hover {
    color: var(--k-gold); border-color: #5c4726; background: rgba(60,38,20,.7);
}
body.skin-gothic .state {
    font-family: var(--k-display); letter-spacing: .1em; border-radius: 2px;
    background: transparent; border: 1px solid #4f7a52; color: #79b98d;
}
body.skin-gothic .state.busy { border-color: #7a6a2c; color: var(--k-candle); }
body.skin-gothic .state.bad { border-color: #6b3030; color: #d98080; }
body.skin-gothic .tg-label, body.skin-gothic .tg-word { color: var(--k-text-2); }
body.skin-gothic .tg-track { background: rgba(8,4,2,.85); border: 1px solid #3d2f18; }
body.skin-gothic .tg-knob { background: #cfbb8e; }
body.skin-gothic .toggle[aria-pressed="true"] .tg-track { background: rgba(70,44,20,.9); }
body.skin-gothic .toggle[aria-pressed="true"] .tg-knob {
    background: var(--k-candle); box-shadow: 0 0 12px rgba(217,164,65,.8);
}
body.skin-gothic .lamp { background: #3d2f18; }
body.skin-gothic .act.running .lamp { background: var(--k-candle); box-shadow: 0 0 9px var(--k-candle); }
body.skin-gothic .act.done .lamp { background: var(--k-ruby); box-shadow: 0 0 9px rgba(168,50,47,.8); }

/* ---- the leaf ----
   The arch is an elliptical border-radius rather than a clip-path: it
   gives the same dome, and the shadow follows it. A clip would have cut
   the shadow off square along the top.

   drop-shadow rather than box-shadow for the same reason the natural
   skin needs it - and .doc carries padding above the name so the dome
   stays empty paper. A manuscript leaves room above its text; filling
   the arch with a heading would waste the shape entirely. */
body.skin-gothic .sheet {
    background: none; border: none; box-shadow: none;
    font-family: var(--k-body); color: var(--k-ink);
    filter: drop-shadow(0 14px 26px rgba(0,0,0,.75));
}
body.skin-gothic .tube {
    position: relative;
    /* The arch is a mask, not a border-radius. A radius can only ever
       make a dome - the shoulders rise and meet flat - and what this
       wants is a point.

       Two mask layers: the arch as a band 150px tall across the top,
       and a plain rectangle for everything below it. Layers add
       together by default, so the two make one shape. The band
       stretches horizontally and keeps its height, which is right: a
       wider arch is still an arch, a taller one is a different
       building.

       This is the curve from the mockup, not a new one - two quadratics
       with their control points at the corners, so the shoulders climb
       almost vertically before turning in to the apex. */
    -webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='700' height='150' viewBox='0 0 700 150' preserveAspectRatio='none'%3E%3Cpath d='M0 150 L0 138 Q0 42 350.0 0 Q700 42 700 138 L700 150 Z' fill='%23fff'/%3E%3C/svg%3E"), linear-gradient(#000,#000);
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='700' height='150' viewBox='0 0 700 150' preserveAspectRatio='none'%3E%3Cpath d='M0 150 L0 138 Q0 42 350.0 0 Q700 42 700 138 L700 150 Z' fill='%23fff'/%3E%3C/svg%3E"), linear-gradient(#000,#000);
    -webkit-mask-repeat: no-repeat, no-repeat;
    mask-repeat: no-repeat, no-repeat;
    -webkit-mask-size: 100% 150px, 100% calc(100% - 150px);
    mask-size: 100% 150px, 100% calc(100% - 150px);
    -webkit-mask-position: top, bottom;
    mask-position: top, bottom;
    /* Amber paper, creased. The texture is the same photograph the
       natural skin uses, re-baked darker so the folds read on an amber
       page under candlelight rather than vanishing.

       ONE translucent layer, not two. There was a background-color here
       as well as this gradient, and two 90% layers composite to about
       99% - which is why the page came out solid. The colour is gone;
       the gradient alone carries it.

       75%, not 90. At 90 only a tenth of the room comes through a light
       page, which reads as no transparency at all. This is the number
       to move if the body text starts fighting the bookshelves - it is
       the only thing standing between "paper on a desk" and "hard to
       read". */
    background-color: transparent;
    background-image:
        url('/resume/images/paper-crease.webp?v=2'),
        linear-gradient(180deg, rgba(233,219,203,.78) 0%, rgba(212,194,172,.78) 100%);
    background-repeat: repeat, no-repeat;
    background-size: 420px 420px, auto;
    /* No blend mode. The crease tile is transparent except where a fold
       is, so it simply sits on the gradient.

       It replaced an opaque paper tile, which was the real reason this
       page looked solid at every opacity I tried: an opaque top layer
       covers a translucent one underneath, and no alpha on the gradient
       can undo that. */
}
/* The gold rule following the arch, inset from the edge. */
/* The rule follows the arch across the top and runs straight down the
   sides - drawn for the curve, bordered for the rest. */
body.skin-gothic .tube:before {
    content: ""; position: absolute; inset: 0; z-index: 1;
    pointer-events: none;
    border: none;
    border-left: 1.4px solid rgba(154,119,53,.8);
    border-right: 1.4px solid rgba(154,119,53,.8);
    border-bottom: 1.4px solid rgba(154,119,53,.8);
    margin: 0 16px 16px;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='700' height='150' viewBox='0 0 700 150' preserveAspectRatio='none'%3E%3Cpath d='M14 150 L14 132 Q14 50 350.0 10 Q686 50 686 132 L686 150' fill='none' stroke='%239a7735' stroke-width='1.6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-size: 100% 150px;
    background-position: top;
    box-shadow: none; transform: none; width: auto; height: auto;
}
/* Ruby quatrefoil under the crown of the arch. */
body.skin-gothic .tube:after {
    content: ""; position: absolute; top: 46px; left: 50%; margin-left: -15px;
    width: 30px; height: 30px; z-index: 2; pointer-events: none;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='-14 -14 28 28'%3E%3Cg fill='%23a8322f'%3E%3Ccircle cy='-5.5' r='5'/%3E%3Ccircle cy='5.5' r='5'/%3E%3Ccircle cx='-5.5' r='5'/%3E%3Ccircle cx='5.5' r='5'/%3E%3Crect x='-3.5' y='-3.5' width='7' height='7'/%3E%3C/g%3E%3C/svg%3E");
    background-repeat: no-repeat; background-size: contain;
    border: none; box-shadow: none;
}
/* Room for the dome. */
body.skin-gothic .doc { padding-top: 130px; position: relative; z-index: 2; }

body.skin-gothic .cname {
    font-family: var(--k-display); font-size: 27px; font-weight: 400;
    letter-spacing: .1em; text-transform: uppercase; text-align: center;
    color: #17110a;
}
body.skin-gothic .cmeta { font-style: italic; color: var(--k-ink-2); text-align: center; }
body.skin-gothic .contact-edit { display: block; margin: 8px auto 0; }

/* Cobalt quatrefoil, gold rule, ruby small caps. */
/* The rule spans the whole row, and the ornament is centred on the ROW
   - not on the heading. The heading stops short of the Edit button, so
   centring on it put the quatrefoil left of the page's middle, which is
   what looked wrong. */
body.skin-gothic .sec-h {
    position: relative;
    border-bottom: 1px solid rgba(122,92,38,.85);
    padding-bottom: 7px;
}
body.skin-gothic .sec-h h2 {
    font-family: var(--k-display); font-size: 12px; font-weight: 400;
    letter-spacing: .28em; text-transform: uppercase; color: #6e2320;
    border-bottom: none; padding-bottom: 0;
}
body.skin-gothic .sec-h:after {
    content: ""; position: absolute; left: 50%; bottom: -9px;
    width: 18px; height: 18px; margin-left: -9px; z-index: 2;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='-14 -14 28 28'%3E%3Cg fill='%232f6fb0'%3E%3Ccircle cy='-5.5' r='5'/%3E%3Ccircle cy='5.5' r='5'/%3E%3Ccircle cx='-5.5' r='5'/%3E%3Ccircle cx='5.5' r='5'/%3E%3Crect x='-3.5' y='-3.5' width='7' height='7'/%3E%3C/g%3E%3C/svg%3E");
    background-repeat: no-repeat; background-size: contain;
}
body.skin-gothic .card p, body.skin-gothic .jbul li,
body.skin-gothic .jpara { font-size: 15.5px; color: #241c12; }
body.skin-gothic .jt {
    font-family: var(--k-display); font-size: 17px; font-weight: 400;
    color: #17110a; text-transform: none; letter-spacing: .01em;
}
body.skin-gothic .je { font-style: italic; color: var(--k-ink-2); }
body.skin-gothic .jd { font-style: italic; color: #5f5136; }
body.skin-gothic .jbul li:before { color: var(--k-gold-d); }
body.skin-gothic #viewJobs .card,
body.skin-gothic #viewEducation .card {
    border: none; border-bottom: 1px solid rgba(154,119,53,.4);
    border-radius: 0; margin: 0 0 6px; padding: 12px 4px;
}
body.skin-gothic #viewJobs .card:last-child,
body.skin-gothic #viewEducation .card:last-child { border-bottom: none; }
body.skin-gothic .card:hover { background: rgba(154,119,53,.10); }
body.skin-gothic .card.editing { background: rgba(244,233,207,.75); border: 1px solid rgba(154,119,53,.6); }
body.skin-gothic .chip {
    background: rgba(154,119,53,.16); border: 1px solid rgba(154,119,53,.45);
    color: #4a3a1f; border-radius: 2px;
}
body.skin-gothic .empty { color: #6b5c3f; }
body.skin-gothic .hintline { color: #6b5c3f; }
body.skin-gothic .edit, body.skin-gothic .contact-edit,
body.skin-gothic .card-tools button {
    font-family: var(--k-display); font-size: 12.5px; letter-spacing: .06em;
    text-transform: uppercase; color: #6e2320;
}
body.skin-gothic .card-tools button.danger { color: #8f2b28; }
body.skin-gothic .sheet .mini {
    background: rgba(244,233,207,.9); border: 1px solid rgba(154,119,53,.6);
    color: #241a10; font-family: var(--k-display);
}
body.skin-gothic .sheet .mini.key { background: #7a2f2c; border-color: #7a2f2c; color: #f4e9cf; }
body.skin-gothic .cedit input, body.skin-gothic .cedit textarea,
body.skin-gothic .editor input, body.skin-gothic .editor textarea {
    background: rgba(247,239,219,.95); border: 1px solid rgba(154,119,53,.6);
    color: var(--k-ink); font-family: var(--k-body); border-radius: 2px;
}
body.skin-gothic .ask-input, body.skin-gothic .drawer textarea {
    background: rgba(8,4,2,.8); border: 1px solid #5c4726; color: var(--k-text); border-radius: 2px;
}
body.skin-gothic .drawer { background: rgba(14,8,4,.85); border-bottom-color: var(--k-edge); }
body.skin-gothic .drawer label { font-family: var(--k-body); color: var(--k-text-2); }

body.skin-gothic .sugg, body.skin-gothic .tip {
    background: rgba(47,111,176,.10); border: 1px solid rgba(47,111,176,.45);
    border-radius: 2px; color: #2b4a6b; font-family: var(--k-body);
}
body.skin-gothic .tip button {
    background: rgba(244,233,207,.9); border: 1px solid rgba(47,111,176,.45);
    color: #2b4a6b; border-radius: 2px; font-family: var(--k-display);
}
body.skin-gothic .tip button.apply { background: var(--k-cobalt); border-color: var(--k-cobalt); color: #f2f7fc; }
body.skin-gothic .notice.good { background: rgba(47,92,70,.8); color: #8fd7a8; }
body.skin-gothic .notice.bad { background: rgba(90,26,26,.8); color: #e5a0a0; }
body.skin-gothic .working-card, body.skin-gothic .ask-card {
    background: rgba(14,8,4,.97); border: 1px solid #5c4726; border-radius: 3px;
}
body.skin-gothic .working-t, body.skin-gothic .ask-t {
    font-family: var(--k-display); font-weight: 400; letter-spacing: .05em; color: var(--k-text);
}
body.skin-gothic .working-s, body.skin-gothic .ask-b { font-family: var(--k-body); color: var(--k-dim); }
body.skin-gothic .working-bar { background: rgba(8,4,2,.9); border: 1px solid #3d2f18; }
body.skin-gothic .working-fill { background: var(--k-candle); }

/* ---- shared vocabulary ---- */
body.skin-gothic .tile {
    background: rgba(26,16,9,.86); border: 1px solid var(--k-edge); border-radius: 3px;
    color: var(--k-text); box-shadow: 0 0 24px rgba(217,164,65,.12);
}
body.skin-gothic .tile:hover { background: rgba(60,38,20,.8); border-color: var(--k-gold); }
body.skin-gothic .tile .icon {
    background: rgba(217,164,65,.14); border: 1px solid #5c4726; color: var(--k-gold);
    border-radius: 2px; box-shadow: none;
}
body.skin-gothic .tile-label { font-family: var(--k-display); letter-spacing: .03em; color: #f4e8ca; }
body.skin-gothic .tile-desc, body.skin-gothic .muted { font-family: var(--k-body); color: var(--k-dim); }
body.skin-gothic .slink { font-family: var(--k-display); letter-spacing: .05em; color: var(--k-gold); }
body.skin-gothic .slink:hover { color: #ffe9b8; }

body.skin-gothic.authcard .card {
    background: rgba(14,8,4,.94); border: 1px solid #5c4726; border-radius: 3px;
}
body.skin-gothic.authcard .card h2 { font-family: var(--k-display); font-weight: 400; color: var(--k-text); }
body.skin-gothic.authcard .card .field label { font-family: var(--k-body); color: var(--k-text-2); }
body.skin-gothic.authcard .card .field input {
    background: rgba(8,4,2,.85); border: 1px solid #5c4726; color: var(--k-text);
    border-radius: 2px; font-family: var(--k-body);
}
body.skin-gothic.authcard .card button:not(.toggle-eye) {
    background: var(--k-candle); color: #1a1108; border-radius: 2px;
    font-family: var(--k-display); letter-spacing: .08em; text-transform: uppercase;
}
body.skin-gothic.authcard .card .toggle-eye { color: var(--k-dim); }
body.skin-gothic.authcard .card .result { color: var(--k-dim); }
body.skin-gothic.authcard .card .links a { color: var(--k-gold); }

body.skin-gothic .panel .field > label { font-family: var(--k-body); color: var(--k-text-2); }
body.skin-gothic .panel .field input[type=email],
body.skin-gothic .panel .field input[type=password],
body.skin-gothic .panel .field input[type=text] {
    background: rgba(8,4,2,.85); border: 1px solid #5c4726; color: var(--k-text); border-radius: 2px;
}
body.skin-gothic .panel button[type=submit] {
    background: var(--k-candle); color: #1a1108; border-radius: 2px;
    font-family: var(--k-display); text-transform: uppercase;
}
body.skin-gothic .panel .file-drop {
    background: rgba(18,11,7,.7); border: 2px dashed #7a5f2f; border-radius: 3px; color: var(--k-text);
}
body.skin-gothic .panel .file-drop:hover { background: rgba(60,38,20,.7); border-color: var(--k-gold); }
body.skin-gothic .panel .file-sub { color: var(--k-dim); }
body.skin-gothic .panel .progress-bar-track { background: rgba(8,4,2,.9); border: 1px solid #3d2f18; }
body.skin-gothic .panel .progress-bar-fill { background: var(--k-candle); }
body.skin-gothic .panel .result { color: #d98080; }

@media (max-width: 860px) {
    /* Translucent here too - a solid page on a phone throws away the
       whole reason for the skin, and the phone is where most people
       will see it.
       Denser than the desktop's .78 though: the page runs the full
       width here and sits over the stained-glass window, which is the
       brightest and busiest ground in the picture. */
    body.skin-gothic:after {
        background-image: url('/resume/images/library-desk-phone.webp?v=1');
    }
    body.skin-gothic .tube {
        background-color: transparent;
        background-image:
            url('/resume/images/paper-crease.webp?v=2'),
            linear-gradient(180deg, rgba(233,219,203,.74) 0%, rgba(212,194,172,.74) 100%);
    }
    body.skin-gothic .tube {
        -webkit-mask-size: 100% 96px, 100% calc(100% - 96px);
        mask-size: 100% 96px, 100% calc(100% - 96px);
    }
    body.skin-gothic .tube:before { background-size: 100% 96px; margin: 0 12px 12px; }
    body.skin-gothic .tube:after { top: 30px; width: 24px; height: 24px; margin-left: -12px; }
    body.skin-gothic .doc { padding-top: 92px; }
    body.skin-gothic .cname { font-size: 22px; letter-spacing: .06em; }
    body.skin-gothic .acts { background: rgba(10,5,3,.95); border-top: 1px solid var(--k-gold); }
}
