Hints4Today

The Logbook's Own Logbook

Changelog

Every data correction and notable site change, newest first. Data sources: prompts and pool sizes come from the official krillion.io reveal; 100-point words are cross-checked against krillionanswers.com. When we get something wrong, it gets fixed here — in the open.

2026-10-22

One current snapshot, every rebuild

The homepage's daily statistics update was retaining its previous summary instead of replacing the whole block. It had accumulated 53 Largest/Narrowest summaries and unmatched closing tags. The updater now replaces the complete bounded region, leaving one current summary, clears stale totals when pool sizes are pending, and keeps each prompt paired with its own count when data is partial. Regression checks cover repeated builds, the daily rollover, pending data and missing template boundaries; the daily workflow runs them before updating. This fixes a confirmed page defect. The cause of the search visibility drop is still under investigation.

2026-10-18

Duplicate year removed from daily-sheet titles

Every daily-sheet title since Dive #1 carried the year twice — "Krillion Answers for October 18, 2026 (2026) — Daily Dive #95" — because the freshness-signal helper that appends "(2026)" to titles only skipped pages whose year was already parenthesized, and missed bare years inside dates. The guard now skips any title that already contains a four-digit year, and all 95 daily-sheet titles were rewritten in place (one line each; answers, reveal blocks and share dock untouched). Only the tag was affected — og:title, twitter:title and structured data had always been clean.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-15</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">The indexed eight, wired together</h2> <p style="margin:0">A link audit of the eight pages Google has indexed found two islands: the rare-answers page sent no in-content links to its siblings, and nothing linked to the prompt-library page at all — the page that carries a 4,000-searches-a-month query. Every gap now has a link in a sentence that earns it: the rare page points to the beginner guide and the homepage reveal, the FAQ on playing more than once a day points to the full prompt library, the archive and the games-like guide each reference it where browsing month-by-month feels slow, and the homepage gained an explore card for it. Eight sentences in total — no link walls.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-14</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Freshness fixes after the traffic dip</h2> <p style="margin:0">A review after the impressions drop found stale page labels: the yesterday page's title had been frozen at Dive #84 since October 8 (a title-format change broke the daily regex), and the archive front page still said through #85 (a comma in the four-digit prompt count broke its regex). These were confirmed defects; the review did not establish what caused the ranking drop. Both regexes now tolerate the new formats and assert loudly instead of failing silently. The homepage title now carries the dive number and date (Krillion Answers Today #91 (Oct 14, 2026)), card hints give the 100-point word's first letter and length instead of repeating pool statistics, missing 100-point words are honestly marked pending, the 637 per-prompt pages are noindexed (kept crawlable; the daily sheet pages become the indexed entry), and the Unlimited page states the real pricing: the daily dive is free, extras are paid.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-12</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Descriptions tightened site-wide</h2> <p style="margin:0">An SEO audit flagged 111 pages with meta descriptions over 160 characters — long prompts and wordy guide summaries were spilling past the snippet limit, where Google truncates the tail. Every overlong description was rewritten by hand to fit, counting the HTML-entity expansion that hides a few extra characters; long prompts now shorten cleanly at word boundaries with an ellipsis. Full-site rescan after rebuild: zero descriptions over the limit. Titles were deliberately left alone.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-10</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Advice now matches the question, not just the category</h2> <p style="margin:0">A sharp-eyed review caught our per-prompt advice talking past the question: city prompts were advising about countries, TV prompts about films and actors, and the music-festival prompt about solo artists. We added a subject-detection layer under the category tags — city, country, TV, film, actor, festival, artist, song, band — and rewrote the thinking paths, common mistakes, preparation lists, tier examples, pro tips, and category playbooks for each. All 602 answer pages were rebuilt and machine-scanned: zero mismatches remain.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-09</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Seven tool pages rebuilt with real scenarios</h2> <p style="margin:0">The answer search, score calculator, reset-time guide, pool-size explainer, rare-answers cabinet, good-score benchmarks, and troubleshooting shop were all rebuilt from thin stubs (156-418 words) into full guides (990-1,030 words). Each gained sections anchored to our recorded data — pool-size distribution across every dive on record, the narrowest and widest pools ever, worked score math from a real dive, timezone planning around the 04:00 UTC reset, and the patterns behind every recorded 100-point answer. Also fixed on the search page: a broken noscript tag that had been mismatching a closing div since launch.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-09</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Daily dive pages get a depth map</h2> <p style="margin:0">Every date page now opens with a four-stat card row and a hand-drawn SVG depth map: the day's seven prompts as columns of water, narrower pools drawn deeper, tightest one highlighted — same metaphor as our tier ladder. Each page also gained a pacing read (where the day's trap sat in the sequence), comparison with the dives before and after plus the trailing 7-day average, a category spread with hub links, the seven 100-point words as chips, a training routine, and an honest FAQ. Day pages run 1,080-1,170 words of body copy, all from our recorded data. Also fixed: Dive #1 showed a dead 'previous day' link since launch.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-09</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Every answer page, rewritten deeper</h2> <p style="margin:0">All 600+ per-question answer pages were rebuilt with four new sections that no other answers site has: how the prompt shaped its dive (its rank among that day's seven pool widths), the top and bottom answers side by side with why they scored differently, a concrete prep list for the next time this category appears, and a meta read on why the category behaves the way it does. Median page length grew from about 1,400 to about 3,600 words — all drawn from our own recorded dive data, not filler.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-06</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Share, play, and a Halloween guest</h2> <p style="margin:0">Three little extras across every page: a share dock on the right edge — one tap posts to X, Facebook, Reddit or WhatsApp if you're signed in, and copies the link ready-to-paste for TikTok, YouTube or Instagram. Whallion, our oil-painted bonus game about feeding a very hungry whale, now has proper doors from the homepage, guides and answer pages (hover the whale — it talks). And from October 24, a little krill hiding in a pumpkin moves into the corner; tap it and see.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-06</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Featured on Xinquji.com</h2> <p style="margin:0">Hints4Today is now featured on Xinquji.com, a product discovery community. The site footer carries their English badge; the listing gives us a dofollow link and a second citation for "Krillion answers" style searches.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-06</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">A quick list of past Krillion answers</h2> <p style="margin:0">Players searching for past Krillion answers — yesterday, last week, any previous day — now land on a dedicated page: the last fourteen dives listed newest first, yesterday highlighted, with the full archive one click away. The archive itself keeps its month-by-month organization unchanged.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-05</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Three upgrades in one pass</h2> <p style="margin:0">The answer search now understands dates — type 2026-10-05, 10/05 or yesterday (or tap one of the date chips) and the full dive appears with its 100-point answers. A new methodology page documents where every number on this site comes from, what we deliberately don't record, and how each page is fact-checked daily. And the homepage now carries a Recent Answer Sheets table linking the last seven dives directly.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-05</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">A real mailbox for the logbook</h2> <p style="margin:0">hello@hints4today.com is now a working address — mail sent to it (or any address @hints4today.com) lands in the logbook's mailbox and gets read. The contact page now points there instead of a personal email account.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-05</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Every date on the site now moves daily</h2> <p style="margin:0">A reader (and ChatGPT) noticed some guide pages still showed dates from earlier in the month while the homepage updated daily — fair catch. The guide and FAQ pages now carry today's date every day, because every page is fact-checked against the official reveal daily. Sitemap timestamps for all active pages follow the same rhythm; the archive and policy pages keep their true dates on purpose.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-05</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Official screenshots & a deeper set of guides</h2> <p style="margin:0">Every deep read now carries real screenshots of the official game — the prompt screen with its 25-second clock, a Too Clever verdict, a full breakdown including a rejected answer, and the depth-profile results screen — published for identification and commentary as fair use on a fan site, with a clear not-affiliated notice under each one. All seven guides also grew to 1,250–1,350 words of new material: archive archaeology from Dive #1, real-ocean depth comparisons for the perfect run, a walked-through live dive, and the ten narrowest pools on record.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-05</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Seven deep reads + a guides hub</h2> <p style="margin:0">The logbook opens a chart room: seven long-form guides — whether a krillion is a real number, Krillion vs Wordle, why answers get rejected, the best 100-point answers ever recorded, the 700-point perfect run, playing old dives, and how to hit One in a Krillion — plus a single hub page shelving every guide, tool and data page on the site.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-05</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">New tools & data guides</h2> <p style="margin:0">Three new ways into the logbook: a score calculator that turns your seven picks into metres of depth, a prompt-statistics page built from every pool size we have ever recorded, and a guide to repeated prompts — which questions Krillion has asked more than once, and how the pools moved.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-05</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Share cards for every page + tier chart</h2> <p style="margin:0">Every answer page and guide now carries a proper social share card — a deep-sea 1200×630 image appears when a page is linked in chats, social feeds and AI answers, instead of an empty frame. The scoring guide also gained a score-to-depth bar chart.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-05</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Search-snippet polish</h2> <p style="margin:0">Meta descriptions on the homepage and the Krillion Unlimited page were rewritten: the homepage snippet now leads with the exact phrase people search ("Krillion answers today"), and the Unlimited snippet was trimmed from 162 to 148 characters so it no longer gets cut off in search results. Same facts, cleaner snippets.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-04</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Spoiler protection sitewide</h2> <p style="margin:0">100-point words are now blurred until tapped — in archive dive narratives, in answer-search results, and on the rare-answers page (which also gets a Reveal-all button). The word you typed into the search box is shown unblurred, since you already know it. Visitors without JavaScript see plain text.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-04</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Data correction — Dive #48 (Sep 1)</h2> <p style="margin:0">The 100-point word for “Name a member of the Beatles” is now recorded correctly as Jimmie Nicol (the drummer who briefly stood in for Ringo in 1964). A descriptive phrase had been listed in its place since the page was written.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-04</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Honest wording fixes</h2> <p style="margin:0">The rare-answers leaderboard is now “the 20 narrowest answer pools on record” instead of “the 20 hardest prompts” — a narrow pool is where 100-point words hide, but it is not the same thing as difficulty. The answer-search page now says it indexes prompts and 100-point rare answers, not every accepted answer. The Too Clever page's Pluto note was rewritten: the Dive #34 prompt explicitly allowed dwarf planets, so Pluto was a fully valid pick that paid 15 simply because everyone thought of it.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-04</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Pipeline fixes, verified by a watchdog</h2> <p style="margin:0">The homepage hint section now updates from the same data as the answer cards — it had been frozen at launch since Oct 1 while the answers kept moving. The dateModified metadata had silently stopped updating on Oct 2. Both are fixed, and an automated check now compares every page against the official krillion.io API before anything ships.</p> </div> <div class="card" style="margin:1.1rem 0"> <div class="card-top"><span>2026-10-03</span></div> <h2 style="margin:.2rem 0 .45rem;font-size:1.12rem">Day pages for every dive</h2> <p style="margin:0">Each dive now has its own /answers/<date>/ page with all seven prompts, so a single day can be linked or shared directly.</p> </div> <p class="hint">Questions about a correction? <a href="https://hints4today.com/contact/">Contact us</a>.</p> </div> </main> <footer> <div class="wrap"> <p><strong>Hints4Today</strong> is an unofficial fan-made guide, not affiliated with the creators of Krillion. Play the official game at <a href="https://krillion.io/">krillion.io</a>.</p> <p class="disclaimer">Answers refresh daily after the 04:00 UTC reset.</p> <!-- 交换徽章只放首页(站点 index.html),模板不放:核验只查首页,内页保持干净(老大 10-07 定规) --> </div> </footer> <!-- share dock + halloween krill + whale bubbles (self-contained, no external requests) --> <style> #share-dock{position:fixed;right:14px;top:50%;transform:translateY(-50%);z-index:70;display:flex;flex-direction:column;gap:6px;padding:8px 6px;background:rgba(13,30,46,.92);border:1px solid rgba(255,122,104,.35);border-radius:26px;box-shadow:0 6px 24px rgba(0,0,0,.35)} #share-dock a,#share-dock button{position:relative;width:34px;height:34px;display:flex;align-items:center;justify-content:center;border:none;background:none;border-radius:50%;color:#c3b599;cursor:pointer;transition:transform .15s ease,background .15s ease} #share-dock a:hover,#share-dock button:hover{transform:scale(1.14);background:rgba(255,122,104,.16);color:#ff9d8a} #share-dock svg{width:17px;height:17px;fill:currentColor} #share-dock .sd-tip{position:absolute;right:44px;top:50%;transform:translateY(-50%);white-space:nowrap;font:600 11px/1.4 -apple-system,sans-serif;color:#f2ead9;background:#0a1826;padding:3px 8px;border-radius:6px;opacity:0;pointer-events:none;transition:opacity .12s} #share-dock a:hover .sd-tip,#share-dock button:hover .sd-tip{opacity:1} #sd-toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);background:#0a1826;color:#f2ead9;font:600 13px/1 -apple-system,sans-serif;padding:10px 16px;border-radius:10px;border:1px solid rgba(255,122,104,.4);opacity:0;pointer-events:none;transition:opacity .2s;z-index:95} #sd-toast.on{opacity:1} @media(max-width:720px){ #share-dock{display:none} #share-fab{position:fixed;right:14px;bottom:calc(env(safe-area-inset-bottom,0px) + 104px);z-index:71;width:46px;height:46px;border-radius:50%;border:1px solid rgba(255,122,104,.45);background:rgba(13,30,46,.94);color:#ff9d8a;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 16px rgba(0,0,0,.4);animation:sd-breathe 5.2s ease-in-out infinite;-webkit-tap-highlight-color:transparent} #share-fab svg{width:19px;height:19px;fill:currentColor} #share-fab:active{transform:scale(.92)} @keyframes sd-breathe{0%,88%,100%{box-shadow:0 4px 16px rgba(0,0,0,.4)}93%{box-shadow:0 4px 22px rgba(255,122,104,.5)}} #share-sheet{position:fixed;left:0;right:0;bottom:0;z-index:80;background:rgba(10,24,38,.98);border-top:1px solid rgba(255,122,104,.35);border-radius:18px 18px 0 0;padding:14px 16px calc(env(safe-area-inset-bottom,0px) + 14px);transform:translateY(105%);transition:transform .28s cubic-bezier(.32,.72,.28,1);will-change:transform} #share-sheet.open{transform:translateY(0)} #share-sheet .ss-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:10px} #share-sheet .ss-grid a,#share-sheet .ss-grid button{display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 4px;border:none;background:none;color:#c3b599;font:500 11px/1.3 -apple-system,sans-serif;cursor:pointer;border-radius:12px;-webkit-tap-highlight-color:transparent} #share-sheet .ss-grid a:active,#share-sheet .ss-grid button:active{background:rgba(255,122,104,.14);color:#ff9d8a} #share-sheet .ss-grid svg{width:21px;height:21px;fill:currentColor} #share-sheet .ss-head{display:flex;justify-content:space-between;align-items:center;color:#8d8471;font:600 12px/1 -apple-system,sans-serif} #share-sheet .ss-close{background:none;border:none;color:#8d8471;font-size:22px;line-height:1;padding:4px 8px;cursor:pointer} #share-mask{position:fixed;inset:0;z-index:79;background:rgba(0,0,0,.35);opacity:0;pointer-events:none;transition:opacity .25s} #share-mask.open{opacity:1;pointer-events:auto} } #halloween-krill{position:fixed;right:16px;bottom:16px;z-index:60;width:72px;cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent} #halloween-krill svg{width:100%;height:auto;display:block;filter:drop-shadow(0 4px 10px rgba(0,0,0,.4))} #halloween-krill .hk-antenna{transform-origin:34px 26px;animation:hk-sway 2.6s ease-in-out infinite} #halloween-krill .hk-antenna.b{transform-origin:40px 28px;animation-delay:.5s} @keyframes hk-sway{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(8deg)}} #halloween-krill.pop .hk-shrimp{animation:hk-pop .9s cubic-bezier(.3,.6,.3,1)} @keyframes hk-pop{0%{transform:translateY(0)}35%{transform:translateY(-24px) rotate(-14deg)}70%{transform:translateY(2px) rotate(4deg)}100%{transform:translateY(0)}} #halloween-krill.glow .hk-lights{animation:hk-glow 1.8s ease} @keyframes hk-glow{0%,100%{opacity:.25}40%,70%{opacity:1}} #halloween-krill.wizard .hk-hat{display:block} #halloween-krill .hk-hat{display:none} .hk-particle{position:absolute;width:12px;height:12px;border-radius:50%;background:#fbbf24;opacity:0;pointer-events:none} #halloween-krill.pop .hk-particle{animation:hk-float 1.2s ease-out} @keyframes hk-float{0%{opacity:1;transform:translate(0,0)}100%{opacity:0;transform:translate(-26px,-44px)}} .whale-bubble{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:#0a1826;color:#f2ead9;font:600 12.5px/1.5 Georgia,serif;padding:8px 12px;border-radius:12px;border:1px solid rgba(255,122,104,.45);white-space:nowrap;box-shadow:0 4px 14px rgba(0,0,0,.35);opacity:0;pointer-events:none;transition:opacity .18s;z-index:20} .whale-bubble.on{opacity:1} .whale-bubble:after{content:"";position:absolute;top:100%;left:50%;margin-left:-6px;border:6px solid transparent;border-top-color:#0a1826} @media(prefers-reduced-motion:reduce){#halloween-krill .hk-antenna{animation:none}#halloween-krill.pop .hk-shrimp,#halloween-krill.pop .hk-particle{animation:none}} </style> <nav id="share-dock" aria-label="Share this page"> <a data-sd="x" target="_blank" rel="noopener" aria-label="Share on X"><svg viewBox="0 0 24 24"><path d="M18.9 1.2h3.7l-8.1 9.3L24 22.8h-7.5l-5.9-7.7-6.7 7.7H.2l8.7-9.9L0 1.2h7.7l5.3 7 6-7zm-1.3 19.4h2L6.6 3.3H4.4l13.2 17.3z"/></svg><span class="sd-tip">X / Twitter</span></a> <a data-sd="fb" target="_blank" rel="noopener" aria-label="Share on Facebook"><svg viewBox="0 0 24 24"><path d="M24 12a12 12 0 1 0-13.9 11.9v-8.4h-3v-3.5h3V9.4c0-3 1.8-4.7 4.5-4.7 1.3 0 2.7.2 2.7.2v3h-1.5c-1.5 0-2 .9-2 1.9v2.2h3.3l-.5 3.5h-2.8v8.4A12 12 0 0 0 24 12z"/></svg><span class="sd-tip">Facebook</span></a> <a data-sd="rd" target="_blank" rel="noopener" aria-label="Share on Reddit"><svg viewBox="0 0 24 24"><path d="M24 12a2.2 2.2 0 0 0-3.7-1.6 10.9 10.9 0 0 0-5.3-1.7l1-4.7 3.3.7a1.6 1.6 0 1 0 .2-1L15.3 3a.8.8 0 0 0-1 .6l-1.2 5.4a10.9 10.9 0 0 0-5.4 1.7 2.2 2.2 0 1 0-2.4 3.6 4 4 0 0 0 0 .6C5.3 18 8.4 20.5 12 20.5s6.7-2.5 6.7-5.6a4 4 0 0 0 0-.6 2.2 2.2 0 0 0 1.3-2zM8.4 14.4a1.3 1.3 0 1 1 1.3 1.3 1.3 1.3 0 0 1-1.3-1.3zm7 3.7a5 5 0 0 1-3.4 1 5 5 0 0 1-3.4-1 .6.6 0 0 1 .8-.9 4 4 0 0 0 2.6.7 4 4 0 0 0 2.6-.7.6.6 0 0 1 .8.9zm-.1-2.4a1.3 1.3 0 1 1 1.3-1.3 1.3 1.3 0 0 1-1.3 1.3z"/></svg><span class="sd-tip">Reddit</span></a> <a data-sd="wa" target="_blank" rel="noopener" aria-label="Share on WhatsApp"><svg viewBox="0 0 24 24"><path d="M20 3.9A11.7 11.7 0 0 0 12 0a11.9 11.9 0 0 0-10.3 18L0 24l6.2-1.6A11.9 11.9 0 0 0 12 24a11.9 11.9 0 0 0 8-20.1zM12 21.9a9.9 9.9 0 0 1-5-1.4l-.4-.2-3.7 1 1-3.6-.2-.4a9.8 9.8 0 1 1 8.3 4.6zm5.5-7.4c-.3-.2-1.8-.9-2-1s-.5-.2-.7.2-.8 1-.9 1.2-.3.2-.6.1a7.4 7.4 0 0 1-3.7-3.3c-.3-.5.3-.5.8-1.5a.5.5 0 0 0 0-.5c0-.1-.7-1.6-.9-2.2s-.5-.5-.7-.5h-.6a1.1 1.1 0 0 0-.8.4 3.2 3.2 0 0 0-1 2.4 5.6 5.6 0 0 0 1.2 3 12.7 12.7 0 0 0 4.8 4.3 5.5 5.5 0 0 0 3.4.7 2.9 2.9 0 0 0 1.9-1.4 2.4 2.4 0 0 0 .2-1.4c-.1-.1-.3-.2-.6-.4z"/></svg><span class="sd-tip">WhatsApp</span></a> <a data-sd="tt" target="_blank" rel="noopener" aria-label="Share on TikTok"><svg viewBox="0 0 24 24"><path d="M12.5.7a10 10 0 0 0 .3 2.2 5.7 5.7 0 0 0 3.9 4l.3.1v2.4a8.2 8.2 0 0 1-4.3-1.6v6.6A5.9 5.9 0 1 1 6.8 9c.3 0 .7 0 1 .1v2.5a3.4 3.4 0 1 0 2.4 3.3V0h2.2z"/></svg><span class="sd-tip">TikTok</span></a> <a data-sd="yt" target="_blank" rel="noopener" aria-label="Share on YouTube"><svg viewBox="0 0 24 24"><path d="M23.5 6.2a3 3 0 0 0-2.1-2.1C19.5 3.5 12 3.5 12 3.5s-7.5 0-9.4.6A3 3 0 0 0 .5 6.2 31.3 31.3 0 0 0 0 12a31.3 31.3 0 0 0 .5 5.8 3 3 0 0 0 2.1 2.1c1.9.6 9.4.6 9.4.6s7.5 0 9.4-.6a3 3 0 0 0 2.1-2.1A31.3 31.3 0 0 0 24 12a31.3 31.3 0 0 0-.5-5.8zM9.5 15.6V8.4L15.8 12z"/></svg><span class="sd-tip">YouTube</span></a> <a data-sd="ig" target="_blank" rel="noopener" aria-label="Share on Instagram"><svg viewBox="0 0 24 24"><path d="M12 2.2c3.2 0 3.6 0 4.8.1a6.6 6.6 0 0 1 2.2.4 3.7 3.7 0 0 1 2.2 2.2 6.6 6.6 0 0 1 .4 2.2c.1 1.2.1 1.6.1 4.8s0 3.6-.1 4.8a6.6 6.6 0 0 1-.4 2.2 3.7 3.7 0 0 1-2.2 2.2 6.6 6.6 0 0 1-2.2.4c-1.2.1-1.6.1-4.8.1s-3.6 0-4.8-.1a6.6 6.6 0 0 1-2.2-.4 3.7 3.7 0 0 1-2.2-2.2 6.6 6.6 0 0 1-.4-2.2C2.2 15.6 2.2 15.2 2.2 12s0-3.6.1-4.8a6.6 6.6 0 0 1 .4-2.2 3.7 3.7 0 0 1 2.2-2.2 6.6 6.6 0 0 1 2.2-.4c1.2-.1 1.6-.1 4.9-.1zM12 0C8.7 0 8.3 0 7.1.1a8.8 8.8 0 0 0-2.9.5 5.9 5.9 0 0 0-3.6 3.6 8.8 8.8 0 0 0-.5 2.9C0 8.3 0 8.7 0 12s0 3.7.1 4.9a8.8 8.8 0 0 0 .5 2.9 5.9 5.9 0 0 0 3.6 3.6 8.8 8.8 0 0 0 2.9.5c1.2.1 1.6.1 4.9.1s3.7 0 4.9-.1a8.8 8.8 0 0 0 2.9-.5 5.9 5.9 0 0 0 3.6-3.6 8.8 8.8 0 0 0 .5-2.9c.1-1.2.1-1.6.1-4.9s0-3.7-.1-4.9a8.8 8.8 0 0 0-.5-2.9 5.9 5.9 0 0 0-3.6-3.6 8.8 8.8 0 0 0-2.9-.5C15.7 0 15.3 0 12 0zm0 5.8A6.2 6.2 0 1 0 18.2 12 6.2 6.2 0 0 0 12 5.8zm0 10.2A4 4 0 1 1 16 12a4 4 0 0 1-4 4zm6.4-11.8a1.4 1.4 0 1 0 1.4 1.4 1.4 1.4 0 0 0-1.4-1.4z"/></svg><span class="sd-tip">Instagram</span></a> <button data-sd="copy" aria-label="Copy link"><svg viewBox="0 0 24 24"><path d="M16.1 0h-9A3.6 3.6 0 0 0 3.5 3.6v11.3a3.6 3.6 0 0 0 3.6 3.6h9a3.6 3.6 0 0 0 3.6-3.6V3.6A3.6 3.6 0 0 0 16.1 0zm1.8 14.9a1.8 1.8 0 0 1-1.8 1.8h-9a1.8 1.8 0 0 1-1.8-1.8V3.6a1.8 1.8 0 0 1 1.8-1.8h9a1.8 1.8 0 0 1 1.8 1.8zM7.9 21.4a3.4 3.4 0 0 0 3.3 2.6h9a3.6 3.6 0 0 0 3.6-3.6V9.1a3.4 3.4 0 0 0-2.6-3.3v14.6a1.8 1.8 0 0 1-1.8 1.8z" transform="translate(-2.2 0) scale(0.92)"/></svg><span class="sd-tip">Copy link</span></button> </nav> <button id="share-fab" aria-label="Share this page" hidden><svg viewBox="0 0 24 24"><path d="M18 16.1c-.8 0-1.5.3-2 .8l-7.1-4.2c.1-.2.1-.5.1-.7s0-.5-.1-.7L16 7.2c.5.5 1.2.8 2 .8a3 3 0 1 0-3-3c0 .2 0 .5.1.7L8 9.9a3 3 0 1 0 0 4.2l7.1 4.2c-.1.2-.1.4-.1.6a3 3 0 1 0 3-2.8z"/></svg></button> <div id="share-mask" hidden></div> <div id="share-sheet" role="dialog" aria-label="Share this page" hidden> <div class="ss-head"><span>Share this page</span><button class="ss-close" aria-label="Close">×</button></div> <div class="ss-grid"> <a data-sd="x" target="_blank" rel="noopener">X</a><a data-sd="fb" target="_blank" rel="noopener">Facebook</a><a data-sd="rd" target="_blank" rel="noopener">Reddit</a><a data-sd="wa" target="_blank" rel="noopener">WhatsApp</a><a data-sd="tt" target="_blank" rel="noopener">TikTok</a><a data-sd="yt" target="_blank" rel="noopener">YouTube</a><a data-sd="ig" target="_blank" rel="noopener">Instagram</a><button data-sd="copy">Copy link</button> </div> </div> <div id="sd-toast" role="status" aria-live="polite"></div> <script> (function(){ var q=function(s){return document.querySelector(s)}; function toast(t){var el=q('#sd-toast');if(!el)return;el.textContent=t;el.classList.add('on');clearTimeout(el._t);el._t=setTimeout(function(){el.classList.remove('on')},1600)} function cp(t,cb){try{navigator.clipboard.writeText(t).then(cb,cb)}catch(e){cb()}} var t=encodeURIComponent(document.title),u=encodeURIComponent(location.href); var routes={x:'https://twitter.com/intent/tweet?text='+t+'&url='+u, fb:'https://www.facebook.com/sharer/sharer.php?u='+u, rd:'https://www.reddit.com/submit?url='+u+'&title='+t, wa:'https://wa.me/?text='+t+'%20'+u}; var homes={tt:'https://www.tiktok.com',yt:'https://www.youtube.com',ig:'https://www.instagram.com'}; var fab=q('#share-fab'),sheet=q('#share-sheet'),mask=q('#share-mask'); function closeSheet(){if(sheet&&sheet.classList){sheet.classList.remove('open');mask.classList.remove('open')}} if(fab){ var mq=window.matchMedia('(max-width:720px)'); var showFab=function(){fab.hidden=!(mq.matches||('ontouchstart' in window))}; showFab(); if(mq.addEventListener)mq.addEventListener('change',showFab); fab.addEventListener('click',function(){ if(navigator.share){navigator.share({title:document.title,url:location.href}).catch(function(){})} else{sheet.hidden=false;mask.hidden=false;requestAnimationFrame(function(){sheet.classList.add('open');mask.classList.add('open')})} }); if(mask)mask.addEventListener('click',closeSheet); var sc=sheet&&sheet.querySelector('.ss-close');if(sc)sc.addEventListener('click',closeSheet); document.addEventListener('click',function(e){if(sheet&&sheet.classList.contains('open')&&!sheet.contains(e.target)&&!fab.contains(e.target))closeSheet()},true); } document.addEventListener('click',function(e){ var b=e.target.closest('[data-sd]');if(!b)return; var k=b.getAttribute('data-sd'); closeSheet();/* pick a network -> sheet slides away */ if(k==='copy'){cp(location.href,function(){toast('Link copied!')});return} if(routes[k]){window.open(routes[k],'_blank','noopener');return} /* TikTok/YouTube/Instagram have no web share intent: copy first, then open the app */ cp(document.title+' — '+location.href,function(){toast('Copied! Paste it to post')}); window.open(homes[k],'_blank','noopener'); }); /* whale bubbles: any element with data-whale-quote shows a speech bubble on hover/tap */ /* copy-answer: auto-add a copy button to every .answer-word (works retroactively on old pages) */ document.querySelectorAll('.answer-word').forEach(function(aw) { if (aw.querySelector('.copy-ans')) return; var txt = aw.textContent.trim(); if (!txt || txt.length < 2) return; var b = document.createElement('button'); b.type = 'button'; b.className = 'copy-ans'; b.setAttribute('data-ans', txt); b.setAttribute('aria-label', 'Copy this answer'); b.style.cssText = 'font-size:.72rem;font-family:monospace;color:#8d8471;background:none;border:1px solid rgba(195,181,153,.18);border-radius:6px;padding:.15rem .5rem;cursor:pointer;margin-left:.5rem;vertical-align:middle'; b.textContent = '\u29c9 Copy'; aw.appendChild(b); }); document.addEventListener('click', function(e) { var b = e.target.closest ? e.target.closest('.copy-ans') : null; if (!b) return; var txt = b.getAttribute('data-ans'); if (navigator.clipboard) { navigator.clipboard.writeText(txt).then(function() { b.textContent = '\u2713 Copied'; setTimeout(function() { b.textContent = '\u29c9 Copy'; }, 1400); }); } }); document.addEventListener('mouseover',function(e){var w=e.target.closest('[data-whale-quote]');if(!w||w._wb)return;w._wb=1;var b=document.createElement('span');b.className='whale-bubble';b.textContent=w.getAttribute('data-whale-quote');if(getComputedStyle(w).position==='static')w.style.position='relative';w.appendChild(b);requestAnimationFrame(function(){b.classList.add('on')});w._removeBubble=function(){b.classList.remove('on');setTimeout(function(){b.remove();w._wb=0},220)};w.addEventListener('mouseleave',w._removeBubble,{once:true})}); /* Halloween krill: Oct 24 – Nov 2 only; code stays year-round */ var now=new Date(),m=now.getMonth(),d=now.getDate(); if((m===9)||(m===10&&d<=2)){ /* live 10-06 (boss call) until 11-02, then archived until next year */ var hk=document.createElement('div');hk.id='halloween-krill';hk.setAttribute('role','button');hk.setAttribute('aria-label','A little krill in a pumpkin — tap it!'); hk.innerHTML='<svg viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg"><ellipse cx="48" cy="78" rx="26" ry="5" fill="#050d17" opacity=".55"/><path class="hk-antenna" d="M34 26 C 30 16, 34 8, 42 4" fill="none" stroke="#ff9d8a" stroke-width="2.6" stroke-linecap="round"/><path class="hk-antenna b" d="M40 28 C 42 18, 50 12, 58 12" fill="none" stroke="#ff9d8a" stroke-width="2.2" stroke-linecap="round"/><g class="hk-shrimp"><ellipse cx="42" cy="38" rx="15" ry="9" fill="#ff7a68" transform="rotate(-14 42 38)"/><circle cx="31" cy="34" r="2.4" fill="#f2ead9"/><path d="M55 35 l7 -4 -2 7 z" fill="#ff7a68"/><path d="M36 45 q6 4 13 1" stroke="#0a1826" stroke-width="1.6" fill="none" stroke-linecap="round"/></g><path d="M52 30 q10 -3 14 6" stroke="#ff9d8a" stroke-width="2.6" fill="none" stroke-linecap="round"/><g class="hk-hat"><path d="M36 16 l7 -12 7 12 z" fill="#1d3a52" stroke="#fbbf24" stroke-width="2"/><circle cx="43" cy="6" r="1.6" fill="#fbbf24"/></g><path d="M18 52 C 18 38, 32 30, 48 30 C 64 30, 78 38, 78 52 C 78 66, 64 74, 48 74 C 32 74, 18 66, 18 52 Z" fill="#f59e0b" stroke="#7c2d12" stroke-width="2.4"/><path d="M26 40 q22 -8 44 0" stroke="#c2410c" stroke-width="2.6" fill="none" stroke-linecap="round"/><path d="M22 52 q26 8 52 0" stroke="#c2410c" stroke-width="2.6" fill="none" stroke-linecap="round"/><path d="M28 63 q20 7 40 0" stroke="#c2410c" stroke-width="2.4" fill="none" stroke-linecap="round"/><path class="hk-lights" d="M44 32 q-8 16 0 38 M56 34 q8 14 2 34" stroke="#fde68a" stroke-width="0" /><path class="hk-lights" d="M46 44 q-4 10 0 22 M54 44 q4 10 1 22" stroke="#fde68a" stroke-width="2.6" fill="none" stroke-linecap="round" opacity=".25"/><path d="M46 30 q2 -8 -2 -12 M50 30 q0 -9 4 -12" stroke="#16a34a" stroke-width="3" fill="none" stroke-linecap="round"/><ellipse cx="34" cy="52" rx="3" ry="5" fill="#7c2d12" opacity=".6"/><ellipse cx="62" cy="52" rx="3" ry="5" fill="#7c2d12" opacity=".6"/><span class="hk-particle" style="left:10px;top:30px"></span><span class="hk-particle" style="left:70px;top:22px"></span></svg>'; document.body.appendChild(hk); var clicks=0,ct=0; hk.addEventListener('click',function(){ clicks++;clearTimeout(ct);ct=setTimeout(function(){clicks=0},1600); hk.classList.remove('pop','glow');void hk.offsetWidth; if(clicks>=5){hk.classList.add('pop','wizard');setTimeout(function(){hk.classList.remove('wizard')},2400)} else{var r=Math.random();if(r<.4){hk.classList.add('pop')}else if(r<.75){hk.classList.add('glow')}else{var x=hk.style.transform;hk.style.transition='transform 1.4s cubic-bezier(.5,0,.8,.4)';hk.style.transform='translateX(calc(-100vw + 120px))';setTimeout(function(){hk.style.opacity='0'},1450);setTimeout(function(){hk.style.transition='none';hk.style.transform=x;hk.offsetHeight;hk.style.opacity='1';hk.style.transition=''},3000)}} }); } })(); </script> <!-- /site extras --> </body> </html>