/* Hubs: Nerdy Hacks, Nerdy Picks and Nerdy Savings. Built on style.css + content.css. */
.hack-news{padding:26px 0 8px}
.hack-news .section-title{margin:0 0 2px}
.hack-news .section-title h2{font-size:28px}
.hack-news .brief{padding:14px 0;gap:18px;align-items:baseline}
.hack-news .brief-num{font-size:20px}
.hack-news .brief small{font-weight:bold;font-size:11px;letter-spacing:.2px;margin-bottom:4px}
.hack-news .brief small span{color:var(--muted)}
.hack-news .brief strong{font-size:21px}
.hack-news .brief em{font-size:13px;margin-top:4px}
.hack-news .brief:hover strong{color:#bc4c24}
.hack-news .text-button{display:inline-block;margin-top:14px}
.saved{font-size:13px!important;color:var(--ink)!important;font-weight:bold;background:var(--sage);border-radius:5px;padding:5px 10px;align-self:flex-start}
.saved span{font-weight:normal;color:#4d5f45;white-space:nowrap}
.card.hack .saved{font-size:12px!important}
.hack-tags{display:flex;gap:6px;flex-wrap:wrap}
.spotted{font-size:12px!important;margin-top:auto;padding-top:10px;border-top:1px solid var(--line)}
.spotted strong{color:var(--ink)}
.hack-tools{padding:30px 0 6px;margin-top:22px;border-top:1px solid var(--line)}
.hack-tools .section-title{margin:0 0 4px}
.hack-tools .search-box{border:1px solid var(--line);margin:16px 0 18px}
.hack-tools .search-box input{font-size:15px}
.hack-tools .chips{margin-bottom:6px}
.hack-tools .chip{font-size:12px}
a.chip{display:inline-block;text-decoration:none;color:var(--ink)}
a.chip.selected{color:#fff}
.card-grid.hack-grid{grid-template-columns:repeat(4,1fr);gap:18px;padding:18px 0 10px}
.card.hack .card-body{padding:18px;display:flex;flex-direction:column;gap:10px;height:100%}
.card.hack .tool-icon{width:36px;height:36px;font-size:22px;border-radius:7px;display:inline-grid;place-items:center;font-family:var(--serif);flex:none}
.card.hack .tool-card-top small{display:block;line-height:1.2}
.hack-tool{font-size:14px!important;font-weight:bold;color:var(--ink)!important;line-height:1.2}
.card.hack .card-body h3{font-size:21px;margin-top:4px}
.result-count{font-size:13px;color:var(--muted)}
.pager{display:flex;justify-content:center;align-items:center;gap:8px;padding:26px 0 46px;flex-wrap:wrap}
.pager a,.pager span{min-width:38px;height:38px;display:inline-grid;place-items:center;border:1px solid var(--line);border-radius:5px;background:var(--white);font-size:13px;font-weight:bold;padding:0 12px}
.pager a[aria-current=page]{background:var(--ink);color:#fff;border-color:var(--ink)}
.pager span{border:0;background:transparent;color:var(--muted)}
.pager a:hover:not([aria-current]){background:#e9e9dd}
.job-links{padding:8px 0 40px;border-top:1px solid var(--line)}
.job-links h2{font-size:24px;margin:22px 0 12px}
/* short-answer block on hubs */
.short-answer{background:var(--white);border:1px solid var(--line);border-left:4px solid var(--orange);border-radius:6px;padding:16px 20px;margin:18px 0 6px;max-width:860px}
.short-answer h2{font-size:18px;font-family:Arial,sans-serif;font-weight:bold;margin:0 0 6px;letter-spacing:-.2px}
.short-answer p{font-size:15px;margin:0}
/* hack detail */
.hack-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border:1px solid var(--line);border-radius:7px;background:var(--white);margin:0 0 24px}
.hack-facts>div{padding:14px 16px;border-right:1px solid var(--line)}
.hack-facts>div:last-child{border-right:0}
.hack-facts small{display:block;font-size:10px;font-weight:bold;letter-spacing:1px;color:var(--muted);margin-bottom:4px}
.hack-facts p{margin:0!important;font-size:15px}
.prose .prompt-box{position:relative}
.prose pre.prompt{white-space:pre-wrap;background:#222a25;color:#f6f3e9;border-radius:8px;padding:20px 20px 20px;padding-right:76px;font-size:14px;line-height:1.6;overflow:auto}
.prose .prompt-box .copy-btn{position:absolute;top:10px;right:10px;z-index:1}
.copy-btn{position:absolute;top:8px;right:8px;font-size:11px;font-weight:bold;border:1px solid var(--ink);background:var(--white);border-radius:5px;padding:5px 10px;cursor:pointer}
.original-link{font-weight:bold}
/* Picks */
.cat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;padding:14px 0 34px}
.cat-card{display:block;border:1px solid var(--line);background:var(--white);border-radius:7px;padding:16px 18px;text-decoration:none;color:var(--ink)}
.cat-card:hover{background:#f1f2ea}
.cat-card strong{display:block;font:21px/1.2 var(--serif)}
.cat-card span{display:block;font-size:13px;color:var(--muted);margin-top:6px}
.cat-card em{display:block;font-style:normal;font-size:12px;font-weight:bold;margin-top:10px}
.picker{background:#eaeee3;border:1px solid #cbd5c1;border-radius:8px;padding:22px 24px;margin:20px 0 30px}
.picker h2{font-size:28px;margin-bottom:6px}
.picker-row{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:18px;margin-top:14px}
.picker label,.picker legend{display:block;font-size:12px;font-weight:bold;margin-bottom:6px}
.picker select{width:100%;padding:10px;border:1px solid var(--line);border-radius:5px;background:var(--white);font-size:14px}
.picker fieldset{border:0;padding:0;margin:0}
.picker .radio{display:block;font-size:14px;margin:3px 0}
.pick-out{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:18px}
.pick-out:empty{display:none}
.pick-card{background:var(--white);border:1px solid var(--line);border-radius:7px;padding:16px}
.pick-card h3{font:20px/1.2 var(--serif);margin-bottom:6px}
.pick-card p{font-size:13px;margin:4px 0}
.pick-card .why{color:var(--muted)}
.tool-list{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:6px 0 20px}
.tool-list .tool-card h3 a{color:var(--ink)}
.tool-list .tool-card p{font-size:14px;color:var(--ink);margin:8px 0}
.tool-list .tool-card .muted{color:var(--muted);font-size:12px}
.status-note{font-size:12px;color:var(--muted)}
/* Savings */
.calc-note{font-size:13px;background:#fff6df;border:1px solid #ecd9a6;border-radius:6px;padding:10px 14px}
.prose .calc-note{margin-top:12px}
.save-calc{background:var(--white);border:1px solid var(--line);border-radius:8px;padding:22px 24px;margin:20px 0 30px}
.save-calc h2{font-size:28px;margin-bottom:4px}
.calc-layout{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:24px;align-items:start}
.save-search{margin:14px 0 6px}
.save-controls{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:6px}.save-controls p{margin:0;font-size:13px}.save-controls .text-button{margin:0 0 0 12px;cursor:pointer;color:var(--ink)}
.save-tools{display:block;margin:6px 0 14px}
.save-cat{border-bottom:1px solid var(--line)}.save-cat:first-child{border-top:1px solid var(--line)}
.save-cat summary{display:flex;justify-content:space-between;align-items:center;gap:10px;cursor:pointer;padding:12px 2px;list-style:none;font-size:11px;font-weight:bold;letter-spacing:1px;text-transform:uppercase}
.save-cat summary::-webkit-details-marker{display:none}
.save-cat summary::before{content:"+";font:18px/1 var(--serif);width:14px;color:var(--orange);letter-spacing:0}.save-cat[open] summary::before{content:"\2212"}
.save-cat-name{flex:1}.save-cat-meta{color:var(--muted);font-weight:normal;letter-spacing:.5px;text-transform:none;font-size:12px;white-space:nowrap}
.save-cat-ticked{background:var(--sage);color:var(--ink);border:1px solid #bdccb1;border-radius:30px;padding:2px 8px;font-weight:bold;margin-right:6px}
.save-cat summary:hover .save-cat-name{color:var(--orange)}.save-cat summary:focus-visible{outline:2px solid var(--orange);outline-offset:2px}
.save-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 22px;padding:0 0 14px}
.save-tools label{display:flex;justify-content:space-between;gap:8px;font-size:14px;padding:4px 0;border-bottom:1px dashed var(--line)}
.save-tools label span{color:var(--muted);white-space:nowrap}
.save-total{position:sticky;top:16px;background:#dde6d3;border:1px solid #bdccb1;border-radius:7px;padding:18px 20px;margin:14px 0 10px;z-index:5}
.save-total-row{display:flex;flex-direction:column;gap:14px}
.save-total-foot{margin:14px 0 0;font-size:12px;color:var(--muted)}.save-total-foot a{color:var(--ink);font-weight:bold;margin-left:6px}
.save-total-row>div{font-size:12px}
.save-total strong{display:block;font:30px var(--serif);margin-top:2px}
.save-swaps{list-style:none;padding:0;margin:8px 0}
.save-swaps li{font-size:14px;padding:8px 0;border-bottom:1px solid var(--line)}
.deals{list-style:none;padding:0;margin:10px 0 30px}
.deals li{padding:12px 0;border-bottom:1px solid var(--line);font-size:14px}
.deals li small{display:block;color:var(--muted);font-size:12px;margin-top:2px}
.deals .pill{margin-right:8px}
@media(max-width:1000px){.card-grid.hack-grid{grid-template-columns:1fr 1fr}.cat-grid,.pick-out{grid-template-columns:1fr 1fr}.calc-layout{grid-template-columns:minmax(0,1fr) 230px;gap:18px}.picker-row{grid-template-columns:1fr}}
@media(max-width:640px){.card-grid.hack-grid{grid-template-columns:1fr}.hack-tools .chips{flex-wrap:nowrap;overflow:auto;scrollbar-width:none;padding-bottom:4px}.hack-tools .chip{white-space:nowrap}.hack-news .brief{padding:12px 0;gap:12px}.hack-news .brief strong{font-size:19px}.hack-news .brief em{font-size:12px}.pager{gap:6px}.pager a,.pager span{min-width:34px;height:34px;padding:0 9px}
.hack-facts{grid-template-columns:1fr}.hack-facts>div{border-right:0;border-bottom:1px solid var(--line)}.hack-facts>div:last-child{border-bottom:0}
.cat-grid,.pick-out,.tool-list,.save-list{grid-template-columns:1fr}
.save-calc{padding:18px 16px}.calc-layout{display:block}
.save-total{position:sticky;top:auto;bottom:0;margin:12px -16px -1px;border-radius:7px 7px 0 0;padding:10px 14px;box-shadow:0 -4px 14px rgba(34,42,37,.12)}
.save-total-row{flex-direction:row;gap:10px;justify-content:space-between}.save-total-row>div{font-size:10px;line-height:1.25}
.save-total strong{font-size:19px}.save-total-save{text-align:right}.save-total-foot{margin:6px 0 0;font-size:11px;display:flex;justify-content:space-between}}

.pick-card{display:flex;flex-direction:column;gap:6px;text-decoration:none;color:inherit}.pick-card:hover{border-color:var(--orange)}.pick-card strong{font:20px/1.2 var(--serif)}.pick-card span{font-size:14px}.pick-card small{font-size:12px;color:var(--muted);margin-top:auto}.pick-out>p{grid-column:1/-1;font-size:13px}
.save-list label[hidden]{display:none}
.save-total .sm{display:none}
@media(max-width:640px){.save-total .lg{display:none}.save-total .sm{display:inline}}
.save-list label{justify-content:flex-start;align-items:baseline}.save-list label span{margin-left:auto;text-align:right}
.save-calc .save-search{border:1px solid #bfc3b6;background:var(--ivory);margin-top:14px;padding:4px 9px 4px 14px}.save-calc .save-search>span{font-size:24px}
/* 2026-10-26 audit fixes: readable "(page N)" label; bigger tap targets for footer, breadcrumb and tag links */
h1 .page-label{font-family:inherit;font-size:max(15px,.4em);font-weight:400;letter-spacing:0;white-space:nowrap;color:var(--muted);vertical-align:middle}
footer .foot-links a,.crumbs a{display:inline-flex;align-items:center;min-height:24px}
footer a.brand{min-height:24px}
.deals li[hidden]{display:none}
@media(max-width:800px){footer .foot-links{gap:0 20px}footer .foot-links a{min-height:44px}.crumbs{line-height:1.2}.crumbs a{min-height:44px}}
/* The Nerd Signal sign-up (2026-10-26) */
.signup{width:100%;max-width:560px}
.signup-row{display:flex;gap:10px;align-items:stretch}
.signup-row input[type=email]{flex:1;min-width:0;min-height:48px;font-size:15px}
.signup-row .button{min-height:48px;padding:12px 22px;font-size:13px}
.signup .hp{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}
.signup-note{font-size:12px;line-height:1.55;color:var(--muted);margin-top:10px}
.signup-note a{text-decoration:underline;display:inline-flex;align-items:center;min-height:24px}
.signup-msg{font-size:14px;font-weight:bold;margin-top:10px}
.signup-msg:empty{display:none}
.signup-msg.is-ok{color:#3f6a35}.signup-msg.is-error{color:#a23125}
.signup input[aria-invalid=true]{border-color:#a23125}
.signal-strip .signup-note,.signal-strip .signup-note a{color:#c9cec4}
.signal-strip .signup-msg.is-ok{color:#bfe0a8}.signal-strip .signup-msg.is-error{color:#ffb4a6}
.signal-strip .signup{flex:1;min-width:260px}
.foot-signup{display:flex;gap:28px;align-items:center;flex-wrap:wrap;border-top:1px solid var(--line);padding-top:30px;padding-bottom:6px;width:min(1180px,calc(100% - 72px));margin:40px auto 0}
.foot-signup-copy{flex:1;min-width:220px}.foot-signup .eyebrow{margin-bottom:8px}.foot-signup h2{font-size:26px}
.foot-signup + footer{border-top:0}
.foot-contact{width:100%;font-size:13px;color:var(--muted);margin:0}
.foot-contact a{text-decoration:underline;display:inline-flex;align-items:center;min-height:24px}
@media(max-width:800px){.foot-signup{width:calc(100% - 40px);gap:16px}.foot-signup h2{font-size:22px}.signup-row{flex-direction:column}.signup-row .button{width:100%;min-height:48px}.foot-contact a{min-height:44px}}
.nl-flag{display:none;font-weight:bold;font-size:14px;margin-top:12px}.nl-flag:target{display:block}.nl-flag.is-ok{color:#bfe0a8}.nl-flag.is-error{color:#ffb4a6}
/* Floating Rocky (2026-10-26). Art: ROCKY_IMG in lib.py (animated WebP of the waving mascot video, used as-is).
   No CSS motion on the body any more; just a one-time peek-in on load. Reduced motion: still frame via <picture>. */
.rocky{--rocky-h:96px;--rocky-w:70px;--rocky-lift:0px;position:fixed;right:calc(14px + env(safe-area-inset-right));bottom:calc(12px + env(safe-area-inset-bottom) + var(--rocky-lift));z-index:60;display:none}
.rocky.is-ready{display:block}
.rocky-space{height:calc(var(--rocky-space,118px) + env(safe-area-inset-bottom))}
html.has-rocky{scroll-padding-bottom:calc(130px + env(safe-area-inset-bottom))}
.rocky-btn{display:flex;align-items:flex-end;justify-content:center;width:var(--rocky-w);height:var(--rocky-h);padding:0;margin:0;border:0;background:none;cursor:pointer;border-radius:12px;-webkit-tap-highlight-color:transparent}
.rocky-btn:focus-visible{outline:3px solid var(--orange);outline-offset:3px}
.rocky-fig{display:block;height:100%;filter:drop-shadow(0 3px 4px rgba(34,42,37,.25))}
.rocky-act{display:block;height:100%;transform-origin:50% 100%;animation:rocky-peek .7s ease-out .3s both}
.rocky.is-in .rocky-act{animation:none}
.rocky-fig picture{display:block;height:100%}
.rocky-fig img{display:block;height:100%;width:auto}
@keyframes rocky-peek{0%{opacity:0;transform:translateY(40%)}30%{opacity:1}100%{opacity:1;transform:translateY(0)}}
.rocky-psst{position:absolute;right:calc(100% + 10px);bottom:calc(var(--rocky-h) * .5);margin:0;white-space:nowrap;background:var(--white);color:var(--ink);border:2px solid var(--ink);font-size:13px;font-weight:bold;line-height:1;padding:6px 10px;border-radius:12px;pointer-events:none;opacity:0;transform:translateX(6px);transition:opacity .35s,transform .35s;box-shadow:0 3px 8px rgba(34,42,37,.15)}
.rocky-psst::after{content:"";position:absolute;right:-7px;top:50%;width:9px;height:9px;margin-top:-5px;background:var(--white);border-right:2px solid var(--ink);border-top:2px solid var(--ink);transform:rotate(45deg)}
.rocky-psst.is-above{right:auto;left:50%;bottom:calc(100% + 12px);transform:translate(-50%,6px)}
.rocky-psst.is-above::after{right:auto;left:50%;top:auto;bottom:-7px;margin:0 0 0 -5px;transform:rotate(135deg)}
.rocky-psst.is-on{opacity:1;transform:none}
.rocky-psst.is-above.is-on{transform:translate(-50%,0)}
.rocky.is-open .rocky-psst{display:none}
.rocky-bubble{position:absolute;right:0;bottom:calc(100% + 12px);width:min(330px,calc(100vw - 28px));max-height:calc(100vh - var(--rocky-h) - 60px);overflow:auto;background:var(--white);color:var(--ink);border:2px solid var(--ink);border-radius:16px;padding:18px 18px 14px;box-shadow:0 10px 30px rgba(34,42,37,.22);text-align:left}
.rocky-bubble::after{content:"";position:absolute;right:calc(var(--rocky-w) / 2 - 9px);bottom:-10px;width:16px;height:16px;background:var(--white);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);transform:rotate(45deg)}
.rocky-bubble[hidden],.rocky-bubble [hidden]{display:none}
.rocky-title{font-weight:bold;font-size:17px;line-height:1.3;margin:0 34px 6px 0;outline:none}
.rocky-line{font-size:14px;line-height:1.5;margin:0 0 12px;color:var(--ink)}
.rocky-close{position:absolute;top:6px;right:6px;width:40px;height:40px;border:0;background:none;font-size:26px;line-height:1;color:var(--ink);cursor:pointer;border-radius:8px}
.rocky-close:hover{background:var(--ivory)}.rocky-close:focus-visible{outline:3px solid var(--orange);outline-offset:-3px}
.rocky .signup{max-width:none}
.rocky .signup-row{flex-direction:column;gap:8px}
.rocky .signup-row .button{width:100%}
.rocky .signup-note{font-size:11.5px;margin-top:8px}
.rocky-tag{position:absolute;right:0;bottom:calc(100% + 8px);margin:0;white-space:nowrap;background:var(--ink);color:var(--white);font-size:13px;font-weight:bold;padding:7px 12px;border-radius:12px;pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity .2s,transform .2s}
.rocky-tag:empty{display:none}
.rocky-tag.is-on{opacity:1;transform:none}
@media(max-width:800px){.rocky{--rocky-h:72px;--rocky-w:52px;right:calc(10px + env(safe-area-inset-right));bottom:calc(10px + env(safe-area-inset-bottom) + var(--rocky-lift))}.rocky-space{--rocky-space:92px}html.has-rocky{scroll-padding-bottom:calc(100px + env(safe-area-inset-bottom))}}
@media(prefers-reduced-motion:reduce){.rocky *,.rocky *::before,.rocky *::after{animation:none!important;transition:none!important}.rocky .rocky-act{animation:rocky-fade .5s ease-out .2s both!important}.rocky-psst{display:none!important}}
@keyframes rocky-fade{from{opacity:0}to{opacity:1}}
@media print{.rocky,.rocky-space{display:none!important}}
/* Footer sign-up sub-line + Nerdy Picks guide CTA (Oct 26, 2026) */
.foot-signup-sub{font-size:15px;color:var(--muted);margin-top:6px}
.pick-cta{margin-top:20px;background:var(--sage);border-radius:8px;padding:20px 22px}
.pick-cta[hidden]{display:none}
.pick-cta-copy{font:19px/1.35 var(--serif);margin:0 0 12px;max-width:760px}
.pick-cta .signup-row{max-width:560px}
.guide-ready{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;margin-top:12px}
.guide-ready p{margin:0;font-size:14px}
@media(max-width:640px){.pick-cta{padding:16px}.pick-cta-copy{font-size:17px}}
.pick-cta form.is-done .signup-row{display:none}
/* Deep Thought end-of-piece Nerd Signal box (Oct 31, 2026): same form as the footer, sage card like the picker CTA */
.dt-signup{margin:34px 0 8px;background:var(--sage);border-radius:8px;padding:22px 24px}
.dt-signup .eyebrow{margin:0 0 6px}
.prose .dt-signup h2.dt-signup-h{font-size:24px;margin:0 0 8px;padding:0;border:0}
.dt-signup-copy{margin:0 0 14px;font-size:16px}
.dt-signup .signup{max-width:560px}
@media(max-width:640px){.dt-signup{padding:16px}.prose .dt-signup h2.dt-signup-h{font-size:21px}}
