The Catch.A permanent record of checked claims
RECORDSAVED COPY

Saved copy of

Results suggest left-leaning voters buoyed Petersburg Sullivan in Alaska's U.S. Senate primary

Anchorage Press · 2026-08-28

Back to source details

Jump to the cited passage
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><meta name="theme-color" content="#FEB619"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="alternate icon" type="image/png" href="/favicon.png"><link rel="icon" type="image/x-icon" href="/favicon.ico"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="manifest" href="/site.webmanifest"><link rel="canonical" href="https://anchoragepress.com/results-suggest-left-leaning-voters-buoyed-petersburg-sullivan-in-alaskas-u-s-senate-primary/"><title>Results suggest left-leaning voters buoyed Petersburg Sullivan in Alaska&#39;s U.S. Senate primary — Anchorage Press</title><meta name="description" content="In urban areas where the leading Democrat performed well, the retired teacher from Petersburg also saw strong results."><link rel="preload" href="/assets/fonts/archivo-latin.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="/assets/fonts/fraunces-latin.woff2" as="font" type="font/woff2" crossorigin><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="preconnect" href="https://cdn.broadstreetads.com" crossorigin><link rel="preconnect" href="https://flux.broadstreet.ai" crossorigin><link rel="preconnect" href="https://api.open-meteo.com"><link rel="preconnect" href="https://services.swpc.noaa.gov"><link rel="dns-prefetch" href="https://api.broadstreetads.com"><link rel="dns-prefetch" href="https://api.open-meteo.com"><link rel="dns-prefetch" href="https://services.swpc.noaa.gov"><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Archivo:ital,wdth,wght@0,62..125,100..900;1,62..125,100..900&family=Archivo+Narrow:ital,wght@0,400..700;1,400..700&family=Fraunces:ital,opsz,wght@0,9..144,100..900;1,9..144,100..900&family=Anton&family=Syne:wght@700;800&display=optional"><link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"><script async src="https://www.googletagmanager.com/gtag/js?id=G-MJ4DRFTFYP"></script><script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());

      gtag('config', 'G-MJ4DRFTFYP');

      document.addEventListener('astro:page-load', function() {
        gtag('config', 'G-MJ4DRFTFYP', {
          page_path: window.location.pathname + window.location.search
        });
      });
    </script><script>
(function initAnchoragePressAnalytics() {
  if (typeof window === 'undefined') return;

  // 1. Global Safe Event Dispatcher
  window.trackAPEvent = function(eventName, eventParams) {
    try {
      if (!eventName) return;
      var params = eventParams || {};

      // Standard context metadata
      if (!params.page_path) params.page_path = window.location.pathname;
      if (!params.page_title) params.page_title = document.title;
      
      // Member session context
      var token = sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token');
      params.member_status = token ? (localStorage.getItem('ghost-member-tier') || 'Member') : 'Guest';

      if (typeof window.gtag === 'function') {
        window.gtag('event', eventName, params);
      } else if (window.dataLayer && Array.isArray(window.dataLayer)) {
        window.dataLayer.push(Object.assign({ event: eventName }, params));
      }

      // Development logging
      if (window.location.hostname.includes('localhost') || window.location.hostname.includes('pages.dev')) {
        console.log('[AP Analytics]', eventName, params);
      }
    } catch (e) {
      // Fail silently in production
    }
  };

  // State guard for single initialization
  if (window.__ap_analytics_initialized) return;
  window.__ap_analytics_initialized = true;

  // Track page start time for reading dwell calculation
  var pageStartTime = Date.now();
  var scrollMilestones = { scroll50: false, scroll90: false };

  // Reset counters on client page transitions
  function resetPageMetrics() {
    pageStartTime = Date.now();
    scrollMilestones = { scroll50: false, scroll90: false };
    checkPageLevelEvents();
  }

  // 2. Page-Level Initial Events (URL, Gating, Guides, Copy)
  function checkPageLevelEvents() {
    var path = window.location.pathname.toLowerCase();
    var search = window.location.search.toLowerCase();

    // Event 1: membership_checkout_completed (via URL redirect)
    if (search.indexOf('action=checkout') !== -1 && (search.indexOf('success=true') !== -1 || search.indexOf('success=1') !== -1)) {
      window.trackAPEvent('membership_checkout_completed', { trigger: 'url_redirect' });
    }

    // Event 6: member_signin_success (via magic link callback or token presence)
    if (search.indexOf('action=signin') !== -1 && search.indexOf('success=true') !== -1) {
      window.trackAPEvent('member_signin_success', { method: 'magic_link' });
    }

    // Event 17: find_a_copy_viewed
    if (path.indexOf('/print/find-a-copy') !== -1 || path.indexOf('/find-the-press') !== -1) {
      window.trackAPEvent('find_a_copy_viewed', { path: path });
    }

    // Event 25: recurring_guide_viewed
    if (path.indexOf('/events/weekly') !== -1 || path.indexOf('/events/print-calendar') !== -1) {
      window.trackAPEvent('recurring_guide_viewed', { guide: path });
    }

    // Event 15: article_gating_hit
    setTimeout(function() {
      var isGuest = !sessionStorage.getItem('ghost-identity-token') && !localStorage.getItem('ghost-identity-token');
      if (isGuest) {
        var gateEl = document.querySelector('.gh-post-upgrade-cta, [data-member-gate], #sub-cta-primary-btn');
        if (gateEl) {
          window.trackAPEvent('article_gating_hit', { path: path });
        }
      }
    }, 1500);
  }

  // 3. Scroll Depth & Deep Read Tracker (Events 11 & 12)
  function handleScrollMetrics() {
    var article = document.querySelector('article') || document.querySelector('.gh-content') || document.querySelector('main');
    if (!article) return;

    var rect = article.getBoundingClientRect();
    var totalHeight = rect.height;
    if (totalHeight < 300) return; // Ignore very short fragments

    var scrolledPastTop = Math.max(0, -rect.top + (window.innerHeight * 0.5));
    var progress = scrolledPastTop / totalHeight;

    // Event 11: article_scroll_50
    if (progress >= 0.5 && !scrollMilestones.scroll50) {
      scrollMilestones.scroll50 = true;
      window.trackAPEvent('article_scroll_50', {
        scroll_percent: 50,
        dwell_seconds: Math.round((Date.now() - pageStartTime) / 1000)
      });
    }

    // Event 12: article_read_complete (90% depth + >= 40 seconds dwell time)
    if (progress >= 0.9 && !scrollMilestones.scroll90) {
      var dwellSec = Math.round((Date.now() - pageStartTime) / 1000);
      if (dwellSec >= 40) {
        scrollMilestones.scroll90 = true;
        window.trackAPEvent('article_read_complete', {
          scroll_percent: 90,
          dwell_seconds: dwellSec
        });
      }
    }
  }

  // Debounced scroll listener
  var scrollDebounceTimer = null;
  window.addEventListener('scroll', function() {
    if (scrollDebounceTimer) return;
    scrollDebounceTimer = setTimeout(function() {
      scrollDebounceTimer = null;
      handleScrollMetrics();
    }, 200);
  }, { passive: true });

  // 4. Global Fetch Interceptor for Form Submissions & APIs
  var origFetch = window.fetch;
  window.fetch = function(input, init) {
    var urlStr = (typeof input === 'string') ? input : (input && input.url) || '';
    var method = (init && init.method) ? init.method.toUpperCase() : 'GET';

    return origFetch.apply(this, arguments).then(function(res) {
      try {
        if (res && (res.ok || res.status === 200 || res.status === 201 || res.status === 204)) {
          // Event 7: print_address_saved
          if (urlStr.indexOf('/api/member-address') !== -1 && method === 'POST') {
            window.trackAPEvent('print_address_saved', { method: 'api_save' });
          }

          // Event 2: newsletter_signup_success
          if (urlStr.indexOf('/api/subscribe') !== -1 && method === 'POST') {
            window.trackAPEvent('newsletter_signup_success', { method: 'subscribe_api' });
          }

          // Event 6: member_signin_success
          if (urlStr.indexOf('/api/auth-signin') !== -1 && method === 'POST') {
            window.trackAPEvent('member_signin_success', { method: 'auth_signin_api' });
          }

          // Event 26: news_tip_submitted
          if (urlStr.indexOf('/api/submit-tip') !== -1 && method === 'POST') {
            window.trackAPEvent('news_tip_submitted', { channel: 'tip_form' });
          }

          // Event 28: dish_nominated
          if (urlStr.indexOf('/api/submit-dish') !== -1 && method === 'POST') {
            window.trackAPEvent('dish_nominated', { channel: 'dish_form' });
          }

          // Event 29: volunteer_carrier_submitted
          if (urlStr.indexOf('/api/submit-volunteer') !== -1 && method === 'POST') {
            window.trackAPEvent('volunteer_carrier_submitted', { channel: 'volunteer_form' });
          }

          // Event 30: letter_to_editor_submitted
          if (urlStr.indexOf('/api/submit-oped') !== -1 && method === 'POST') {
            window.trackAPEvent('letter_to_editor_submitted', { channel: 'letter_form' });
          }

          // Event 36: ad_inquiry_submitted
          if (urlStr.indexOf('/api/submit-advertise') !== -1 && method === 'POST') {
            window.trackAPEvent('ad_inquiry_submitted', { channel: 'advertise_form' });
          }

          // General submit-form router check
          if (urlStr.indexOf('/api/submit-form') !== -1 && method === 'POST') {
            var body = (init && init.body) || '';
            var bodyStr = typeof body === 'string' ? body : '';
            if (bodyStr.indexOf('rack_request') !== -1) {
              window.trackAPEvent('print_rack_delivery_request', { channel: 'rack_form' });
            }
          }
        }
      } catch (_) {}
      return res;
    });
  };

  // 5. Ghost Portal Inter-Frame Message Defense & Tracking
  window.addEventListener('message', function(evt) {
    if (evt.source === window) return;
    var origin = evt.origin || '';
    if (origin.indexOf('anchoragepress.com') === -1 && origin.indexOf('ghost.io') === -1) return;

    var data = evt.data || {};
    var type = typeof data === 'string' ? data : (data.type || data.event || '');

    // Event 1: membership_checkout_completed
    if (type.indexOf('checkout.success') !== -1 || type.indexOf('subscription-success') !== -1 || type.indexOf('stripe') !== -1) {
      window.trackAPEvent('membership_checkout_completed', { trigger: 'portal_postmessage' });
    }

    // Event 2: newsletter_signup_success
    if (type.indexOf('signup.success') !== -1) {
      window.trackAPEvent('newsletter_signup_success', { trigger: 'portal_postmessage' });
    }

    // Event 6: member_signin_success
    if (type.indexOf('signin.success') !== -1) {
      window.trackAPEvent('member_signin_success', { trigger: 'portal_postmessage' });
    }
  });

  // Custom Event Hooks
  window.addEventListener('ap:member-sync', function() {
    var token = sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token');
    if (token) {
      window.trackAPEvent('member_signin_success', { method: 'session_sync' });
    }
  });

  // 6. Global DOM Delegation: Click Listener
  document.addEventListener('click', function(e) {
    var target = e.target;
    if (!target) return;

    var link = target.closest('a');
    var btn = target.closest('button');
    var interactive = link || btn || target;

    var href = (link && link.getAttribute('href')) || '';
    var text = (interactive.textContent || '').trim();
    var id = interactive.id || '';
    var cls = interactive.className || '';

    // Event 3: membership_portal_opened
    if (
      href.indexOf('#/portal/signup') !== -1 ||
      interactive.getAttribute('data-portal') === 'signup' ||
      id === 'comments-guest-signup-btn' ||
      text.indexOf('BECOME A MEMBER') !== -1
    ) {
      window.trackAPEvent('membership_portal_opened', { trigger_text: text.slice(0, 40) });
      return;
    }

    // Event 4: membership_tier_selected
    if (
      interactive.hasAttribute('data-tier') ||
      id.indexOf('tier-') !== -1 ||
      (href.indexOf('/support') !== -1 && (text.indexOf('Monthly') !== -1 || text.indexOf('Annual') !== -1 || text.indexOf('Founding') !== -1))
    ) {
      window.trackAPEvent('membership_tier_selected', { tier_name: text.slice(0, 30) });
      return;
    }

    // Event 5: floating_subscribe_clicked
    if (id === 'floating-subscribe-btn' || id === 'floating-subscribe-label' || interactive.closest('#floating-subscribe-container')) {
      window.trackAPEvent('floating_subscribe_clicked', { source: 'floating_widget' });
      return;
    }

    // Event 8: account_popover_opened
    if (
      id === 'header-account-btn' ||
      id === 'mobile-header-account-btn' ||
      interactive.hasAttribute('data-account-trigger') ||
      id === 'user-menu-btn'
    ) {
      window.trackAPEvent('account_popover_opened', { device: id.indexOf('mobile') !== -1 ? 'mobile' : 'desktop' });
      return;
    }

    // Event 9: support_pin_copied
    if (id === 'popover-copy-pin-btn' || interactive.hasAttribute('data-copy-pin') || text === 'COPY' && id.indexOf('pin') !== -1) {
      window.trackAPEvent('support_pin_copied', { location: 'account_popover' });
      return;
    }

    // Event 10: billing_portal_navigated
    if (
      href.indexOf('#/portal/account') !== -1 ||
      interactive.getAttribute('data-portal') === 'account' ||
      text.indexOf('BILLING & PLAN') !== -1 ||
      text.indexOf('MANAGE ACCOUNT') !== -1
    ) {
      window.trackAPEvent('billing_portal_navigated', { target: href || 'portal_account' });
      return;
    }

    // Event 13: author_profile_clicked
    if (link && (href.startsWith('/author/') || link.getAttribute('rel') === 'author')) {
      window.trackAPEvent('author_profile_clicked', { author_path: href, author_name: text });
      return;
    }

    // Event 14: tag_explore_clicked
    if (link && (href.startsWith('/tag/') || href.startsWith('/category/') || cls.indexOf('topic-chip-btn') !== -1)) {
      window.trackAPEvent('tag_explore_clicked', { tag_target: href || text });
      return;
    }

    // Event 37: media_kit_downloaded (Checked before general PDF)
    if (link && (href.indexOf('media-kit.pdf') !== -1 || href.indexOf('rate-card') !== -1)) {
      window.trackAPEvent('media_kit_downloaded', { file_url: href });
      return;
    }

    // Event 16: print_pdf_downloaded
    if (link && (href.endsWith('.pdf') || link.hasAttribute('download') && href.indexOf('.pdf') !== -1)) {
      window.trackAPEvent('print_pdf_downloaded', { file_url: href });
      return;
    }

    // Event 18: archive_issue_inspected
    if (link && (href.startsWith('/archive/') || cls.indexOf('archive-card') !== -1 || interactive.closest('.archive-card'))) {
      window.trackAPEvent('archive_issue_inspected', { archive_path: href });
      return;
    }

    // Event 19: cover_story_clicked
    if (link && (interactive.closest('.cover-story') || interactive.hasAttribute('data-cover-story') || (window.location.pathname.startsWith('/print') && href.startsWith('/archive/')))) {
      window.trackAPEvent('cover_story_clicked', { story_link: href });
      return;
    }

    // Event 21: event_ticket_outbound_click
    if (
      link &&
      (href.indexOf('ticket') !== -1 ||
       link.hasAttribute('data-event-ticket') ||
       href.indexOf('eventbrite.com') !== -1 ||
       href.indexOf('etix.com') !== -1 ||
       href.indexOf('givebutter.com') !== -1 ||
       href.indexOf('actalaska.org') !== -1 ||
       href.indexOf('eventcreate.com') !== -1 ||
       text.indexOf('TICKETS') !== -1 ||
       text.indexOf('Tickets') !== -1)
    ) {
      window.trackAPEvent('event_ticket_outbound_click', { ticket_url: href, label: text.slice(0, 40) });
      return;
    }

    // Event 22: event_add_to_calendar
    if (
      link &&
      (href.indexOf('calendar.google.com') !== -1 ||
       href.endsWith('.ics') ||
       link.hasAttribute('data-add-calendar') ||
       text.indexOf('Add to Calendar') !== -1)
    ) {
      window.trackAPEvent('event_add_to_calendar', { calendar_url: href });
      return;
    }

    // Event 23: event_filter_applied
    if (
      cls.indexOf('event-filter-btn') !== -1 ||
      interactive.hasAttribute('data-event-filter') ||
      href === '/events/today' ||
      href === '/events/weekend' ||
      href === '/events/free-and-cheap'
    ) {
      window.trackAPEvent('event_filter_applied', { filter: text || href });
      return;
    }

    // Event 24: event_venue_clicked
    if (link && (href.indexOf('google.com/maps') !== -1 || interactive.hasAttribute('data-venue') || cls.indexOf('event-venue') !== -1)) {
      window.trackAPEvent('event_venue_clicked', { venue_link: href, venue_name: text.slice(0, 50) });
      return;
    }

    // Event 31: podcast_play_started & Event 35: audio_embed_interacted
    if (id === 'rail-listen-btn' || id.indexOf('audio-play') !== -1 || cls.indexOf('audio-play-btn') !== -1) {
      window.trackAPEvent('podcast_play_started', { source: 'rail_listen_btn' });
      window.trackAPEvent('audio_embed_interacted', { action: 'play' });
      return;
    }

    // Event 33: podcast_platform_redirect
    if (
      link &&
      (href.indexOf('open.spotify.com') !== -1 ||
       href.indexOf('podcasts.apple.com') !== -1 ||
       href.indexOf('transistor.fm') !== -1 ||
       href.indexOf('feeds.transistor.fm') !== -1)
    ) {
      window.trackAPEvent('podcast_platform_redirect', { platform: href.indexOf('spotify') !== -1 ? 'Spotify' : 'Apple Podcasts', url: href });
      return;
    }

    // Event 34: weather_tides_drawer_opened
    if (id === 'weather-dropdown-btn' || (interactive.closest('#ak-weather-widget') && (interactive.tagName === 'BUTTON' || interactive.getAttribute('role') === 'button'))) {
      window.trackAPEvent('weather_tides_drawer_opened', { trigger: 'header_weather_badge' });
      return;
    }

    // Event 38: sponsor_ad_clicked
    if (
      interactive.closest('broadstreet-zone') ||
      interactive.closest('.ad-slot-wrapper') ||
      link && (href.indexOf('broadstreetads.com') !== -1 || link.hasAttribute('data-sponsor'))
    ) {
      window.trackAPEvent('sponsor_ad_clicked', { destination: href || 'broadstreet_slot' });
      return;
    }

    // Event 39: classified_submission_started
    if (link && (href.indexOf('/classifieds') !== -1 || href.indexOf('place-an-ad') !== -1 || interactive.hasAttribute('data-classified'))) {
      window.trackAPEvent('classified_submission_started', { target: href });
      return;
    }

    // Event 40: event_submission_started
    if (link && (href.indexOf('/events/submit') !== -1 || href.indexOf('/submit-event') !== -1 || interactive.hasAttribute('data-submit-event'))) {
      window.trackAPEvent('event_submission_started', { target: href });
      return;
    }

    // Event 41: site_search_performed (Search Button Click)
    if (id === 'search-btn' || interactive.closest('#search-btn')) {
      var searchInput = document.getElementById('search-input');
      var q = searchInput ? searchInput.value.trim() : '';
      if (q) {
        window.trackAPEvent('site_search_performed', { search_term: q });
      }
      return;
    }

    // Event 43: mobile_menu_opened
    if (id === 'mobile-menu-toggle' || id === 'mobile-menu-btn' || interactive.hasAttribute('data-mobile-menu-toggle')) {
      window.trackAPEvent('mobile_menu_opened', { location: 'header_hamburger' });
      return;
    }

    // Event 44: category_nav_clicked
    if (link && (interactive.closest('#sticky-nav') || interactive.closest('#sticky-nav-options') || cls.indexOf('category-nav-link') !== -1)) {
      window.trackAPEvent('category_nav_clicked', { category: text, target_href: href });
      return;
    }

    // Event 45: ticker_headline_clicked
    if (link && (cls.indexOf('promo-slide-item') !== -1 || interactive.closest('.promo-slide-item') || interactive.closest('#rotating-promo-banner'))) {
      window.trackAPEvent('ticker_headline_clicked', { headline: text.slice(0, 80), url: href });
      return;
    }

    // Event 46: article_link_copied
    if (
      id === 'rail-copy-btn' ||
      id === 'copy-event-link-btn' ||
      cls.indexOf('copy-link-btn') !== -1 ||
      interactive.getAttribute('data-action') === 'copy-link' ||
      text === 'COPY LINK'
    ) {
      window.trackAPEvent('article_link_copied', { path: window.location.pathname });
      return;
    }

    // Event 47: article_social_share_click
    if (
      link &&
      (href.indexOf('twitter.com/intent') !== -1 ||
       href.indexOf('x.com/intent') !== -1 ||
       href.indexOf('facebook.com/sharer') !== -1 ||
       href.indexOf('reddit.com/submit') !== -1 ||
       href.indexOf('threads.net') !== -1)
    ) {
      var network = href.indexOf('twitter') !== -1 || href.indexOf('x.com') !== -1 ? 'Twitter/X' :
                    href.indexOf('facebook') !== -1 ? 'Facebook' :
                    href.indexOf('reddit') !== -1 ? 'Reddit' : 'Threads';
      window.trackAPEvent('article_social_share_click', { network: network, shared_url: href });
      return;
    }

    // Event 49: comment_upvoted
    if (cls.indexOf('comment-upvote') !== -1 || interactive.hasAttribute('data-vote-comment')) {
      window.trackAPEvent('comment_upvoted', { article_path: window.location.pathname });
      return;
    }

    // Event 50: back_to_top_clicked
    if (id === 'back-to-top-btn' || href === '#top' || cls.indexOf('back-to-top') !== -1) {
      window.trackAPEvent('back_to_top_clicked', { path: window.location.pathname });
      return;
    }
  });

  // 7. Global DOM Delegation: Form Submit Listener
  document.addEventListener('submit', function(e) {
    var form = e.target;
    if (!form) return;

    var id = form.id || '';
    var action = form.getAttribute('action') || '';
    var formTypeInput = form.querySelector('input[name="formType"]');
    var formType = formTypeInput ? formTypeInput.value : '';

    // Event 20: print_rack_delivery_request
    if (id === 'rack-request-form' || formType === 'rack_request') {
      window.trackAPEvent('print_rack_delivery_request', { form_id: id });
    }

    // Event 26: news_tip_submitted
    if (id === 'tip-form' || action.indexOf('submit-tip') !== -1 || formType === 'tip') {
      window.trackAPEvent('news_tip_submitted', { form_id: id });
    }

    // Event 28: dish_nominated
    if (id === 'dish-form' || action.indexOf('submit-dish') !== -1 || formType === 'dish') {
      window.trackAPEvent('dish_nominated', { form_id: id });
    }

    // Event 29: volunteer_carrier_submitted
    if (id === 'volunteer-form' || action.indexOf('submit-volunteer') !== -1 || formType === 'volunteer') {
      window.trackAPEvent('volunteer_carrier_submitted', { form_id: id });
    }

    // Event 30: letter_to_editor_submitted
    if (id === 'letter-form' || action.indexOf('submit-oped') !== -1 || formType === 'oped') {
      window.trackAPEvent('letter_to_editor_submitted', { form_id: id });
    }

    // Event 36: ad_inquiry_submitted
    if (id === 'ad-inquiry-form' || action.indexOf('submit-advertise') !== -1 || formType === 'advertise') {
      window.trackAPEvent('ad_inquiry_submitted', { form_id: id });
    }

    // Event 41: site_search_performed
    if (id === 'search-form' || action.indexOf('/search') !== -1) {
      var input = form.querySelector('input[type="search"], input[name="q"], #search-input');
      var val = input ? input.value.trim() : '';
      if (val) {
        window.trackAPEvent('site_search_performed', { search_term: val });
      }
    }

    // Event 48: comment_posted
    if (id === 'comments-submission-form' || id.indexOf('comment') !== -1) {
      window.trackAPEvent('comment_posted', { article_path: window.location.pathname });
    }
  });

  // 8. Global File Input Change Listener: Event 27: tip_file_uploaded
  document.addEventListener('change', function(e) {
    var el = e.target;
    if (el && el.tagName === 'INPUT' && el.type === 'file') {
      if (el.files && el.files.length > 0) {
        window.trackAPEvent('tip_file_uploaded', {
          file_count: el.files.length,
          file_name: el.files[0].name.slice(0, 40)
        });
      }
    }
  });

  // 9. Native HTML5 Audio Listeners (Events 31, 32, 35)
  document.addEventListener('play', function(e) {
    if (e.target && e.target.tagName === 'AUDIO') {
      window.trackAPEvent('podcast_play_started', { src: e.target.currentSrc || 'native_audio' });
      window.trackAPEvent('audio_embed_interacted', { action: 'play' });
    }
  }, true);

  document.addEventListener('ended', function(e) {
    if (e.target && e.target.tagName === 'AUDIO') {
      window.trackAPEvent('podcast_episode_completed', { src: e.target.currentSrc || 'native_audio' });
    }
  }, true);

  document.addEventListener('timeupdate', function(e) {
    var audio = e.target;
    if (audio && audio.tagName === 'AUDIO' && audio.duration) {
      var completion = audio.currentTime / audio.duration;
      if (completion >= 0.8 && !audio.__ap_completed_tracked) {
        audio.__ap_completed_tracked = true;
        window.trackAPEvent('podcast_episode_completed', { src: audio.currentSrc || 'native_audio', completion: Math.round(completion * 100) });
      }
    }
  }, true);

  // 10. Mutation Observer for Event 42: search_zero_results
  var searchZeroResultsTracked = false;
  var observer = new MutationObserver(function() {
    if (searchZeroResultsTracked) return;

    var noSearch = document.getElementById('search-no-results');
    var noArchive = document.getElementById('no-archive-results');

    var isZeroResults = (noSearch && !noSearch.classList.contains('hidden')) ||
                        (noArchive && !noArchive.classList.contains('hidden'));

    if (isZeroResults) {
      searchZeroResultsTracked = true;
      var input = document.getElementById('search-input') || document.getElementById('archive-search-input');
      var q = input ? input.value : '';
      window.trackAPEvent('search_zero_results', { search_term: q });
    }
  });

  observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['class'] });

  // Initialize on page load and client page transitions
  checkPageLevelEvents();
  document.addEventListener('astro:page-load', resetPageMetrics);
})();
</script><script>
      (function apSigninErrorNotice() {
        // Persistent, plain-English error banner inside the Ghost Portal sign-in/sign-up modal.
        // PASSIVE ONLY: observes Ghost's /members/api/send-magic-link/ response; never retries,
        // never sends extra requests, never alters what Portal receives (avoids extending rate limits).
        if (window.__apSigninNoticeInstalled) return;
        window.__apSigninNoticeInstalled = true;

        var BANNER_ID = 'ap-signin-error-banner';
        var SHOW_FOR_MS = 15 * 60 * 1000;
        var last = null;
        var observedDoc = null;
        var observer = null;
        var debounce = null;

        var origFetch = window.fetch;
        if (typeof origFetch === 'function') {
          window.fetch = function (input) {
            var url = typeof input === 'string' ? input : (input && input.url) || '';
            var p = origFetch.apply(this, arguments);
            if (url.indexOf('/members/api/send-magic-link') === -1) return p;
            p.then(function (res) {
              if (res.ok) { last = { ok: true, at: Date.now() }; schedule(); return; }
              res.clone().json().catch(function () { return null; }).then(function (body) {
                var msg = (body && body.errors && body.errors[0] && body.errors[0].message) || '';
                last = { ok: false, status: res.status, message: String(msg).slice(0, 240), at: Date.now() };
                schedule();
              });
            }, function () {
              last = { ok: false, status: 0, message: '', at: Date.now() };
              schedule();
            });
            return p;
          };
        }

        function friendly(e) {
          if (e.status === 429) {
            return {
              title: 'Too many sign-in attempts',
              body: 'For security, new sign-in codes are paused for your network for a little while. Please wait about an hour, then try once. Each retry restarts the wait.'
            };
          }
          if (e.status === 0) {
            return { title: 'Connection problem', body: 'We couldn\u2019t reach the sign-in server. Check your internet connection and try again.' };
          }
          if (e.status === 404 || /no member|not found|sign up first/i.test(e.message)) {
            return { title: 'No account found', body: 'There\u2019s no Anchorage Press account for that email yet. Choose \u201cSign up\u201d below to join.' };
          }
          return {
            title: 'We couldn\u2019t send your sign-in code',
            body: (e.message ? e.message + ' ' : '') + 'Please wait a moment and try again, or email info@anchoragepress.com for help.'
          };
        }

        function activeError() {
          return last && !last.ok && (Date.now() - last.at) < SHOW_FOR_MS ? last : null;
        }

        function getPortalDoc() {
          var iframe = document.querySelector('iframe[title="portal-popup"]');
          if (!iframe) return null;
          try { return iframe.contentDocument || (iframe.contentWindow && iframe.contentWindow.document); } catch (_) { return null; }
        }

        function buildBanner(doc, e) {
          var f = friendly(e);
          var box = doc.createElement('div');
          box.id = BANNER_ID;
          box.setAttribute('role', 'alert');
          box.setAttribute('aria-live', 'assertive');
          box.style.cssText = 'display:block;margin:4px auto 14px;padding:12px 14px;border:3px solid #FF3C38;background:#FCFBF7;color:#0A0A0A;font:600 14px/1.45 -apple-system,BlinkMacSystemFont,Inter,sans-serif;text-align:center;box-sizing:border-box;width:100%;max-width:100%;box-shadow:4px 4px 0 #0A0A0A;';
          var t = doc.createElement('strong');
          t.style.cssText = 'display:block;color:#FF3C38;font-size:15px;font-weight:800;margin-bottom:4px;text-transform:uppercase;letter-spacing:.02em;';
          t.textContent = '\u26A0 ' + f.title;
          var b = doc.createElement('span');
          b.style.cssText = 'display:block;font-weight:500;overflow-wrap:anywhere;';
          b.textContent = f.body;
          box.appendChild(t);
          box.appendChild(b);
          return box;
        }

        function ensure() {
          var doc = getPortalDoc();
          var e = activeError();
          if (!doc || !doc.body) { stopObserving(); return; }
          var existing = doc.getElementById(BANNER_ID);
          if (!e) {
            if (existing) existing.remove();
            stopObserving();
            return;
          }
          var key = e.status + '|' + e.at;
          if (existing && existing.getAttribute('data-key') === key) return;
          if (existing) existing.remove();
          var input = doc.querySelector('input[type="email"], #input-email, input[name="email"]');
          var btn = doc.querySelector('.gh-portal-btn-main, button[type="submit"]');
          if (!input && !btn) return;
          var banner = buildBanner(doc, e);
          banner.setAttribute('data-key', key);
          var anchor = btn || input;
          // Place directly ABOVE the sign-in button (before its footer wrapper if present)
          var host = anchor.closest('footer') || anchor;
          if (host && host.parentNode) host.parentNode.insertBefore(banner, host);
          else doc.body.appendChild(banner);
          // Bring it to the middle of the modal on every viewport (mobile included)
          try {
            var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
            banner.scrollIntoView({ block: 'center', behavior: reduce ? 'auto' : 'smooth' });
          } catch (_) {}
          startObserving(doc);
        }

        function schedule() {
          clearTimeout(debounce);
          debounce = setTimeout(ensure, 120);
        }

        function startObserving(doc) {
          if (observedDoc === doc && observer) return;
          stopObserving();
          observedDoc = doc;
          observer = new MutationObserver(function () { schedule(); });
          observer.observe(doc.body, { childList: true, subtree: true });
        }

        function stopObserving() {
          if (observer) { observer.disconnect(); observer = null; }
          observedDoc = null;
        }
      })();
    </script><script defer src="https://cdn.jsdelivr.net/ghost/portal@2.71.0/umd/portal.min.js" integrity="sha384-/i1LA2hsCoC3ZBisEWqU21TyuU/QANcPGFIUZpgvANAgVb8Z+F6/eg0Y48nr/QoA" data-ghost="https://cms.anchoragepress.com/" data-key="e754eab9493bab0ab3fb366b7a" data-api="https://anchoragepress.ghost.io/ghost/api/content/" crossorigin="anonymous"></script><script>
      (function setupApexGhostPortalAddressInjection() {
        // Immediate Anti-Loop Defense & Logout Defense: scrub #/portal/signin and #/portal/account/logout on arrival
        // 0. Security Version & Stale Session Invalidation Purge (Strict Auth Epoch)
        try {
          var CURRENT_AP_VERSION = 'v4_20261005_strict_auth';
          if (localStorage.getItem('ap_session_version') !== CURRENT_AP_VERSION) {
            localStorage.removeItem('ap_member_session');
            localStorage.removeItem('ap_reader_session');
            localStorage.removeItem('ghost-member-email');
            localStorage.removeItem('ghost-member-name');
            localStorage.removeItem('ghost-member-tier');
            localStorage.removeItem('ghost-member-address');
            localStorage.removeItem('ghost-identity-token');
            sessionStorage.removeItem('ghost-identity-token');
            localStorage.removeItem('pending-signin-email');
            sessionStorage.removeItem('pending-signin-email');
            localStorage.removeItem('isLoggedIn');
            localStorage.removeItem('memberEmail');
            localStorage.removeItem('memberSession');
            document.cookie = "ap_portal_intent=; domain=.anchoragepress.com; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT";
            localStorage.setItem('ap_session_version', CURRENT_AP_VERSION);
          }
        } catch (_) {}

        // Cryptographically Verified Signin Handoff
        try {
          if (window.location.hash && (window.location.hash.indexOf('logout') !== -1 || window.location.hash.indexOf('#/portal/account/logout') !== -1)) {
            if (window.history && window.history.replaceState) {
              window.history.replaceState({}, document.title, window.location.pathname + window.location.search);
            } else {
              window.location.hash = '';
            }
          }
          var initParams = new URLSearchParams(window.location.search);
          var isSigninHandoff = initParams.get('action') === 'signin' || initParams.get('success') === 'true' || initParams.get('signed_in') === 'true';
          if (isSigninHandoff) {
            if (window.location.hash && window.location.hash.indexOf('#/portal/signin') !== -1) {
              if (window.history && window.history.replaceState) {
                window.history.replaceState({}, document.title, window.location.pathname + window.location.search);
              } else {
                window.location.hash = '';
              }
            }
            var qEmail = initParams.get('email');
            var qName = initParams.get('name') || '';
            var qTier = initParams.get('tier') || 'Member';
            var qToken = initParams.get('token') || '';
            var qUuid = initParams.get('uuid') || '';
            // Fail-Closed: Strictly require cryptographic token or member UUID proof before creating any session
            if (qEmail && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(qEmail.trim()) && ((qToken && qToken.length > 20) || (qUuid && qUuid.length > 20))) {
              var targetEmail = qEmail.trim().toLowerCase();
              fetch('/api/auth-signin', {
                method: 'POST',
                headers: {
                  'Content-Type': 'application/json',
                  'X-AP-Requested-With': 'AnchoragePressClient'
                },
                body: JSON.stringify({ email: targetEmail, token: qToken, uuid: qUuid, action: 'session' })
              }).then(function(res) { return res.json(); }).then(function(data) {
                if (data && data.success && data.token) {
                  try {
                    sessionStorage.setItem('ghost-identity-token', data.token);
                    localStorage.setItem('ghost-identity-token', data.token);
                  } catch (_) {}
                  var memberSess = {
                    email: targetEmail,
                    name: qName || data.name || '',
                    tier: data.tier || qTier || 'Member',
                    address: localStorage.getItem('ghost-member-address') || '',
                    expiresAt: Date.now() + window.AP_SESSION.TTL
                  };
                  window.AP_SESSION.set(memberSess, true);
                  window.dispatchEvent(new CustomEvent('ap:member-sync'));
                }
              }).catch(function() {});
            }
            if (window.history && window.history.replaceState) {
              window.history.replaceState({}, document.title, window.location.pathname);
            }
          }
        } catch (_) {}

        // Session Security Envelope & 24h Expiry Manager
        window.AP_SESSION = {
          KEY: 'ap_member_session',
          TTL: 24 * 60 * 60 * 1000,
          get: function() {
            try {
              var token = sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token');
              var raw = localStorage.getItem(this.KEY);
              if (raw) {
                var sess = JSON.parse(raw);
                if (sess && sess.expiresAt && Date.now() > sess.expiresAt) {
                  this.clear();
                  return null;
                }
                // Fail-Closed: An active session strictly requires a verified identity token
                if (sess && (!token || token.length < 20)) {
                  this.clear();
                  return null;
                }
                return sess;
              }
            } catch (e) {
              this.clear();
              return null;
            }
            return null;
          },
          set: function(sess, broadcast) {
            try {
              var token = sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token');
              // Fail-Closed: Refuse to store or broadcast session without cryptographic token proof
              if (!token || token.length < 20) {
                return;
              }
              if (!sess.expiresAt) sess.expiresAt = Date.now() + this.TTL;
              localStorage.setItem(this.KEY, JSON.stringify(sess));
              if (sess.email) localStorage.setItem('ghost-member-email', sess.email);
              if (sess.name) localStorage.setItem('ghost-member-name', sess.name);
              if (sess.tier) localStorage.setItem('ghost-member-tier', sess.tier);
              if (sess.address) localStorage.setItem('ghost-member-address', sess.address);
              if (broadcast !== false && window.apBroadcastSync) {
                window.apBroadcastSync('SYNC', sess);
              }
              window.dispatchEvent(new CustomEvent('ap:member-sync'));
            } catch (e) {}
          },
          clear: function(broadcast) {
            try {
              localStorage.removeItem(this.KEY);
              localStorage.removeItem('ap_reader_session');
              localStorage.removeItem('ghost-member-email');
              localStorage.removeItem('ghost-member-name');
              localStorage.removeItem('ghost-member-tier');
              localStorage.removeItem('ghost-member-address');
              localStorage.removeItem('ghost-identity-token');
              sessionStorage.removeItem('ghost-identity-token');
              localStorage.removeItem('pending-signin-email');
              sessionStorage.removeItem('pending-signin-email');
              sessionStorage.removeItem('ap_welcome_shown');
              document.cookie = "ap_portal_intent=; domain=.anchoragepress.com; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT";

              if (window.location.hash && window.location.hash.indexOf('#/portal') !== -1) {
                if (window.history && window.history.replaceState) {
                  window.history.replaceState({}, document.title, window.location.pathname + window.location.search);
                } else {
                  window.location.hash = '';
                }
              }

              if (broadcast !== false && window.apBroadcastSync) {
                window.apBroadcastSync('LOGOUT');
              }
              window.dispatchEvent(new CustomEvent('ap:member-sync'));
            } catch (e) {}
          }
        };

        // Real-time Cross-Tab Session Sync via BroadcastChannel
        if (typeof BroadcastChannel !== 'undefined') {
          try {
            var apAuthChannel = new BroadcastChannel('ap_member_session');
            apAuthChannel.onmessage = function(ev) {
              if (ev && ev.data) {
                if (ev.data.action === 'LOGOUT') {
                  window.AP_SESSION.clear(false);
                } else if (ev.data.action === 'SYNC' && ev.data.session) {
                  window.AP_SESSION.set(ev.data.session, false);
                  // Dismiss portal modal and clear signin hash in any open tab
                  if (window.location.hash && window.location.hash.indexOf('#/portal') !== -1) {
                    try {
                      history.replaceState('', document.title, window.location.pathname + window.location.search);
                    } catch (err) {
                      window.location.hash = '';
                    }
                    setPortalOpenState(false);
                  }
                  var iframes = document.querySelectorAll('iframe[title="portal-popup"]');
                  iframes.forEach(function(iframe) {
                    try {
                      var doc = iframe.contentDocument || (iframe.contentWindow && iframe.contentWindow.document);
                      var closeBtn = doc && doc.querySelector('button[data-test-button="close-popup"], .gh-portal-closeicon-container');
                      if (closeBtn) closeBtn.click();
                    } catch (err) {}
                  });
                }
                window.dispatchEvent(new CustomEvent('ap:member-sync'));
              }
            };
            window.apBroadcastSync = function(action, session) {
              try {
                apAuthChannel.postMessage({ action: action, session: session, timestamp: Date.now() });
              } catch (e) {}
            };
          } catch (e) {}
        }
        window.AP_SESSION.get();

        // Global Ghost Portal PostMessage Listener
        window.addEventListener('message', function(event) {
          try {
            var allowedOrigins = [
              window.location.origin,
              'https://anchoragepress.com',
              'https://www.anchoragepress.com',
              'https://cms.anchoragepress.com',
              'https://anchoragepress.ghost.io'
            ];
            if (!allowedOrigins.includes(event.origin) || event.source === window) return;

            var data = event.data;
            if (!data || typeof data !== 'object') return;

            // Identity token capture: only accept authentic tokens > 20 chars
            var idToken = data.identity || data.token || (data.member && data.member.token);
            if (idToken && typeof idToken === 'string' && idToken.length > 20) {
              try {
                sessionStorage.setItem('ghost-identity-token', idToken);
                localStorage.setItem('ghost-identity-token', idToken);
              } catch (_) {}
            }

            // Handle Ghost logout or unauthenticated portal ready event
            if ((data.type === 'portal-ready' && !data.member) || data.type === 'logout' || data.action === 'logout') {
              if (window.AP_SESSION) window.AP_SESSION.clear(true);
              try {
                sessionStorage.removeItem('ghost-identity-token');
                localStorage.removeItem('ghost-identity-token');
                localStorage.removeItem('ghost-member-email');
                localStorage.removeItem('ghost-member-name');
                localStorage.removeItem('ghost-member-tier');
                localStorage.removeItem('ghost-member-address');
              } catch (_) {}
              window.dispatchEvent(new CustomEvent('ap:member-sync'));
              if (typeof window.AP_UPDATE_MEMBER_STATUS === 'function') {
                window.AP_UPDATE_MEMBER_STATUS();
              }
              return;
            }

            // PostMessage Authentication Guard:
            // An authenticated session strictly requires verified cryptographic token proof or verified member UUID.
            var existingToken = sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token');
            var verifiedToken = (idToken && typeof idToken === 'string' && idToken.length > 20) ? idToken : existingToken;

            var member = data.member;
            if (member && typeof member === 'object' && member.email) {
              var emailVal = member.email.trim();
              var uuidVal = member.uuid || member.id || '';
              var nameVal = member.name || member.firstname || '';
              var isPaid = member.status === 'paid' || member.status === 'comped' || member.paid;
              var tierVal = isPaid ? 'Supporting Member' : 'Member';

              if (verifiedToken && verifiedToken.length > 20) {
                var sess = {
                  email: emailVal,
                  name: nameVal,
                  tier: tierVal,
                  address: localStorage.getItem('ghost-member-address') || '',
                  expiresAt: Date.now() + window.AP_SESSION.TTL
                };
                window.AP_SESSION.set(sess, true);
                window.dispatchEvent(new CustomEvent('ap:member-sync'));
              } else if (uuidVal && uuidVal.length > 20) {
                // Cryptographically mint edge session via member UUID verification against Ghost Admin API
                fetch('/api/auth-signin', {
                  method: 'POST',
                  headers: {
                    'Content-Type': 'application/json',
                    'X-AP-Requested-With': 'AnchoragePressClient'
                  },
                  body: JSON.stringify({ email: emailVal, uuid: uuidVal, action: 'session' })
                }).then(function(res) { return res.json(); }).then(function(tokData) {
                  if (tokData && tokData.success && tokData.token) {
                    try {
                      sessionStorage.setItem('ghost-identity-token', tokData.token);
                      localStorage.setItem('ghost-identity-token', tokData.token);
                    } catch (_) {}
                    var sess = {
                      email: emailVal,
                      name: nameVal || tokData.name || '',
                      tier: tokData.tier || tierVal,
                      address: localStorage.getItem('ghost-member-address') || '',
                      expiresAt: Date.now() + window.AP_SESSION.TTL
                    };
                    window.AP_SESSION.set(sess, true);
                    window.dispatchEvent(new CustomEvent('ap:member-sync'));
                  }
                }).catch(function() {});
              }

              if (window.location.hash && window.location.hash.indexOf('#/portal/signin') !== -1) {
                try {
                  history.replaceState({}, document.title, window.location.pathname + window.location.search);
                } catch (err) {
                  window.location.hash = '';
                }
                setPortalOpenState(false);
              }
            }
          } catch (e) {}
        });

        // Sanitize and clean URL query parameters on signin return without establishing unverified sessions
        var isSigninReturn = false;
        try {
          var uParams = new URLSearchParams(window.location.search);
          var isParamSignin = uParams.get('action') === 'signin' || uParams.get('success') === 'true' || uParams.get('signed_in') === 'true';
          isSigninReturn = isParamSignin;

          // Clear any leftover pending email
          try {
            localStorage.removeItem('pending-signin-email');
            sessionStorage.removeItem('pending-signin-email');
          } catch (_) {}

          // Clean address bar: strip query parameters to prevent URL leakage
          if (isParamSignin) {
            if (window.history && window.history.replaceState) {
              window.history.replaceState({}, document.title, window.location.pathname);
            }
            if (window.location.hash && window.location.hash.indexOf('#/portal') !== -1) {
              try {
                history.replaceState({}, document.title, window.location.pathname);
              } catch (err) {
                window.location.hash = '';
              }
            }
            setPortalOpenState(false);
          }
        } catch (e) {}

        // Anti-Loop Guard: Eradicate lingering #/portal/signin hash on authenticated or returning sign-in visits
        try {
          var activeSess = window.AP_SESSION.get();
          if ((activeSess && activeSess.email) || isSigninReturn) {
            if (window.location.hash && window.location.hash.indexOf('#/portal/signin') !== -1) {
              try {
                history.replaceState({}, document.title, window.location.pathname);
              } catch (err) {
                window.location.hash = '';
              }
              setPortalOpenState(false);
            }
          }
        } catch (e) {}

        // Ghost Portal "Print Delivery Address" row injector retired 2026-10-05.
        // Address is managed only on cms.anchoragepress.com/account/ (ghost-theme/account.hbs).
        // Backup for revert: src/components/_coldstorage/portal-address-row-injector.js

        function formatPortalTopNav(iframeDoc) {
          if (!iframeDoc) return;
          var container = iframeDoc.querySelector('.gh-portal-popup-container') || iframeDoc.querySelector('div[class*="gh-portal-popup-container"]');
          if (!container) return;

          // Remove any injected top switch to leave close button completely unobstructed
          var topLinkContainer = container.querySelector('#ap-portal-top-switch');
          if (topLinkContainer) topLinkContainer.remove();

          var backDiv = iframeDoc.querySelector('.gh-portal-back-sitetitle');
          if (backDiv) {
            var oldInBack = backDiv.querySelector('#ap-portal-top-switch');
            if (oldInBack) oldInBack.remove();
          }
        }

        function updateContainerLayout(iframeDoc) {
          if (!iframeDoc) return;
          try {
            var container = iframeDoc.querySelector('.gh-portal-popup-container') || iframeDoc.querySelector('div[class*="gh-portal-popup-container"]');
            if (!container) return;
            var hasProductsGrid = !!iframeDoc.querySelector('.gh-portal-products-grid, .gh-portal-products, .gh-portal-product-card, [data-test-tier]');
            if (hasProductsGrid) {
              container.classList.add('ap-tiers-active');
            } else {
              container.classList.remove('ap-tiers-active');
            }

            var hasAccount = !!iframeDoc.querySelector('.gh-portal-account-main, .gh-portal-list, [data-test-portal="account"]');
            if (hasAccount) {
              container.classList.add('ap-account-active');
            } else {
              container.classList.remove('ap-account-active');
            }

            var closeBtn = iframeDoc.querySelector('button[data-test-button="close-popup"], .gh-portal-closeicon-container');
            if (closeBtn && !closeBtn.getAttribute('data-ap-close-styled')) {
              closeBtn.setAttribute('data-ap-close-styled', 'true');
              closeBtn.innerHTML = '<svg viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>';
              closeBtn.setAttribute('aria-label', 'Close membership modal');

              if (!closeBtn.__ap_close_bound) {
                closeBtn.__ap_close_bound = true;
                closeBtn.addEventListener('click', function() {
                  setTimeout(function() {
                    if (window.location.hash && window.location.hash.indexOf('#/portal') !== -1) {
                      try {
                        history.pushState('', document.title, window.location.pathname + window.location.search);
                      } catch (err) {
                        window.location.hash = '';
                      }
                    }
                    setPortalOpenState(false);
                  }, 50);
                });
              }
            }
          } catch (e) {}
        }

        function formatPortalTierTitles(iframeDoc) {
          if (!iframeDoc) return;
          updateContainerLayout(iframeDoc);
          var titles = iframeDoc.querySelectorAll('.gh-portal-product-name');
          if (!titles || !titles.length) return;

          titles.forEach(function(el) {
            if (el.getAttribute('data-ap-formatted') === 'true') return;
            var raw = el.getAttribute('data-original-text') || el.textContent.trim();
            if (!el.getAttribute('data-original-text')) {
              el.setAttribute('data-original-text', raw);
            }
            var lower = raw.toLowerCase();
            var main = '';
            var sub = '';
            var tierType = 'free';

            if (lower.indexOf('free') !== -1) {
              main = 'Free';
              sub = 'Subscriber';
              tierType = 'free';
            } else if (lower.indexOf('paid') !== -1 || lower.indexOf('supporting') !== -1) {
              main = 'Supporting';
              sub = 'Member';
              tierType = 'supporting';
            } else if (lower.indexOf('founding') !== -1) {
              main = 'Founding';
              sub = 'Member';
              tierType = 'founding';
            } else {
              var parts = raw.split(/\s+/);
              main = parts[0];
              sub = parts.slice(1).join(' ');
              tierType = 'custom';
            }

            var card = el.closest('.gh-portal-product-card');
            if (card) {
              card.setAttribute('data-ap-tier', tierType);
              var oldSticker = card.querySelector('.ap-tier-featured-tag');
              if (oldSticker) oldSticker.remove();

              if (tierType === 'supporting') {
                card.classList.add('ap-tier-supporting');
              } else {
                card.classList.remove('ap-tier-supporting');
              }

              var btn = card.querySelector('.gh-portal-btn-product button, .gh-portal-btn-product .gh-portal-btn');
              if (btn && btn.textContent.trim().toUpperCase() === 'CHOOSE') {
                btn.textContent = 'Choose';
              }
            }

            var tagHtml = tierType === 'supporting'
              ? '<span class="ap-tier-recommended-tag">Recommended</span>'
              : '<span class="ap-tier-recommended-spacer"></span>';

            var expectedHtml = '<div class="ap-tier-header">' +
              tagHtml +
              '<div class="ap-tier-title-wrap"><span class="ap-tier-name">' + main + '</span> <span class="ap-tier-sub">' + sub + '</span></div>' +
              '</div>';

            el.innerHTML = expectedHtml;
            el.setAttribute('data-ap-formatted', 'true');
          });
        }

        function formatPortalPromoBadges(iframeDoc) {
          if (!iframeDoc) return;

          // 1. Format toggle yearly discount badge
          var maxDiscounts = iframeDoc.querySelectorAll('.gh-portal-maximum-discount');
          maxDiscounts.forEach(function(el) {
            if (el.getAttribute('data-ap-badge-formatted') === 'true') return;
            var txt = (el.getAttribute('data-raw-txt') || el.textContent).trim();
            if (!el.getAttribute('data-raw-txt')) {
              el.setAttribute('data-raw-txt', txt);
            }
            var clean = txt.replace(/^\(|\)$/g, '').trim();
            if (clean && !clean.toUpperCase().startsWith('SAVE')) {
              clean = 'Save ' + clean;
            } else if (clean) {
              clean = clean.replace(/save/i, 'Save');
            }
            el.textContent = clean;
            el.setAttribute('data-ap-badge-formatted', 'true');
          });

          // 2. Format tier card discount labels
          var cardDiscounts = iframeDoc.querySelectorAll('.gh-portal-discount-label, span[class*="discount"]');
          cardDiscounts.forEach(function(el) {
            if (el.classList.contains('gh-portal-maximum-discount')) return;
            if (el.getAttribute('data-ap-badge-formatted') === 'true') return;
            var raw = (el.getAttribute('data-raw-txt') || el.textContent).trim();
            if (!el.getAttribute('data-raw-txt')) {
              el.setAttribute('data-raw-txt', raw);
            }
            var match = raw.match(/(\d+%\s*(?:off|discount)?)/i);
            var formatted = '';
            if (match) {
              var pct = match[1].replace(/discount|off/i, '').trim();
              formatted = 'Save ' + pct;
            } else if (raw) {
              formatted = raw.replace(/^\(|\)$/g, '').trim();
            }
            if (formatted) {
              el.textContent = formatted;
            }
            el.setAttribute('data-ap-badge-formatted', 'true');
          });
        }

        function formatPortalHeaderLogo(iframeDoc) {
          if (!iframeDoc) return;
          var logoUrl = '/assets/images/anchoragepress-logo.svg';
          var logos = iframeDoc.querySelectorAll('img.gh-portal-signup-logo, img.ap-portal-header-logo');
          logos.forEach(function(img) {
            img.setAttribute('alt', 'Anchorage Press');
            if (!img.getAttribute('src') || img.getAttribute('src').indexOf('anchoragepress-logo.svg') === -1) {
              img.setAttribute('src', logoUrl);
            }
            if (!img.__ap_error_bound) {
              img.__ap_error_bound = true;
              img.onerror = function() {
                if (this.src !== 'https://anchoragepress.com/assets/images/anchoragepress-logo.svg') {
                  this.src = 'https://anchoragepress.com/assets/images/anchoragepress-logo.svg';
                }
              };
            }
          });

          var headers = iframeDoc.querySelectorAll('.gh-portal-signup-header, .gh-portal-signin-header');
          headers.forEach(function(h) {
            if (h.getAttribute('data-ap-header-formatted') === 'true') return;
            var existingLogo = h.querySelector('img.gh-portal-signup-logo, img.ap-portal-header-logo');
            if (!existingLogo) {
              var newLogo = iframeDoc.createElement('img');
              newLogo.className = 'gh-portal-signup-logo ap-portal-header-logo';
              newLogo.src = logoUrl;
              newLogo.alt = 'Anchorage Press';
              newLogo.onerror = function() {
                if (this.src !== 'https://anchoragepress.com/assets/images/anchoragepress-logo.svg') {
                  this.src = 'https://anchoragepress.com/assets/images/anchoragepress-logo.svg';
                }
              };
              h.prepend(newLogo);
            }
            if (h.classList.contains('gh-portal-signup-header')) {
              var existingTitle = h.querySelector('.ap-portal-hero-title');
              if (!existingTitle) {
                var title = iframeDoc.createElement('h1');
                title.className = 'ap-portal-hero-title';
                title.textContent = 'Support independent Alaska journalism';
                h.appendChild(title);
              }
              var existingDek = h.querySelector('.ap-portal-hero-dek');
              if (!existingDek) {
                var dek = iframeDoc.createElement('p');
                dek.className = 'ap-portal-hero-dek';
                dek.textContent = 'Choose a membership plan to fund local reporting in Anchorage and across Alaska.';
                h.appendChild(dek);
              }
            }
            var defaultTitle = h.querySelector('.gh-portal-main-title');
            if (defaultTitle && defaultTitle.style.display !== 'none') {
              defaultTitle.style.setProperty('display', 'none', 'important');
            }
            h.setAttribute('data-ap-header-formatted', 'true');
          });
        }

        function formatDonationNotice(iframeDoc) {
          if (!iframeDoc) return;
          var products = iframeDoc.querySelector('.gh-portal-products') || iframeDoc.querySelector('.gh-portal-products-grid');
          if (!products) return;

          var parent = products.parentElement;
          if (!parent) return;

          var existing = parent.querySelector('.ap-donation-notice');
          if (!existing) {
            var notice = iframeDoc.createElement('div');
            notice.className = 'ap-donation-notice';
            notice.innerHTML = 'Want to give another amount? <a href="mailto:info@anchoragepress.com">Contact us</a> or visit our <a href="/donate" target="_blank" rel="noopener">support page</a>';
            products.after(notice);
          }
        }

        function bindPortalSignoutButton(iframeDoc) {
          if (!iframeDoc) return;
          try {
            var signoutBtn = iframeDoc.querySelector('button[data-test-button="signout"], .gh-portal-btn-signout, button[data-test-button="footer-signout"]');
            if (signoutBtn && !signoutBtn.__ap_signout_bound) {
              signoutBtn.__ap_signout_bound = true;
              signoutBtn.addEventListener('click', function() {
                var curTok = sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token');
                if (window.AP_SESSION) window.AP_SESSION.clear(true);
                try {
                  fetch('https://cms.anchoragepress.com/members/api/session', {
                    method: 'DELETE',
                    mode: 'cors',
                    credentials: 'include'
                  }).catch(function() {});
                  if (curTok) {
                    fetch('/api/auth-signin', {
                      method: 'DELETE',
                      headers: {
                        'Authorization': 'Bearer ' + curTok,
                        'X-AP-Requested-With': 'AnchoragePressClient'
                      }
                    }).catch(function() {});
                  }
                } catch (_) {}
                window.dispatchEvent(new CustomEvent('ap:member-sync'));
              });
            }
          } catch (_) {}
        }

        function injectPortalStyles(iframeDoc) {
          if (!iframeDoc || iframeDoc.getElementById('anchorage-press-portal-theme')) return;
          var style = iframeDoc.createElement('style');
          style.id = 'anchorage-press-portal-theme';
          style.textContent = `
            @import url('https://fonts.googleapis.com/css2?family=Anton&family=Space+Grotesk:wght@700;900&family=Archivo+Black&display=swap');

            /* ========================================================================= */
            /* ANCHORAGE PRESS EMBEDDED PORTAL THEME                                     */
            /* ========================================================================= */
            html, body {
              height: 100% !important;
              min-height: 100vh !important;
              min-height: 100dvh !important;
              width: 100% !important;
              margin: 0 !important;
              padding: 0 !important;
              overflow: hidden !important;
              box-sizing: border-box !important;
            }

            .gh-portal-popup-wrapper,
            div[class*="gh-portal-popup-wrapper"] {
              position: fixed !important;
              top: 0 !important;
              left: 0 !important;
              right: 0 !important;
              bottom: 0 !important;
              width: 100vw !important;
              height: 100vh !important;
              height: 100dvh !important;
              min-height: 100vh !important;
              min-height: 100dvh !important;
              display: flex !important;
              align-items: center !important;
              justify-content: center !important;
              padding: 24px 16px !important;
              margin: 0 !important;
              box-sizing: border-box !important;
              overflow-y: auto !important;
            }

            @keyframes apPortalPop {
              0% { transform: scale(0.96) translateY(8px); opacity: 0; }
              100% { transform: scale(1) translateY(0); opacity: 1; }
            }

            .gh-portal-popup-container,
            div[class*="gh-portal-popup-container"] {
              animation: apPortalPop 0.2s cubic-bezier(0.16, 1, 0.3, 1) forwards !important;
              background-color: #FCFBF7 !important;
              border: 1px solid #D5D2C7 !important;
              border-radius: 8px !important;
              box-shadow: 0 16px 40px rgba(0, 0, 0, 0.22) !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif !important;
              color: #111111 !important;
              overflow-y: auto !important;
              width: 30vw !important;
              min-width: 360px !important;
              max-width: 520px !important;
              max-height: 92vh !important;
              max-height: 92dvh !important;
              margin: auto !important;
              align-self: center !important;
              position: relative !important;
              box-sizing: border-box !important;
              transition: width 0.2s ease, max-width 0.2s ease !important;
            }

            /* Expand container width gracefully when the 3-tier products grid or full-size portal is present */
            .gh-portal-popup-container.full-size,
            .gh-portal-popup-container.signup,
            .gh-portal-popup-container.signup.full-size,
            .gh-portal-popup-container.ap-tiers-active,
            div[class*="gh-portal-popup-container"].ap-tiers-active,
            .gh-portal-popup-container:has(.gh-portal-products-grid),
            div[class*="gh-portal-popup-container"]:has(.gh-portal-products-grid),
            .gh-portal-popup-container:has(.gh-portal-products),
            div[class*="gh-portal-popup-container"]:has(.gh-portal-products) {
              width: min(1060px, 94vw) !important;
              max-width: 96vw !important;
              min-width: 320px !important;
              overflow-x: hidden !important;
            }

            /* Expand container width for Account modal view so contents are spacious and crystal clear */
            .gh-portal-popup-container.ap-account-active,
            div[class*="gh-portal-popup-container"].ap-account-active,
            .gh-portal-popup-container:has(.gh-portal-account-main),
            div[class*="gh-portal-popup-container"]:has(.gh-portal-account-main),
            .gh-portal-popup-container:has(.gh-portal-account-wrapper),
            div[class*="gh-portal-popup-container"]:has(.gh-portal-account-wrapper),
            .gh-portal-popup-container:has(.gh-portal-list),
            div[class*="gh-portal-popup-container"]:has(.gh-portal-list),
            .gh-portal-popup-container:has([data-test-portal="account"]),
            div[class*="gh-portal-popup-container"]:has([data-test-portal="account"]) {
              width: clamp(560px, 50vw, 680px) !important;
              min-width: 460px !important;
              max-width: 92vw !important;
            }

            .gh-portal-popup-background {
              background: rgba(0, 0, 0, 0.65) !important;
              backdrop-filter: blur(4px) !important;
              -webkit-backdrop-filter: blur(4px) !important;
              position: fixed !important;
              top: 0 !important;
              left: 0 !important;
              right: 0 !important;
              bottom: 0 !important;
              width: 100vw !important;
              height: 100vh !important;
              height: 100dvh !important;
            }

            /* Refined Whitespace in Content Container */
            .gh-portal-content,
            .gh-portal-signup-content {
              padding: 24px 28px 20px 28px !important;
              width: 100% !important;
              box-sizing: border-box !important;
            }
            .gh-portal-signin-content {
              padding: 28px 32px !important;
              width: 100% !important;
              max-width: 100% !important;
              margin: 0 auto !important;
              box-sizing: border-box !important;
            }
            .gh-portal-signup-header {
              padding: 0 !important;
              margin: 0 auto 10px auto !important;
              text-align: center !important;
            }
            .gh-portal-signin-header {
              padding: 0 !important;
              margin: 0 auto 16px auto !important;
              text-align: center !important;
            }

            /* Unobstructed Close Button in Top-Right */
            .gh-portal-closeicon-container,
            button[data-test-button="close-popup"],
            button[data-testid="close-popup"] {
              background-color: #FFFFFF !important;
              border: 1px solid #D5D2C7 !important;
              border-radius: 4px !important;
              box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06) !important;
              width: 32px !important;
              height: 32px !important;
              min-width: 32px !important;
              min-height: 32px !important;
              color: #333333 !important;
              display: flex !important;
              align-items: center !important;
              justify-content: center !important;
              position: absolute !important;
              top: 16px !important;
              right: 16px !important;
              cursor: pointer !important;
              padding: 0 !important;
              z-index: 99999 !important;
              box-sizing: border-box !important;
              transition: all 0.15s ease !important;
            }
            .gh-portal-closeicon-container:hover,
            button[data-test-button="close-popup"]:hover {
              background-color: #F4F1EA !important;
              border-color: #000000 !important;
              color: #000000 !important;
            }
            .gh-portal-closeicon-container svg,
            button[data-test-button="close-popup"] svg,
            button[data-testid="close-popup"] svg {
              color: currentColor !important;
              stroke: currentColor !important;
              width: 16px !important;
              height: 16px !important;
              display: block !important;
            }

            /* Hero Headline & Deck */
            .ap-portal-hero-title {
              font-family: Anton, "Space Grotesk", sans-serif !important;
              font-size: 26px !important;
              font-weight: 900 !important;
              text-transform: uppercase !important;
              letter-spacing: 0.04em !important;
              color: #000000 !important;
              margin: 4px 0 6px 0 !important;
              line-height: 1.15 !important;
              text-align: center !important;
            }
            .ap-portal-hero-dek {
              font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif !important;
              font-size: 14.5px !important;
              font-weight: 400 !important;
              color: #555555 !important;
              margin: 0 auto 12px auto !important;
              line-height: 1.4 !important;
              text-align: center !important;
              max-width: 520px !important;
            }

            /* Clean 2-Column Identity Fields (Name & Email) */
            .gh-portal-logged-out-form-container {
              display: grid !important;
              grid-template-columns: 1fr 1fr !important;
              gap: 12px !important;
              max-width: 560px !important;
              width: 100% !important;
              margin: 0 auto 10px auto !important;
            }
            @media (max-width: 560px) {
              .gh-portal-logged-out-form-container {
                grid-template-columns: 1fr !important;
                gap: 8px !important;
              }
            }
            .gh-portal-input-section {
              margin: 0 !important;
              padding: 0 !important;
            }
            .gh-portal-input-labelcontainer {
              display: flex !important;
              justify-content: space-between !important;
              align-items: baseline !important;
              margin-bottom: 5px !important;
              width: 100% !important;
            }
            .gh-portal-input-label,
            .gh-portal-section-title {
              font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif !important;
              font-weight: 600 !important;
              font-size: 13px !important;
              text-transform: none !important;
              letter-spacing: normal !important;
              color: #222222 !important;
            }
            .gh-portal-input-labelcontainer p,
            .gh-portal-input-section p[style*="color"],
            .gh-portal-input-section p:not(.gh-portal-input-label),
            .gh-portal-error-text,
            p.gh-portal-error {
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-weight: 500 !important;
              font-size: 12px !important;
              letter-spacing: normal !important;
              text-transform: none !important;
              color: #FF3B30 !important;
              margin: 0 !important;
              padding: 0 !important;
              line-height: 1.2 !important;
              display: inline-block !important;
            }
            .gh-portal-input {
              background-color: #FFFFFF !important;
              border: 1px solid #D5D2C7 !important;
              border-radius: 4px !important;
              box-shadow: none !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-size: 14px !important;
              color: #111111 !important;
              padding: 8px 12px !important;
              height: 40px !important;
              min-height: 40px !important;
              box-sizing: border-box !important;
              width: 100% !important;
              transition: border-color 0.15s ease, box-shadow 0.15s ease !important;
            }
            .gh-portal-input:focus {
              border-color: #000000 !important;
              box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1) !important;
              outline: none !important;
            }
            .gh-portal-input.error {
              border-color: #FF3B30 !important;
              background-color: #FFF8F8 !important;
              box-shadow: 0 0 0 2px rgba(255, 59, 48, 0.15) !important;
              color: #000000 !important;
            }
            .gh-portal-input.error:focus {
              border-color: #FF3B30 !important;
              background-color: #FFFFFF !important;
              box-shadow: 0 0 0 2.5px rgba(255, 59, 48, 0.25) !important;
              outline: none !important;
            }

            /* Hide original terms text that interrupts the signup flow between inputs and plans */
            .gh-portal-signup-terms-wrapper,
            .gh-portal-signup-terms {
              display: none !important;
            }

            /* UNMISTAKABLE RECESSED PILL BILLING SELECTOR */
            .gh-portal-products-pricetoggle {
              grid-column: 1 / -1 !important;
              justify-self: center !important;
              display: flex !important;
              align-items: center !important;
              justify-content: center !important;
              background-color: #EFECE6 !important;
              border: 1px solid #D8D4C8 !important;
              border-radius: 9999px !important;
              box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.06) !important;
              max-width: 320px !important;
              width: 100% !important;
              height: 42px !important;
              min-height: 42px !important;
              margin: 6px auto 16px auto !important;
              padding: 3px !important;
              box-sizing: border-box !important;
              overflow: visible !important;
            }
            .gh-portal-products-pricetoggle button.gh-portal-btn {
              flex: 1 !important;
              height: 100% !important;
              padding: 0 14px !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif !important;
              font-weight: 600 !important;
              font-size: 13.5px !important;
              letter-spacing: normal !important;
              text-transform: none !important;
              border: none !important;
              border-radius: 9999px !important;
              cursor: pointer !important;
              display: flex !important;
              align-items: center !important;
              justify-content: center !important;
              background-color: transparent !important;
              color: #555555 !important;
              box-shadow: none !important;
              transition: all 0.15s ease !important;
            }
            .gh-portal-products-pricetoggle button.gh-portal-btn.active {
              background-color: #000000 !important;
              color: #FFFFFF !important;
              box-shadow: 0 2px 5px rgba(0, 0, 0, 0.18) !important;
            }
            .gh-portal-products-pricetoggle button.gh-portal-btn:not(.active):hover {
              color: #000000 !important;
              background-color: rgba(0, 0, 0, 0.05) !important;
            }
            .gh-portal-maximum-discount {
              display: inline-flex !important;
              align-items: center !important;
              justify-content: center !important;
              background-color: #FEB619 !important;
              color: #000000 !important;
              border: none !important;
              border-radius: 9999px !important;
              box-shadow: none !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-weight: 700 !important;
              font-size: 11px !important;
              letter-spacing: normal !important;
              text-transform: none !important;
              padding: 2px 7px !important;
              line-height: 1.2 !important;
              margin-left: 6px !important;
              transform: none !important;
              animation: none !important;
              cursor: pointer !important;
            }

            /* THREE ALIGNED PLAN CARDS */
            .gh-portal-products {
              width: 100% !important;
              max-width: 100% !important;
              box-sizing: border-box !important;
              overflow: visible !important;
              padding: 0 !important;
              margin: 0 auto !important;
            }
            .gh-portal-products-grid {
              display: grid !important;
              grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
              gap: 20px !important;
              width: 100% !important;
              max-width: 100% !important;
              margin: 0 auto !important;
              padding: 2px 0 6px 0 !important;
              align-items: stretch !important;
              box-sizing: border-box !important;
            }
            @media (max-width: 780px) {
              .gh-portal-popup-container.full-size,
              .gh-portal-popup-container.signup,
              .gh-portal-popup-container.signup.full-size,
              .gh-portal-popup-container.ap-tiers-active,
              div[class*="gh-portal-popup-container"].ap-tiers-active,
              .gh-portal-popup-container:has(.gh-portal-products-grid),
              div[class*="gh-portal-popup-container"]:has(.gh-portal-products-grid) {
                width: 95vw !important;
                max-width: 480px !important;
                min-width: 0 !important;
              }
              .gh-portal-products-grid {
                grid-template-columns: 1fr !important;
                gap: 16px !important;
                max-width: 100% !important;
              }
            }

            .gh-portal-product-card {
              background-color: #FFFFFF !important;
              border: 1px solid #D5D2C7 !important;
              border-radius: 6px !important;
              box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05) !important;
              padding: 22px 20px 20px 20px !important;
              display: flex !important;
              flex-direction: column !important;
              justify-content: space-between !important;
              position: relative !important;
              transition: border-color 0.15s ease, box-shadow 0.15s ease !important;
              box-sizing: border-box !important;
              min-width: 0 !important;
              width: 100% !important;
              overflow: hidden !important;
            }
            .gh-portal-product-card:hover {
              border-color: #B0ABA0 !important;
              box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08) !important;
            }

            /* Supporting Plan Emphasis */
            .gh-portal-product-card.ap-tier-supporting,
            .gh-portal-product-card[data-ap-tier="supporting"] {
              background-color: #FFFFFF !important;
              border: 2px solid #000000 !important;
              box-shadow: 0 4px 16px rgba(0, 0, 0, 0.09) !important;
              transform: none !important;
            }
            .gh-portal-product-card.ap-tier-supporting:hover,
            .gh-portal-product-card[data-ap-tier="supporting"]:hover {
              border-color: #000000 !important;
              box-shadow: 0 6px 20px rgba(0, 0, 0, 0.13) !important;
            }

            /* Clean in-flow Recommended tag inside card header */
            .ap-tier-header {
              display: flex !important;
              flex-direction: column !important;
              align-items: flex-start !important;
              min-height: 60px !important;
              justify-content: flex-start !important;
              margin-bottom: 8px !important;
            }
            .ap-tier-recommended-tag {
              display: inline-flex !important;
              align-items: center !important;
              background-color: #FEB619 !important;
              color: #000000 !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif !important;
              font-size: 11.5px !important;
              font-weight: 700 !important;
              letter-spacing: 0.04em !important;
              text-transform: uppercase !important;
              border: 1px solid #000000 !important;
              border-radius: 3px !important;
              padding: 2px 7px !important;
              margin-bottom: 8px !important;
              transform: none !important;
              animation: none !important;
              box-shadow: none !important;
              line-height: 1.2 !important;
            }
            .ap-tier-recommended-spacer {
              display: block !important;
              height: 22px !important;
              margin-bottom: 8px !important;
            }
            .ap-tier-title-wrap {
              display: flex !important;
              align-items: baseline !important;
              gap: 5px !important;
            }
            .ap-tier-name,
            .ap-tier-sub {
              font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif !important;
              font-weight: 700 !important;
              font-size: 23px !important;
              line-height: 1.2 !important;
              color: #000000 !important;
              letter-spacing: -0.01em !important;
            }

            /* Pricing Amounts & Typography */
            .gh-portal-product-price {
              font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif !important;
              font-weight: 700 !important;
              font-size: 38px !important;
              color: #000000 !important;
              letter-spacing: -0.02em !important;
              line-height: 1.1 !important;
              margin: 10px 0 8px 0 !important;
              display: flex !important;
              align-items: baseline !important;
              gap: 2px !important;
            }
            .gh-portal-product-price .currency {
              font-size: 24px !important;
              font-weight: 700 !important;
              color: #000000 !important;
            }
            .gh-portal-product-price .period {
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-size: 14px !important;
              font-weight: 500 !important;
              color: #666666 !important;
              text-transform: lowercase !important;
              margin-left: 3px !important;
            }

            /* Card savings badge */
            .gh-portal-discount-label,
            span[class*="discount"]:not(.gh-portal-maximum-discount) {
              display: inline-flex !important;
              align-items: center !important;
              background-color: #FEB619 !important;
              color: #000000 !important;
              border: none !important;
              border-radius: 3px !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-size: 11.5px !important;
              font-weight: 700 !important;
              letter-spacing: normal !important;
              text-transform: none !important;
              padding: 2px 6px !important;
              line-height: 1.2 !important;
              margin-left: 6px !important;
              transform: none !important;
              animation: none !important;
              box-shadow: none !important;
            }

            /* Descriptions */
            .gh-portal-product-description {
              font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif !important;
              font-size: 15px !important;
              font-weight: 400 !important;
              line-height: 1.5 !important;
              color: #444444 !important;
              margin: 8px 0 16px 0 !important;
              min-height: 52px !important;
            }

            /* Buttons Anchored at bottom with Clean borders & shadows (Eliminate protruding white gradient box) */
            .gh-portal-btn-product {
              position: static !important;
              display: flex !important;
              flex-direction: column !important;
              align-items: stretch !important;
              width: 100% !important;
              margin: auto 0 0 0 !important;
              margin-bottom: 0 !important;
              padding: 14px 0 0 0 !important;
              padding-bottom: 0 !important;
              box-sizing: border-box !important;
            }
            .gh-portal-btn-product::before,
            .gh-portal-btn-product::after {
              display: none !important;
              content: none !important;
              height: 0 !important;
              width: 0 !important;
              background: none !important;
              background-image: none !important;
              opacity: 0 !important;
              visibility: hidden !important;
            }
            .gh-portal-btn-product .gh-portal-error-message {
              margin-bottom: 0 !important;
              padding-bottom: 0 !important;
              margin-top: 8px !important;
              min-height: auto !important;
            }
            .gh-portal-btn-product button,
            .gh-portal-btn-product .gh-portal-btn {
              width: 100% !important;
              height: 42px !important;
              border-radius: 4px !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif !important;
              font-weight: 600 !important;
              font-size: 14px !important;
              text-transform: none !important;
              letter-spacing: normal !important;
              cursor: pointer !important;
              display: inline-flex !important;
              align-items: center !important;
              justify-content: center !important;
              transition: all 0.15s ease !important;
              box-sizing: border-box !important;
            }

            /* Supporting Plan Yellow Button */
            .gh-portal-product-card.ap-tier-supporting .gh-portal-btn-product button,
            .gh-portal-product-card[data-ap-tier="supporting"] .gh-portal-btn-product button {
              background-color: #FEB619 !important;
              color: #000000 !important;
              border: 1px solid #000000 !important;
              box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06) !important;
              font-weight: 700 !important;
            }
            .gh-portal-product-card.ap-tier-supporting .gh-portal-btn-product button:hover,
            .gh-portal-product-card[data-ap-tier="supporting"] .gh-portal-btn-product button:hover {
              background-color: #E5A416 !important;
              border-color: #000000 !important;
            }

            /* Free & Founding Neutral Buttons */
            .gh-portal-product-card[data-ap-tier="free"] .gh-portal-btn-product button,
            .gh-portal-product-card[data-ap-tier="founding"] .gh-portal-btn-product button,
            .gh-portal-btn-product button {
              background-color: #FFFFFF !important;
              color: #111111 !important;
              border: 1px solid #D5D2C7 !important;
              box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04) !important;
              font-weight: 600 !important;
            }
            .gh-portal-product-card[data-ap-tier="free"] .gh-portal-btn-product button:hover,
            .gh-portal-product-card[data-ap-tier="founding"] .gh-portal-btn-product button:hover,
            .gh-portal-btn-product button:hover {
              background-color: #F7F5F0 !important;
              border-color: #000000 !important;
              color: #000000 !important;
            }

            /* Product Card Error Message */
            .gh-portal-product-card .gh-portal-error-message {
              width: 100% !important;
              max-width: 100% !important;
              box-sizing: border-box !important;
              background-color: #FFF2F2 !important;
              color: #D32F2F !important;
              border: 1px solid #FFCDD2 !important;
              border-radius: 4px !important;
              box-shadow: none !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-weight: 600 !important;
              font-size: 12px !important;
              letter-spacing: normal !important;
              text-transform: none !important;
              padding: 8px 10px !important;
              margin: 8px 0 0 0 !important;
              text-align: center !important;
              line-height: 1.3 !important;
              animation: apPortalPop 0.18s cubic-bezier(0.16, 1, 0.3, 1) forwards !important;
            }
            .gh-portal-product-card:has(.gh-portal-error-message) {
              border-color: #D32F2F !important;
            }

            /* Relocated Donation Notice */
            .ap-donation-notice {
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-size: 13.5px !important;
              color: #555555 !important;
              text-align: center !important;
              margin: 14px auto 4px auto !important;
              line-height: 1.4 !important;
            }
            .ap-donation-notice a {
              color: #000000 !important;
              font-weight: 600 !important;
              text-decoration: underline !important;
              text-underline-offset: 3px !important;
            }
            .ap-donation-notice a:hover {
              color: #D99B15 !important;
            }

            /* Footer Link */
            .gh-portal-signup-footer {
              margin: 10px auto 4px auto !important;
              padding: 0 !important;
              text-align: center !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-size: 13.5px !important;
              color: #666666 !important;
            }
            .gh-portal-signup-footer button.gh-portal-btn-link,
            .gh-portal-signup-footer a {
              color: #000000 !important;
              font-weight: 600 !important;
              text-decoration: underline !important;
              text-underline-offset: 3px !important;
              font-size: 13.5px !important;
              cursor: pointer !important;
              border: none !important;
              background: transparent !important;
              padding: 0 !important;
            }
            .gh-portal-signup-footer button.gh-portal-btn-link:hover,
            .gh-portal-signup-footer a:hover {
              color: #D99B15 !important;
            }

            /* Sign-in modal container & layout overrides */
            .gh-portal-popup-container.signin {
              width: 100% !important;
              max-width: 440px !important;
              min-width: 340px !important;
            }
            .gh-portal-popup-container.signin .gh-portal-logged-out-form-container,
            .gh-portal-logged-out-form-container:has(.gh-portal-content.signin) {
              display: flex !important;
              flex-direction: column !important;
              grid-template-columns: 1fr !important;
              width: 100% !important;
              max-width: 100% !important;
              gap: 0 !important;
            }
            .gh-portal-content.signin {
              padding: 16px 20px 12px 20px !important;
              width: 100% !important;
              max-width: 100% !important;
              margin: 0 auto !important;
              box-sizing: border-box !important;
            }
            .gh-portal-signin-header {
              padding: 0 !important;
              margin: 0 auto 20px auto !important;
              text-align: center !important;
              display: flex !important;
              flex-direction: column !important;
              align-items: center !important;
              justify-content: center !important;
              width: 100% !important;
            }

            /* Official Anchorage Press Horizontal SVG Logo */
            img.gh-portal-signup-logo,
            .gh-portal-signup-header img.gh-portal-signup-logo,
            .gh-portal-signin-header img.gh-portal-signup-logo,
            .gh-portal-content.signin img.gh-portal-signup-logo,
            .ap-portal-header-logo {
              content: url('/assets/images/anchoragepress-logo.svg') !important;
              width: auto !important;
              max-width: 240px !important;
              height: auto !important;
              max-height: 60px !important;
              object-fit: contain !important;
              border-radius: 0px !important;
              display: block !important;
              margin: 0 auto 16px auto !important;
            }

            img.gh-portal-signup-logo + .gh-portal-main-title,
            .ap-portal-header-logo + .gh-portal-main-title,
            .gh-portal-signup-header:has(img.gh-portal-signup-logo) .gh-portal-main-title,
            .gh-portal-signin-header:has(img.gh-portal-signup-logo) .gh-portal-main-title {
              display: none !important;
            }

            /* Primary Sign-In Buttons */
            .gh-portal-btn-primary,
            button[data-test-button="signin"],
            .gh-portal-btn-main,
            .gh-portal-btn-inbox-link {
              background-color: #FEB619 !important;
              color: #000000 !important;
              border: 1px solid #000000 !important;
              border-radius: 4px !important;
              box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08) !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-weight: 700 !important;
              font-size: 14px !important;
              text-transform: none !important;
              letter-spacing: normal !important;
              padding: 10px 20px !important;
              cursor: pointer !important;
              transition: all 0.15s ease !important;
            }
            .gh-portal-btn-primary:hover,
            button[data-test-button="signin"]:hover,
            .gh-portal-btn-main:hover,
            .gh-portal-btn-inbox-link:hover {
              background-color: #E5A416 !important;
            }

            .gh-portal-icon-envelope,
            .gh-portal-icon {
              background-color: #FEB619 !important;
              border: 1px solid #000000 !important;
              border-radius: 50% !important;
              padding: 10px !important;
              width: 48px !important;
              height: 48px !important;
              color: #000000 !important;
              margin: 0 auto 12px auto !important;
              display: block !important;
            }

            /* Ghost OTP Container */
            .gh-portal-otp-container,
            .gh-portal-otp-container.focused,
            .gh-portal-otp-container.error,
            .gh-portal-section.gh-portal-otp,
            .gh-portal-input-section:has(#input-otc),
            div:has(> #input-otc),
            section:has(> #input-otc) {
              border: none !important;
              border-radius: 0 !important;
              box-shadow: none !important;
              outline: none !important;
              background: transparent !important;
              padding: 0 !important;
            }
            .gh-portal-otp-container input#input-otc,
            .gh-portal-otp input,
            input#input-otc {
              border: 1.5px solid #D5D2C7 !important;
              border-radius: 4px !important;
              box-shadow: none !important;
              font-family: Courier, monospace !important;
              font-weight: 700 !important;
              font-size: 22px !important;
              letter-spacing: 6px !important;
              text-align: center !important;
              background-color: #FFFFFF !important;
              max-width: 260px !important;
              margin: 14px auto !important;
              display: block !important;
              height: 48px !important;
              padding: 0 10px !important;
            }
            .gh-portal-otp-container input#input-otc:focus,
            .gh-portal-otp input:focus,
            input#input-otc:focus {
              border-color: #000000 !important;
              box-shadow: 0 0 0 2px rgba(0,0,0,0.1) !important;
              outline: none !important;
            }

            /* ========================================================================= */
            /* ACCOUNT VIEW & PROFILE DASHBOARD                                          */
            /* ========================================================================= */
            .gh-portal-account-main {
              padding: 24px 28px 28px 28px !important;
              width: 100% !important;
              box-sizing: border-box !important;
            }

            /* Header & Avatar */
            .gh-portal-account-header {
              padding: 0 !important;
              margin: 0 auto 16px auto !important;
              text-align: center !important;
              display: flex !important;
              flex-direction: column !important;
              align-items: center !important;
              justify-content: center !important;
            }
            .gh-portal-account-header .gh-portal-avatar,
            .gh-portal-avatar,
            div[class*="gh-portal-avatar"],
            figure.gh-portal-avatar {
              border-radius: 50% !important;
              border: 2px solid #000000 !important;
              background-color: #FEB619 !important;
              width: 58px !important;
              height: 58px !important;
              min-width: 58px !important;
              min-height: 58px !important;
              margin: 0 auto 12px auto !important;
              display: flex !important;
              align-items: center !important;
              justify-content: center !important;
              overflow: hidden !important;
            }
            .gh-portal-account-header .gh-portal-avatar svg,
            .gh-portal-avatar svg {
              color: #000000 !important;
              stroke: #000000 !important;
              fill: none !important;
              width: 30px !important;
              height: 30px !important;
            }
            .gh-portal-account-header .gh-portal-avatar svg circle:first-child:is([r="10"], [r="11"], [r="12"]) {
              display: none !important;
            }
            .gh-portal-account-header .gh-portal-main-title,
            .gh-portal-account-header h2,
            .gh-portal-account-header h1 {
              font-family: Anton, "Space Grotesk", sans-serif !important;
              font-weight: 900 !important;
              text-transform: uppercase !important;
              letter-spacing: 0.05em !important;
              font-size: 30px !important;
              color: #000000 !important;
              margin: 4px 0 0 0 !important;
              line-height: 1.1 !important;
              text-align: center !important;
            }

            /* Account List Box */
            .gh-portal-account-main .gh-portal-list,
            .gh-portal-list,
            div[class*="gh-portal-list"] {
              border: 1px solid #D5D2C7 !important;
              border-radius: 6px !important;
              box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05) !important;
              background-color: #FFFFFF !important;
              overflow: hidden !important;
              margin: 20px 0 !important;
              padding: 0 !important;
              width: 100% !important;
              box-sizing: border-box !important;
            }

            /* List Row Items */
            .gh-portal-list section,
            .gh-portal-list .gh-portal-list-clickable,
            .gh-portal-list .gh-portal-list-toggle,
            .gh-portal-list > section,
            .gh-portal-list > div {
              border-bottom: 1px solid #EFECE6 !important;
              padding: 14px 20px !important;
              display: flex !important;
              justify-content: space-between !important;
              align-items: center !important;
              gap: 16px !important;
              box-sizing: border-box !important;
              background-color: #FFFFFF !important;
              transition: background-color 0.1s ease !important;
            }
            .gh-portal-list section:last-child,
            .gh-portal-list .gh-portal-list-clickable:last-child,
            .gh-portal-list > section:last-of-type,
            .gh-portal-list > div:last-child {
              border-bottom: none !important;
            }
            .gh-portal-list .gh-portal-list-clickable:hover {
              background-color: #FCFBF7 !important;
              cursor: pointer !important;
            }

            /* Typography in Rows */
            .gh-portal-list h3,
            .gh-portal-list-detail h3 {
              font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif !important;
              font-weight: 700 !important;
              font-size: 14.5px !important;
              color: #000000 !important;
              margin: 0 0 3px 0 !important;
              line-height: 1.2 !important;
            }
            .gh-portal-list p,
            .gh-portal-list-detail p {
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-weight: 400 !important;
              font-size: 13.5px !important;
              color: #444444 !important;
              margin: 0 !important;
              line-height: 1.35 !important;
            }
            .gh-portal-list-detail {
              flex: 1 1 auto !important;
              min-width: 0 !important;
              padding: 0 !important;
            }

            /* Action Buttons (Edit, Change, Add, Buy) */
            .gh-portal-list-action,
            .gh-portal-btn-list,
            span[data-test-button="edit-address"],
            .gh-portal-list-clickable .gh-portal-list-action,
            .gh-portal-list-clickable button {
              display: inline-flex !important;
              align-items: center !important;
              justify-content: center !important;
              gap: 6px !important;
              background-color: #FEB619 !important;
              color: #000000 !important;
              border: 1px solid #000000 !important;
              border-radius: 4px !important;
              box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06) !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-size: 13px !important;
              font-weight: 700 !important;
              text-transform: none !important;
              padding: 6px 14px !important;
              text-decoration: none !important;
              cursor: pointer !important;
              white-space: nowrap !important;
              flex-shrink: 0 !important;
              transition: all 0.15s ease !important;
            }
            .gh-portal-list-action:hover,
            .gh-portal-btn-list:hover,
            span[data-test-button="edit-address"]:hover,
            .gh-portal-list-clickable .gh-portal-list-action:hover,
            .gh-portal-list-clickable button:hover {
              background-color: #E5A416 !important;
            }
            .gh-portal-list-action svg,
            .gh-portal-btn-list svg {
              width: 14px !important;
              height: 14px !important;
              fill: currentColor !important;
              stroke: currentColor !important;
            }

            /* Print Delivery Address Row */
            #gh-portal-address-row {
              background-color: #FFFDF5 !important;
              border-left: 4px solid #FEB619 !important;
              border-bottom: 1px solid #EFECE6 !important;
              padding: 14px 20px 14px 16px !important;
            }
            #gh-portal-address-row:hover {
              background-color: #FFF9E6 !important;
            }
            #gh-portal-address-row #gh-portal-address-text span:first-child {
              font-weight: 700 !important;
              color: #000000 !important;
              font-size: 13px !important;
            }

            /* Rectangular Toggle Switch */
            .gh-portal-for-switch label.switch,
            label.switch {
              border-radius: 9999px !important;
            }
            .gh-portal-for-switch .slider,
            label.switch .slider {
              border-radius: 9999px !important;
              border: 1px solid #D5D2C7 !important;
              background-color: #EFECE6 !important;
              transition: background-color 0.15s ease !important;
            }
            .gh-portal-for-switch input:checked + .slider,
            label.switch input:checked + .slider {
              background-color: #FEB619 !important;
              border-color: #000000 !important;
            }
            .gh-portal-for-switch .slider:before,
            label.switch .slider:before {
              border-radius: 50% !important;
              background-color: #000000 !important;
              transition: transform 0.15s ease !important;
            }

            .gh-portal-list a,
            .gh-portal-list-detail a {
              color: #000000 !important;
              font-weight: 600 !important;
              text-decoration: underline !important;
              text-underline-offset: 3px !important;
            }
            .gh-portal-list a:hover,
            .gh-portal-list-detail a:hover {
              color: #D99B15 !important;
            }

            /* Account Footer Buttons */
            .gh-portal-account-footer,
            div:has(> button[data-test-button="signout"]),
            div:has(> .gh-portal-btn-support) {
              display: flex !important;
              justify-content: space-between !important;
              align-items: center !important;
              gap: 16px !important;
              margin-top: 24px !important;
              padding: 0 !important;
            }
            button[data-test-button="signout"],
            .gh-portal-btn-signout,
            .gh-portal-account-footer button {
              border: 1px solid #D5D2C7 !important;
              border-radius: 4px !important;
              background-color: #FFFFFF !important;
              color: #111111 !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-size: 13.5px !important;
              font-weight: 600 !important;
              text-transform: none !important;
              padding: 9px 18px !important;
              cursor: pointer !important;
              transition: all 0.15s ease !important;
            }
            button[data-test-button="signout"]:hover,
            .gh-portal-btn-signout:hover,
            .gh-portal-account-footer button:hover {
              background-color: #F7F5F0 !important;
              border-color: #000000 !important;
              color: #000000 !important;
            }

            a.gh-portal-btn-support,
            .gh-portal-btn-support,
            .gh-portal-account-footer a {
              border: 1px solid #000000 !important;
              border-radius: 4px !important;
              background-color: #FEB619 !important;
              color: #000000 !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-size: 13.5px !important;
              font-weight: 700 !important;
              text-transform: none !important;
              padding: 9px 18px !important;
              text-decoration: none !important;
              display: inline-flex !important;
              align-items: center !important;
              justify-content: center !important;
              cursor: pointer !important;
              transition: all 0.15s ease !important;
            }
            a.gh-portal-btn-support:hover,
            .gh-portal-btn-support:hover,
            .gh-portal-account-footer a:hover {
              background-color: #E5A416 !important;
            }

            .gh-portal-powered {
              display: none !important;
            }

            /* ========================================================================= */
            /* RESPONSIVE RULES FOR MOBILE (Dynamic Safe Area & Natural Scroll)          */
            /* ========================================================================= */
            @media (max-width: 768px) {
              .gh-portal-popup-wrapper,
              div[class*="gh-portal-popup-wrapper"] {
                padding-top: max(16px, env(safe-area-inset-top)) !important;
                padding-bottom: max(24px, env(safe-area-inset-bottom)) !important;
                padding-left: max(10px, env(safe-area-inset-left)) !important;
                padding-right: max(10px, env(safe-area-inset-right)) !important;
                align-items: flex-start !important;
                justify-content: center !important;
                max-height: 100dvh !important;
                overflow-y: auto !important;
                -webkit-overflow-scrolling: touch !important;
              }
              .gh-portal-popup-container,
              div[class*="gh-portal-popup-container"] {
                width: calc(100vw - 20px) !important;
                min-width: unset !important;
                max-width: 460px !important;
                margin: 16px auto !important;
                box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15) !important;
                border: 1px solid #D5D2C7 !important;
                max-height: none !important;
              }
              .gh-portal-content,
              .gh-portal-signup-content,
              .gh-portal-signin-content {
                padding: 20px 16px !important;
              }
              .gh-portal-product-card {
                padding: 18px 16px !important;
              }
              .gh-portal-input {
                font-size: 16px !important;
                height: 42px !important;
                min-height: 42px !important;
              }
              /* Mobile responsive scaling for Portal logo */
              img.gh-portal-signup-logo,
              .gh-portal-signup-header img.gh-portal-signup-logo,
              .gh-portal-signin-header img.gh-portal-signup-logo,
              .gh-portal-content.signin img.gh-portal-signup-logo,
              .ap-portal-header-logo {
                max-width: 190px !important;
                max-height: 48px !important;
                margin: 0 auto 12px auto !important;
              }
            }

            /* System High Contrast & Reduced Motion Preferences */
            @media (prefers-reduced-motion: reduce) {
              .gh-portal-popup-container,
              div[class*="gh-portal-popup-container"],
              .gh-portal-discount-label,
              .gh-portal-maximum-discount,
              .ap-tier-recommended-tag {
                animation: none !important;
                transition: none !important;
                transform: none !important;
              }
            }

            /* Error & Notification Callouts */
            .gh-portal-error-message,
            .gh-portal-otp-error,
            .gh-portal-signin-error,
            .gh-portal-notification.error,
            div[class*="gh-portal-error"] {
              background-color: #FFF2F2 !important;
              color: #D32F2F !important;
              border: 1px solid #FFCDD2 !important;
              border-radius: 4px !important;
              box-shadow: none !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-weight: 600 !important;
              font-size: 12.5px !important;
              letter-spacing: normal !important;
              text-transform: none !important;
              padding: 8px 14px !important;
              margin: 10px auto !important;
              max-width: 100% !important;
              box-sizing: border-box !important;
              text-align: center !important;
              line-height: 1.3 !important;
              animation: apPortalPop 0.18s cubic-bezier(0.16, 1, 0.3, 1) forwards !important;
            }
            .gh-portal-notification.success,
            div[class*="gh-portal-notification"]:not(.error) {
              background-color: #E8F5E9 !important;
              color: #2E7D32 !important;
              border: 1px solid #C8E6C9 !important;
              border-radius: 4px !important;
              box-shadow: none !important;
              font-family: -apple-system, BlinkMacSystemFont, "Inter", sans-serif !important;
              font-weight: 600 !important;
              font-size: 12.5px !important;
              letter-spacing: normal !important;
              text-transform: none !important;
              padding: 8px 14px !important;
              margin: 10px auto !important;
              max-width: 100% !important;
              box-sizing: border-box !important;
              text-align: center !important;
              line-height: 1.3 !important;
              animation: apPortalPop 0.18s cubic-bezier(0.16, 1, 0.3, 1) forwards !important;
            }
            .gh-portal-otp-container.error input#input-otc,
            .gh-portal-otp.error input {
              border-color: #D32F2F !important;
              box-shadow: 0 0 0 2px rgba(211, 47, 47, 0.15) !important;
              background-color: #FFF8F8 !important;
            }
          `;
          (iframeDoc.head || iframeDoc.documentElement).appendChild(style);
        }

        function setPortalOpenState(isOpen) {
          if (isOpen) {
            if (document.documentElement) document.documentElement.classList.add('ap-portal-open');
            if (document.body) document.body.classList.add('ap-portal-open');
          } else {
            if (document.documentElement) document.documentElement.classList.remove('ap-portal-open');
            if (document.body) document.body.classList.remove('ap-portal-open');
            var skel = document.getElementById('ap-portal-skeleton');
            if (skel) {
              skel.style.display = 'none';
              skel.classList.add('hidden');
            }
          }
        }

        function handlePortalIframe(iframe) {
          if (!iframe || iframe.__ap_portal_observed) return;
          iframe.__ap_portal_observed = true;

          var isMutating = false;
          function tryInject() {
            if (isMutating) return;
            try {
              var doc = iframe.contentDocument || (iframe.contentWindow && iframe.contentWindow.document);
              if (!doc) return;

              isMutating = true;
              try {
                injectPortalStyles(doc);
                updateContainerLayout(doc);
                formatPortalTopNav(doc);
                formatPortalTierTitles(doc);
                formatPortalPromoBadges(doc);
                formatPortalHeaderLogo(doc);
                formatDonationNotice(doc);
                bindPortalSignoutButton(doc);

                // Print delivery address row retired 2026-10-05: address is managed only on cms.anchoragepress.com/account/
                // (backup: src/components/_coldstorage/portal-address-row-injector.js)

                // Dismiss skeleton loader once container has rendered
                var container = doc.querySelector('.gh-portal-popup-container');
                if (container) {
                  var skel = document.getElementById('ap-portal-skeleton');
                  if (skel) {
                    skel.style.display = 'none';
                    skel.classList.add('hidden');
                  }
                  setPortalOpenState(true);
                }
              } finally {
                setTimeout(function() { isMutating = false; }, 60);
              }

              // Bind Escape key listener inside iframe
              if (!doc.__ap_escape_bound) {
                doc.__ap_escape_bound = true;
                doc.addEventListener('keydown', function(e) {
                  if (e.key === 'Escape' || e.key === 'Esc') {
                    var closeBtn = doc.querySelector('button[data-test-button="close-popup"], .gh-portal-closeicon-container');
                    if (closeBtn) closeBtn.click();
                    else if (window.location.hash.indexOf('#/portal') !== -1) {
                      try {
                        history.pushState('', document.title, window.location.pathname + window.location.search);
                      } catch (err) {
                        window.location.hash = '';
                      }
                    }
                    setPortalOpenState(false);
                  }
                });
              }

              if (!doc.__ap_portal_sub_observer) {
                var debounceTimer = null;
                var subObs = new MutationObserver(function() {
                  if (isMutating) return;
                  if (debounceTimer) clearTimeout(debounceTimer);
                  debounceTimer = setTimeout(function() {
                    tryInject();
                  }, 40);
                });
                subObs.observe(doc.body || doc.documentElement, { childList: true, subtree: true });
                doc.__ap_portal_sub_observer = subObs;
              }
            } catch (e) {}
          }

          if (iframe.contentDocument && iframe.contentDocument.readyState === 'complete') {
            tryInject();
          }
          iframe.addEventListener('load', tryInject);

          // Bounded initial injection retries (max 4 attempts over 1.2s instead of endless 350ms CPU loop)
          var retryCount = 0;
          var initialRetry = setInterval(function() {
            retryCount++;
            if (retryCount > 4 || !document.body || !document.body.contains(iframe)) {
              clearInterval(initialRetry);
              scanIframes();
              return;
            }
            tryInject();
          }, 300);
        }

        function scanIframes() {
          var iframes = document.querySelectorAll('iframe[title="portal-popup"]');
          var anyOpen = false;
          var hasPortalHash = !!(window.location.hash && window.location.hash.indexOf('#/portal') !== -1 && window.location.hash.indexOf('logout') === -1);

          for (var i = 0; i < iframes.length; i++) {
            handlePortalIframe(iframes[i]);
            try {
              var doc = iframes[i].contentDocument || (iframes[i].contentWindow && iframes[i].contentWindow.document);
              if (doc) {
                var container = doc.querySelector('.gh-portal-popup-container');
                if (container && container.offsetParent !== null) {
                  anyOpen = true;
                }
              }
            } catch (e) {}
          }

          if (anyOpen || hasPortalHash) {
            setPortalOpenState(true);
          } else {
            setPortalOpenState(false);
          }
        }

        // Global Listeners for Escape key, click triggers, and hash changes
        window.addEventListener('keydown', function(e) {
          if (e.key === 'Escape' || e.key === 'Esc') {
            var iframes = document.querySelectorAll('iframe[title="portal-popup"]');
            iframes.forEach(function(iframe) {
              try {
                var doc = iframe.contentDocument || (iframe.contentWindow && iframe.contentWindow.document);
                var closeBtn = doc && doc.querySelector('button[data-test-button="close-popup"], .gh-portal-closeicon-container');
                if (closeBtn) closeBtn.click();
              } catch (err) {}
            });
            if (window.location.hash && window.location.hash.indexOf('#/portal') !== -1) {
              try {
                history.pushState('', document.title, window.location.pathname + window.location.search);
              } catch (err) {
                window.location.hash = '';
              }
            }
            setPortalOpenState(false);
          }
        });

        window.addEventListener('hashchange', function() {
          if (!window.location.hash || window.location.hash.indexOf('#/portal') === -1 || window.location.hash.indexOf('logout') !== -1) {
            setPortalOpenState(false);
            if (window.location.hash && window.location.hash.indexOf('logout') !== -1) {
              if (window.history && window.history.replaceState) {
                window.history.replaceState({}, document.title, window.location.pathname + window.location.search);
              } else {
                window.location.hash = '';
              }
            }
          } else {
            setPortalOpenState(true);
          }
        });

        var skeletonTimeout = null;
        document.addEventListener('click', function(e) {
          var trigger = e.target.closest && e.target.closest('a[href*="#/portal"], [data-portal], button[data-portal]');
          if (trigger) {
            var skel = document.getElementById('ap-portal-skeleton');
            if (skel) {
              skel.classList.remove('hidden');
              skel.style.display = 'flex';
            }
            setPortalOpenState(true);

            // Safety timeout: automatically dismiss skeleton after 3 seconds if portal doesn't render
            if (skeletonTimeout) clearTimeout(skeletonTimeout);
            skeletonTimeout = setTimeout(function() {
              if (skel) {
                skel.style.display = 'none';
                skel.classList.add('hidden');
              }
            }, 3000);
          }

          // Allow clicking skeleton backdrop to dismiss
          var skelEl = document.getElementById('ap-portal-skeleton');
          if (skelEl && e.target === skelEl) {
            skelEl.style.display = 'none';
            skelEl.classList.add('hidden');
            setPortalOpenState(false);
            if (window.location.hash && window.location.hash.indexOf('#/portal') !== -1) {
              try {
                history.pushState('', document.title, window.location.pathname + window.location.search);
              } catch (err) {
                window.location.hash = '';
              }
            }
          }
        });

        var hostObs = new MutationObserver(scanIframes);
        if (document.body) {
          hostObs.observe(document.body, { childList: true, subtree: true });
        } else {
          hostObs.observe(document.documentElement, { childList: true, subtree: true });
          document.addEventListener('DOMContentLoaded', function() {
            if (document.body) {
              hostObs.disconnect();
              hostObs.observe(document.body, { childList: true, subtree: true });
              scanIframes();
            }
          });
        }
        // BFCache (Back/Forward Cache) & History Restoration Handler
        window.addEventListener('pageshow', function(event) {
          if (event && event.persisted) {
            if (window.AP_SESSION) window.AP_SESSION.get();
            window.dispatchEvent(new CustomEvent('ap:member-sync'));
            if (typeof window.AP_UPDATE_MEMBER_STATUS === 'function') {
              window.AP_UPDATE_MEMBER_STATUS();
            }
          }
        });
      })();
    </script><script>
      (function initBroadstreet() {
        if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') {
          return;
        }
        window.broadstreetKeywords = window.broadstreetKeywords || [];
        window.broadstreetTargets = window.broadstreetTargets || {};
        window.broadstreet = window.broadstreet || { run: [] };

        var isWatched = false;
        function triggerWatch() {
          if (isWatched) return;
          if (typeof broadstreet !== 'undefined' && broadstreet.watch) {
            isWatched = true;
            broadstreet.watch();
          }
        }

        window.broadstreet.run.push(triggerWatch);
        if (document.readyState === 'loading') {
          document.addEventListener('DOMContentLoaded', triggerWatch);
        } else {
          triggerWatch();
        }
        document.addEventListener('astro:page-load', function () {
          if (typeof broadstreet !== 'undefined' && broadstreet.watch) {
            broadstreet.watch();
          }
        });

        var s1 = document.createElement('script');
        s1.async = true;
        s1.src = 'https://flux.broadstreet.ai/emit/11108.js?ver=1.0.0';
        document.head.appendChild(s1);

        var s2 = document.createElement('script');
        s2.async = true;
        s2.setAttribute('data-cfasync', 'false');
        s2.src = 'https://cdn.broadstreetads.com/init-2.min.js';
        document.head.appendChild(s2);
      })();
    </script><meta property="og:site_name" content="Anchorage Press"><meta property="og:locale" content="en_US"><meta property="og:title" content="Results suggest left-leaning voters buoyed Petersburg Sullivan in Alaska's U.S. Senate primary"><meta property="og:description" content="In urban areas where the leading Democrat performed well, the retired teacher from Petersburg also saw strong results."><meta property="og:image" content="https://anchoragepress.com/assets/article-images/results-suggest-left-leaning-voters-buoyed-petersburg-sullivan-in-alaskas-u-s-senate-primary.webp"><meta property="og:type" content="article"><meta property="og:url" content="https://anchoragepress.com/results-suggest-left-leaning-voters-buoyed-petersburg-sullivan-in-alaskas-u-s-senate-primary/"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content="@anchoragepress"><meta name="twitter:creator" content="@anchoragepress"><meta name="twitter:title" content="Results suggest left-leaning voters buoyed Petersburg Sullivan in Alaska's U.S. Senate primary"><meta name="twitter:description" content="In urban areas where the leading Democrat performed well, the retired teacher from Petersburg also saw strong results."><meta name="twitter:image" content="https://anchoragepress.com/assets/article-images/results-suggest-left-leaning-voters-buoyed-petersburg-sullivan-in-alaskas-u-s-senate-primary.webp"><meta name="geo.region" content="US-AK"><meta name="geo.country" content="US"><meta name="geo.placename" content="Anchorage, Alaska"><meta name="geo.position" content="61.2181;-149.9003"><meta name="ICBM" content="61.2181, -149.9003"><meta name="coverage" content="Anchorage, Mat-Su, Eagle River, Girdwood, Southcentral Alaska, Statewide Alaska"><meta name="distribution" content="Global"><script type="application/ld+json">{"@context":"https://schema.org","@type":"NewsMediaOrganization","name":"Anchorage Press","alternateName":["The Anchorage Press","The Press","Anchorage Press Alt-Weekly"],"url":"https://anchoragepress.com","logo":{"@type":"ImageObject","url":"https://anchoragepress.com/assets/images/anchoragepress-logo.png","width":600,"height":120},"foundingDate":"1992","description":"Independent local news, arts, culture, food, music, and investigative reporting for Anchorage and Alaska.","address":{"@type":"PostalAddress","streetAddress":"PO Box 200022","addressLocality":"Anchorage","addressRegion":"AK","postalCode":"99520","addressCountry":"US"},"geo":{"@type":"GeoCoordinates","latitude":61.2181,"longitude":-149.9003},"areaServed":[{"@type":"City","name":"Anchorage","sameAs":"https://en.wikipedia.org/wiki/Anchorage,_Alaska"},{"@type":"AdministrativeArea","name":"Alaska","sameAs":"https://en.wikipedia.org/wiki/Alaska"}],"publishingPrinciples":"https://anchoragepress.com/about/values-policies-actions","correctionsPolicy":"https://anchoragepress.com/corrections","ethicsPolicy":"https://anchoragepress.com/about/values-policies-actions","diversityPolicy":"https://anchoragepress.com/about/values-policies-actions","knowsAbout":["Alaska Politics and Public Policy","Anchorage Municipal Government","Alaska Resource Extraction and Energy","Cook Inlet Natural Gas","Alaska Commercial Fisheries and Bycatch","Alaska Arts, Culture, and Native Heritage","Southcentral Alaska Live Music and Events","Investigative Journalism"],"sameAs":["https://x.com/anchoragepress","https://twitter.com/anchoragepress","https://www.facebook.com/anchoragepress","https://instagram.com/anchpress"]}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Anchorage Press","url":"https://anchoragepress.com","potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://anchoragepress.com/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"NewsArticle","headline":"Results suggest left-leaning voters buoyed Petersburg Sullivan in Alaska's U.S. Senate primary — Anchorage Press","description":"In urban areas where the leading Democrat performed well, the retired teacher from Petersburg also saw strong results.","image":["https://anchoragepress.com/assets/article-images/results-suggest-left-leaning-voters-buoyed-petersburg-sullivan-in-alaskas-u-s-senate-primary.webp"],"datePublished":"2026-08-28T11:30:40.000-08:00","dateModified":"2026-08-28T11:30:40.000-08:00","mainEntityOfPage":{"@type":"WebPage","@id":"https://anchoragepress.com/results-suggest-left-leaning-voters-buoyed-petersburg-sullivan-in-alaskas-u-s-senate-primary/"},"author":[{"@type":"Person","name":"Nathaniel Herz","url":"https://anchoragepress.com/author/nathaniel-herz/"}],"publisher":{"@context":"https://schema.org","@type":"NewsMediaOrganization","name":"Anchorage Press","alternateName":["The Anchorage Press","The Press","Anchorage Press Alt-Weekly"],"url":"https://anchoragepress.com","logo":{"@type":"ImageObject","url":"https://anchoragepress.com/assets/images/anchoragepress-logo.png","width":600,"height":120},"foundingDate":"1992","description":"Independent local news, arts, culture, food, music, and investigative reporting for Anchorage and Alaska.","address":{"@type":"PostalAddress","streetAddress":"PO Box 200022","addressLocality":"Anchorage","addressRegion":"AK","postalCode":"99520","addressCountry":"US"},"geo":{"@type":"GeoCoordinates","latitude":61.2181,"longitude":-149.9003},"areaServed":[{"@type":"City","name":"Anchorage","sameAs":"https://en.wikipedia.org/wiki/Anchorage,_Alaska"},{"@type":"AdministrativeArea","name":"Alaska","sameAs":"https://en.wikipedia.org/wiki/Alaska"}],"publishingPrinciples":"https://anchoragepress.com/about/values-policies-actions","correctionsPolicy":"https://anchoragepress.com/corrections","ethicsPolicy":"https://anchoragepress.com/about/values-policies-actions","diversityPolicy":"https://anchoragepress.com/about/values-policies-actions","knowsAbout":["Alaska Politics and Public Policy","Anchorage Municipal Government","Alaska Resource Extraction and Energy","Cook Inlet Natural Gas","Alaska Commercial Fisheries and Bycatch","Alaska Arts, Culture, and Native Heritage","Southcentral Alaska Live Music and Events","Investigative Journalism"],"sameAs":["https://x.com/anchoragepress","https://twitter.com/anchoragepress","https://www.facebook.com/anchoragepress","https://instagram.com/anchpress"]},"isAccessibleForFree":true,"inLanguage":"en-US","articleSection":"Dan Sullivan","speakable":{"@type":"SpeakableSpecification","cssSelector":["h1",".article-deck",".article-lead-p"]}}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://anchoragepress.com"},{"@type":"ListItem","position":2,"name":"Dan Sullivan","item":"https://anchoragepress.com/dan-sullivan/"},{"@type":"ListItem","position":3,"name":"Results suggest left-leaning voters buoyed Petersburg Sullivan in Alaska's U.S. Senate primary — Anchorage Press","item":"https://anchoragepress.com/results-suggest-left-leaning-voters-buoyed-petersburg-sullivan-in-alaskas-u-s-senate-primary/"}]}</script><link rel="alternate" type="application/rss+xml" title="Anchorage Press RSS" href="/rss.xml"><link rel="stylesheet" href="/_astro/_slug_.DmwU1uy_.css">
<link rel="stylesheet" href="/_astro/_slug_.C4biycLW.css">
<style>broadstreet-zone{display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}broadstreet-zone .broadstreet-ad,broadstreet-zone>div{display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important;max-width:100%!important}broadstreet-zone img,broadstreet-zone picture,broadstreet-zone iframe{max-width:100%!important;height:auto!important;display:block!important;margin:0 auto!important}.ad-slot-billboard broadstreet-zone img,.ad-slot-category-banner broadstreet-zone img,.ad-slot-inline broadstreet-zone img{width:100%!important;max-width:970px!important;height:auto!important;object-fit:contain!important}.ad-slot-sidebar,.ad-slot-sidebar broadstreet-zone,.ad-slot-sidebar-halfpage,.ad-slot-sidebar-halfpage broadstreet-zone{max-width:300px!important;overflow:hidden!important}.ad-slot-sidebar broadstreet-zone img,.ad-slot-sidebar-halfpage broadstreet-zone img{max-width:100%!important;height:auto!important;object-fit:contain!important}
</style></head> <body class="min-h-screen bg-paper text-ink selection:bg-black selection:text-emerald-400 pb-16 md:pb-0">  <div id="ap-portal-skeleton" class="hidden fixed inset-0 z-[999998] bg-black/70 backdrop-blur-sm items-center justify-center p-4 pointer-events-none transition-opacity duration-200" aria-hidden="true" style="display: none;"> <div class="border-3 border-black bg-[#FCFBF7] w-[30vw] min-w-[360px] max-w-[520px] h-[390px] shadow-[8px_8px_0px_#000] p-6 flex flex-col justify-between animate-pulse pointer-events-auto"> <div class="flex items-center justify-between border-b-2 border-black/10 pb-3"> <div class="h-6 w-36 bg-neutral-300"></div> <div class="size-7 border-2 border-black bg-white"></div> </div> <div class="space-y-3.5 my-auto"> <div class="h-4 w-2/3 bg-neutral-200 mx-auto"></div> <div class="h-10 w-full bg-white border-2 border-black/20"></div> <div class="h-10 w-full bg-white border-2 border-black/20"></div> </div> <div class="h-11 w-full bg-[#FEB619] border-2.5 border-black shadow-[3px_3px_0px_#000] flex items-center justify-center"> <span class="font-heavy text-xs uppercase tracking-wider text-black">CONNECTING TO READER ACCOUNT...</span> </div> </div> </div>  <a href="#main" class="sr-only focus:not-sr-only focus:fixed focus:top-3 focus:left-3 focus:z-50 focus:bg-[#FEB619] focus:text-black focus:border-2 focus:border-black focus:px-4 focus:py-2 font-heavy text-xs uppercase shadow-[4px_4px_0px_#000] focus:outline-none">
Skip to main content
</a> <div id="a11y-container">  <button type="button" id="a11y-toggle-btn" aria-label="Open Accessibility Options" aria-expanded="false" aria-controls="a11y-panel" class="hidden md:flex fixed left-0 bottom-[5%] z-40 bg-yellow-400 text-black border-2 border-r-4 border-black p-3 rounded-r-xl shadow-[4px_4px_0px_#000] hover:bg-white hover:shadow-[6px_6px_0px_#00e676] hover:scale-105 active:scale-95 transition-all cursor-pointer group focus:outline-none focus:ring-2 focus:ring-black a11y-toggle-trigger"> <div class="flex flex-col items-center gap-1"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-accessibility size-6 text-black transition-transform group-hover:rotate-12">  <circle cx="16" cy="4" r="1"></circle> <path d="m18 19 1-7-6 1"></path> <path d="m5 8 3-3 5.5 3-2.36 3.5"></path> <path d="M4.24 14.5a5 5 0 0 0 6.88 6"></path> <path d="M13.76 17.5a5 5 0 0 0-6.88-6"></path>  </svg> <span class="font-heavy text-[9px] uppercase tracking-widest leading-none text-black">A11Y</span> </div> </button>  <div id="a11y-backdrop" class="fixed inset-0 z-[90] bg-black/50 backdrop-blur-sm hidden opacity-0 transition-opacity duration-300" aria-hidden="true"></div>  <aside id="a11y-panel" aria-label="Accessibility Options Menu" aria-hidden="true" inert class="fixed top-0 left-0 bottom-0 z-[95] w-80 max-w-[85vw] bg-[#fcfbf7] text-black border-r-4 border-black shadow-[10px_0px_30px_rgba(0,0,0,0.5)] -translate-x-full transition-transform duration-300 ease-out flex flex-col h-full overflow-hidden">  <div class="bg-black text-white p-5 border-b-4 border-black flex items-center justify-between shrink-0"> <div class="flex items-center gap-2"> <span class="bg-yellow-400 text-black px-2 py-0.5 font-heavy text-xs uppercase border border-black">A11Y</span> <h2 class="headline-heavy text-xl text-white tracking-wide uppercase">ACCESSIBILITY</h2> </div> <button type="button" id="a11y-close-btn" aria-label="Close Accessibility Menu" class="size-9 bg-neutral-800 text-white border-2 border-white hover:bg-red-600 hover:border-black font-heavy text-lg flex items-center justify-center transition-all cursor-pointer rounded"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-x size-5 text-white">  <path d="M18 6 6 18"></path> <path d="m6 6 12 12"></path>  </svg> </button> </div>  <div class="p-5 overflow-y-auto space-y-6 flex-1"> <p class="font-sans text-xs text-neutral-700 leading-relaxed border-b-2 border-neutral-300 pb-3">
Customize text size, contrast, spacing, and visual enhancements for optimum reading comfort across Alaska.
</p>  <div class="space-y-2"> <label class="font-heavy text-xs uppercase tracking-wider text-black block">TEXT SIZE</label> <div class="grid grid-cols-3 gap-2"> <button type="button" id="btn-font-sm" class="a11y-opt-btn bg-white border-2 border-black py-2 text-xs font-heavy uppercase shadow-[2px_2px_0px_#000] hover:bg-yellow-300 transition-all">A- (Small)</button> <button type="button" id="btn-font-md" class="a11y-opt-btn bg-white border-2 border-black py-2 text-xs font-heavy uppercase shadow-[2px_2px_0px_#000] hover:bg-yellow-300 transition-all">Normal</button> <button type="button" id="btn-font-lg" class="a11y-opt-btn bg-white border-2 border-black py-2 text-xs font-heavy uppercase shadow-[2px_2px_0px_#000] hover:bg-yellow-300 transition-all">A+ (Large)</button> </div> </div>  <div class="space-y-2"> <label class="font-heavy text-xs uppercase tracking-wider text-black block">CONTRAST & THEME</label> <div class="grid grid-cols-3 gap-1.5"> <button type="button" id="btn-contrast-high" class="a11y-toggle-btn bg-white border-2 border-black py-2 px-1.5 text-[10px] font-heavy uppercase shadow-[2px_2px_0px_#000] hover:bg-emerald-300 transition-all flex flex-col items-center gap-1"> <span>High Contrast</span> <span class="indicator size-2.5 border border-black bg-neutral-200"></span> </button> <button type="button" id="btn-contrast-dark" class="a11y-toggle-btn bg-white border-2 border-black py-2 px-1.5 text-[10px] font-heavy uppercase shadow-[2px_2px_0px_#000] hover:bg-emerald-300 transition-all flex flex-col items-center gap-1"> <span>Night Mode</span> <span class="indicator size-2.5 border border-black bg-neutral-200"></span> </button> <button type="button" id="btn-contrast-invert" class="a11y-toggle-btn bg-white border-2 border-black py-2 px-1.5 text-[10px] font-heavy uppercase shadow-[2px_2px_0px_#000] hover:bg-emerald-300 transition-all flex flex-col items-center gap-1"> <span>Inverted</span> <span class="indicator size-2.5 border border-black bg-neutral-200"></span> </button> </div> </div>  <div class="space-y-2"> <label class="font-heavy text-xs uppercase tracking-wider text-black block">TYPOGRAPHY ENHANCEMENT</label> <button type="button" id="btn-dyslexia" class="w-full bg-white border-2 border-black py-2.5 px-3 text-xs font-heavy uppercase shadow-[2px_2px_0px_#000] hover:bg-yellow-300 transition-all flex items-center justify-between"> <span>Dyslexia-Friendly Font</span> <span class="indicator size-3 border border-black bg-neutral-200"></span> </button> <button type="button" id="btn-spacing" class="w-full bg-white border-2 border-black py-2.5 px-3 text-xs font-heavy uppercase shadow-[2px_2px_0px_#000] hover:bg-yellow-300 transition-all flex items-center justify-between"> <span>Increased Line Spacing</span> <span class="indicator size-3 border border-black bg-neutral-200"></span> </button> </div>  <div class="space-y-2"> <label class="font-heavy text-xs uppercase tracking-wider text-black block">VISUAL HELPER</label> <button type="button" id="btn-highlight-links" class="w-full bg-white border-2 border-black py-2.5 px-3 text-xs font-heavy uppercase shadow-[2px_2px_0px_#000] hover:bg-emerald-300 transition-all flex items-center justify-between"> <span>Highlight All Links</span> <span class="indicator size-3 border border-black bg-neutral-200"></span> </button> <button type="button" id="btn-stop-animations" class="w-full bg-white border-2 border-black py-2.5 px-3 text-xs font-heavy uppercase shadow-[2px_2px_0px_#000] hover:bg-emerald-300 transition-all flex items-center justify-between"> <span>Stop Animations</span> <span class="indicator size-3 border border-black bg-neutral-200"></span> </button> </div> </div>  <div class="p-4 bg-neutral-200 border-t-2 border-black shrink-0"> <button type="button" id="btn-a11y-reset" class="w-full bg-black text-white hover:bg-red-600 font-heavy text-xs uppercase py-3 border-2 border-black shadow-[3px_3px_0px_#000] transition-colors cursor-pointer">
RESET ALL ACCESSIBILITY SETTINGS
</button> </div> </aside> </div>  <script>
  document.addEventListener('DOMContentLoaded', () => {
    const toggleTriggers = document.querySelectorAll('.a11y-toggle-trigger');
    const closeBtn = document.getElementById('a11y-close-btn');
    const backdrop = document.getElementById('a11y-backdrop');
    const panel = document.getElementById('a11y-panel');

    if (!panel) return;

    function openPanel() {
      panel.classList.remove('-translate-x-full');
      backdrop.classList.remove('hidden');
      setTimeout(() => backdrop.classList.remove('opacity-0'), 10);
      toggleTriggers.forEach(t => t.setAttribute('aria-expanded', 'true'));
      panel.setAttribute('aria-hidden', 'false');
      panel.removeAttribute('inert');
    }

    function closePanel() {
      panel.classList.add('-translate-x-full');
      backdrop.classList.add('opacity-0');
      setTimeout(() => backdrop.classList.add('hidden'), 300);
      toggleTriggers.forEach(t => t.setAttribute('aria-expanded', 'false'));
      panel.setAttribute('aria-hidden', 'true');
      panel.setAttribute('inert', '');
    }

    toggleTriggers.forEach(btn => btn.addEventListener('click', openPanel));
    closeBtn?.addEventListener('click', closePanel);
    backdrop?.addEventListener('click', closePanel);

    // Feature Toggles and State Persistence
    const state = JSON.parse(localStorage.getItem('anc_a11y_state') || '{}');

    function applyState() {
      const root = document.documentElement;
      root.classList.toggle('a11y-font-sm', state.fontSize === 'sm');
      root.classList.toggle('a11y-font-lg', state.fontSize === 'lg');
      root.classList.toggle('a11y-contrast-high', !!state.contrastHigh);
      root.classList.toggle('a11y-contrast-dark', !!state.contrastDark);
      root.classList.toggle('a11y-contrast-invert', !!state.contrastInvert);
      root.classList.toggle('a11y-dyslexia', !!state.dyslexia);
      root.classList.toggle('a11y-spacing', !!state.spacing);
      root.classList.toggle('a11y-highlight-links', !!state.highlightLinks);
      root.classList.toggle('a11y-no-anim', !!state.noAnim);

      // Explicit inline font-size and dynamic stylesheet for instant DOM scaling
      let fontStyleEl = document.getElementById('a11y-dynamic-font-style');
      if (!fontStyleEl) {
        fontStyleEl = document.createElement('style');
        fontStyleEl.id = 'a11y-dynamic-font-style';
        document.head.appendChild(fontStyleEl);
      }
      if (state.fontSize === 'sm') {
        root.style.fontSize = '85%';
        document.body.style.fontSize = '85%';
        fontStyleEl.textContent = `
          html, body { font-size: 85% !important; }
          body, article, p, h1, h2, h3, h4, h5, h6, li, a { font-size: 0.85em !important; }
        `;
      } else if (state.fontSize === 'lg') {
        root.style.fontSize = '125%';
        document.body.style.fontSize = '125%';
        fontStyleEl.textContent = `
          html, body { font-size: 125% !important; }
          body, article, p, h1, h2, h3, h4, h5, h6, li, a { font-size: 1.22em !important; }
        `;
      } else {
        root.style.fontSize = '';
        document.body.style.fontSize = '';
        fontStyleEl.textContent = '';
      }

      // Update font size active buttons
      const btnSm = document.getElementById('btn-font-sm');
      const btnMd = document.getElementById('btn-font-md');
      const btnLg = document.getElementById('btn-font-lg');
      [btnSm, btnMd, btnLg].forEach(b => {
        if (b) { b.classList.remove('bg-yellow-400'); b.classList.add('bg-white'); }
      });
      if (state.fontSize === 'sm' && btnSm) { btnSm.classList.remove('bg-white'); btnSm.classList.add('bg-yellow-400'); }
      else if (state.fontSize === 'lg' && btnLg) { btnLg.classList.remove('bg-white'); btnLg.classList.add('bg-yellow-400'); }
      else if (btnMd) { btnMd.classList.remove('bg-white'); btnMd.classList.add('bg-yellow-400'); }

      // Update button indicators
      updateIndicator('btn-contrast-high', !!state.contrastHigh);
      updateIndicator('btn-contrast-dark', !!state.contrastDark);
      updateIndicator('btn-contrast-invert', !!state.contrastInvert);
      updateIndicator('btn-dyslexia', !!state.dyslexia);
      updateIndicator('btn-spacing', !!state.spacing);
      updateIndicator('btn-highlight-links', !!state.highlightLinks);
      updateIndicator('btn-stop-animations', !!state.noAnim);

      localStorage.setItem('anc_a11y_state', JSON.stringify(state));
    }

    function updateIndicator(id, active) {
      const btn = document.getElementById(id);
      if (!btn) return;
      const ind = btn.querySelector('.indicator');
      if (ind) {
        if (active) {
          ind.classList.remove('bg-neutral-200');
          ind.classList.add('bg-emerald-500');
        } else {
          ind.classList.remove('bg-emerald-500');
          ind.classList.add('bg-neutral-200');
        }
      }
    }

    // Font size handlers
    document.getElementById('btn-font-sm')?.addEventListener('click', () => { state.fontSize = 'sm'; applyState(); });
    document.getElementById('btn-font-md')?.addEventListener('click', () => { state.fontSize = 'md'; applyState(); });
    document.getElementById('btn-font-lg')?.addEventListener('click', () => { state.fontSize = 'lg'; applyState(); });

    // Toggles
    document.getElementById('btn-contrast-high')?.addEventListener('click', () => {
      state.contrastHigh = !state.contrastHigh;
      if (state.contrastHigh) { state.contrastDark = false; state.contrastInvert = false; }
      applyState();
    });
    document.getElementById('btn-contrast-dark')?.addEventListener('click', () => {
      state.contrastDark = !state.contrastDark;
      if (state.contrastDark) { state.contrastHigh = false; state.contrastInvert = false; }
      applyState();
    });
    document.getElementById('btn-contrast-invert')?.addEventListener('click', () => {
      state.contrastInvert = !state.contrastInvert;
      if (state.contrastInvert) { state.contrastHigh = false; state.contrastDark = false; }
      applyState();
    });
    document.getElementById('btn-dyslexia')?.addEventListener('click', () => { state.dyslexia = !state.dyslexia; applyState(); });
    document.getElementById('btn-spacing')?.addEventListener('click', () => { state.spacing = !state.spacing; applyState(); });
    document.getElementById('btn-highlight-links')?.addEventListener('click', () => { state.highlightLinks = !state.highlightLinks; applyState(); });
    document.getElementById('btn-stop-animations')?.addEventListener('click', () => { state.noAnim = !state.noAnim; applyState(); });

    // Reset All
    document.getElementById('btn-a11y-reset')?.addEventListener('click', () => {
      Object.keys(state).forEach(k => delete state[k]);
      applyState();
    });

    applyState();
  });
</script> <div id="floating-subscribe-container">  <button type="button" id="floating-subscribe-btn" aria-label="Subscribe to Anchorage Press" data-portal="signup" style="transform: translateX(0); transition: transform 0.3s ease-out, opacity 0.3s ease-out;" class="hidden md:flex fixed right-0 bottom-[5%] z-40 bg-yellow-400 text-black border-2 border-r-0 border-l-4 border-black py-2.5 px-2.5 rounded-l-xl shadow-[-3px_3px_0px_#000] hover:bg-white hover:shadow-[-5px_5px_0px_#FEB619] hover:-translate-x-1 active:scale-95 cursor-pointer group focus:outline-none focus:ring-2 focus:ring-black"> <div class="flex flex-col items-center gap-1"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-newspaper size-5 text-black transition-transform group-hover:-rotate-12">  <path d="M15 18h-5"></path> <path d="M18 14h-8"></path> <path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2"></path> <rect width="8" height="4" x="10" y="6" rx="1"></rect>  </svg> <span id="floating-subscribe-label" class="font-heavy text-[8px] uppercase tracking-widest leading-none text-black">SUBSCRIBE</span> </div> </button> </div> <script>
  (function initFloatingSubscribe() {
    var btn = document.getElementById('floating-subscribe-btn');
    var label = document.getElementById('floating-subscribe-label');

    function updateStatus() {
      try {
        var token = sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token');
        var email = token ? localStorage.getItem('ghost-member-email') : '';
        if (!btn || !label) return;

        if (email) {
          label.textContent = 'MEMBER';
          btn.removeAttribute('data-portal');
          btn.setAttribute('aria-label', 'Anchorage Press Member Hub');
          btn.classList.remove('bg-yellow-400');
          btn.classList.add('bg-[#FEB619]');
        } else {
          label.textContent = 'SUBSCRIBE';
          btn.setAttribute('data-portal', 'signup');
          btn.setAttribute('aria-label', 'Subscribe to Anchorage Press');
          btn.classList.remove('bg-[#FEB619]');
          btn.classList.add('bg-yellow-400');
        }
      } catch (e) {}
    }

    function setupClick() {
      if (!btn || btn.__ap_bound) return;
      btn.__ap_bound = true;

      btn.addEventListener('click', function(e) {
        e.preventDefault();
        // Close article tools rail if it was open so only portal shows
        window.dispatchEvent(new CustomEvent('ap:rail-close'));
        var token = sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token');
        var email = token ? localStorage.getItem('ghost-member-email') : '';
        if (email) {
          window.location.href = '/account';
        } else {
          window.location.hash = '#/portal/signup';
        }
      });
    }

    // Mutual exclusivity: When Article Tools rail is open (master), collapse/hide subscribe button
    window.addEventListener('ap:rail-state', function(e) {
      if (!btn) return;
      if (e.detail && e.detail.open) {
        btn.style.setProperty('transform', 'translateX(calc(100% + 24px))', 'important');
        btn.style.setProperty('opacity', '0', 'important');
        btn.style.setProperty('pointer-events', 'none', 'important');
      } else {
        btn.style.setProperty('transform', 'translateX(0)', 'important');
        btn.style.setProperty('opacity', '1', 'important');
        btn.style.setProperty('pointer-events', 'auto', 'important');
      }
    });

    if (btn && !btn.__ap_hover_bound) {
      btn.__ap_hover_bound = true;
      btn.addEventListener('mouseenter', function() {
        var rail = document.getElementById('article-utility-rail');
        if (!rail || rail.getAttribute('data-open') !== 'true') {
          btn.style.setProperty('transform', 'translateX(-4px)', 'important');
        }
      });
      btn.addEventListener('mouseleave', function() {
        var rail = document.getElementById('article-utility-rail');
        if (!rail || rail.getAttribute('data-open') !== 'true') {
          btn.style.setProperty('transform', 'translateX(0)', 'important');
        }
      });
    }

    updateStatus();
    setupClick();
    window.addEventListener('ap:member-sync', updateStatus);
    document.addEventListener('astro:page-load', function() {
      updateStatus();
      setupClick();
    });
  })();
</script>  <div class="md:hidden">  <header id="mobile-top-header" class="fixed top-0 left-0 right-0 z-50 bg-black text-white border-b-2 border-neutral-800 h-14 px-4 flex items-center justify-between shadow-md transition-all duration-300 ease-out -translate-y-full opacity-0 pointer-events-none"> <a href="/" class="flex items-center shrink-0 py-1" aria-label="Anchorage Press Home"> <img src="/assets/images/anchoragepress-stacked-white.svg" alt="ANCHORAGE PRESS" class="h-9 w-auto object-contain"> </a>  <div class="flex items-center gap-1"> <button type="button" id="mobile-header-account-btn" aria-label="Reader Account & Membership" class="relative size-12 flex items-center justify-center text-white hover:text-[#FEB619] transition-colors rounded focus:outline-none focus:ring-2 focus:ring-yellow-400 touch-manipulation cursor-pointer"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" class="lucide lucide-user size-6 text-white hover:text-[#FEB619] transition-colors">  <path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path> <circle cx="12" cy="7" r="4"></circle>  </svg> <span id="mobile-header-account-pulse" class="hidden absolute top-2.5 right-2.5 size-2 rounded-full bg-emerald-500 animate-pulse"></span> </button>  <button type="button" id="mobile-menu-toggle" aria-label="Open menu" aria-expanded="false" aria-controls="mobile-menu-overlay" class="group size-12 flex items-center justify-center rounded focus:outline-none focus:ring-2 focus:ring-yellow-400 touch-manipulation cursor-pointer"> <div class="w-6 h-5 relative flex flex-col justify-between transition-transform duration-200 group-hover:rotate-6"> <span id="hamb-line-1" class="w-full h-0.5 bg-white transition-all duration-200 origin-left"></span> <span id="hamb-line-2" class="w-full h-0.5 bg-white transition-all duration-200"></span> <span id="hamb-line-3" class="w-full h-0.5 bg-white transition-all duration-200 origin-left"></span> </div> </button> </div> </header>  <nav id="mobile-menu-overlay" aria-label="Mobile navigation" aria-hidden="true" class="fixed inset-0 top-14 z-[100] bg-[#fcfbf7] text-ink flex flex-col hidden opacity-0 transition-all duration-300 ease-out overflow-y-auto" style="height: calc(100dvh - 3.5rem); padding-bottom: max(8rem, calc(env(safe-area-inset-bottom) + 6rem));"> <div class="mx-auto w-full max-w-xl px-5 py-6 pb-32 space-y-7">  <section id="mobile-menu-account-card" aria-label="Reader Account & Membership" class="border-3 border-black bg-white p-4 shadow-[4px_4px_0px_#000] relative">  <div id="mobile-menu-auth-state" class="hidden"> <div class="flex items-center justify-between gap-3 mb-2.5"> <div class="flex items-center gap-2.5 min-w-0"> <div id="mobile-menu-member-avatar" class="size-9 rounded-full bg-black text-[#FEB619] border-2 border-black flex items-center justify-center font-heavy text-xs shrink-0 shadow-[2px_2px_0px_#FEB619]">
AP
</div> <div class="min-w-0"> <div class="flex items-center gap-1.5"> <span class="relative flex size-2 shrink-0"> <span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75"></span> <span class="relative inline-flex rounded-full size-2 bg-emerald-500"></span> </span> <span id="mobile-menu-member-name" class="font-heavy text-sm uppercase tracking-wide text-black truncate block">
MEMBER
</span> </div> <span id="mobile-menu-member-email" class="text-xs text-neutral-600 font-sans truncate block">
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3341565257564173564b525e435f561d505c5e">[email&#160;protected]</a>
</span> </div> </div> <span id="mobile-menu-member-tier" class="shrink-0 bg-[#FEB619] text-black font-heavy text-[10px] uppercase tracking-widest px-2.5 py-1 border border-black shadow-[2px_2px_0px_#000]">
MEMBER ✓
</span> </div>  <div id="mobile-menu-address-box" class="mt-2.5 pt-2 border-t border-dashed border-black/20"> <div id="mobile-menu-address-has" class="hidden flex items-center justify-between text-xs text-neutral-800 font-sans"> <span class="truncate">📍 <strong id="mobile-menu-address-text" class="font-bold">Print Delivery Active</strong></span> <a href="https://cms.anchoragepress.com/account/" class="text-black font-heavy text-[11px] underline underline-offset-2 hover:text-[#FEB619] shrink-0 ml-1.5 no-underline">
Edit ✎
</a> </div> <a id="mobile-menu-address-none" href="https://cms.anchoragepress.com/account/" class="flex items-center justify-between bg-amber-50 border border-amber-300 p-2 text-xs font-sans text-neutral-900 hover:bg-amber-100 transition-colors no-underline"> <div class="flex items-center gap-1.5 min-w-0"> <span class="text-sm shrink-0">📦</span> <span class="text-[11px] font-semibold text-neutral-800 leading-tight truncate">
No print address on file
</span> </div> <span class="shrink-0 text-[10px] font-heavy uppercase tracking-wider text-black bg-[#FEB619] px-2 py-0.5 border border-black shadow-[1px_1px_0px_#000] ml-1.5">
Add on CMS →
</span> </a> </div> <div class="flex items-center gap-2 pt-2.5 border-t-2 border-black/10 mt-3"> <a href="https://cms.anchoragepress.com/account/" id="mobile-menu-manage-account-btn" class="flex-1 bg-black text-white hover:bg-neutral-800 text-xs font-heavy uppercase tracking-wider py-2 px-3 text-center border-2 border-black shadow-[2px_2px_0px_#000] active:translate-y-0.5 transition-all cursor-pointer flex items-center justify-center gap-1 no-underline">
MANAGE ACCOUNT →
</a> <button type="button" id="mobile-menu-signout-btn" class="bg-[#FCFBF7] hover:bg-red-50 text-neutral-800 hover:text-red-600 text-xs font-heavy uppercase tracking-wider py-2 px-3 border-2 border-black shadow-[2px_2px_0px_#000] active:translate-y-0.5 transition-all cursor-pointer">
SIGN OUT
</button> </div> </div>  <div id="mobile-menu-guest-state" class="block"> <div class="flex items-center justify-between gap-2 mb-2"> <div class="flex items-center gap-2.5"> <div class="size-9 rounded-full bg-black text-[#FEB619] border-2 border-black flex items-center justify-center font-heavy text-xs shrink-0 shadow-[2px_2px_0px_#FEB619]"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" class="lucide lucide-user size-5 text-[#FEB619]">  <path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path> <circle cx="12" cy="7" r="4"></circle>  </svg> </div> <div> <span class="font-heavy text-sm uppercase tracking-wide text-black block">READER ACCOUNT</span> <span class="text-xs text-neutral-600 font-sans block">Sign in to manage delivery & perks</span> </div> </div> <span class="bg-neutral-100 text-neutral-700 font-heavy text-[9px] uppercase tracking-wider px-2 py-0.5 border border-black/30">
NOT SIGNED IN
</span> </div> <div class="grid grid-cols-2 gap-2 mt-3 pt-2.5 border-t-2 border-black/10"> <a href="#/portal/signin" data-portal="signin" id="mobile-menu-signin-btn" class="bg-[#FEB619] text-black hover:bg-yellow-400 font-heavy text-xs uppercase tracking-wider py-2 px-3 text-center border-2 border-black shadow-[2px_2px_0px_#000] active:translate-y-0.5 transition-all cursor-pointer flex items-center justify-center gap-1 no-underline">
SIGN IN →
</a> <a href="/subscribe" data-portal="signup" class="bg-black text-white hover:bg-neutral-800 font-heavy text-xs uppercase tracking-wider py-2 px-3 text-center border-2 border-black shadow-[2px_2px_0px_#000] active:translate-y-0.5 transition-all flex items-center justify-center gap-1">
JOIN / SUBSCRIBE
</a> </div> </div> </section>  <section aria-label="Most Recent Dispatches" class="border-b-4 border-black pb-6"> <div class="flex items-center justify-between mb-4"> <span class="bg-black text-yellow-400 px-3 py-1 font-heavy text-xs uppercase tracking-widest border border-black shadow-[2px_2px_0px_#000]">
MOST RECENT
</span> <a href="/latest/" class="font-heavy text-xs uppercase text-emerald-700 hover:underline">
VIEW ALL →
</a> </div> <div class="no-scrollbar flex gap-4 overflow-x-auto snap-x snap-mandatory py-2"> <a href="/no-trivial-pursuit-lifetime-of-knowledge-pays-off-for-mat-su-jeopardy-champion/" class="snap-start shrink-0 w-[240px] border-2 border-black bg-white p-3 shadow-[4px_4px_0px_#000] active:translate-y-0.5 transition-transform block group"> <div class="aspect-[16/9] w-full overflow-hidden border border-black bg-neutral-100 mb-2.5"> <img src="/assets/article-images/no-trivial-pursuit-lifetime-of-knowledge-pays-off-for-mat-su-jeopardy-champion.webp" alt="No trivial pursuit: Lifetime of knowledge pays off for Mat-Su Jeopardy! champion" class="h-full w-full object-cover group-hover:scale-105 transition-transform duration-300" onerror="this.onerror=null; this.src='/assets/images/image01.png';" loading="lazy"> </div> <div class="flex items-center justify-between text-[10px] font-heavy tracking-wider text-neutral-500 uppercase mb-1"> <span class="text-emerald-700 font-bold truncate max-w-[130px]">arts-culture</span> <span class="shrink-0">Oct 23, 2026</span> </div> <h3 class="headline-serif text-sm font-bold text-black line-clamp-2 leading-snug group-hover:underline"> No trivial pursuit: Lifetime of knowledge pays off for Mat-Su Jeopardy! champion </h3> </a><a href="/theres-no-free-lunch-but-in-anchorage-this-week-theres-really-free-coffee/" class="snap-start shrink-0 w-[240px] border-2 border-black bg-white p-3 shadow-[4px_4px_0px_#000] active:translate-y-0.5 transition-transform block group"> <div class="aspect-[16/9] w-full overflow-hidden border border-black bg-neutral-100 mb-2.5"> <img src="/assets/article-images/theres-no-free-lunch-but-in-anchorage-this-week-theres-really-free-coffee.webp" alt="There’s no free lunch. But in Anchorage this week, there’s really free coffee." class="h-full w-full object-cover group-hover:scale-105 transition-transform duration-300" onerror="this.onerror=null; this.src='/assets/images/image01.png';" loading="lazy"> </div> <div class="flex items-center justify-between text-[10px] font-heavy tracking-wider text-neutral-500 uppercase mb-1"> <span class="text-emerald-700 font-bold truncate max-w-[130px]">arts-culture</span> <span class="shrink-0">Oct 22, 2026</span> </div> <h3 class="headline-serif text-sm font-bold text-black line-clamp-2 leading-snug group-hover:underline"> There’s no free lunch. But in Anchorage this week, there’s really free coffee. </h3> </a><a href="/when-were-divided-we-get-ignored-afns-president-seeks-unity-amid-a-generational-shift/" class="snap-start shrink-0 w-[240px] border-2 border-black bg-white p-3 shadow-[4px_4px_0px_#000] active:translate-y-0.5 transition-transform block group"> <div class="aspect-[16/9] w-full overflow-hidden border border-black bg-neutral-100 mb-2.5"> <img src="/assets/article-images/when-were-divided-we-get-ignored-afns-president-seeks-unity-amid-a-generational-shift.webp" alt="“When we’re divided, we get ignored”: AFN’s president seeks unity amid a generational shift" class="h-full w-full object-cover group-hover:scale-105 transition-transform duration-300" onerror="this.onerror=null; this.src='/assets/images/image01.png';" loading="lazy"> </div> <div class="flex items-center justify-between text-[10px] font-heavy tracking-wider text-neutral-500 uppercase mb-1"> <span class="text-emerald-700 font-bold truncate max-w-[130px]">Alaska Federation of Natives</span> <span class="shrink-0">Oct 22, 2026</span> </div> <h3 class="headline-serif text-sm font-bold text-black line-clamp-2 leading-snug group-hover:underline"> “When we’re divided, we get ignored”: AFN’s president seeks unity amid a generational shift </h3> </a><a href="/igyamcuk-gold-conversation-yupik-artist-advocate-nikki-quluqaaq-corbett/" class="snap-start shrink-0 w-[240px] border-2 border-black bg-white p-3 shadow-[4px_4px_0px_#000] active:translate-y-0.5 transition-transform block group"> <div class="aspect-[16/9] w-full overflow-hidden border border-black bg-neutral-100 mb-2.5"> <img src="/assets/article-images/igyamcuk-gold-conversation-yupik-artist-advocate-nikki-quluqaaq-corbett.webp" alt="Igyamcuk and bricks of gold: A conversation with a Yup’ik artist and advocate" class="h-full w-full object-cover group-hover:scale-105 transition-transform duration-300" onerror="this.onerror=null; this.src='/assets/images/image01.png';" loading="lazy"> </div> <div class="flex items-center justify-between text-[10px] font-heavy tracking-wider text-neutral-500 uppercase mb-1"> <span class="text-emerald-700 font-bold truncate max-w-[130px]">arts-culture</span> <span class="shrink-0">Oct 21, 2026</span> </div> <h3 class="headline-serif text-sm font-bold text-black line-clamp-2 leading-snug group-hover:underline"> Igyamcuk and bricks of gold: A conversation with a Yup’ik artist and advocate </h3> </a><a href="/denaina-alaska-native-heritage-center-exhibition/" class="snap-start shrink-0 w-[240px] border-2 border-black bg-white p-3 shadow-[4px_4px_0px_#000] active:translate-y-0.5 transition-transform block group"> <div class="aspect-[16/9] w-full overflow-hidden border border-black bg-neutral-100 mb-2.5"> <img src="/assets/article-images/denaina-alaska-native-heritage-center-exhibition.webp" alt="Seeing Dena’ina clearly: A new exhibition at the Alaska Native Heritage Center" class="h-full w-full object-cover group-hover:scale-105 transition-transform duration-300" onerror="this.onerror=null; this.src='/assets/images/image01.png';" loading="lazy"> </div> <div class="flex items-center justify-between text-[10px] font-heavy tracking-wider text-neutral-500 uppercase mb-1"> <span class="text-emerald-700 font-bold truncate max-w-[130px]">arts-culture</span> <span class="shrink-0">Oct 20, 2026</span> </div> <h3 class="headline-serif text-sm font-bold text-black line-clamp-2 leading-snug group-hover:underline"> Seeing Dena’ina clearly: A new exhibition at the Alaska Native Heritage Center </h3> </a><a href="/revealed-the-money-behind-the-last-minute-fringe-candidate-ad-blitz-in-alaskas-u-s-senate-primary/" class="snap-start shrink-0 w-[240px] border-2 border-black bg-white p-3 shadow-[4px_4px_0px_#000] active:translate-y-0.5 transition-transform block group"> <div class="aspect-[16/9] w-full overflow-hidden border border-black bg-neutral-100 mb-2.5"> <img src="/assets/article-images/revealed-the-money-behind-the-last-minute-fringe-candidate-ad-blitz-in-alaskas-u-s-senate-primary.webp" alt="Revealed: The money behind the last-minute fringe candidate ad blitz in Alaska’s U.S. Senate primary" class="h-full w-full object-cover group-hover:scale-105 transition-transform duration-300" onerror="this.onerror=null; this.src='/assets/images/image01.png';" loading="lazy"> </div> <div class="flex items-center justify-between text-[10px] font-heavy tracking-wider text-neutral-500 uppercase mb-1"> <span class="text-emerald-700 font-bold truncate max-w-[130px]">U.S. Senate</span> <span class="shrink-0">Oct 16, 2026</span> </div> <h3 class="headline-serif text-sm font-bold text-black line-clamp-2 leading-snug group-hover:underline"> Revealed: The money behind the last-minute fringe candidate ad blitz in Alaska’s U.S. Senate primary </h3> </a> </div> </section>  <section aria-label="Main Navigation Index"> <ul class="divide-y-2 divide-black/20"> <li> <a href="/account" data-portal="account" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">★</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Reader Account &amp; Print Delivery </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/print" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">★</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Print Edition (Out Now) </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/news" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">01</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> News &amp; Dispatches </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/arts-culture" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">02</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Arts &amp; Culture </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/opinion" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">03</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Opinion &amp; Voices </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/events" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">04</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Community Events &amp; Calendar </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/submit/dish-of-the-month" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">05</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Nominate Dish of Month </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/submit/love-and-sex" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">06</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Love &amp; Sex Advice </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/tips" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">07</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Submit Story Pitch / Tip </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/submit/freelance" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">08</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Freelance/Pitch Us </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/about" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">09</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Who We Are (Our Story) </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/get-involved" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">10</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Get Involved &amp; Jobs </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/donate" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">11</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Donate (501c3 Nonprofit) </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/advertise" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">12</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Advertise &amp; Media Kit </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li><li> <a href="/support" class="group flex items-center justify-between py-3.5 transition-colors text-black hover:text-emerald-600"> <div class="flex items-baseline gap-3"> <span class="font-heavy text-xs text-neutral-600">13</span> <span class="headline-heavy text-2xl uppercase tracking-tight"> Support Us (Memberships) </span> </div> <span class="font-heavy text-lg group-hover:translate-x-1.5 transition-transform">
→
</span> </a> </li> </ul> </section>  <section aria-label="Anchorage Press Contact Info" class="border-t-4 border-black pt-6 space-y-4"> <div class="flex items-center justify-between"> <h4 class="headline-heavy text-xl text-black">ANCHORAGE PRESS</h4> <span class="font-heavy text-[11px] uppercase tracking-widest text-emerald-700">
ALASKA'S ALT-WEEKLY
</span> </div> <div class="grid grid-cols-2 gap-4 text-xs font-sans text-neutral-800 border-b-2 border-black/20 pb-4"> <div> <strong class="font-heavy uppercase block text-neutral-600 text-[10px] tracking-wider mb-1">Newsroom & Tips</strong> <p><a href="/cdn-cgi/l/email-protection#dbbebfb2afb4a99bbab5b8b3b4a9babcbeaba9bea8a8f5b8b4b6" class="underline text-emerald-700"><span class="__cf_email__" data-cfemail="b7d2d3dec3d8c5f7d6d9d4dfd8c5d6d0d2c7c5d2c4c499d4d8da">[email&#160;protected]</span></a></p> <p class="mt-1"><a href="/tips" class="font-heavy uppercase text-black hover:underline">Submit a Tip →</a></p> </div> <div> <strong class="font-heavy uppercase block text-neutral-600 text-[10px] tracking-wider mb-1">Advertising & Inquiries</strong> <p><a href="/cdn-cgi/l/email-protection#e28386948790968b918b8c85a2838c818a8d908385879290879191cc818d8f" class="underline text-emerald-700"><span class="__cf_email__" data-cfemail="e28386948790968b918b8c85a2838c818a8d908385879290879191cc818d8f">[email&#160;protected]</span></a></p> <p class="mt-1"><a href="/advertise" class="font-heavy uppercase text-black hover:underline">Rate Card →</a></p> </div> </div> <div class="flex items-center justify-between text-xs font-heavy tracking-wider uppercase text-neutral-600 pt-2"> <span>PO Box 200022, Anchorage, AK 99520</span> <div class="flex items-center gap-3"> <a href="https://instagram.com/anchpress" target="_blank" rel="noopener noreferrer" class="hover:text-black p-1 transition-colors text-neutral-700" title="Instagram (@anchpress)" aria-label="Instagram (@anchpress)"> <svg class="w-4 h-4 fill-current" viewBox="0 0 24 24" aria-hidden="true"> <path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"></path> </svg> </a> <a href="https://facebook.com/anchoragepress" target="_blank" rel="noopener noreferrer" class="hover:text-black p-1 transition-colors text-neutral-700" title="Facebook" aria-label="Facebook"> <svg class="w-4 h-4 fill-current" viewBox="0 0 24 24" aria-hidden="true"> <path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"></path> </svg> </a> <a href="https://x.com/anchoragepress" target="_blank" rel="noopener noreferrer" class="hover:text-black p-1 transition-colors text-neutral-700" title="X (Twitter)" aria-label="X (Twitter)"> <svg class="w-4 h-4 fill-current" viewBox="0 0 24 24" aria-hidden="true"> <path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"></path> </svg> </a> <a href="/cdn-cgi/l/email-protection#0c69686578637e4c6d626f64637e6d6b697c7e697f7f226f6361" class="hover:text-black p-1 transition-colors text-neutral-700" title="Email Newsroom" aria-label="Email Newsroom"> <svg class="w-4 h-4 fill-none stroke-current stroke-2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <rect width="20" height="16" x="2" y="4" rx="2"></rect> <path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"></path> </svg> </a> </div> </div> </section> </div> </nav> </div> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
  function initMobileMenu() {
    const toggleBtn = document.getElementById('mobile-menu-toggle');
    const overlay = document.getElementById('mobile-menu-overlay');
    const line1 = document.getElementById('hamb-line-1');
    const line2 = document.getElementById('hamb-line-2');
    const line3 = document.getElementById('hamb-line-3');

    const topHeader = document.getElementById('mobile-top-header');

    if (!toggleBtn || !overlay || !line1 || !line2 || !line3) return;

    let isOpen = false;

    function updateTopHeaderVisibility() {
      if (!topHeader) return;
      // Show top header if menu is open OR if scrolled down past masthead (> 100px)
      if (isOpen || window.scrollY > 100) {
        topHeader.classList.remove('-translate-y-full', 'opacity-0', 'pointer-events-none');
        topHeader.classList.add('translate-y-0', 'opacity-100', 'pointer-events-auto');
      } else {
        topHeader.classList.remove('translate-y-0', 'opacity-100', 'pointer-events-auto');
        topHeader.classList.add('-translate-y-full', 'opacity-0', 'pointer-events-none');
      }
    }

    function openMenu() {
      isOpen = true;
      updateTopHeaderVisibility();
      toggleBtn.setAttribute('aria-expanded', 'true');
      toggleBtn.setAttribute('aria-label', 'Close menu');
      overlay.classList.remove('hidden');

      // Refresh reader account status card
      try {
        window.dispatchEvent(new CustomEvent('ap:member-sync'));
        if (typeof window.AP_UPDATE_MEMBER_STATUS === 'function') {
          window.AP_UPDATE_MEMBER_STATUS();
        }
      } catch (_) {}
      
      // Hide sticky desktop nav bar if present to prevent overlap
      const stickyNav = document.getElementById('sticky-nav');
      if (stickyNav) {
        stickyNav.classList.add('hidden', 'pointer-events-none');
      }

      // Force frame trigger for CSS opacity transition
      requestAnimationFrame(() => {
        overlay.classList.remove('opacity-0');
        overlay.classList.add('opacity-100');
      });

      // Animate Hamburger to X
      line1.classList.add('rotate-45', 'translate-y-[9px]');
      line2.classList.add('opacity-0');
      line3.classList.add('-rotate-45', '-translate-y-[9px]');

      // Lock body scroll
      document.body.style.overflow = 'hidden';
    }

    function closeMenu() {
      isOpen = false;
      toggleBtn.setAttribute('aria-expanded', 'false');
      toggleBtn.setAttribute('aria-label', 'Open menu');
      overlay.classList.remove('opacity-100');
      overlay.classList.add('opacity-0');

      // Restore sticky desktop nav bar if on xl screens
      const stickyNav = document.getElementById('sticky-nav');
      if (stickyNav) {
        stickyNav.classList.remove('hidden', 'pointer-events-none');
      }

      setTimeout(() => {
        if (!isOpen) overlay.classList.add('hidden');
      }, 300);

      // Revert Hamburger lines
      line1.classList.remove('rotate-45', 'translate-y-[9px]');
      line2.classList.remove('opacity-0');
      line3.classList.remove('-rotate-45', '-translate-y-[9px]');

      // Unlock body scroll
      document.body.style.overflow = '';
      updateTopHeaderVisibility();
      toggleBtn.focus();
    }

    window.addEventListener('scroll', updateTopHeaderVisibility, { passive: true });
    updateTopHeaderVisibility();

    toggleBtn.addEventListener('click', () => {
      if (isOpen) {
        closeMenu();
      } else {
        openMenu();
      }
    });


    // Close on Escape Key
    document.addEventListener('keydown', (e) => {
      if (e.key === 'Escape' && isOpen) {
        closeMenu();
      }
    });

    // Close when any navigation link is clicked inside overlay
    const overlayLinks = overlay.querySelectorAll('a');
    overlayLinks.forEach(link => {
      link.addEventListener('click', () => {
        if (isOpen) closeMenu();
      });
    });
  }

  initMobileMenu();
  document.addEventListener('astro:page-load', initMobileMenu);
</script> <div id="app-root" class="min-h-screen"> <header class="border-b-4 border-black bg-paper relative z-[80]">  <div id="rotating-promo-ticker" class="bg-black text-white border-b-4 border-black relative select-none overflow-hidden" aria-label="Promotions and Announcements"> <div class="mx-auto max-w-7xl px-3 sm:px-4 py-2 flex items-center justify-between gap-2 sm:gap-3">  <div class="flex-1 min-w-0 overflow-hidden relative min-h-[28px] flex items-center"> <a href="/find-the-press" data-promo-idx="0" class="promo-slide-item absolute inset-0 flex items-center gap-2 sm:gap-2.5 text-xs font-sans min-w-0 transition-all duration-500 ease-in-out opacity-100 translate-y-0 pointer-events-auto"> <span class="inline-flex items-center gap-1 px-1.5 sm:px-2 py-0.5 font-heavy text-[9px] sm:text-[10px] uppercase tracking-wider border border-black shrink-0 bg-[#FEB619] text-black"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-newspaper size-3">  <path d="M15 18h-5"></path> <path d="M18 14h-8"></path> <path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2"></path> <rect width="8" height="4" x="10" y="6" rx="1"></rect>  </svg> <span>PRINT EDITION</span> </span> <span class="font-bold text-neutral-100 truncate hover:text-white transition-colors min-w-0"> Second monthly print issue is out now — 12,000 copies across Southcentral newsstands &amp; mailboxes. </span> <span class="hidden sm:inline font-heavy text-[11px] text-[#00e676] uppercase tracking-wider underline underline-offset-2 shrink-0 hover:text-yellow-300"> Find a Copy → </span> </a><a href="/submit/dish-of-the-month" data-promo-idx="1" class="promo-slide-item absolute inset-0 flex items-center gap-2 sm:gap-2.5 text-xs font-sans min-w-0 transition-all duration-500 ease-in-out opacity-0 translate-y-4 pointer-events-none"> <span class="inline-flex items-center gap-1 px-1.5 sm:px-2 py-0.5 font-heavy text-[9px] sm:text-[10px] uppercase tracking-wider border border-black shrink-0 bg-orange-400 text-black"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-utensils size-3">  <path d="M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2"></path> <path d="M7 2v20"></path> <path d="M21 15V2a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7"></path>  </svg> <span>DISH OF THE MONTH</span> </span> <span class="font-bold text-neutral-100 truncate hover:text-white transition-colors min-w-0"> Nominate your favorite local dish, sourdough spot, or late-night Alaskan culinary bite. </span> <span class="hidden sm:inline font-heavy text-[11px] text-[#00e676] uppercase tracking-wider underline underline-offset-2 shrink-0 hover:text-yellow-300"> Nominate a Dish → </span> </a><a href="/submit/love-and-sex" data-promo-idx="2" class="promo-slide-item absolute inset-0 flex items-center gap-2 sm:gap-2.5 text-xs font-sans min-w-0 transition-all duration-500 ease-in-out opacity-0 translate-y-4 pointer-events-none"> <span class="inline-flex items-center gap-1 px-1.5 sm:px-2 py-0.5 font-heavy text-[9px] sm:text-[10px] uppercase tracking-wider border border-black shrink-0 bg-pink-400 text-black"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-heart size-3">  <path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"></path>  </svg> <span>LOVE &amp; SEX</span> </span> <span class="font-bold text-neutral-100 truncate hover:text-white transition-colors min-w-0"> Got a burning question for our alt-weekly advice column? Submit anonymously. </span> <span class="hidden sm:inline font-heavy text-[11px] text-[#00e676] uppercase tracking-wider underline underline-offset-2 shrink-0 hover:text-yellow-300"> Ask Us Anything → </span> </a><a href="/advertise" data-promo-idx="3" class="promo-slide-item absolute inset-0 flex items-center gap-2 sm:gap-2.5 text-xs font-sans min-w-0 transition-all duration-500 ease-in-out opacity-0 translate-y-4 pointer-events-none"> <span class="inline-flex items-center gap-1 px-1.5 sm:px-2 py-0.5 font-heavy text-[9px] sm:text-[10px] uppercase tracking-wider border border-black shrink-0 bg-cyan-400 text-black"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-megaphone size-3">  <path d="M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z"></path> <path d="M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14"></path> <path d="M8 6v8"></path>  </svg> <span>ADVERTISE</span> </span> <span class="font-bold text-neutral-100 truncate hover:text-white transition-colors min-w-0"> Reach 30,000+ highly engaged Alaskans in print, digital &amp; newsletter — 2026 Media Kit out now. </span> <span class="hidden sm:inline font-heavy text-[11px] text-[#00e676] uppercase tracking-wider underline underline-offset-2 shrink-0 hover:text-yellow-300"> View Rate Sheet → </span> </a><a href="/tips" data-promo-idx="4" class="promo-slide-item absolute inset-0 flex items-center gap-2 sm:gap-2.5 text-xs font-sans min-w-0 transition-all duration-500 ease-in-out opacity-0 translate-y-4 pointer-events-none"> <span class="inline-flex items-center gap-1 px-1.5 sm:px-2 py-0.5 font-heavy text-[9px] sm:text-[10px] uppercase tracking-wider border border-black shrink-0 bg-red-500 text-white"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shield-alert size-3">  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path> <path d="M12 8v4"></path> <path d="M12 16h.01"></path>  </svg> <span>TIP LINE</span> </span> <span class="font-bold text-neutral-100 truncate hover:text-white transition-colors min-w-0"> Have a confidential tip, public records lead, or investigative story pitch for our newsroom? </span> <span class="hidden sm:inline font-heavy text-[11px] text-[#00e676] uppercase tracking-wider underline underline-offset-2 shrink-0 hover:text-yellow-300"> Send a Tip → </span> </a> </div>  <div class="flex items-center gap-1.5 shrink-0 pl-2 border-l border-neutral-800"> <button type="button" id="promo-prev-btn" aria-label="Previous Announcement" class="size-6 bg-neutral-900 text-neutral-300 hover:text-white hover:bg-neutral-800 border border-neutral-700 rounded flex items-center justify-center text-[10px] cursor-pointer transition-colors"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-chevron-left size-3.5">  <path d="m15 18-6-6 6-6"></path>  </svg> </button> <span class="text-[10px] font-mono text-neutral-500 px-1" id="promo-slide-indicator">
1/5 </span> <button type="button" id="promo-next-btn" aria-label="Next Announcement" class="size-6 bg-neutral-900 text-neutral-300 hover:text-white hover:bg-neutral-800 border border-neutral-700 rounded flex items-center justify-center text-[10px] cursor-pointer transition-colors"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-chevron-right size-3.5">  <path d="m9 18 6-6-6-6"></path>  </svg> </button> </div> </div> </div> <script type="module">function m(){const n=document.getElementById("rotating-promo-ticker");if(!n)return;const e=n.querySelectorAll(".promo-slide-item"),p=document.getElementById("promo-prev-btn"),v=document.getElementById("promo-next-btn");if(!e.length)return;let s=0,a=null;const y=5e3;function i(t){e.forEach((r,u)=>{u===t?(r.classList.remove("opacity-0","translate-y-4","-translate-y-4","pointer-events-none"),r.classList.add("opacity-100","translate-y-0","pointer-events-auto")):(r.classList.remove("opacity-100","translate-y-0","pointer-events-auto"),r.classList.add("opacity-0",u<t?"-translate-y-4":"translate-y-4","pointer-events-none"))});const d=document.getElementById("promo-slide-indicator");d&&(d.textContent=`${t+1}/${e.length}`),s=t}function c(){const t=(s+1)%e.length;i(t)}function f(){const t=(s-1+e.length)%e.length;i(t)}function o(){l(),a=setInterval(c,y)}function l(){a&&clearInterval(a)}p?.addEventListener("click",()=>{f(),o()}),v?.addEventListener("click",()=>{c(),o()}),n.addEventListener("mouseenter",l),n.addEventListener("mouseleave",o),o()}m();document.addEventListener("astro:page-load",m);</script>  <div class="border-b-2 border-black bg-neutral-100 py-1.5 sm:py-2 px-3 sm:px-4 text-xs font-bold uppercase tracking-wider text-neutral-800"> <div class="mx-auto max-w-7xl flex items-center justify-between gap-2">  <div class="flex items-center gap-2 shrink-0"> <span id="header-ak-date" class="hidden sm:inline">Friday, Oct 23, 2026 (AKDT)</span> <script>
          (function() {
            try {
              var d = new Date();
              var parts = new Intl.DateTimeFormat("en-US", { timeZone: "America/Anchorage", timeZoneName: "short" }).formatToParts(d);
              var tz = (parts.find(function(p) { return p.type === 'timeZoneName'; }) || {}).value || 'AKDT';
              var dtStr = new Intl.DateTimeFormat("en-US", { timeZone: "America/Anchorage", weekday: "long", month: "short", day: "numeric", year: "numeric" }).format(d);
              var el = document.getElementById('header-ak-date');
              if (el) el.textContent = dtStr + ' (' + tz + ')';
            } catch (e) {}
          })();
        </script> <span class="hidden sm:inline text-neutral-400">·</span> <div class="relative inline-block z-[85]" id="ak-weather-widget"> <button type="button" id="weather-dropdown-btn" aria-expanded="false" aria-haspopup="true" aria-label="Alaska Cities Weather Menu" class="inline-flex items-center gap-1 font-extrabold text-black bg-white hover:bg-yellow-300 border border-black px-2 py-0.5 shadow-[2px_2px_0px_#000] cursor-pointer transition-all focus:outline-none shrink-0 text-[11px]"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-sun size-3.5 text-amber-500 shrink-0 inline-block">  <circle cx="12" cy="12" r="4"></circle> <path d="M12 2v2"></path> <path d="M12 20v2"></path> <path d="m4.93 4.93 1.41 1.41"></path> <path d="m17.66 17.66 1.41 1.41"></path> <path d="M2 12h2"></path> <path d="M20 12h2"></path> <path d="m6.34 17.66-1.41 1.41"></path> <path d="m19.07 4.93-1.41 1.41"></path>  </svg> <span id="ak-temp-val" data-temp-f="27">27°F</span> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-chevron-down size-2.5 text-black">  <path d="m6 9 6 6 6-6"></path>  </svg> </button>  <div id="weather-dropdown-menu" aria-hidden="true" class="hidden absolute left-0 top-full mt-1.5 z-[85] w-84 sm:w-96 max-w-[calc(100vw-1.5rem)] bg-[#fcfbf7] border-3 border-black p-3.5 shadow-[8px_8px_0px_#000] text-black">  <div class="flex items-center justify-between border-b-2 border-black pb-2 mb-2"> <div class="flex items-center gap-1.5"> <span class="size-2 rounded-full bg-emerald-500 animate-pulse" id="weather-live-pulse"></span> <span class="font-heavy text-[11px] tracking-wider uppercase text-black">ALASKA WEATHER</span> </div> <div class="flex items-center gap-2"> <button type="button" id="weather-refresh-btn" title="Refresh live Alaska weather data" class="bg-white hover:bg-yellow-300 text-black border border-black px-2 py-0.5 font-heavy text-[9px] uppercase tracking-wider transition-all cursor-pointer flex items-center gap-1 shadow-[1px_1px_0px_#000] shrink-0"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" id="weather-refresh-icon" class="lucide lucide-rotate-cw size-2.5 text-black">  <path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path> <path d="M21 3v5h-5"></path>  </svg> <span>Sync</span> </button> <button type="button" id="temp-unit-toggle" title="Switch between Fahrenheit and Celsius" class="bg-black text-yellow-300 hover:bg-yellow-300 hover:text-black border border-black px-2 py-0.5 font-heavy text-[9px] uppercase tracking-wider transition-all cursor-pointer inline-flex items-center justify-center whitespace-nowrap shrink-0 shadow-[1px_1px_0px_#000]"> <span id="unit-opt-f" class="text-yellow-300 font-heavy underline">°F</span> <span class="text-neutral-500 mx-1">|</span> <span id="unit-opt-c" class="text-neutral-400 font-normal">°C</span> </button> </div> </div>  <div id="weather-alert-banner" class="hidden bg-amber-300 text-black border-2 border-black p-2 text-xs font-heavy mb-2.5 shadow-[2px_2px_0px_#000] flex items-center justify-between gap-2"> <div class="flex items-center gap-1.5 min-w-0"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-triangle-alert size-3.5 text-black shrink-0">  <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"></path> <path d="M12 9v4"></path> <path d="M12 17h.01"></path>  </svg> <span id="weather-alert-text" class="truncate uppercase font-heavy text-[10px]">Frost Advisory in effect</span> </div> <span id="weather-alert-time" class="text-[9px] font-mono shrink-0 font-bold bg-black text-yellow-300 px-1 py-0.2">NWS</span> </div>  <div class="grid grid-cols-5 gap-1 pb-2 mb-2.5 border-b border-neutral-300" id="weather-tabs-nav" role="tablist" aria-label="Alaska Weather Desks"> <button type="button" role="tab" id="weather-tab-cities" aria-selected="true" aria-pressed="true" aria-controls="weather-panel-cities" data-tab="cities" class="weather-tab-btn active px-1 py-1.5 text-[9px] sm:text-[10px] font-heavy uppercase border border-black bg-[#FEB619] text-black shadow-[2px_2px_0px_#000] text-center truncate cursor-pointer transition-all flex items-center justify-center gap-1"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-building-2 size-3 shrink-0">  <path d="M10 12h4"></path> <path d="M10 8h4"></path> <path d="M14 21v-3a2 2 0 0 0-4 0v3"></path> <path d="M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2"></path> <path d="M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16"></path>  </svg> <span>Cities</span> </button> <button type="button" role="tab" id="weather-tab-daylight" aria-selected="false" aria-pressed="false" aria-controls="weather-panel-daylight" data-tab="daylight" class="weather-tab-btn px-1 py-1.5 text-[9px] sm:text-[10px] font-heavy uppercase border border-black bg-white text-neutral-700 hover:bg-neutral-100 text-center truncate cursor-pointer transition-all flex items-center justify-center gap-1"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-sun-medium size-3 shrink-0">  <circle cx="12" cy="12" r="4"></circle> <path d="M12 3v1"></path> <path d="M12 20v1"></path> <path d="M3 12h1"></path> <path d="M20 12h1"></path> <path d="m18.364 5.636-.707.707"></path> <path d="m6.343 17.657-.707.707"></path> <path d="m5.636 5.636.707.707"></path> <path d="m17.657 17.657.707.707"></path>  </svg> <span>Sun</span> </button> <button type="button" role="tab" id="weather-tab-aurora" aria-selected="false" aria-pressed="false" aria-controls="weather-panel-aurora" data-tab="aurora" class="weather-tab-btn px-1 py-1.5 text-[9px] sm:text-[10px] font-heavy uppercase border border-black bg-white text-neutral-700 hover:bg-neutral-100 text-center truncate cursor-pointer transition-all flex items-center justify-center gap-1"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-sparkles size-3 shrink-0">  <path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z"></path> <path d="M20 2v4"></path> <path d="M22 4h-4"></path> <circle cx="4" cy="20" r="2"></circle>  </svg> <span>Aurora</span> </button> <button type="button" role="tab" id="weather-tab-mountains" aria-selected="false" aria-pressed="false" aria-controls="weather-panel-mountains" data-tab="mountains" class="weather-tab-btn px-1 py-1.5 text-[9px] sm:text-[10px] font-heavy uppercase border border-black bg-white text-neutral-700 hover:bg-neutral-100 text-center truncate cursor-pointer transition-all flex items-center justify-center gap-1"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-mountain-snow size-3 shrink-0">  <path d="m8 3 4 8 5-5 5 15H2L8 3z"></path> <path d="M4.14 15.08c2.62-1.57 5.24-1.43 7.86.42 2.74 1.94 5.49 2 8.23.19"></path>  </svg> <span>Alpine</span> </button> <button type="button" role="tab" id="weather-tab-tides" aria-selected="false" aria-pressed="false" aria-controls="weather-panel-tides" data-tab="tides" class="weather-tab-btn px-1 py-1.5 text-[9px] sm:text-[10px] font-heavy uppercase border border-black bg-white text-neutral-700 hover:bg-neutral-100 text-center truncate cursor-pointer transition-all flex items-center justify-center gap-1"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-waves size-3 shrink-0">  <path d="M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"></path> <path d="M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"></path> <path d="M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"></path>  </svg> <span>Tides</span> </button> </div>  <div id="weather-panel-cities" class="weather-panel block">  <div id="weather-cities-list-view" class="block space-y-1"> <div class="flex items-center justify-between text-[9px] font-mono uppercase text-neutral-500 pb-1 mb-1 border-b border-neutral-200"> <span class="font-bold text-neutral-700">10 Observation Posts</span> <span class="text-neutral-400">Click any city for dossier</span> </div> <ul class="divide-y divide-neutral-200 text-xs font-sans"> <li class="weather-city-row grid grid-cols-[1fr_auto_auto_auto] items-center gap-1.5 py-1.5 px-1.5 hover:bg-[#FEB619]/25 hover:pl-2.5 transition-all cursor-pointer group focus:outline-none focus:bg-[#FEB619]/30" data-city-id="anc" role="button" tabindex="0" title="View all Anchorage weather & daylight details"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-anc" class="shrink-0 text-sm">☀️</span> <span class="truncate font-bold text-black group-hover:text-black">Anchorage</span> </span> <span id="weather-cond-anc" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-anc" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="27">27°F</span> <span class="text-neutral-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform text-xs font-bold shrink-0">→</span> </li> <li class="weather-city-row grid grid-cols-[1fr_auto_auto_auto] items-center gap-1.5 py-1.5 px-1.5 hover:bg-[#FEB619]/25 hover:pl-2.5 transition-all cursor-pointer group focus:outline-none focus:bg-[#FEB619]/30" data-city-id="fai" role="button" tabindex="0" title="View all Fairbanks weather & daylight details"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-fai" class="shrink-0 text-sm">⛅</span> <span class="truncate font-bold text-black group-hover:text-black">Fairbanks</span> </span> <span id="weather-cond-fai" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-fai" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="41">41°F</span> <span class="text-neutral-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform text-xs font-bold shrink-0">→</span> </li> <li class="weather-city-row grid grid-cols-[1fr_auto_auto_auto] items-center gap-1.5 py-1.5 px-1.5 hover:bg-[#FEB619]/25 hover:pl-2.5 transition-all cursor-pointer group focus:outline-none focus:bg-[#FEB619]/30" data-city-id="jnu" role="button" tabindex="0" title="View all Juneau weather & daylight details"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-jnu" class="shrink-0 text-sm">🌤️</span> <span class="truncate font-bold text-black group-hover:text-black">Juneau</span> </span> <span id="weather-cond-jnu" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-jnu" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="57">57°F</span> <span class="text-neutral-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform text-xs font-bold shrink-0">→</span> </li> <li class="weather-city-row grid grid-cols-[1fr_auto_auto_auto] items-center gap-1.5 py-1.5 px-1.5 hover:bg-[#FEB619]/25 hover:pl-2.5 transition-all cursor-pointer group focus:outline-none focus:bg-[#FEB619]/30" data-city-id="sit" role="button" tabindex="0" title="View all Sitka weather & daylight details"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-sit" class="shrink-0 text-sm">☁️</span> <span class="truncate font-bold text-black group-hover:text-black">Sitka</span> </span> <span id="weather-cond-sit" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-sit" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="56">56°F</span> <span class="text-neutral-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform text-xs font-bold shrink-0">→</span> </li> <li class="weather-city-row grid grid-cols-[1fr_auto_auto_auto] items-center gap-1.5 py-1.5 px-1.5 hover:bg-[#FEB619]/25 hover:pl-2.5 transition-all cursor-pointer group focus:outline-none focus:bg-[#FEB619]/30" data-city-id="ktn" role="button" tabindex="0" title="View all Ketchikan weather & daylight details"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-ktn" class="shrink-0 text-sm">🌦️</span> <span class="truncate font-bold text-black group-hover:text-black">Ketchikan</span> </span> <span id="weather-cond-ktn" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-ktn" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="58">58°F</span> <span class="text-neutral-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform text-xs font-bold shrink-0">→</span> </li> <li class="weather-city-row grid grid-cols-[1fr_auto_auto_auto] items-center gap-1.5 py-1.5 px-1.5 hover:bg-[#FEB619]/25 hover:pl-2.5 transition-all cursor-pointer group focus:outline-none focus:bg-[#FEB619]/30" data-city-id="ena" role="button" tabindex="0" title="View all Kenai / Soldotna weather & daylight details"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-ena" class="shrink-0 text-sm">☀️</span> <span class="truncate font-bold text-black group-hover:text-black">Kenai / Soldotna</span> </span> <span id="weather-cond-ena" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-ena" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="46">46°F</span> <span class="text-neutral-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform text-xs font-bold shrink-0">→</span> </li> <li class="weather-city-row grid grid-cols-[1fr_auto_auto_auto] items-center gap-1.5 py-1.5 px-1.5 hover:bg-[#FEB619]/25 hover:pl-2.5 transition-all cursor-pointer group focus:outline-none focus:bg-[#FEB619]/30" data-city-id="paq" role="button" tabindex="0" title="View all Wasilla / Palmer weather & daylight details"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-paq" class="shrink-0 text-sm">☀️</span> <span class="truncate font-bold text-black group-hover:text-black">Wasilla / Palmer</span> </span> <span id="weather-cond-paq" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-paq" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="47">47°F</span> <span class="text-neutral-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform text-xs font-bold shrink-0">→</span> </li> <li class="weather-city-row grid grid-cols-[1fr_auto_auto_auto] items-center gap-1.5 py-1.5 px-1.5 hover:bg-[#FEB619]/25 hover:pl-2.5 transition-all cursor-pointer group focus:outline-none focus:bg-[#FEB619]/30" data-city-id="adq" role="button" tabindex="0" title="View all Kodiak weather & daylight details"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-adq" class="shrink-0 text-sm">🌫️</span> <span class="truncate font-bold text-black group-hover:text-black">Kodiak</span> </span> <span id="weather-cond-adq" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-adq" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="52">52°F</span> <span class="text-neutral-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform text-xs font-bold shrink-0">→</span> </li> <li class="weather-city-row grid grid-cols-[1fr_auto_auto_auto] items-center gap-1.5 py-1.5 px-1.5 hover:bg-[#FEB619]/25 hover:pl-2.5 transition-all cursor-pointer group focus:outline-none focus:bg-[#FEB619]/30" data-city-id="ome" role="button" tabindex="0" title="View all Nome weather & daylight details"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-ome" class="shrink-0 text-sm">💨</span> <span class="truncate font-bold text-black group-hover:text-black">Nome</span> </span> <span id="weather-cond-ome" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-ome" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="42">42°F</span> <span class="text-neutral-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform text-xs font-bold shrink-0">→</span> </li> <li class="weather-city-row grid grid-cols-[1fr_auto_auto_auto] items-center gap-1.5 py-1.5 px-1.5 hover:bg-[#FEB619]/25 hover:pl-2.5 transition-all cursor-pointer group focus:outline-none focus:bg-[#FEB619]/30" data-city-id="brw" role="button" tabindex="0" title="View all Utqiaġvik (Barrow) weather & daylight details"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-brw" class="shrink-0 text-sm">☁️</span> <span class="truncate font-bold text-black group-hover:text-black">Utqiaġvik (Barrow)</span> </span> <span id="weather-cond-brw" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-brw" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="37">37°F</span> <span class="text-neutral-400 group-hover:text-black group-hover:translate-x-0.5 transition-transform text-xs font-bold shrink-0">→</span> </li> </ul> <div class="mt-3 pt-2 border-t border-neutral-300 flex flex-col gap-0.5 text-[10px] font-mono text-neutral-500 uppercase tracking-wider"> <div class="font-medium text-neutral-600">Sources: NOAA NWS / Open-Meteo</div> <div id="tab-cities-updated" class="text-neutral-500">LIVE ALASKA FEED · ANCHORAGE, AK</div> </div> </div>  <div id="weather-city-detail-view" class="hidden space-y-2">  <div class="flex items-center justify-between pb-1.5 border-b border-black"> <button type="button" id="weather-city-back-btn" class="inline-flex items-center gap-1.5 px-2 py-0.5 bg-white hover:bg-[#FEB619] border border-black font-heavy text-[10px] uppercase tracking-wider text-black transition-colors shadow-[1px_1px_0px_#000] cursor-pointer" title="Return to all Alaska cities"> <span class="text-xs font-bold leading-none">←</span> <span>All Cities</span> </button> <nav aria-label="Breadcrumb" class="flex items-center gap-1.5 text-[10px] font-mono uppercase tracking-wider"> <button type="button" id="weather-crumb-all-cities" class="text-neutral-500 hover:text-black hover:underline cursor-pointer">CITIES</button> <span class="text-neutral-400">/</span> <span id="weather-crumb-city-name" class="font-bold text-black truncate max-w-[130px]">ANCHORAGE</span> </nav> </div>  <div class="bg-white border-2 border-black p-2.5 shadow-[2px_2px_0px_#000] text-black space-y-2">  <div class="flex items-start justify-between gap-2 border-b border-neutral-200 pb-2"> <div class="min-w-0"> <div class="flex items-center gap-1.5"> <h3 id="city-card-title" class="headline-heavy text-base sm:text-lg uppercase text-black leading-tight truncate">Anchorage</h3> <span class="size-1.5 rounded-full bg-emerald-500 shrink-0" title="Live observation post"></span> </div> <div id="city-card-region" class="text-[10px] font-mono uppercase text-neutral-600 truncate">Southcentral · Upper Cook Inlet</div> </div> <div class="shrink-0 text-right"> <span id="city-card-cond-badge" class="inline-flex items-center gap-1 px-1.5 py-0.5 bg-yellow-300 text-black border border-black font-heavy text-[9px] uppercase tracking-wider"> <span id="city-card-icon" class="text-xs">☀️</span> <span id="city-card-cond-label">Clear Sky</span> </span> </div> </div>  <div class="bg-amber-50/80 border border-black p-2 flex items-center justify-between gap-2"> <div class="flex items-baseline gap-2"> <span id="city-card-temp" class="weather-temp-val headline-heavy text-3xl sm:text-4xl text-black tabular-nums leading-none" data-temp-f="27">27°F</span> <div class="flex flex-col text-[10px] font-sans font-bold text-neutral-700 leading-tight"> <span>FEELS</span> <span id="city-card-feels" class="weather-temp-val font-heavy text-xs text-black" data-temp-f="48">48°F</span> </div> </div> <div class="flex flex-col items-end gap-1 text-[10px] font-mono uppercase"> <div class="bg-white border border-black px-1.5 py-0.5 text-neutral-800 tabular-nums shadow-[1px_1px_0px_#000]"> <span class="text-red-700 font-bold">H: <span id="city-card-high" class="weather-temp-val font-heavy" data-temp-f="55">55°F</span></span> <span class="text-neutral-400 mx-1">·</span> <span class="text-blue-700 font-bold">L: <span id="city-card-low" class="weather-temp-val font-heavy" data-temp-f="38">38°F</span></span> </div> <span class="text-[9px] text-neutral-500 font-medium">Daily Range</span> </div> </div>  <div class="grid grid-cols-2 gap-1.5 text-xs font-sans"> <div class="bg-neutral-50 border border-neutral-300 p-1.5 flex items-center justify-between"> <span class="text-[10px] font-mono uppercase text-neutral-500 flex items-center gap-1"> <span>💨 Wind</span> </span> <span id="city-card-wind" class="font-heavy text-[11px] text-black tabular-nums">5.1 mph NNE</span> </div> <div class="bg-neutral-50 border border-neutral-300 p-1.5 flex items-center justify-between"> <span class="text-[10px] font-mono uppercase text-neutral-500 flex items-center gap-1"> <span>💧 Humidity</span> </span> <span id="city-card-humidity" class="font-heavy text-[11px] text-black tabular-nums">44%</span> </div> <div class="bg-neutral-50 border border-neutral-300 p-1.5 flex items-center justify-between"> <span class="text-[10px] font-mono uppercase text-neutral-500 flex items-center gap-1"> <span>🧭 Barometer</span> </span> <span id="city-card-pressure" class="font-heavy text-[11px] text-black tabular-nums">29.52 inHg</span> </div> <div class="bg-neutral-50 border border-neutral-300 p-1.5 flex items-center justify-between"> <span class="text-[10px] font-mono uppercase text-neutral-500 flex items-center gap-1"> <span>🌧️ Precip</span> </span> <span id="city-card-precip" class="font-heavy text-[11px] text-black tabular-nums">0.00 in</span> </div> </div>  <div class="bg-[#fcfbf7] border border-black p-2 space-y-1.5"> <div class="flex items-center justify-between text-[10px] font-heavy uppercase tracking-wider"> <span class="text-neutral-700 flex items-center gap-1">☀️ SOLAR & DAYLIGHT</span> <span id="city-card-daylight" class="bg-yellow-300 text-black px-1.5 py-0.2 border border-black font-heavy text-[9px]">14h 07m LIGHT</span> </div> <div class="grid grid-cols-2 gap-1 text-[11px] font-sans"> <div class="flex items-center justify-between bg-white border border-neutral-300 px-1.5 py-1"> <span class="text-[10px] text-neutral-500 uppercase font-medium">🌅 Sunrise</span> <span id="city-card-sunrise" class="font-heavy text-black">6:54 AM</span> </div> <div class="flex items-center justify-between bg-white border border-neutral-300 px-1.5 py-1"> <span class="text-[10px] text-neutral-500 uppercase font-medium">🌇 Sunset</span> <span id="city-card-sunset" class="font-heavy text-black">9:02 PM</span> </div> </div> <div class="flex items-center justify-between text-[9px] font-mono text-neutral-600 uppercase px-0.5"> <span>Solar Noon: <strong id="city-card-noon" class="text-black">1:59 PM</strong></span> <span>Twilight: <strong id="city-card-twilight" class="text-black">6:08 AM – 9:48 PM</strong></span> </div> </div>  <div class="bg-neutral-900 border border-black p-2 text-white space-y-1"> <div class="flex items-center justify-between"> <span class="font-heavy text-[9px] uppercase tracking-wider text-emerald-400">🌌 LOCAL AURORA VIEWING</span> <span id="city-card-aurora-badge" class="px-1.5 py-0.2 font-heavy text-[9px] uppercase border border-black bg-emerald-400 text-black">ACTIVE OVERHEAD</span> </div> <p id="city-card-aurora-desc" class="text-[10px] font-sans text-neutral-300 leading-snug">
Latitude allows direct overhead displays at moderate geomagnetic activity.
</p> </div>  <div class="bg-yellow-50/70 border border-neutral-300 p-2 space-y-1 text-[10px] text-neutral-800"> <div class="font-heavy uppercase tracking-wider text-neutral-700 flex items-center justify-between"> <span id="city-card-geo-waters">🌊 COOK INLET · ELEVATION 102 FT</span> <span id="city-card-geo-coords" class="font-mono text-[9px] text-neutral-500">61.2°N, 149.9°W</span> </div> <p id="city-card-geo-notes" class="font-sans text-neutral-700 leading-snug">
Flanked by the Chugach Mountains and Cook Inlet. Experiences extreme tidal range (30+ ft) and coastal-continental weather.
</p> </div>  <div class="pt-1 border-t border-neutral-200"> <div class="text-[9px] font-mono uppercase text-neutral-500 mb-1 flex items-center justify-between"> <span>Quick Switch City:</span> <span class="text-neutral-400">10 Locations</span> </div> <div class="flex flex-wrap gap-1" id="weather-city-quick-selector"> <button type="button" data-switch-city="anc" class="city-switch-pill px-1.5 py-0.5 border border-black font-heavy text-[9px] uppercase transition-all bg-[#FEB619] text-black shadow-[1px_1px_0px_#000]">ANC</button> <button type="button" data-switch-city="fai" class="city-switch-pill px-1.5 py-0.5 border border-black font-heavy text-[9px] uppercase transition-all bg-white hover:bg-yellow-100 text-neutral-700">FAI</button> <button type="button" data-switch-city="jnu" class="city-switch-pill px-1.5 py-0.5 border border-black font-heavy text-[9px] uppercase transition-all bg-white hover:bg-yellow-100 text-neutral-700">JNU</button> <button type="button" data-switch-city="sit" class="city-switch-pill px-1.5 py-0.5 border border-black font-heavy text-[9px] uppercase transition-all bg-white hover:bg-yellow-100 text-neutral-700">SIT</button> <button type="button" data-switch-city="ktn" class="city-switch-pill px-1.5 py-0.5 border border-black font-heavy text-[9px] uppercase transition-all bg-white hover:bg-yellow-100 text-neutral-700">KTN</button> <button type="button" data-switch-city="ena" class="city-switch-pill px-1.5 py-0.5 border border-black font-heavy text-[9px] uppercase transition-all bg-white hover:bg-yellow-100 text-neutral-700">ENA</button> <button type="button" data-switch-city="paq" class="city-switch-pill px-1.5 py-0.5 border border-black font-heavy text-[9px] uppercase transition-all bg-white hover:bg-yellow-100 text-neutral-700">PAQ</button> <button type="button" data-switch-city="adq" class="city-switch-pill px-1.5 py-0.5 border border-black font-heavy text-[9px] uppercase transition-all bg-white hover:bg-yellow-100 text-neutral-700">ADQ</button> <button type="button" data-switch-city="ome" class="city-switch-pill px-1.5 py-0.5 border border-black font-heavy text-[9px] uppercase transition-all bg-white hover:bg-yellow-100 text-neutral-700">OME</button> <button type="button" data-switch-city="brw" class="city-switch-pill px-1.5 py-0.5 border border-black font-heavy text-[9px] uppercase transition-all bg-white hover:bg-yellow-100 text-neutral-700">BRW</button> </div> </div> </div>  <div class="mt-2 pt-2 border-t border-neutral-300 flex flex-col gap-0.5 text-[10px] font-mono text-neutral-500 uppercase tracking-wider"> <div class="font-medium text-neutral-600">Sources: NOAA NWS / USNO Solar / Open-Meteo</div> <div id="city-card-updated" class="text-neutral-500">LIVE ALASKA FEED · ANCHORAGE, AK</div> </div> </div> </div>  <div id="weather-panel-daylight" class="weather-panel hidden space-y-3"> <div class="bg-amber-50 border-2 border-black p-3 text-black"> <div class="flex items-center justify-between mb-1"> <span class="font-heavy text-[10px] uppercase tracking-wider text-neutral-600">ANCHORAGE DAYLIGHT TODAY</span> <span id="daylight-change-val" class="bg-yellow-300 text-black px-1.5 py-0.2 font-heavy text-[9px] uppercase border border-black">-5m 38s / DAY</span> </div> <div class="headline-heavy text-2xl text-black leading-none"> <span id="daylight-duration-val">14h 07m</span> <span class="text-xs font-sans font-bold text-neutral-700">TOTAL SUNLIGHT</span> </div> <p class="font-sans text-[11px] text-neutral-700 mt-1">
Equinox: <span id="daylight-equinox-val" class="font-bold text-black">Passed (Sept 22)</span> · Rapid autumn daylight loss across Alaska.
</p> </div> <div class="grid grid-cols-2 gap-2 text-xs font-sans"> <div class="bg-white border border-black p-2 flex flex-col justify-between"> <span class="text-[10px] font-heavy uppercase text-neutral-500">🌅 Sunrise</span> <span class="font-heavy text-sm text-black" id="daylight-sunrise-val">6:54 AM</span> </div> <div class="bg-white border border-black p-2 flex flex-col justify-between"> <span class="text-[10px] font-heavy uppercase text-neutral-500">🌇 Sunset</span> <span class="font-heavy text-sm text-black" id="daylight-sunset-val">9:02 PM</span> </div> <div class="bg-white border border-black p-2 flex flex-col justify-between"> <span class="text-[10px] font-heavy uppercase text-neutral-500">☀️ Solar Noon</span> <span class="font-heavy text-sm text-black" id="daylight-noon-val">1:59 PM</span> </div> <div class="bg-white border border-black p-2 flex flex-col justify-between"> <span class="text-[10px] font-heavy uppercase text-neutral-500">🌓 Civil Twilight</span> <span class="font-heavy text-sm text-black" id="daylight-twilight-val">6:08 AM – 9:48 PM</span> </div> </div> <div class="pt-1 text-[10px] text-neutral-600 font-heavy uppercase flex items-center justify-between"> <span id="daylight-fai-val">Fairbanks: 14h 22m</span> <span id="daylight-jnu-val">Juneau: 13h 52m</span> <span id="daylight-brw-val">Utqiaġvik: 15h 08m</span> </div> <div class="mt-3 pt-2 border-t border-neutral-300 flex flex-col gap-0.5 text-[10px] font-mono text-neutral-500 uppercase tracking-wider"> <div class="font-medium text-neutral-600">Sources: NOAA Solar Calculator / USNO Equations</div> <div id="tab-daylight-updated" class="text-neutral-500">LIVE ALASKA FEED · ANCHORAGE, AK</div> </div> </div>  <div id="weather-panel-aurora" class="weather-panel hidden space-y-3"> <div class="bg-neutral-900 border-2 border-black p-3 text-white"> <div class="flex items-center justify-between mb-1.5"> <span class="font-heavy text-[10px] uppercase tracking-wider text-emerald-400">NOAA GEOMAGNETIC ACTIVITY</span> <span id="aurora-kp-badge" class="bg-emerald-400 text-black px-1.5 py-0.2 font-heavy text-[9px] uppercase border border-black">
Kp 2.67 · QUIET SKY </span> </div> <div class="headline-heavy text-xl text-yellow-300"> <span id="aurora-forecast-status">STABLE GEOMAGNETIC FIELD</span> </div> <p class="font-sans text-[11px] text-neutral-300 mt-1">
Solar wind: <span id="aurora-solar-wind-val" class="font-bold text-white">~351 km/s</span> · Prime dark sky viewing: <strong>10:30 PM – 2:30 AM</strong>.
</p> </div> <div class="space-y-1.5 text-xs font-sans"> <div class="flex items-center justify-between p-1.5 bg-white border border-black"> <span class="font-bold text-black">🌲 Fairbanks / Interior:</span> <span class="text-[10px] font-heavy text-emerald-700 uppercase" id="aurora-vis-fai">Active Overhead</span> </div> <div class="flex items-center justify-between p-1.5 bg-white border border-black"> <span class="font-bold text-black">🏔️ Anchorage / Mat-Su:</span> <span class="text-[10px] font-heavy text-yellow-700 uppercase" id="aurora-vis-anc">Northern Horizon</span> </div> <div class="flex items-center justify-between p-1.5 bg-white border border-black"> <span class="font-bold text-black">🌊 Southeast Alaska:</span> <span class="text-[10px] font-heavy text-neutral-500 uppercase" id="aurora-vis-sea">Low Visibility</span> </div> </div> <div class="bg-yellow-50 border border-neutral-300 p-2 text-[10px] text-neutral-800 flex items-center justify-between"> <div> <strong class="font-heavy uppercase block mb-0.5">Top Dark Sky Spots Near Anchorage:</strong> <span>📍 Point Woronzof · 📍 Glen Alps · 📍 Eklutna Tailrace</span> </div> </div> <div class="mt-3 pt-2 border-t border-neutral-300 flex flex-col gap-0.5 text-[10px] font-mono text-neutral-500 uppercase tracking-wider"> <div class="font-medium text-neutral-600">Source: NOAA Space Weather Prediction Center</div> <div id="tab-aurora-updated" class="text-neutral-500">LIVE ALASKA FEED · ANCHORAGE, AK</div> </div> </div>  <div id="weather-panel-mountains" class="weather-panel hidden space-y-2"> <ul class="divide-y divide-neutral-200 text-xs font-sans"> <li class="grid grid-cols-[1fr_auto_auto] items-center gap-2 py-1.5 px-1 hover:bg-yellow-50 transition-colors"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-aly" class="shrink-0 text-sm">🎿</span> <span class="truncate font-bold text-black">Alyeska Resort (Girdwood)</span> </span> <span id="weather-cond-aly" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-aly" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="52">52°F</span> </li> <li class="grid grid-cols-[1fr_auto_auto] items-center gap-2 py-1.5 px-1 hover:bg-yellow-50 transition-colors"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-arc" class="shrink-0 text-sm">⛷️</span> <span class="truncate font-bold text-black">Arctic Valley (Alpenglow)</span> </span> <span id="weather-cond-arc" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-arc" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="44">44°F</span> </li> <li class="grid grid-cols-[1fr_auto_auto] items-center gap-2 py-1.5 px-1 hover:bg-yellow-50 transition-colors"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-hat" class="shrink-0 text-sm">🏔️</span> <span class="truncate font-bold text-black">Hatcher Pass (Independence)</span> </span> <span id="weather-cond-hat" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-hat" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="39">39°F</span> </li> <li class="grid grid-cols-[1fr_auto_auto] items-center gap-2 py-1.5 px-1 hover:bg-yellow-50 transition-colors"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-tur" class="shrink-0 text-sm">🚗</span> <span class="truncate font-bold text-black">Turnagain Pass (Summit)</span> </span> <span id="weather-cond-tur" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-tur" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="45">45°F</span> </li> <li class="grid grid-cols-[1fr_auto_auto] items-center gap-2 py-1.5 px-1 hover:bg-yellow-50 transition-colors"> <span class="flex items-center gap-2 min-w-0 font-bold text-xs text-black truncate"> <span id="weather-icon-tho" class="shrink-0 text-sm">❄️</span> <span class="truncate font-bold text-black">Thompson Pass (Valdez)</span> </span> <span id="weather-cond-tho" class="text-[10px] font-bold text-neutral-500 uppercase tracking-wider text-right shrink-0 whitespace-nowrap">Live</span> <span id="weather-temp-tho" class="weather-temp-val font-heavy text-xs text-black text-right min-w-[38px] tabular-nums shrink-0" data-temp-f="42">42°F</span> </li> </ul> <div class="mt-2 pt-2 border-t border-neutral-200"> <div class="text-[10px] font-mono uppercase font-bold text-neutral-500 mb-1.5 px-0.5 flex items-center justify-between"> <span>Passes (Google Maps Area):</span> <span class="text-[9px] font-normal text-neutral-400">New tab ↗</span> </div> <div class="space-y-1 text-xs font-sans"> <a href="https://www.google.com/maps/search/?api=1&query=Alyeska+Resort+Girdwood+Alaska" target="_blank" rel="noopener noreferrer" class="flex items-center justify-between p-1.5 bg-white border border-black hover:bg-yellow-100 hover:shadow-[2px_2px_0px_#000] transition-all group cursor-pointer" title="View Alyeska Pass area on Google Maps"> <span class="font-bold text-black flex items-center gap-1.5"> <span class="text-xs">📍</span> <span class="group-hover:underline">Alyeska (2.7k')</span> </span> <span class="text-[10px] font-mono font-bold text-neutral-600 flex items-center gap-1"> <span>Map</span> <span class="text-xs">↗</span> </span> </a> <a href="https://www.google.com/maps/search/?api=1&query=Hatcher+Pass+Alaska" target="_blank" rel="noopener noreferrer" class="flex items-center justify-between p-1.5 bg-white border border-black hover:bg-yellow-100 hover:shadow-[2px_2px_0px_#000] transition-all group cursor-pointer" title="View Hatcher Pass area on Google Maps"> <span class="font-bold text-black flex items-center gap-1.5"> <span class="text-xs">📍</span> <span class="group-hover:underline">Hatcher (3.8k')</span> </span> <span class="text-[10px] font-mono font-bold text-neutral-600 flex items-center gap-1"> <span>Map</span> <span class="text-xs">↗</span> </span> </a> <a href="https://www.google.com/maps/search/?api=1&query=Thompson+Pass+Valdez+Alaska" target="_blank" rel="noopener noreferrer" class="flex items-center justify-between p-1.5 bg-white border border-black hover:bg-yellow-100 hover:shadow-[2px_2px_0px_#000] transition-all group cursor-pointer" title="View Thompson Pass area on Google Maps"> <span class="font-bold text-black flex items-center gap-1.5"> <span class="text-xs">📍</span> <span class="group-hover:underline">Thompson (2.8k')</span> </span> <span class="text-[10px] font-mono font-bold text-neutral-600 flex items-center gap-1"> <span>Map</span> <span class="text-xs">↗</span> </span> </a> </div> </div> <div class="mt-3 pt-2 border-t border-neutral-300 flex flex-col gap-0.5 text-[10px] font-mono text-neutral-500 uppercase tracking-wider"> <div class="font-medium text-neutral-600">Sources: NOAA NWS / Open-Meteo Mountain Models</div> <div id="tab-mountains-updated" class="text-neutral-500">LIVE ALASKA FEED · ANCHORAGE, AK</div> </div> </div>  <div id="weather-panel-tides" class="weather-panel hidden space-y-3"> <div class="bg-cyan-50 border-2 border-black p-3 text-black"> <div class="flex items-center justify-between mb-1"> <span class="font-heavy text-[10px] uppercase tracking-wider text-neutral-700">COOK INLET / ANCHORAGE TIDES</span> <span class="bg-cyan-400 text-black px-1.5 py-0.2 font-heavy text-[9px] uppercase border border-black">NOAA STA 9455920</span> </div> <div class="grid grid-cols-2 gap-2 mt-2"> <div class="bg-white border border-black p-2"> <span class="text-[10px] font-heavy text-neutral-500 uppercase block">🌊 Next High Tide</span> <span class="font-heavy text-base text-black" id="tide-high-val">+29.7 FT</span> <span class="text-[10px] font-mono text-neutral-600 block" id="tide-high-time">6:14 PM AKDT</span> </div> <div class="bg-white border border-black p-2"> <span class="text-[10px] font-heavy text-neutral-500 uppercase block">🌊 Next Low Tide</span> <span class="font-heavy text-base text-black" id="tide-low-val">+2.9 FT</span> <span class="text-[10px] font-mono text-neutral-600 block" id="tide-low-time">12:31 PM AKDT</span> </div> </div> <div class="mt-2 pt-2 border-t border-cyan-200 text-[10px] text-neutral-700"> <div class="font-heavy text-[9px] uppercase text-neutral-600 mb-1">Upcoming Tide Schedule:</div> <div class="grid grid-cols-2 gap-1 font-mono text-[9px]" id="tides-full-schedule"> <span>Low: 2.9&#39; @ 12:31 PM</span><span>High: 29.7&#39; @ 6:14 PM</span><span>Low: 1.1&#39; @ Tomorrow 12:53 AM</span><span>High: 29.1&#39; @ Tomorrow 6:32 AM</span><span>Low: 2.7&#39; @ Tomorrow 1:12 PM</span><span>High: 30.8&#39; @ Tomorrow 6:48 PM</span> </div> </div> <p class="font-sans text-[10px] text-neutral-700 mt-2">
⚠️ <em>Turnagain Arm Bore Tide:</em> Waves arrive ~2h 15m after Anchorage low tide. Never walk on mudflats.
</p> </div>  <div class="bg-emerald-50 border border-black p-2.5 flex items-center justify-between"> <div> <span class="text-[10px] font-heavy text-emerald-800 uppercase block">EPA AIR QUALITY (SOUTH CENTRAL)</span> <span class="font-heavy text-sm text-black" id="air-quality-val">AQI 12 · CLEAN AIR</span> </div> <span class="bg-[#00e676] text-black px-2 py-0.5 font-heavy text-[10px] uppercase border border-black" id="air-quality-badge">
GOOD
</span> </div> <div class="mt-3 pt-2 border-t border-neutral-300 flex flex-col gap-0.5 text-[10px] font-mono text-neutral-500 uppercase tracking-wider"> <div class="font-medium text-neutral-600">Sources: NOAA CO-OPS Station 9455920 / EPA AirNow</div> <div id="tab-tides-updated" class="text-neutral-500">LIVE ALASKA FEED · ANCHORAGE, AK</div> </div> </div> </div> </div> </div>  <span class="hidden md:inline font-extrabold text-black uppercase tracking-widest text-[11px] truncate">
INDEPENDENT · UNCENSORED · ALASKAN
</span>  <div class="flex items-center gap-1.5 sm:gap-2.5 shrink-0"> <div class="relative" id="header-account-container"> <a href="#/portal/signin" id="header-account-btn" data-portal="signin" class="inline-flex items-center gap-1.5 hover:bg-black hover:text-[#FEB619] font-heavy text-xs uppercase px-2.5 py-1 border border-black bg-[#FEB619] shadow-[2px_2px_0px_#000] cursor-pointer transition-all shrink-0 no-underline" aria-label="Sign In to Anchorage Press"> <span id="header-account-pulse" class="hidden size-2 rounded-full bg-emerald-600 animate-pulse shrink-0"></span> <span id="header-account-label">Sign In</span> </a>  <button type="button" id="popover-signout-btn" hidden aria-hidden="true" tabindex="-1">Sign Out</button> </div> <a href="/search" class="inline-flex items-center gap-1.5 hover:text-yellow-600 font-heavy text-xs uppercase px-2 py-0.5 border border-black bg-white shadow-[2px_2px_0px_#000]" aria-label="Search"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" class="lucide lucide-search size-3.5 shrink-0">  <path d="m21 21-4.34-4.34"></path> <circle cx="11" cy="11" r="8"></circle>  </svg> <span>Search</span> </a> </div> </div> </div>  <div class="mx-auto max-w-7xl px-4 py-5 md:py-7"> <div class="flex flex-col items-center text-center"> <a href="/" class="inline-flex flex-col sm:flex-row items-center justify-center gap-2.5 sm:gap-6 group py-2 max-w-full"> <img src="/assets/images/anchoragepress-logo.svg" alt="ANCHORAGE PRESS" class="h-14 sm:h-20 md:h-24 lg:h-28 max-w-full w-auto object-contain transition-transform duration-300 group-hover:scale-[1.02]" width="400" height="112" fetchpriority="high" decoding="async"> <span class="font-editorial italic font-black text-xl sm:text-3xl md:text-4xl lg:text-5xl text-black tracking-tight leading-none transition-colors text-center">
Alaska’s <span class="font-heavy not-italic text-black">only</span> alt-weekly.
</span> </a> </div> </div> </header>  <div id="sticky-header-sentinel" class="h-0 w-full"></div>  <nav id="sticky-nav" aria-label="Main Navigation" class="hidden md:block sticky top-0 z-50 border-b-4 border-black bg-black text-white shadow-[0_4px_12px_rgba(0,0,0,0.5)] transition-all duration-300"> <div class="mx-auto max-w-7xl px-4 md:px-6 flex items-center justify-between h-14 relative">  <a href="/" id="sticky-logo" class="flex items-center shrink-0 max-w-0 overflow-hidden opacity-0 -translate-x-4 transition-all duration-300 ease-out pointer-events-none group py-1" aria-label="Anchorage Press Homepage"> <img src="/assets/images/anchoragepress-stacked-white.svg" alt="ANCHORAGE PRESS" class="h-8 sm:h-9 w-auto transition-transform duration-200 group-hover:scale-105 origin-left object-contain"> </a>  <div id="sticky-nav-options" class="flex-1 min-w-0 overflow-x-auto no-scrollbar mr-1 sm:mr-3 py-1 scroll-smooth" style="-webkit-overflow-scrolling: touch; touch-action: pan-x;"> <ul class="flex items-center gap-3 sm:gap-4 lg:gap-6 whitespace-nowrap font-heavy text-xs lg:text-sm tracking-widest w-max min-w-full justify-start pl-0 pr-1"> <li class="shrink-0"> <a href="/print" class="transition-colors hover:text-[#00e676] uppercase text-white"> Print Edition </a> </li><li class="shrink-0"> <a href="/news" class="transition-colors hover:text-[#00e676] uppercase text-white"> News </a> </li><li class="shrink-0"> <a href="/arts-culture" class="transition-colors hover:text-[#00e676] uppercase text-white"> Arts &amp; Culture </a> </li><li class="shrink-0"> <a href="/opinion" class="transition-colors hover:text-[#00e676] uppercase text-white"> Opinion </a> </li><li class="shrink-0"> <a href="/events" class="transition-colors hover:text-[#00e676] uppercase text-white"> Events </a> </li><li class="shrink-0"> <a href="/about" class="transition-colors hover:text-[#00e676] uppercase text-white"> Who We Are </a> </li><li class="shrink-0"> <a href="/advertise" class="transition-colors hover:text-[#00e676] uppercase text-white"> Advertise </a> </li><li class="shrink-0"> <a href="/submit/freelance" class="transition-colors hover:text-[#00e676] uppercase text-white"> Freelance </a> </li> </ul> </div>  <div class="flex items-center gap-1.5 sm:gap-2 shrink-0 pl-1 sm:pl-3"> <a href="/subscribe" id="sticky-subscribe-btn" data-portal="signup" class="hidden lg:inline-block bg-[#FEB619] text-black hover:bg-[#00e676] px-2.5 sm:px-3 py-1 text-xs font-heavy uppercase tracking-wider border border-black shadow-[2px_2px_0px_#fff] transition-all shrink-0"> <span id="sticky-subscribe-label">SUBSCRIBE</span> </a> <a href="/donate" class="hidden lg:inline-block bg-white text-black hover:bg-yellow-300 px-2.5 sm:px-3 py-1 text-xs font-heavy uppercase tracking-wider border border-black shadow-[2px_2px_0px_#fff] transition-all shrink-0">
DONATE
</a> <button type="button" id="desktop-drawer-trigger-btn" class="desktop-drawer-trigger flex items-center gap-1.5 bg-neutral-900 text-yellow-400 border border-neutral-700 hover:border-yellow-400 hover:bg-black px-2.5 py-1 text-xs font-heavy uppercase tracking-wider transition-all cursor-pointer shadow-[2px_2px_0px_#FEB619] shrink-0" aria-label="Open extended desks, print issues and submissions menu" aria-expanded="false" aria-controls="desktop-nav-drawer"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-menu size-3.5 text-yellow-400">  <path d="M4 5h16"></path> <path d="M4 12h16"></path> <path d="M4 19h16"></path>  </svg> <span>MORE</span> </button> </div> </div> </nav>  <div id="desktop-drawer-backdrop" class="fixed inset-0 z-[100] bg-black/70 backdrop-blur-sm hidden opacity-0 transition-opacity duration-300 pointer-events-none" aria-hidden="true"></div> <aside id="desktop-nav-drawer" aria-label="Extended Navigation and Features Menu" aria-hidden="true" inert class="hidden md:flex fixed top-0 right-0 bottom-0 z-[100] w-[520px] max-w-[95vw] bg-[#fcfbf7] text-black border-l-4 border-black shadow-[-10px_0px_40px_rgba(0,0,0,0.6)] translate-x-full transition-transform duration-300 ease-out flex-col h-full overflow-hidden">  <div class="bg-black text-white p-5 border-b-4 border-black flex items-center justify-between shrink-0"> <div class="flex items-center gap-3"> <span class="bg-yellow-400 text-black px-2.5 py-1 font-heavy text-xs uppercase border border-black shadow-[2px_2px_0px_#fff]">
SITE MENU
</span> <h2 class="headline-heavy text-2xl text-white tracking-wide uppercase">
ANCHORAGE PRESS
</h2> </div> <button type="button" id="desktop-drawer-close-btn" aria-label="Close extended menu" class="size-10 bg-neutral-800 text-white border-2 border-white hover:bg-red-600 hover:border-black font-heavy text-xl flex items-center justify-center transition-all cursor-pointer rounded"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-x size-5 text-white">  <path d="M18 6 6 18"></path> <path d="m6 6 12 12"></path>  </svg> </button> </div>  <div class="p-6 overflow-y-auto space-y-8 flex-1">  <div id="drawer-member-card" class="hidden bg-yellow-50 border-3 border-black p-4 shadow-[4px_4px_0px_#000] space-y-3" hidden aria-hidden="true" style="display: none;"> <div class="flex items-center justify-between border-b-2 border-black pb-2.5"> <div class="flex items-center gap-2.5 min-w-0"> <div class="w-9 h-9 rounded-full bg-black text-yellow-400 font-heavy text-xs flex items-center justify-center border-2 border-black shrink-0" id="drawer-member-initials"></div> <div class="min-w-0"> <div class="font-heavy text-sm uppercase text-black truncate" id="drawer-member-name"></div> <div class="font-mono text-[11px] text-neutral-600 truncate" id="drawer-member-email"></div> </div> </div> <span class="bg-black text-[#FEB619] font-heavy text-[9px] uppercase px-2 py-0.5 border border-black shadow-[1px_1px_0px_#000] shrink-0" id="drawer-member-tier"></span> </div> <div class="text-xs font-sans text-neutral-800 flex items-center gap-1.5" id="drawer-member-address-row"> <span class="shrink-0">📍</span> <span class="truncate font-semibold text-neutral-900" id="drawer-member-address-text"></span> </div> <div class="grid grid-cols-2 gap-2 pt-1"> <a href="/account" class="text-center font-heavy text-xs uppercase bg-black text-white hover:bg-yellow-400 hover:text-black py-2 px-2 border border-black transition-colors shadow-[2px_2px_0px_#000]">
Manage Account →
</a> <button type="button" id="drawer-signout-btn" class="font-heavy text-xs uppercase bg-white text-black hover:bg-red-600 hover:text-white py-2 px-2 border border-black transition-colors cursor-pointer shadow-[2px_2px_0px_#000]">
Sign Out
</button> </div> </div>  <div class="space-y-2.5"> <a href="/print" class="bg-[#FEB619] text-black border-2 border-black p-3.5 shadow-[4px_4px_0px_#000] hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-[2px_2px_0px_#000] transition-all flex items-center justify-between group"> <div> <span class="bg-black text-white px-2 py-0.5 font-heavy text-[10px] uppercase border border-black inline-block mb-1">
OCTOBER 2026 · OUT NOW
</span> <h3 class="headline-heavy text-lg uppercase text-black group-hover:underline flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-newspaper size-5 text-black">  <path d="M15 18h-5"></path> <path d="M18 14h-8"></path> <path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2"></path> <rect width="8" height="4" x="10" y="6" rx="1"></rect>  </svg> <span>NEW PRINT EDITION AVAILABLE</span> </h3> <span class="font-sans text-xs text-neutral-900 font-semibold block">Find a copy across 57+ Southcentral newsstands or read online</span> </div> <span class="headline-heavy text-2xl group-hover:translate-x-1 transition-transform">→</span> </a> <div class="grid grid-cols-2 gap-3"> <a href="/support" class="bg-[#00e676] text-black border-2 border-black p-3 shadow-[4px_4px_0px_#000] hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-[2px_2px_0px_#000] transition-all flex flex-col justify-between"> <span class="font-heavy text-xs uppercase tracking-wider">SUPPORT US</span> <span class="font-sans text-xs text-neutral-900 font-semibold mt-1">Memberships & Delivery</span> </a> <a href="/donate" class="bg-[#FEB619] text-black border-2 border-black p-3 shadow-[4px_4px_0px_#000] hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-[2px_2px_0px_#000] transition-all flex flex-col justify-between"> <span class="font-heavy text-xs uppercase tracking-wider">DONATE (501c3)</span> <span class="font-sans text-neutral-900 text-xs font-semibold mt-1">Tax-Deductible Gift</span> </a> </div> </div>  <section> <div class="border-b-2 border-black pb-2 mb-3"> <h3 class="font-heavy text-xs uppercase tracking-widest text-neutral-700">EDITORIAL DESKS</h3> </div> <div class="grid grid-cols-2 gap-2 font-heavy text-sm"> <a href="/news" class="p-2 border border-black bg-white hover:bg-yellow-300 transition-colors flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-newspaper size-4 text-black shrink-0">  <path d="M15 18h-5"></path> <path d="M18 14h-8"></path> <path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2"></path> <rect width="8" height="4" x="10" y="6" rx="1"></rect>  </svg> <span>News & Dispatches</span> </a> <a href="/politics-government" class="p-2 border border-black bg-white hover:bg-yellow-300 transition-colors flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-landmark size-4 text-black shrink-0">  <path d="M10 18v-7"></path> <path d="M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z"></path> <path d="M14 18v-7"></path> <path d="M18 18v-7"></path> <path d="M3 22h18"></path> <path d="M6 18v-7"></path>  </svg> <span>Gov & Politics</span> </a> <a href="/arts-culture" class="p-2 border border-black bg-white hover:bg-yellow-300 transition-colors flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-palette size-4 text-black shrink-0">  <path d="M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z"></path> <circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle> <circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle> <circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle> <circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle>  </svg> <span>Arts & Culture</span> </a> <a href="/environment" class="p-2 border border-black bg-white hover:bg-yellow-300 transition-colors flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-fish size-4 text-black shrink-0">  <path d="M6.5 12c.94-3.46 4.94-6 8.5-6 3.56 0 6.06 2.54 7 6-.94 3.47-3.44 6-7 6s-7.56-2.53-8.5-6Z"></path> <path d="M18 12v.5"></path> <path d="M16 17.93a9.77 9.77 0 0 1 0-11.86"></path> <path d="M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33"></path> <path d="M10.46 7.26C10.2 5.88 9.17 4.24 8 3h5.8a2 2 0 0 1 1.98 1.67l.23 1.4"></path> <path d="m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98"></path>  </svg> <span>Environment & Fish</span> </a> <a href="/energy" class="p-2 border border-black bg-white hover:bg-yellow-300 transition-colors flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-zap size-4 text-black shrink-0">  <path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path>  </svg> <span>Energy & Cook Inlet</span> </a> <a href="/opinion" class="p-2 border border-black bg-white hover:bg-yellow-300 transition-colors flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-pen-tool size-4 text-black shrink-0">  <path d="M15.707 21.293a1 1 0 0 1-1.414 0l-1.586-1.586a1 1 0 0 1 0-1.414l5.586-5.586a1 1 0 0 1 1.414 0l1.586 1.586a1 1 0 0 1 0 1.414z"></path> <path d="m18 13-1.375-6.874a1 1 0 0 0-.746-.776L3.235 2.028a1 1 0 0 0-1.207 1.207L5.35 15.879a1 1 0 0 0 .776.746L13 18"></path> <path d="m2.3 2.3 7.286 7.286"></path> <circle cx="11" cy="11" r="2"></circle>  </svg> <span>Opinion & Voices</span> </a> </div> </section>  <section class="bg-amber-50 border-3 border-black p-4 shadow-[4px_4px_0px_#000]"> <div class="border-b-2 border-black pb-2 mb-3"> <h3 class="font-heavy text-xs uppercase tracking-widest text-black">COMMUNITY SUBMISSIONS</h3> </div> <ul class="space-y-2 text-xs font-heavy"> <li> <a href="/submit/dish-of-the-month" class="flex items-center justify-between p-2 bg-white border border-black hover:bg-yellow-300 transition-colors"> <span class="inline-flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-utensils size-4 text-orange-600 shrink-0">  <path d="M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2"></path> <path d="M7 2v20"></path> <path d="M21 15V2a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7"></path>  </svg> <span>Nominate Dish of the Month</span> </span> <span class="text-[10px] text-neutral-600 font-sans font-bold">Food Desk →</span> </a> </li> <li> <a href="/submit/love-and-sex" class="flex items-center justify-between p-2 bg-white border border-black hover:bg-pink-300 transition-colors"> <span class="inline-flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-heart size-4 text-pink-600 shrink-0">  <path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"></path>  </svg> <span>Love & Sex Advice (Anonymous)</span> </span> <span class="text-[10px] text-neutral-600 font-sans font-bold">Ask Anything →</span> </a> </li> <li> <a href="/tips" class="flex items-center justify-between p-2 bg-white border border-black hover:bg-emerald-300 transition-colors"> <span class="inline-flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shield-alert size-4 text-emerald-700 shrink-0">  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path> <path d="M12 8v4"></path> <path d="M12 16h.01"></path>  </svg> <span>Submit a Tip</span> </span> <span class="text-[10px] text-neutral-600 font-sans font-bold">News Tips →</span> </a> </li> <li> <a href="/submit/freelance" class="flex items-center justify-between p-2 bg-white border border-black hover:bg-yellow-300 transition-colors"> <span class="inline-flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-pen-tool size-4 text-blue-600 shrink-0">  <path d="M15.707 21.293a1 1 0 0 1-1.414 0l-1.586-1.586a1 1 0 0 1 0-1.414l5.586-5.586a1 1 0 0 1 1.414 0l1.586 1.586a1 1 0 0 1 0 1.414z"></path> <path d="m18 13-1.375-6.874a1 1 0 0 0-.746-.776L3.235 2.028a1 1 0 0 0-1.207 1.207L5.35 15.879a1 1 0 0 0 .776.746L13 18"></path> <path d="m2.3 2.3 7.286 7.286"></path> <circle cx="11" cy="11" r="2"></circle>  </svg> <span>Freelance/Pitch Us</span> </span> <span class="text-[10px] text-neutral-600 font-sans font-bold">Write for Us →</span> </a> </li> <li> <a href="/events/submit" class="flex items-center justify-between p-2 bg-white border border-black hover:bg-yellow-300 transition-colors"> <span class="inline-flex items-center gap-1.5"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-calendar size-4 text-blue-600 shrink-0">  <path d="M8 2v4"></path> <path d="M16 2v4"></path> <rect width="18" height="18" x="3" y="4" rx="2"></rect> <path d="M3 10h18"></path>  </svg> <span>Community Calendar Submissions</span> </span> <span class="text-[10px] text-neutral-600 font-sans font-bold">Submit Event →</span> </a> </li> </ul> </section>  <section> <div class="border-b-2 border-black pb-2 mb-3"> <h3 class="font-heavy text-xs uppercase tracking-widest text-neutral-700">PRINT EDITIONS & ARCHIVES</h3> </div> <div class="grid grid-cols-2 gap-2 text-xs font-heavy"> <a href="/print" class="p-2.5 border border-black bg-white hover:bg-neutral-100 transition-colors flex items-center gap-2"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-newspaper size-4 text-black shrink-0">  <path d="M15 18h-5"></path> <path d="M18 14h-8"></path> <path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2"></path> <rect width="8" height="4" x="10" y="6" rx="1"></rect>  </svg> <span>Monthly Print Edition</span> </a> <a href="/find-the-press" class="p-2.5 border border-black bg-white hover:bg-neutral-100 transition-colors flex items-center gap-2"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-map-pin size-4 text-black shrink-0">  <path d="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"></path> <circle cx="12" cy="10" r="3"></circle>  </svg> <span>Find the Press in Print</span> </a> <a href="/map" class="p-2.5 border-2 border-black bg-[#FEB619] hover:bg-[#00e676] transition-colors flex items-center gap-2 text-black font-black"> <span class="text-sm">📍</span> <span>Map App (20 Best Ideas)</span> </a> <a href="/archive" class="p-2.5 border border-black bg-white hover:bg-neutral-100 transition-colors flex items-center gap-2"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-archive size-4 text-black shrink-0">  <rect width="20" height="5" x="2" y="3" rx="1"></rect> <path d="M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8"></path> <path d="M10 12h4"></path>  </svg> <span>Print Archives & Flipbooks</span> </a> <a href="/about/corrections" class="p-2.5 border border-black bg-white hover:bg-neutral-100 transition-colors flex items-center gap-2"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-scale size-4 text-black shrink-0">  <path d="M12 3v18"></path> <path d="m19 8 3 8a5 5 0 0 1-6 0zV7"></path> <path d="M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1"></path> <path d="m5 8 3 8a5 5 0 0 1-6 0zV7"></path> <path d="M7 21h10"></path>  </svg> <span>Corrections & Policy</span> </a> </div> </section>  <section> <div class="border-b-2 border-black pb-2 mb-3"> <h3 class="font-heavy text-xs uppercase tracking-widest text-neutral-700">WHO WE ARE & POLICIES</h3> </div> <div class="grid grid-cols-2 gap-2 text-xs font-heavy"> <a href="/about" class="p-2 border border-neutral-300 hover:border-black hover:bg-yellow-200 transition-colors">Our Story</a> <a href="/about/staff" class="p-2 border border-neutral-300 hover:border-black hover:bg-yellow-200 transition-colors">Our Core Team</a> <a href="/about/values-policies-actions" class="p-2 border border-neutral-300 hover:border-black hover:bg-yellow-200 transition-colors">Values & Policies</a> <a href="/get-involved" class="p-2 border border-neutral-300 hover:border-black hover:bg-yellow-200 transition-colors">Get Involved & Jobs</a> </div> </section>  <section class="bg-black text-white p-4 border-3 border-black shadow-[4px_4px_0px_#FEB619]"> <div class="border-b border-neutral-700 pb-2 mb-3"> <h3 class="font-heavy text-xs uppercase tracking-widest text-yellow-400">ADVERTISE WITH US</h3> </div> <p class="font-sans text-xs text-neutral-300 mb-3">
Reach 30,000+ print readers, 10,000+ newsletter subscribers, and high-engagement web traffic.
</p> <div class="grid grid-cols-3 gap-2"> <a href="/media-kit" class="bg-yellow-400 text-black py-2 px-2 font-heavy text-[11px] uppercase text-center border border-black hover:bg-white transition-colors">
Media Kit
</a> <a href="/advertise" class="bg-emerald-400 text-black py-2 px-2 font-heavy text-[11px] uppercase text-center border border-black hover:bg-white transition-colors">
Advertise
</a> <a href="/media-kit.pdf" download="Anchorage-Press-Media-Kit-2026.pdf" class="bg-neutral-800 text-white py-2 px-2 font-heavy text-[11px] uppercase text-center border border-neutral-600 hover:bg-neutral-700 transition-colors">
Download PDF
</a> </div> </section> </div>  <div class="p-4 bg-neutral-200 border-t-2 border-black flex items-center justify-between text-xs font-heavy uppercase shrink-0"> <a href="/account" class="hover:text-emerald-700 underline underline-offset-2">Member Account</a> <a href="/sitemap" class="hover:text-emerald-700 underline underline-offset-2">Site Directory / Sitemap</a> </div> </aside> <script type="module" src="/_astro/DesktopNavDrawer.astro_astro_type_script_index_0_lang.Doi9pb_T.js"></script> <script type="module" src="/_astro/SiteHeader.astro_astro_type_script_index_0_lang.D2cHb42U.js"></script> <main id="main" class="min-h-[70vh]" tabindex="-1"> <div id="reading-progress-bar" class="fixed top-0 left-0 right-0 h-1 z-50 bg-neutral-200 pointer-events-none"> <div id="reading-progress-fill" class="h-full w-0 bg-emerald-400 transition-all duration-75"></div> </div> <script type="module">function o(){const e=document.getElementById("reading-progress-fill");if(!e)return;function t(){const s=window.scrollY||document.documentElement.scrollTop,n=document.documentElement.scrollHeight-document.documentElement.clientHeight,l=n>0?s/n*100:0;e.style.width=`${Math.min(100,Math.max(0,l))}%`}window.addEventListener("scroll",t,{passive:!0}),t()}o();document.addEventListener("astro:page-load",o);</script><aside id="article-utility-rail" aria-label="Article Utilities" class="hidden lg:flex fixed right-0 top-[42%] z-40 transition-all duration-300 ease-in-out" style="transform: translateY(-50%) translateX(100%);">  <button type="button" id="rail-toggle-btn" aria-expanded="false" aria-controls="article-utility-rail" title="Open Article Tools" aria-label="Open Article Tools (Share, Save, Font Size, Audio)" style="top: 8px; right: 100%; transition: opacity 0.2s ease-out, transform 0.2s ease-out;" class="absolute bg-[#FEB619] hover:bg-black text-black hover:text-[#FEB619] border-2 border-r-0 border-black py-2.5 px-1.5 rounded-l-xl font-heavy text-[9px] uppercase tracking-widest flex flex-col items-center gap-1 shadow-[-3px_3px_0px_#000] cursor-pointer select-none group"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left" id="rail-toggle-icon"><path d="m15 18-6-6 6-6"></path></svg> <span class="[writing-mode:vertical-rl] rotate-180 font-black tracking-widest text-[9px]">TOOLS</span> </button>  <div class="flex flex-col gap-1 bg-[#FCFBF7] border-2 border-r-0 border-black p-1 rounded-l-xl shadow-[-4px_4px_0px_#000] w-14">  <div class="flex items-center justify-between pb-0.5 mb-0.5 border-b border-neutral-300"> <span class="font-heavy text-[7px] uppercase tracking-wider text-neutral-500 pl-0.5">TOOLS</span> <button type="button" id="rail-close-btn" title="Collapse Tools" aria-label="Collapse Tools" class="text-neutral-500 hover:text-black p-0.5 hover:bg-neutral-200 rounded transition-colors cursor-pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg> </button> </div> <button type="button" id="rail-share-btn" title="Share Story" aria-label="Share Story" class="flex flex-col items-center justify-center p-1.5 text-black hover:bg-yellow-400 hover:scale-105 active:scale-95 transition-all border border-black rounded-md group focus:outline-none cursor-pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-share2"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" x2="15.42" y1="13.51" y2="17.49"></line><line x1="15.41" x2="8.59" y1="6.51" y2="10.49"></line></svg> <span class="font-heavy text-[8px] uppercase tracking-wider mt-0.5">Share</span> </button> <button type="button" id="rail-save-btn" title="Save / Bookmark Story" aria-label="Save Story" class="flex flex-col items-center justify-center p-1.5 text-black hover:bg-emerald-400 hover:scale-105 active:scale-95 transition-all border border-black rounded-md group focus:outline-none cursor-pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bookmark"><path d="m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z"></path></svg> <span class="font-heavy text-[8px] uppercase tracking-wider mt-0.5">Save</span> </button> <button type="button" onclick="window.print()" title="Print Article" aria-label="Print Article" class="flex flex-col items-center justify-center p-1.5 text-black hover:bg-yellow-300 hover:scale-105 active:scale-95 transition-all border border-black rounded-md group focus:outline-none cursor-pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-printer"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"></path><rect x="6" y="14" width="12" height="8" rx="1"></rect></svg> <span class="font-heavy text-[8px] uppercase tracking-wider mt-0.5">Print</span> </button> <button type="button" id="rail-font-btn" title="Toggle Text Size" aria-label="Toggle Text Size" class="flex flex-col items-center justify-center p-1.5 text-black hover:bg-neutral-200 hover:scale-105 active:scale-95 transition-all border border-black rounded-md group focus:outline-none cursor-pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-type"><polyline points="4 7 4 4 20 4 20 7"></polyline><line x1="9" x2="15" y1="20" y2="20"></line><line x1="12" x2="12" y1="4" y2="20"></line></svg> <span class="font-heavy text-[8px] uppercase tracking-wider mt-0.5">Font</span> </button> <button type="button" id="rail-listen-btn" title="Listen to Article (Audio Reader)" aria-label="Listen to Article" class="flex flex-col items-center justify-center p-1.5 text-black hover:bg-emerald-300 hover:scale-105 active:scale-95 transition-all border border-black rounded-md group focus:outline-none cursor-pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-volume2"><path d="M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z"></path><path d="M16 9a5 5 0 0 1 0 6"></path><path d="M19.364 18.364a9 9 0 0 0 0-12.728"></path></svg> <span class="font-heavy text-[8px] uppercase tracking-wider mt-0.5">Listen</span> </button> <button type="button" id="rail-copy-btn" title="Copy Direct Article Link" aria-label="Copy Direct Article Link" class="flex flex-col items-center justify-center p-1.5 text-black hover:bg-yellow-400 hover:scale-105 active:scale-95 transition-all border border-black rounded-md group focus:outline-none cursor-pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg> <span class="font-heavy text-[8px] uppercase tracking-wider mt-0.5">Copy</span> </button> <button type="button" id="rail-report-btn" title="Report a Correction / Typo" aria-label="Report a Correction" class="flex flex-col items-center justify-center p-1.5 text-black hover:bg-red-500 hover:text-white hover:scale-105 active:scale-95 transition-all border border-black rounded-md group focus:outline-none cursor-pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-flag"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"></path><line x1="4" x2="4" y1="22" y2="15"></line></svg> <span class="font-heavy text-[8px] uppercase tracking-wider mt-0.5">Report</span> </button> <a href="/support" title="Support This Reporting" aria-label="Support This Reporting" class="flex flex-col items-center justify-center p-1.5 bg-black text-yellow-400 hover:bg-emerald-400 hover:text-black hover:scale-105 active:scale-95 transition-all border border-black rounded-md group focus:outline-none shadow-[2px_2px_0px_#000]"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-heart"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"></path></svg> <span class="font-heavy text-[8px] uppercase tracking-wider mt-0.5">Support</span> </a> </div> </aside>  <div id="utility-toast" class="fixed bottom-20 right-6 z-50 hidden bg-black text-yellow-400 font-heavy text-xs px-4 py-2 border-2 border-black shadow-[4px_4px_0px_#00e676] transition-all">
Link Copied to Clipboard!
</div>  <script>
  function initArticleUtilityRail() {
    const copyBtn = document.getElementById('rail-copy-btn');
    const toast = document.getElementById('utility-toast');
    const shareBtn = document.getElementById('rail-share-btn');
    const saveBtn = document.getElementById('rail-save-btn');
    const fontBtn = document.getElementById('rail-font-btn');
    const listenBtn = document.getElementById('rail-listen-btn');
    const reportBtn = document.getElementById('rail-report-btn');

    function showToast(text) {
      if (!toast) return;
      toast.textContent = text;
      toast.classList.remove('hidden');
      setTimeout(() => toast.classList.add('hidden'), 2500);
    }

    if (copyBtn) {
      copyBtn.addEventListener('click', () => {
        navigator.clipboard.writeText(window.location.href).then(() => {
          showToast("Link Copied to Clipboard!");
        });
      });
    }

    if (shareBtn) {
      shareBtn.addEventListener('click', () => {
        if (navigator.share) {
          navigator.share({
            title: document.title,
            url: window.location.href
          }).catch(() => {});
        } else {
          window.open('https://twitter.com/intent/tweet?text=' + encodeURIComponent(document.title) + '&url=' + encodeURIComponent(window.location.href), '_blank');
        }
      });
    }

    if (saveBtn) {
      saveBtn.addEventListener('click', () => {
        const saved = JSON.parse(localStorage.getItem('saved_articles') || '[]');
        const currentUrl = window.location.href;
        if (!saved.includes(currentUrl)) {
          saved.push(currentUrl);
          localStorage.setItem('saved_articles', JSON.stringify(saved));
          showToast("Story Saved to Reading List!");
        } else {
          showToast("Story Already in Reading List!");
        }
      });
    }

    if (fontBtn) {
      fontBtn.addEventListener('click', () => {
        if (document.body.classList.contains('font-size-large')) {
          document.body.classList.remove('font-size-large');
          document.body.classList.add('font-size-xlarge');
          showToast("Text Size: Extra Large (130%)");
        } else if (document.body.classList.contains('font-size-xlarge')) {
          document.body.classList.remove('font-size-xlarge');
          showToast("Text Size: Normal (100%)");
        } else {
          document.body.classList.add('font-size-large');
          showToast("Text Size: Large (115%)");
        }
      });
    }

    if (reportBtn) {
      reportBtn.addEventListener('click', () => {
        const userNote = prompt("Report an inaccuracy, typo, or correction for this article to the Anchorage Press editorial desk:", "");
        if (userNote !== null && userNote.trim().length > 0) {
          const mailSubject = encodeURIComponent("Correction / Editorial Tip: " + document.title);
          const mailBody = encodeURIComponent("Article URL: " + window.location.href + "\n\nReported Issue:\n" + userNote);
          window.location.href = "mailto:tips@anchoragepress.com?subject=" + mailSubject + "&body=" + mailBody;
          showToast("Opening Email to Editorial Desk...");
        } else if (userNote !== null) {
          const mailSubject = encodeURIComponent("Correction / Editorial Tip: " + document.title);
          const mailBody = encodeURIComponent("Article URL: " + window.location.href + "\n\nCorrection Details:\n");
          window.location.href = "mailto:tips@anchoragepress.com?subject=" + mailSubject + "&body=" + mailBody;
        }
      });
    }

    if (listenBtn) {
      let synth = window.speechSynthesis;
      listenBtn.addEventListener('click', () => {
        if (!synth) {
          showToast("Speech synthesis not supported in this browser");
          return;
        }
        if (synth.speaking) {
          synth.cancel();
          showToast("Audio Reader Stopped");
        } else {
          const bodyText = document.querySelector('.prose')?.textContent || document.querySelector('article')?.textContent || document.title;
          const utterance = new SpeechSynthesisUtterance(bodyText.substring(0, 1500));
          utterance.rate = 1.0;
          synth.speak(utterance);
          showToast("Playing Audio Reading...");
        }
      });
    }

    // Drawer Expand / Collapse Logic
    const rail = document.getElementById('article-utility-rail');
    const toggleBtn = document.getElementById('rail-toggle-btn');
    const closeBtn = document.getElementById('rail-close-btn');
    const toggleIcon = document.getElementById('rail-toggle-icon');

    function isRailOpen() {
      return rail && rail.getAttribute('data-open') === 'true';
    }

    function openRail() {
      if (!rail) return;
      rail.style.transform = 'translateY(-50%) translateX(0)';
      rail.style.zIndex = '50';
      rail.setAttribute('data-open', 'true');
      if (toggleBtn) {
        toggleBtn.setAttribute('aria-expanded', 'true');
        toggleBtn.setAttribute('title', 'Close Article Tools');
        toggleBtn.style.opacity = '0';
        toggleBtn.style.pointerEvents = 'none';
      }
      window.dispatchEvent(new CustomEvent('ap:rail-state', { detail: { open: true } }));
    }

    function closeRail() {
      if (!rail) return;
      rail.style.transform = 'translateY(-50%) translateX(100%)';
      rail.style.zIndex = '40';
      rail.setAttribute('data-open', 'false');
      if (toggleBtn) {
        toggleBtn.setAttribute('aria-expanded', 'false');
        toggleBtn.setAttribute('title', 'Open Article Tools');
        toggleBtn.style.opacity = '1';
        toggleBtn.style.pointerEvents = 'auto';
      }
      window.dispatchEvent(new CustomEvent('ap:rail-state', { detail: { open: false } }));
    }

    function toggleRail(e) {
      if (e) e.stopPropagation();
      if (!rail) return;
      if (isRailOpen()) {
        closeRail();
      } else {
        openRail();
      }
    }

    if (toggleBtn) toggleBtn.addEventListener('click', toggleRail);
    if (closeBtn) closeBtn.addEventListener('click', (e) => {
      e.stopPropagation();
      closeRail();
    });

    // Close on Escape key
    document.addEventListener('keydown', (e) => {
      if (e.key === 'Escape' && isRailOpen()) {
        closeRail();
      }
    });

    // Close when clicking outside the rail
    document.addEventListener('click', (e) => {
      if (rail && !rail.contains(e.target) && isRailOpen()) {
        closeRail();
      }
    });

    // Mutual exclusivity: Close tools rail when other master actions occur
    window.addEventListener('ap:rail-close', () => {
      if (isRailOpen()) closeRail();
    });

    // Close if Ghost Portal opens
    window.addEventListener('hashchange', () => {
      if (window.location.hash.startsWith('#/portal') && isRailOpen()) {
        closeRail();
      }
    });
  }

  document.addEventListener('DOMContentLoaded', initArticleUtilityRail);
  document.addEventListener('astro:page-load', initArticleUtilityRail);
  if (document.readyState !== 'loading') initArticleUtilityRail();
</script><div class="mx-auto max-w-7xl px-4 pt-10 pb-16 md:px-6"><div class="grid grid-cols-1 lg:grid-cols-12 gap-8 lg:gap-12"><article class="lg:col-span-8"><header class="mb-10" data-astro-cid-e5itrpi2> <div class="mb-4" data-astro-cid-e5itrpi2> <a href="/tag/dan-sullivan/" class="inline-block bg-black text-[#FEB619] border border-black font-heavy text-xs tracking-widest uppercase px-3 py-1 hover:bg-[#FEB619] hover:text-black transition-colors">
#Dan Sullivan </a> </div> <h1 class="headline-heavy text-5xl sm:text-6xl md:text-7xl text-black leading-tight tracking-tight" data-astro-cid-e5itrpi2> Results suggest left-leaning voters buoyed Petersburg Sullivan in Alaska&#39;s U.S. Senate primary </h1> <p class="mt-6 font-serif text-xl sm:text-2xl text-neutral-800 leading-relaxed italic border-l-4 border-yellow-400 pl-4" data-astro-cid-e5itrpi2> In urban areas where the leading Democrat performed well, the retired teacher from Petersburg also saw strong results. </p> <div class="mt-8" data-astro-cid-e5itrpi2> <div class="flex flex-wrap items-center gap-4 border-y-2 border-black py-4 font-heavy text-sm tracking-wider uppercase text-black"> <div class="flex items-center gap-3"> <div class="size-10 rounded-full border-2 border-black shrink-0 overflow-hidden bg-black flex items-center justify-center"> <img src="/assets/authors/herz.webp" alt="Nathaniel Herz" class="size-full object-cover" onerror="this.onerror=null; this.src='/favicon.svg'; this.parentElement.classList.remove('border-2', 'bg-black');" loading="lazy"> </div> <span>
BY  <a href="/author/herz/" class="underline decoration-emerald-500 decoration-2 hover:text-emerald-600"> Nathaniel Herz </a> </span> </div> <span class="text-neutral-400">|</span> <span>August 28, 2026 · 11:30 AM AKDT</span> <span class="text-neutral-400">|</span> <span class="bg-black text-yellow-400 px-2 py-0.5 text-xs">4 MIN READ</span> </div> </div>  <figure class="mt-8 border-4 border-black bg-black p-2 shadow-[8px_8px_0px_#000]" data-astro-cid-e5itrpi2> <img src="/assets/article-images/results-suggest-left-leaning-voters-buoyed-petersburg-sullivan-in-alaskas-u-s-senate-primary.webp" alt="Results suggest left-leaning voters buoyed Petersburg Sullivan in Alaska's U.S. Senate primary" class="w-full object-cover max-h-[550px]" onerror="this.onerror=null; this.src='/assets/images/image01.png';" loading="eager" fetchpriority="high" decoding="async" width="1200" height="675" data-astro-cid-e5itrpi2> <figcaption class="mt-2.5 text-xs italic font-sans text-neutral-300 px-2 leading-relaxed [&_a]:text-yellow-400 [&_a]:underline [&_a]:font-bold [&_a]:decoration-yellow-400 [&_a]:underline-offset-2 hover:[&_a]:text-[#00e676] hover:[&_a]:decoration-[#00e676]" data-astro-cid-e5itrpi2><span style="white-space: pre-wrap;">Daniel J. Sullivan poses for a photo at his home workshop in Petersburg. (Taylor Heckart/KFSK)</span></figcaption> </figure> </header> <div class="my-8 flex flex-wrap items-center justify-between gap-4 border-y-3 border-black py-4 bg-yellow-300 px-4 font-heavy text-xs tracking-widest uppercase text-black"> <span>SHARE THIS STORY</span> <div class="flex flex-wrap gap-3"> <a href="https://twitter.com/intent/tweet?text=Results%20suggest%20left-leaning%20voters%20buoyed%20Petersburg%20Sullivan%20in%20Alaska's%20U.S.%20Senate%20primary&url=https%3A%2F%2Fanchoragepress.com%2Fresults-suggest-left-leaning-voters-buoyed-petersburg-sullivan-in-alaskas-u-s-senate-primary%2F" target="_blank" rel="noopener noreferrer" class="bg-black text-white px-3 py-1 hover:bg-emerald-400 hover:text-black transition-colors">
X / TWITTER
</a> <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fanchoragepress.com%2Fresults-suggest-left-leaning-voters-buoyed-petersburg-sullivan-in-alaskas-u-s-senate-primary%2F" target="_blank" rel="noopener noreferrer" class="bg-black text-white px-3 py-1 hover:bg-emerald-400 hover:text-black transition-colors">
FACEBOOK
</a> <a href="/cdn-cgi/l/email-protection#37084442555d5254430a655244425b4344120507444250505244431205075b5251431a5b5256595e59501205074158435245441205075542584e52531205076752435245445542455012050764425b5b5e4156591205075e59120507765b56445c5610441205076219641912050764525956435212050747455e5a56454e1114040f0c5558534e0a5f434347441204761205711205715659545f584556505247455244441954585a120571455244425b43441a444250505244431a5b5251431a5b5256595e59501a4158435245441a5542584e52531a475243524544554245501a44425b5b5e4156591a5e591a565b56445c56441a421a441a4452595643521a47455e5a56454e120571" class="bg-black text-white px-3 py-1 hover:bg-emerald-400 hover:text-black transition-colors">
EMAIL
</a> </div> </div><div class="article-prose font-editorial text-lg sm:text-xl text-black leading-relaxed max-w-[720px] mx-auto space-y-6"> <div><p><em>Northern Journal has merged with the Anchorage Press! Read our announcement and other information&nbsp;</em><a href="/?ref=northernjournal.com" rel="noreferrer"><em>here</em></a><em>, and support us with a subscription&nbsp;</em><a href="https://cms.anchoragepress.com/pre-purchase-an-anchorage-press-subscription/" rel="noreferrer"><em>here</em></a><em>.</em></p><div class="kg-card kg-button-card kg-align-center"><a href="https://cms.anchoragepress.com/this-democratic-socialist-could-cost-mary-peltola-votes-in-november-but-he-says-hed-actually-boost-her/#/portal/signup" class="kg-btn kg-btn-accent" rel="noopener noreferrer" target="_blank">Subscribe</a></div><p>For months, Republicans have been criticizing U.S. Senate candidate Daniel J. Sullivan — a retired Alaska teacher who in May filed to challenge his state’s GOP incumbent: Daniel S. Sullivan.</p><p>Republican critics <a href="https://townhall.com/news/mattvespa/2026/08/28/nyt-piece-on-the-fake-dan-sullivan-is-why-the-medias-trust-is-in-the-toilet-n2681569?ref=cms.anchoragepress.com" rel="noopener noreferrer" target="_blank"><u>asserted that</u></a> the retired teacher —&nbsp;known as Petersburg Sullivan for his Southeast Alaska hometown —&nbsp;was a plant by Democrats, and alleged the duplicate Dan aimed to siphon support for the incumbent from voters who couldn’t tell the difference between the two Sullivans.</p><p>But last week’s primary election results suggest his candidacy had the opposite effect, with a significant share of votes for Petersburg Sullivan likely coming at the expense of the leading Democrat in the race, Mary Peltola.</p><p>Petersburg Sullivan, who’s running as an anti-incumbent, anti-MAGA moderate Republican, currently sits third in unofficial results.</p><p>The fear among incumbent Sullivan’s allies was that the senator’s supporters were at risk of accidentally voting for Petersburg Sullivan —&nbsp;meaning that they expected the retired teacher to draw more votes in precincts where the incumbent performed strongest. In districts where Peltola performed better, Petersburg Sullivan could still draw the same share of votes from the incumbent, but because they’d come from a smaller slice of the full electorate, his overall performance would presumably be worse.</p><p>Instead, Petersburg Sullivan’s level of support actually appeared to rise in certain urban areas where Peltola ran up huge margins.</p><p>In the ski town of Girdwood southeast of Anchorage, for example, Peltola won 74% of the 567 votes in the U.S. Senate race. Petersburg Sullivan, meanwhile, claimed 4.4% of votes there — nearly double the level of support, 2.5%, that he earned statewide.</p><p>In one downtown Juneau polling place, meanwhile, Peltola won 84% of the 566 votes, while Petersburg Sullivan notched 5.3%, or 30 votes. The incumbent Sullivan, meanwhile, got just 47 votes at the same polling place. If the votes for Petersburg Sullivan were primarily a result of confusion, that would mean he drew an improbably large proportion —&nbsp;one-fourth or more —&nbsp;of incumbent Sullivan’s support base at the Juneau polling place.</p><p>Across urban Alaska polling places, a broader analysis by the Anchorage Press using artificial intelligence found a strong relationship between Peltola’s and Petersburg Sullivan’s levels of support in last week’s primary — with only a roughly one in 10,000 chance of the correlation being the result of random chance.</p><p>Those results, however, don’t entirely rule out that some conservative voters still could have supported Petersburg Sullivan unintentionally. Petersburg Sullivan also drew more than 2% of votes in areas where the incumbent Sullivan performed well, like in one Delta Junction polling place, where the incumbent claimed 69% of votes and Petersburg Sullivan notched 2.3%, or 14 votes.</p><p>Petersburg Sullivan this week <a href="https://www.kfsk.org/2026/08/26/in-third-place-u-s-senate-candidate-dan-j-sullivan-says-he-doesnt-plan-to-withdraw/?ref=cms.anchoragepress.com" rel="noopener noreferrer" target="_blank"><u>told his local public radio station</u></a>, KFSK, that he feels “pretty vindicated” by the results.</p><p>“It seems to prove that there was very little, if any, voter confusion between the senator and myself,” said Sullivan.</p><p>Petersburg Sullivan is now poised to appear on the general election ballot — though without his party affiliation, which was stripped by election officials in GOP Gov. Mike Dunleavy’s administration. Those officials also tried to remove Petersburg Sullivan from the ballot entirely, though <a href="https://alaskabeacon.com/2026/06/29/alaska-supreme-court-rules-dan-j-sullivan-eligible-to-run-for-us-senate/?ref=cms.anchoragepress.com" rel="noopener noreferrer" target="_blank"><u>the Alaska Supreme Court rejected that effort</u></a>.</p><p>One question unanswered by the results themselves: Whether voters who would otherwise be inclined to support Peltola voted for Petersburg Sullivan because they genuinely supported his candidacy — or because they wanted to help him finish in the top four in the primary so he’d secure a place on the general election ballot as a spoiler for incumbent Sullivan.</p><p>“I represent a lot of moderate Republicans, and I've had conversations with people who say, ‘This is a Republican-leaning state, this guy would be pretty good,’” said Democratic state Sen. Jesse Kiehl, whose Juneau-area district includes the polling place where Petersburg Sullivan notched strong results.</p><p>But another explanation for that showing, Kiehl said, could be the “Streisand effect” — where, Kiehl said, a “colossal overreaction” by the GOP to Petersburg Sullivan’s candidacy “has brought on a snapback, and people saying, ‘Oh, well: If that's what they're afraid of, I'll give it to them.’”</p><p>Petersburg Sullivan himself did not agree to an interview request from the Anchorage Press. In a text message, he said that “local people have mentioned they voted for me because they were tired of career politicians.”</p><p>“I have seen comments online about people voting for me because they thought I was treated unfairly, and people who were (Peltola) supporters who just wanted me on the ballot,” he said. “I have not heard anyone use the word ‘confusion’ except reporters and the senator.”</p><p>A spokesperson for the incumbent Sullivan, Nate Adams, said the primary results offered their own vindication for Petersburg Sullivan’s GOP critics by&nbsp;proving that “Mary Peltola's voters put Daniel J. Sullivan Jr. on the November ballot.”</p><p>“This is just more evidence that Daniel J. Sullivan Jr.’s entire candidacy is centered around being a spoiler to benefit Mary Peltola,” Adams added.</p><p>After boosting Petersburg Sullivan onto the ranked choice general election ballot, Adams added, voters aligned with Peltola are now free to support the Democratic candidate again.</p><p>Kiehl, the Juneau Democratic senator, argued that Republicans who are still worried about voter confusion among supporters of the incumbent can deliver a simple message to voters: Just vote for all the Sullivans on the ballot.</p><p>Assuming that Petersburg Sullivan — who’s raised little money for his campaign — will be eliminated from contention before the two major party candidates, any voters who mistakenly rank him above the incumbent will have their votes reassigned.</p><p>The incumbent’s message should be, “Rank the Dans,” Kiehl said. “And if the combined two Dan Sullivans get more votes than Mary Peltola, the incumbent wins.”</p></div> </div>  <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
  function initPuzzleFullscreen() {
    // Wrap any puzzle iframes that were not pre-wrapped in SSR
    var puzzleIframes = document.querySelectorAll(
      '.article-prose iframe[src*="crosshare.org"], .article-prose iframe[src*="crosswordlabs"], .article-prose iframe[src*="amuselabs"]'
    );

    puzzleIframes.forEach(function(iframe) {
      if (!iframe.closest('.ap-puzzle-container')) {
        var wrapper = document.createElement('div');
        wrapper.className = 'ap-puzzle-container my-8 border-3 border-black bg-white shadow-[6px_6px_0px_#000] overflow-hidden';
        wrapper.setAttribute('data-ap-puzzle', 'true');
        wrapper.innerHTML = [
          '<div class="ap-puzzle-toolbar flex items-center justify-between gap-2 sm:gap-3 px-3 sm:px-4 py-2 sm:py-2.5 bg-black text-white border-b-3 border-black select-none">',
          '  <div class="flex items-center gap-2 min-w-0">',
          '    <span class="inline-block size-2.5 bg-[#00e676] rounded-full shrink-0 animate-pulse"></span>',
          '    <div class="flex items-center gap-1.5 min-w-0">',
          '      <span class="font-heavy text-xs uppercase tracking-widest text-[#FEB619] shrink-0">PRESS CROSSWORD</span>',
          '      <span class="text-neutral-400 text-xs font-sans truncate hidden md:inline">• Interactive Puzzle Hub</span>',
          '    </div>',
          '  </div>',
          '  <div class="flex items-center gap-1.5 sm:gap-2 shrink-0">',
          '    <a href="/crossword/print?id=w351SZsJygzo0cozC0dT&auto=1" target="_blank" rel="noopener noreferrer" class="ap-print-btn inline-flex items-center gap-1 sm:gap-1.5 px-2 sm:px-3 py-1 sm:py-1.5 bg-white hover:bg-yellow-400 text-black font-heavy text-xs uppercase tracking-wider border-2 border-black shadow-[2px_2px_0px_#fff] hover:translate-x-[-1px] hover:translate-y-[-1px] hover:shadow-[3px_3px_0px_#fff] active:translate-x-[1px] active:translate-y-[1px] transition-all cursor-pointer select-none" aria-label="Print Crossword on 11x8.5 paper or save PDF" title="Open branded 11x8.5 printable crossword edition">',
          '      <svg class="size-3.5 shrink-0" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M6.72 13.829c-.24-1.026.447-2.029 1.5-2.029h7.56c1.053 0 1.74 1.003 1.5 2.029l-.78 3.342c-.18.771-.87 1.329-1.663 1.329H9.163c-.793 0-1.483-.558-1.663-1.329l-.78-3.342z"/><path stroke-linecap="round" stroke-linejoin="round" d="M6 18H4a2 2 0 01-2-2v-5a2 2 0 012-2h16a2 2 0 012 2v5a2 2 0 01-2 2h-2"/><path stroke-linecap="round" stroke-linejoin="round" d="M6 9V4a1 1 0 011-1h10a1 1 0 011 1v5"/></svg>',
          '      <span class="hidden sm:inline">PRINT (11×8.5)</span>',
          '      <span class="sm:hidden">PRINT</span>',
          '    </a>',
          '    <button type="button" class="ap-fullscreen-toggle inline-flex items-center gap-1 sm:gap-1.5 px-2 sm:px-3 py-1 sm:py-1.5 bg-[#FEB619] hover:bg-[#00e676] text-black font-heavy text-xs uppercase tracking-wider border-2 border-black shadow-[2px_2px_0px_#fff] hover:translate-x-[-1px] hover:translate-y-[-1px] hover:shadow-[3px_3px_0px_#fff] active:translate-x-[1px] active:translate-y-[1px] transition-all cursor-pointer select-none" aria-label="Toggle Fullscreen Puzzle Mode" title="Expand crossword puzzle to full screen on Anchorage Press">',
          '      <svg class="size-3.5 ap-fs-icon-enter shrink-0" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15"/></svg>',
          '      <svg class="size-3.5 ap-fs-icon-exit shrink-0 hidden" fill="none" stroke="currentColor" stroke-width="2.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M9 9V4.5M9 9H4.5M9 9L3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5l5.25 5.25"/></svg>',
          '      <span class="ap-fs-btn-label hidden sm:inline">FULL SCREEN</span>',
          '      <span class="ap-fs-btn-label sm:hidden">EXPAND</span>',
          '    </button>',
          '  </div>',
          '</div>',
          '<div class="ap-puzzle-viewport relative w-full bg-white"></div>'
        ].join('');
        
        iframe.parentNode.insertBefore(wrapper, iframe);
        var vp = wrapper.querySelector('.ap-puzzle-viewport');
        if (vp) vp.appendChild(iframe);
      }
    });

    var containers = document.querySelectorAll('.ap-puzzle-container');
    containers.forEach(function(container) {
      if (container.__ap_puzzle_bound) return;
      container.__ap_puzzle_bound = true;

      var btn = container.querySelector('.ap-fullscreen-toggle');
      if (!btn) return;

      var enterIcon = container.querySelector('.ap-fs-icon-enter');
      var exitIcon = container.querySelector('.ap-fs-icon-exit');
      var vp = container.querySelector('.ap-puzzle-viewport');

      // Floating Mobile Jump Helper Button (Smoothly toggles between Grid and Keyboard on iPhone/mobile)
      var jumpBtn = container.querySelector('.ap-kb-jump-btn');
      if (!jumpBtn) {
        jumpBtn = document.createElement('button');
        jumpBtn.type = 'button';
        jumpBtn.className = 'ap-kb-jump-btn fixed bottom-4 right-4 z-[9999999] hidden items-center gap-1.5 px-3 py-1.5 bg-black text-[#FEB619] hover:bg-[#00e676] hover:text-black font-heavy text-xs uppercase tracking-wider border-2 border-black shadow-[3px_3px_0px_#fff] cursor-pointer select-none active:translate-x-[1px] active:translate-y-[1px] transition-all';
        jumpBtn.innerHTML = '<span class="ap-jump-icon text-sm">⌨️</span> <span class="ap-jump-txt">KEYBOARD</span>';
        container.appendChild(jumpBtn);

        jumpBtn.addEventListener('click', function(e) {
          e.preventDefault();
          if (!vp) return;
          var isAtBottom = (vp.scrollTop + vp.clientHeight) >= (vp.scrollHeight - 100);
          if (isAtBottom) {
            vp.scrollTo({ top: 0, behavior: 'smooth' });
          } else {
            vp.scrollTo({ top: vp.scrollHeight, behavior: 'smooth' });
          }
        });

        if (vp) {
          vp.addEventListener('scroll', function() {
            var isAtBottom = (vp.scrollTop + vp.clientHeight) >= (vp.scrollHeight - 100);
            var icon = jumpBtn.querySelector('.ap-jump-icon');
            var txt = jumpBtn.querySelector('.ap-jump-txt');
            if (icon && txt) {
              if (isAtBottom) {
                icon.textContent = '▲';
                txt.textContent = 'GRID';
              } else {
                icon.textContent = '⌨️';
                txt.textContent = 'KEYBOARD';
              }
            }
          }, { passive: true });
        }
      }

      function updateUI(isFullscreen) {
        var labels = container.querySelectorAll('.ap-fs-btn-label');
        if (isFullscreen) {
          container.classList.add('is-fullscreen');
          document.documentElement.classList.add('ap-puzzle-open');
          document.body.classList.add('ap-puzzle-open');
          if (enterIcon) enterIcon.classList.add('hidden');
          if (exitIcon) exitIcon.classList.remove('hidden');
          labels.forEach(function(lbl) {
            lbl.textContent = lbl.classList.contains('sm:hidden') ? 'EXIT' : 'EXIT FULL SCREEN';
          });
          btn.classList.remove('bg-[#FEB619]');
          btn.classList.add('bg-[#00e676]');
          if (jumpBtn) {
            jumpBtn.classList.remove('hidden');
            jumpBtn.classList.add('inline-flex');
          }
        } else {
          container.classList.remove('is-fullscreen');
          document.documentElement.classList.remove('ap-puzzle-open');
          document.body.classList.remove('ap-puzzle-open');
          if (enterIcon) enterIcon.classList.remove('hidden');
          if (exitIcon) exitIcon.classList.add('hidden');
          labels.forEach(function(lbl) {
            lbl.textContent = lbl.classList.contains('sm:hidden') ? 'EXPAND' : 'FULL SCREEN';
          });
          btn.classList.remove('bg-[#00e676]');
          btn.classList.add('bg-[#FEB619]');
          if (jumpBtn) {
            jumpBtn.classList.add('hidden');
            jumpBtn.classList.remove('inline-flex');
          }
        }
      }

      function toggle() {
        var willBeFullscreen = !container.classList.contains('is-fullscreen');
        updateUI(willBeFullscreen);

        if (willBeFullscreen) {
          try {
            if (container.requestFullscreen && !document.fullscreenElement) {
              container.requestFullscreen().catch(function() {});
            }
          } catch (e) {}
        } else {
          try {
            if (document.fullscreenElement && document.exitFullscreen) {
              document.exitFullscreen().catch(function() {});
            }
          } catch (e) {}
          container.scrollIntoView({ behavior: 'smooth', block: 'center' });
        }
      }

      btn.addEventListener('click', function(e) {
        e.preventDefault();
        toggle();
      });

      document.addEventListener('keydown', function(e) {
        if (e.key === 'Escape' && container.classList.contains('is-fullscreen')) {
          updateUI(false);
          try {
            if (document.fullscreenElement && document.exitFullscreen) {
              document.exitFullscreen().catch(function() {});
            }
          } catch (err) {}
          container.scrollIntoView({ behavior: 'smooth', block: 'center' });
        }
      });

      document.addEventListener('fullscreenchange', function() {
        var isDocFs = document.fullscreenElement === container;
        if (!isDocFs && container.classList.contains('is-fullscreen')) {
          updateUI(false);
        }
      });
    });
  }

  document.addEventListener('DOMContentLoaded', initPuzzleFullscreen);
  document.addEventListener('astro:page-load', initPuzzleFullscreen);
  if (document.readyState !== 'loading') initPuzzleFullscreen();
</script><aside aria-label="Advertisement" class="my-8 w-full flex flex-col items-center justify-center ad-slot-wrapper ad-slot-inline "><div class="mb-1.5 flex items-center justify-center w-full max-w-4xl font-heavy text-[10px] tracking-widest text-neutral-400 uppercase text-center"><span>ADVERTISEMENT</span></div><div class="relative flex items-center justify-center overflow-hidden w-full min-h-[90px] w-full max-w-[728px]"><broadstreet-zone zone-id="191549" keywords="anchorage,news" soft-keywords="true" class="w-full flex items-center justify-center"><div class="relative flex flex-col lg:flex-row items-start lg:items-center justify-between gap-6 p-6 sm:p-8 overflow-hidden w-full min-h-[90px] w-full max-w-[728px] bg-neutral-950 text-white border-3 border-black shadow-[5px_5px_0px_#000]"><div class="absolute inset-0 opacity-10 bg-[radial-gradient(#ffffff_1px,transparent_1px)] [background-size:12px_12px] pointer-events-none"></div><div class="relative z-10 flex flex-col items-start text-left max-w-2xl space-y-2"><div class="flex flex-wrap items-center gap-2 mb-1"><div class="flex items-center justify-center bg-black border-2 border-yellow-400 p-1 shadow-[2px_2px_0px_#000]"><img src="/assets/images/anchoragepress-favicon.svg" alt="Anchorage Press AP Logo Icon" class="h-4 w-4" width="16" height="16" loading="lazy"></div><span class="font-heavy text-[11px] px-2 py-0.5 uppercase tracking-widest border border-black shadow-[2px_2px_0px_#000] bg-yellow-400 text-black">IN-ARTICLE ADVERTISEMENT</span></div><h3 class="headline-heavy text-3xl sm:text-4xl tracking-tight text-white">Sponsor Local Journalism</h3><p class="font-editorial text-base sm:text-lg font-bold italic text-yellow-300">
"Support local reporting. Reach local customers."
</p><p class="font-sans text-xs sm:text-sm text-neutral-300 leading-relaxed max-w-xl">Anchorage Press advertising connects your organization with readers while helping sustain independent community journalism.</p></div><div class="relative z-10 shrink-0 w-full lg:w-auto mt-2 lg:mt-0"><a href="/support" class="w-full lg:w-auto inline-flex items-center justify-center font-heavy text-xs sm:text-sm uppercase tracking-widest bg-yellow-400 text-black px-6 py-3 border-3 border-black shadow-[4px_4px_0px_#000] hover:shadow-[6px_6px_0px_#00e676] hover:bg-white hover:scale-105 active:scale-95 transition-all group cursor-pointer"><span>Become a Sponsor</span><span class="ml-2 transition-transform group-hover:translate-x-1">→</span></a></div></div></broadstreet-zone></div></aside><aside class="my-10 bg-black text-white border-4 border-black p-6 sm:p-8 shadow-[8px_8px_0px_#FEB619] relative select-none"><div class="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4 border-b-2 border-neutral-800 pb-4 mb-4"><div class="flex items-center gap-2"><span class="bg-[#00e676] text-black px-2 py-0.5 font-heavy text-xs uppercase tracking-wider">
SUPPORT INDEPENDENT JOURNALISM
</span><span class="text-xs font-mono text-neutral-400 uppercase hidden sm:inline">ANCHORAGE PRESS</span></div><span class="font-heavy text-xs text-yellow-400 uppercase tracking-widest">
100% FREE FOR ALL ALASKANS
</span></div><div class="grid grid-cols-1 md:grid-cols-3 gap-6 items-center"><div class="md:col-span-2 space-y-2"><h3 class="headline-heavy text-2xl sm:text-3xl text-white leading-tight">
THIS REPORTING HAPPENS BECAUSE READERS CONTRIBUTE.
</h3><p class="font-sans text-xs sm:text-sm text-neutral-300 leading-relaxed">
We don't put paywalls between Alaskans and the truth. If you value deep investigations on Alaska land, fisheries, energy, and politics, please consider joining as a member or making a tax-deductible contribution.
</p></div><div class="flex flex-col gap-2.5"><a href="/support" class="bg-[#00e676] text-black text-center py-2.5 px-4 font-heavy text-xs uppercase tracking-wider border-2 border-black shadow-[3px_3px_0px_#fff] hover:bg-white transition-all">
Join as a Member →
</a><a href="/donate" class="bg-[#FEB619] text-black text-center py-2.5 px-4 font-heavy text-xs uppercase tracking-wider border-2 border-black shadow-[3px_3px_0px_#fff] hover:bg-neutral-800 hover:text-white transition-all">
Make a Donation (501c3) →
</a></div></div></aside><div class="my-8 border-2 border-black bg-neutral-100 p-4 font-sans text-xs text-neutral-800"> <span class="font-heavy text-xs text-red-600 tracking-widest uppercase block mb-1">
CORRECTIONS & EDITORIAL DISCLOSURE
</span> <p> The Anchorage Press corrects errors publicly and promptly. If you believe this reporting contains an inaccuracy, please contact <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4d39243d3e0d2c232e25223f2c2a283d3f283e3e632e2220">[email&#160;protected]</a>. </p> </div><div class="my-12"><div class="bg-white border-3 border-black p-6 shadow-[6px_6px_0px_#000] flex flex-col sm:flex-row items-center gap-6"> <div class="size-20 sm:size-24 rounded-full border-4 border-black shrink-0 overflow-hidden bg-black flex items-center justify-center"> <img src="/assets/authors/herz.webp" alt="Nathaniel Herz" class="size-full object-cover" onerror="this.onerror=null; this.src='/favicon.svg'; this.parentElement.classList.remove('border-4', 'bg-black');" loading="lazy"> </div> <div> <span class="font-heavy text-xs tracking-widest uppercase text-emerald-600"> EXECUTIVE EDITOR &amp; FOUNDER </span> <h3 class="headline-heavy text-3xl text-black mt-1"> <a href="/author/herz/" class="hover:underline hover:decoration-emerald-500"> Nathaniel Herz </a> </h3> <p class="mt-2 font-sans text-sm text-neutral-700 leading-relaxed max-w-xl"> Nathaniel Herz is the Executive Editor of the Anchorage Press and founder of Northern Journal. </p>  </div> </div></div><div class="my-12 bg-black text-white border-4 border-black p-6 sm:p-8 shadow-[8px_8px_0px_#FEB619] relative overflow-hidden"> <div class="max-w-3xl"> <div class="flex items-center gap-2 mb-2"> <span class="bg-yellow-400 text-black px-2.5 py-0.5 font-heavy text-xs tracking-widest uppercase border border-black">
FREE INBOX DISPATCHES
</span> <span class="font-mono text-xs text-neutral-400 uppercase hidden sm:inline">ZERO PAYWALLS</span> </div> <h3 class="headline-heavy text-3xl sm:text-4xl text-white mt-1 leading-none"> JOIN THE PRESS EMAIL LIST </h3> <p class="mt-2 font-sans text-sm text-neutral-300 leading-relaxed"> Sign up for the good stuff. Free email dispatches delivered straight to your inbox with zero paywalls. </p> <form class="newsletter-signup-form mt-6 space-y-4" method="POST" action="/api/subscribe" data-members-form="subscribe">  <div class="flex flex-col sm:flex-row gap-2"> <label for="newsletter-email-signup" class="sr-only">
Email address for free newsletter
</label> <input id="newsletter-email-signup" name="email" type="email" required data-members-email placeholder="user@anchoragepress.com" aria-label="Email address for newsletter" class="flex-1 bg-white text-black font-sans px-4 py-3 border-2 border-white focus:outline-none focus:ring-4 focus:ring-yellow-400 font-bold text-sm"> <button type="submit" class="bg-[#00e676] text-black font-heavy text-xs uppercase tracking-widest px-6 py-3.5 border-2 border-black hover:bg-yellow-400 transition-colors whitespace-nowrap cursor-pointer shadow-[2px_2px_0px_#fff]">
Subscribe Free →
</button> </div>  <div class="flex flex-wrap items-center gap-4 pt-1 font-sans text-xs text-neutral-200"> <label class="flex items-center gap-2 cursor-pointer hover:text-white"> <input type="checkbox" checked class="size-4 accent-yellow-400"> <span><strong>Regular Tea</strong> (hot news, delivered fresh)</span> </label> <label class="flex items-center gap-2 cursor-pointer hover:text-white"> <input type="checkbox" checked class="size-4 accent-[#00e676]"> <span><strong>Pressing Events</strong> (curated weekly calendar picks)</span> </label> </div> </form> <div class="newsletter-error-msg hidden mt-4 bg-red-900/90 text-red-100 p-4 border-2 border-red-500 font-sans text-xs" aria-live="polite" hidden>
Subscription failed. Please verify your email address.
</div> <div class="newsletter-success-msg hidden mt-4 bg-[#00e676] text-black p-5 border-2 border-black font-heavy shadow-[4px_4px_0px_#000]" aria-live="polite" hidden> <div class="flex items-center gap-3"> <span class="text-2xl">✓</span> <div> <div class="text-base uppercase tracking-wider font-heavy">YOU'RE ON THE LIST!</div> <div class="font-sans text-xs font-normal mt-1 text-neutral-900">
Welcome to the Anchorage Press community. Look out for your first fresh dispatch in your inbox!
</div> </div> </div> </div> </div> </div> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
  function initNewsletterForms() {
    document.querySelectorAll('.newsletter-signup-form').forEach(form => {
      form.addEventListener('submit', async (e) => {
        e.preventDefault();
        const input = form.querySelector('input[type="email"]');
        const submitBtn = form.querySelector('button[type="submit"]');
        const successMsg = form.parentElement?.querySelector('.newsletter-success-msg');
        const errorMsg = form.parentElement?.querySelector('.newsletter-error-msg');
        
        if (input && input.value) {
          const email = input.value.trim();
          if (submitBtn) {
            submitBtn.textContent = 'Subscribing...';
            submitBtn.disabled = true;
          }
          if (errorMsg) {
            errorMsg.classList.add('hidden');
            errorMsg.setAttribute('hidden', '');
          }

          try {
            const res = await fetch('/api/subscribe', {
              method: 'POST',
              headers: { 'Content-Type': 'application/json' },
              body: JSON.stringify({ email })
            });
            const data = await res.json().catch(() => ({}));

            if (!res.ok || !data.success) {
              throw new Error(data.error || 'Subscription could not be processed.');
            }

            // Display in-place confirmation message
            if (successMsg) {
              form.classList.add('hidden');
              form.setAttribute('hidden', '');
              successMsg.classList.remove('hidden');
              successMsg.removeAttribute('hidden');
            }
          } catch (err) {
            if (errorMsg) {
              errorMsg.textContent = `✕ ${err.message || 'Subscription failed. Please check your email.'}`;
              errorMsg.classList.remove('hidden');
              errorMsg.removeAttribute('hidden');
            }
            if (submitBtn) {
              submitBtn.textContent = 'Subscribe Free →';
              submitBtn.disabled = false;
            }
          }
        }
      });
    });
  }

  initNewsletterForms();
  document.addEventListener('astro:page-load', initNewsletterForms);
</script><section id="article-comments-section" class="my-14 border-4 border-black bg-white p-6 sm:p-8 shadow-[8px_8px_0px_#000] relative">  <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 border-b-3 border-black pb-4 mb-6"> <div class="flex items-center gap-3"> <div class="w-10 h-10 bg-[#FEB619] text-black border-2 border-black flex items-center justify-center shadow-[2px_2px_0px_#000]"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg> </div> <div> <div class="flex items-center gap-2"> <span class="bg-black text-[#00e676] font-heavy text-[10px] uppercase px-2 py-0.5 tracking-wider">
READER VOICES
</span> <span class="font-mono text-xs text-neutral-500 uppercase tracking-widest hidden sm:inline">
ANCHORAGE PRESS
</span> </div> <h3 class="headline-heavy text-2xl sm:text-3xl text-black mt-0.5 uppercase">
COMMUNITY CONVERSATION
</h3> </div> </div> <div class="flex items-center gap-2 font-mono text-xs text-neutral-600"> <span class="size-2 rounded-full bg-emerald-500 animate-pulse"></span> <span id="comments-status-indicator">MEMBER-ONLY DISCUSSION</span> </div> </div>  <div id="comments-auth-view" class="hidden space-y-6">  <div class="bg-amber-50 border-2 border-black p-4 flex flex-wrap items-center justify-between gap-3 shadow-[3px_3px_0px_#000]"> <div class="flex items-center gap-3"> <div id="comments-member-avatar" class="size-9 rounded-full bg-black text-[#FEB619] font-heavy text-xs flex items-center justify-center border-2 border-black shrink-0">
AP
</div> <div> <div class="flex items-center gap-2"> <span id="comments-member-name" class="font-heavy text-sm uppercase text-black">Member</span> <span id="comments-member-tier" class="bg-black text-[#FEB619] font-heavy text-[9px] uppercase px-1.5 py-0.5 border border-black">
SUPPORTING MEMBER
</span> </div> <span id="comments-member-email" class="font-mono text-xs text-neutral-600"><a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="19747c747b7c6b5978777a71766b787e7c696b7c6a6a377a7674">[email&#160;protected]</a></span> </div> </div> <div class="flex items-center gap-3 text-xs font-mono"> <a href="/account" class="underline font-bold text-black hover:text-yellow-600">Account Hub →</a> </div> </div>  <form id="comments-submission-form" class="space-y-4"> <div> <label for="comment-textarea" class="block font-heavy text-xs uppercase tracking-wider text-black mb-1.5">
Join the Conversation <span class="text-neutral-500 font-normal font-mono text-[11px]">(Keep it civil, Alaskan, and focused)</span> </label> <textarea id="comment-textarea" rows="4" maxlength="1200" placeholder="Share your perspective on this reporting..." class="w-full p-4 border-2 border-black font-sans text-sm bg-neutral-50 focus:bg-white focus:outline-none focus:ring-2 focus:ring-yellow-400" required></textarea> <div class="flex items-center justify-between mt-1 text-[11px] font-mono text-neutral-500"> <span>Real-name accountability active</span> <span id="comment-char-count">0 / 1,200</span> </div> </div> <div class="flex flex-wrap items-center justify-between gap-3 pt-2"> <div class="flex items-center gap-2 text-xs font-mono text-neutral-600"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg> <span>Moderated under Press community standards</span> </div> <button type="submit" id="comment-submit-btn" class="bg-black text-white hover:bg-[#00e676] hover:text-black font-heavy text-xs uppercase tracking-wider py-3 px-6 border-2 border-black shadow-[3px_3px_0px_#000] cursor-pointer transition-all flex items-center gap-2"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"></path><path d="m21.854 2.147-10.94 10.939"></path></svg> <span>Post Perspective</span> </button> </div> </form>  <div id="comment-success-banner" class="hidden bg-emerald-50 border-2 border-emerald-600 p-4 text-emerald-900 font-sans text-xs flex items-start gap-3 shadow-[2px_2px_0px_#000]"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check"><circle cx="12" cy="12" r="10"></circle><path d="m9 12 2 2 4-4"></path></svg> <div> <div class="font-heavy uppercase tracking-wider text-black">Perspective Received</div> <div class="mt-0.5 text-neutral-700">Thank you for contributing. In accordance with Press community standards, your comment is queued for editorial verification and will appear shortly.</div> </div> </div>  <div id="comments-local-feed" class="border-t-2 border-black pt-6 space-y-4"> <h4 class="font-heavy text-sm uppercase tracking-wider text-black">Recent Member Contributions</h4> <div id="comments-feed-list" class="space-y-3"> <div class="p-4 bg-neutral-50 border border-neutral-300 font-sans text-xs text-neutral-600 italic">
Be the first verified subscriber to share your perspective on this dispatch.
</div> </div> </div> </div>  <div id="comments-guest-view" class="space-y-6"> <div class="bg-neutral-50 border-2 border-neutral-300 p-6 sm:p-8 text-center space-y-4 shadow-[4px_4px_0px_#000]"> <div class="max-w-xl mx-auto space-y-2"> <h4 class="headline-heavy text-xl sm:text-2xl text-black uppercase">
VERIFIED SUBSCRIBER CONVERSATION
</h4> <p class="font-sans text-xs sm:text-sm text-neutral-700 leading-relaxed">
Anchorage Press comment sections are reserved for verified community members and subscribers. This ensures authentic civic discussion free of anonymous trolls, spam bots, and automated noise.
</p> </div> <div class="flex flex-wrap items-center justify-center gap-3 pt-2"> <a href="https://cms.anchoragepress.com/#/portal/signin" data-portal="signin" id="comments-guest-signin-btn" class="bg-black text-[#FEB619] hover:bg-[#FEB619] hover:text-black font-heavy text-xs uppercase tracking-wider py-3 px-6 border-2 border-black shadow-[3px_3px_0px_#000] cursor-pointer transition-all inline-block">
Sign In to Join Discussion →
</a> <a href="/support" data-portal="signup" id="comments-guest-signup-btn" class="bg-[#00e676] text-black hover:bg-white font-heavy text-xs uppercase tracking-wider py-3 px-6 border-2 border-black shadow-[3px_3px_0px_#000] cursor-pointer transition-all inline-block">
Become a Member ($130/year) →
</a> </div> <div class="pt-3 border-t border-neutral-300 flex items-center justify-center gap-4 text-[11px] font-mono text-neutral-500"> <span>✓ 100% Real Readers</span> <span>·</span> <span>✓ Civility Policy</span> <span>·</span> <span>✓ Editorial Moderation</span> </div> </div> </div> </section> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>(function(){const postId = "6a91b553dec832000118533c";

  (function initArticleComments() {
    function hydrateCommentsSection() {
      try {
        var sess = null;
        var token = (typeof window !== 'undefined' && (sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token'))) || '';
        if (token && window.AP_SESSION && typeof window.AP_SESSION.get === 'function') {
          sess = window.AP_SESSION.get();
        } else if (token) {
          var rawEmail = localStorage.getItem('ghost-member-email');
          if (rawEmail) {
            sess = {
              email: rawEmail,
              name: localStorage.getItem('ghost-member-name') || '',
              tier: localStorage.getItem('ghost-member-tier') || 'Member'
            };
          }
        }

        var authView = document.getElementById('comments-auth-view');
        var guestView = document.getElementById('comments-guest-view');
        var nameEl = document.getElementById('comments-member-name');
        var emailEl = document.getElementById('comments-member-email');
        var tierEl = document.getElementById('comments-member-tier');
        var avatarEl = document.getElementById('comments-member-avatar');

        if (sess && sess.email) {
          if (authView) authView.classList.remove('hidden');
          if (guestView) guestView.classList.add('hidden');

          var displayName = sess.name || sess.email.split('@')[0];
          if (nameEl) nameEl.textContent = displayName;
          if (emailEl) emailEl.textContent = sess.email;
          if (tierEl) tierEl.textContent = (sess.tier || 'Member').toUpperCase();

          if (avatarEl) {
            var initials = 'AP';
            if (sess.name) {
              var parts = sess.name.trim().split(/\s+/);
              if (parts.length >= 2) {
                initials = (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
              } else if (parts.length === 1 && parts[0].length >= 1) {
                initials = parts[0].substring(0, 2).toUpperCase();
              }
            } else if (sess.email) {
              initials = sess.email.substring(0, 2).toUpperCase();
            }
            avatarEl.textContent = initials;
          }

          loadLocalComments();
        } else {
          if (authView) authView.classList.add('hidden');
          if (guestView) guestView.classList.remove('hidden');
        }
      } catch (e) {}
    }

    function loadLocalComments() {
      try {
        var list = document.getElementById('comments-feed-list');
        if (!list) return;
        var storageKey = 'ap_comments_' + (postId || 'general');
        var comments = JSON.parse(localStorage.getItem(storageKey) || '[]');
        if (comments.length > 0) {
          list.innerHTML = '';
          comments.forEach(function(c) {
            var item = document.createElement('div');
            item.className = 'p-4 bg-neutral-50 border-2 border-black space-y-1.5 shadow-[2px_2px_0px_#000]';
            
            var header = document.createElement('div');
            header.className = 'flex items-center justify-between text-xs font-mono';
            
            var author = document.createElement('span');
            author.className = 'font-heavy uppercase text-black';
            author.textContent = c.author || 'Verified Member';
            
            var time = document.createElement('span');
            time.className = 'text-neutral-500';
            time.textContent = c.date || 'Just now';
            
            header.appendChild(author);
            header.appendChild(time);
            
            var body = document.createElement('p');
            body.className = 'font-sans text-sm text-neutral-800 leading-relaxed';
            body.textContent = c.text;
            
            item.appendChild(header);
            item.appendChild(body);
            list.appendChild(item);
          });
        }
      } catch (e) {}
    }

    var form = document.getElementById('comments-submission-form');
    if (form && !form.__ap_bound) {
      form.__ap_bound = true;
      var textarea = document.getElementById('comment-textarea');
      var charCount = document.getElementById('comment-char-count');
      var successBanner = document.getElementById('comment-success-banner');

      if (textarea && charCount) {
        textarea.addEventListener('input', function() {
          charCount.textContent = textarea.value.length + ' / 1,200';
        });
      }

      form.addEventListener('submit', function(e) {
        e.preventDefault();
        if (!textarea || !textarea.value.trim()) return;

        var text = textarea.value.trim();
        var sess = window.AP_SESSION ? window.AP_SESSION.get() : null;
        var author = (sess && sess.name) ? sess.name : ((sess && sess.email) ? sess.email.split('@')[0] : 'Verified Member');

        var newComment = {
          author: author,
          text: text,
          date: new Date().toLocaleTimeString('en-US', { timeZone: 'America/Anchorage', hour: 'numeric', minute: '2-digit' }) + ' AKDT'
        };

        try {
          var storageKey = 'ap_comments_' + (postId || 'general');
          var existing = JSON.parse(localStorage.getItem(storageKey) || '[]');
          existing.unshift(newComment);
          localStorage.setItem(storageKey, JSON.stringify(existing.slice(0, 20)));
        } catch (_) {}

        textarea.value = '';
        if (charCount) charCount.textContent = '0 / 1,200';
        if (successBanner) {
          successBanner.classList.remove('hidden');
          setTimeout(function() {
            successBanner.classList.add('hidden');
          }, 8000);
        }

        loadLocalComments();
      });
    }

    hydrateCommentsSection();
    window.addEventListener('ap:member-sync', hydrateCommentsSection);
    document.addEventListener('astro:page-load', hydrateCommentsSection);
  })();
})();</script><section class="my-16 border-t-4 border-black pt-8"><h3 class="headline-heavy text-3xl text-black mb-6">RELATED DISPATCHES</h3><div class="grid grid-cols-1 md:grid-cols-3 gap-6"><article class="group bg-white border-3 border-black p-4 shadow-[5px_5px_0px_#000] hover:shadow-[8px_8px_0px_#FEB619] transition-all duration-300"><a href="/trump-says-petersburg-sullivan-hasnt-voted-in-years-and-never-voted-hes-actually-voted-more-than-30-times-since-2000/" class="block"><div class="mb-3 aspect-[3/2] overflow-hidden border-2 border-black bg-[#fcfbf7] flex items-center justify-center p-3"><img src="/assets/article-images/trump-says-petersburg-sullivan-hasnt-voted-in-years-and-never-voted-hes-actually-voted-more-than-30-times-since-2000.webp" alt="Trump says Petersburg Sullivan 'hasn't voted in years' and 'never voted.' He's actually voted more than 30 times since 2000." class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" onerror="this.onerror=null; this.src='/assets/images/image01.png';" loading="lazy" decoding="async" width="600" height="400"></div><span class="bg-white text-black border border-black px-2 py-0.5 font-heavy text-[11px] tracking-widest uppercase inline-block mb-2 transition-colors duration-200 group-hover:bg-[#FEB619] group-hover:text-black">Dan Sullivan</span><h3 class="headline-serif text-2xl text-black group-hover:underline group-hover:decoration-[#FEB619] leading-snug">Trump says Petersburg Sullivan &#39;hasn&#39;t voted in years&#39; and &#39;never voted.&#39; He&#39;s actually voted more than 30 times since 2000.</h3><p class="mt-2 font-sans text-sm text-neutral-700 line-clamp-2">Former President Donald Trump claimed Alaska Sen. Dan Sullivan has not voted in years, but state voting records confirm Sullivan has cast ballots more than 30 times since 2000.</p></a><div class="mt-3 pt-2 border-t border-neutral-200 flex flex-col gap-0.5 font-heavy text-[11px] tracking-widest uppercase"><span class="text-black font-bold">BY Nathaniel Herz</span><span class="text-neutral-500 text-[10px]">Sep 3, 2026</span></div></article><article class="group bg-white border-3 border-black p-4 shadow-[5px_5px_0px_#000] hover:shadow-[8px_8px_0px_#470FF4] transition-all duration-300"><a href="/no-trivial-pursuit-lifetime-of-knowledge-pays-off-for-mat-su-jeopardy-champion/" class="block"><div class="mb-3 aspect-[3/2] overflow-hidden border-2 border-black bg-[#fcfbf7] flex items-center justify-center p-3"><img src="/assets/article-images/no-trivial-pursuit-lifetime-of-knowledge-pays-off-for-mat-su-jeopardy-champion.webp" alt="No trivial pursuit: Lifetime of knowledge pays off for Mat-Su Jeopardy! champion" class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" onerror="this.onerror=null; this.src='/assets/images/image01.png';" loading="lazy" decoding="async" width="600" height="400"></div><span class="bg-white text-black border border-black px-2 py-0.5 font-heavy text-[11px] tracking-widest uppercase inline-block mb-2 transition-colors duration-200 group-hover:bg-[#470FF4] group-hover:text-white">arts-culture</span><h3 class="headline-serif text-2xl text-black group-hover:underline group-hover:decoration-[#470FF4] leading-snug">No trivial pursuit: Lifetime of knowledge pays off for Mat-Su Jeopardy! champion</h3><p class="mt-2 font-sans text-sm text-neutral-700 line-clamp-2">A jack of many trades takes on Jeopardy!, with Alaska flair.</p></a><div class="mt-3 pt-2 border-t border-neutral-200 flex flex-col gap-0.5 font-heavy text-[11px] tracking-widest uppercase"><span class="text-black font-bold">BY Matt Tunseth</span><span class="text-neutral-500 text-[10px]">Oct 23, 2026</span></div></article><article class="group bg-white border-3 border-black p-4 shadow-[5px_5px_0px_#000] hover:shadow-[8px_8px_0px_#470FF4] transition-all duration-300"><a href="/theres-no-free-lunch-but-in-anchorage-this-week-theres-really-free-coffee/" class="block"><div class="mb-3 aspect-[3/2] overflow-hidden border-2 border-black bg-[#fcfbf7] flex items-center justify-center p-3"><img src="/assets/article-images/theres-no-free-lunch-but-in-anchorage-this-week-theres-really-free-coffee.webp" alt="There’s no free lunch. But in Anchorage this week, there’s really free coffee." class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" onerror="this.onerror=null; this.src='/assets/images/image01.png';" loading="lazy" decoding="async" width="600" height="400"></div><span class="bg-white text-black border border-black px-2 py-0.5 font-heavy text-[11px] tracking-widest uppercase inline-block mb-2 transition-colors duration-200 group-hover:bg-[#470FF4] group-hover:text-white">arts-culture</span><h3 class="headline-serif text-2xl text-black group-hover:underline group-hover:decoration-[#470FF4] leading-snug">There’s no free lunch. But in Anchorage this week, there’s really free coffee.</h3><p class="mt-2 font-sans text-sm text-neutral-700 line-clamp-2">A mysterious donor spots everyone at Dark Horse Coffee downtown during the AFN convention.</p></a><div class="mt-3 pt-2 border-t border-neutral-200 flex flex-col gap-0.5 font-heavy text-[11px] tracking-widest uppercase"><span class="text-black font-bold">BY Hannah Dorough</span><span class="text-neutral-500 text-[10px]">Oct 22, 2026</span></div></article></div></section><div class="my-16 bg-yellow-300 border-4 border-black p-8 sm:p-12 text-black shadow-[10px_10px_0px_#000] rotate-[-0.5deg]"> <div class="max-w-3xl"> <span class="bg-black text-yellow-300 px-3 py-1 font-heavy text-xs tracking-widest uppercase border border-black inline-block" id="sub-cta-badge">
READER-POWERED JOURNALISM
</span> <h2 class="headline-heavy text-4xl sm:text-6xl text-black mt-4 leading-none uppercase" id="sub-cta-title">
Like what you see?
</h2> <p class="mt-4 font-editorial text-lg md:text-xl text-neutral-900 leading-relaxed" id="sub-cta-desc">
We want you to have nice things. We’re dedicated to reporting on the hard and the fun topics (sometimes both…) – powered by Alaskan readers.
</p> <div class="mt-8 flex flex-wrap gap-4 font-heavy text-xs uppercase tracking-widest"> <a href="/support" id="sub-cta-primary-btn" class="bg-black text-[#00e676] hover:bg-[#00e676] hover:text-black px-6 py-3.5 border-2 border-black shadow-[4px_4px_0px_#000] transition-all">
Subscribe ($130/year) →
</a> <a href="/donate" class="bg-white border-2 border-black text-black px-6 py-3.5 shadow-[4px_4px_0px_#000] hover:bg-black hover:text-white transition-all">
Donate (501c3) →
</a> </div> </div> </div> <script>
  (function updateSubscriptionCtaForMembers() {
    function applyMemberCta() {
      try {
        var sess = null;
        if (window.AP_SESSION && typeof window.AP_SESSION.get === 'function') {
          sess = window.AP_SESSION.get();
        }
        var token = sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token');
        var email = (token && sess) ? sess.email : (token ? localStorage.getItem('ghost-member-email') : '');
        var name = (token && sess) ? sess.name : (token ? localStorage.getItem('ghost-member-name') : '');

        var firstName = '';
        if (name && name.toLowerCase() !== 'undefined' && name.toLowerCase() !== 'null' && name.trim()) {
          var cleanName = name.trim();
          firstName = cleanName.toLowerCase() === 'anchorage press' ? 'Anchorage' : cleanName.split(' ')[0];
        } else if (email) {
          if (email.startsWith('contact@')) firstName = 'Anchorage';
          else if (email.startsWith('user@')) firstName = 'Anchorage Press';
          else firstName = email.split('@')[0];
        }

        var titleEl = document.getElementById('sub-cta-title');
        var descEl = document.getElementById('sub-cta-desc');
        var btnEl = document.getElementById('sub-cta-primary-btn');
        var badgeEl = document.getElementById('sub-cta-badge');

        if (email) {
          if (badgeEl) badgeEl.textContent = 'MEMBER-SUPPORTED INDEPENDENT PRESS';
          if (titleEl) titleEl.textContent = firstName ? 'Thank you for supporting the Press, ' + firstName + '!' : 'Thank you for supporting the Press!';
          if (descEl) descEl.textContent = 'Your subscriber membership fuels independent, fearless cultural journalism and local investigative accountability across Alaska.';
          if (btnEl) {
            btnEl.textContent = 'Manage Your Member Account →';
            btnEl.href = '/account';
          }
        } else {
          if (badgeEl) badgeEl.textContent = 'READER-POWERED JOURNALISM';
          if (titleEl) titleEl.textContent = 'Like what you see?';
          if (descEl) descEl.textContent = 'We want you to have nice things. We’re dedicated to reporting on the hard and the fun topics (sometimes both…) – powered by Alaskan readers.';
          if (btnEl) {
            btnEl.textContent = 'Subscribe ($130/year) →';
            btnEl.href = '/support';
          }
        }
      } catch (e) {}
    }

    applyMemberCta();
    window.addEventListener('ap:member-sync', applyMemberCta);
    window.addEventListener('storage', applyMemberCta);
    document.addEventListener('astro:page-load', applyMemberCta);
  })();
</script></article><aside class="hidden lg:block lg:col-span-4 pl-6 border-l-2 border-neutral-300 space-y-8"><div class="border-b-2 border-neutral-200 pb-6"><aside aria-label="Advertisement" class="my-8 w-full flex flex-col items-center justify-center ad-slot-wrapper ad-slot-sidebar "><div class="mb-1.5 flex items-center justify-center w-full max-w-4xl font-heavy text-[10px] tracking-widest text-neutral-400 uppercase text-center"><span>ADVERTISEMENT</span></div><div class="relative flex items-center justify-center overflow-hidden w-full min-h-[250px] w-full max-w-[300px]"><broadstreet-zone zone-id="191902" keywords="anchorage,news" soft-keywords="true" class="w-full flex items-center justify-center"><div class="relative flex flex-col justify-between p-5 sm:p-6 overflow-hidden w-full min-h-[250px] w-full max-w-[300px] bg-black text-white border-3 border-black shadow-[6px_6px_0px_#00e676]"><div class="absolute inset-0 opacity-10 bg-[radial-gradient(#ffffff_1px,transparent_1px)] [background-size:12px_12px] pointer-events-none"></div><div class="relative z-10 flex flex-col items-start text-left space-y-2"><div class="flex flex-wrap items-center gap-2 mb-1"><div class="flex items-center justify-center bg-black border-2 border-yellow-400 p-1 shadow-[2px_2px_0px_#000]"><img src="/assets/images/anchoragepress-favicon.svg" alt="Anchorage Press AP Logo Icon" class="h-3.5 w-3.5" width="14" height="14" loading="lazy"></div><span class="font-heavy text-[10px] px-2 py-0.5 uppercase tracking-widest border border-black shadow-[2px_2px_0px_#000] bg-yellow-400 text-black">SIDEBAR BOX AD</span></div><h3 class="headline-heavy text-2xl sm:text-3xl tracking-tight text-white leading-none">Reach Anchorage</h3><p class="font-editorial text-sm sm:text-base font-bold italic text-yellow-300">
"Your customers are reading."
</p><p class="font-sans text-xs text-neutral-300 leading-relaxed">Put your business in front of engaged Anchorage readers across local news, food, arts, events and community coverage.</p></div><div class="relative z-10 mt-5 w-full"><a href="/advertise" class="w-full inline-flex items-center justify-center font-heavy text-xs uppercase tracking-wider bg-yellow-400 text-black py-2.5 px-4 border-2 border-black shadow-[3px_3px_0px_#000] hover:shadow-[4px_4px_0px_#00e676] hover:bg-white hover:scale-[1.02] active:scale-98 transition-all group cursor-pointer text-center"><span>Advertise With Us</span><span class="ml-1.5 transition-transform group-hover:translate-x-1">→</span></a></div></div></broadstreet-zone></div></aside></div><div class="bg-amber-50 border-4 border-black p-5 shadow-[6px_6px_0px_#000] text-black"><div class="flex items-center justify-between border-b-2 border-black pb-2 mb-3"><span class="bg-black text-yellow-400 px-2 py-0.5 font-heavy text-[10px] uppercase tracking-wider">
READER-FUNDED
</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-heart"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"></path></svg></div><h4 class="headline-heavy text-2xl text-black leading-tight mb-2">
KEEP STORIES LIKE THIS ALIVE
</h4><p class="font-sans text-xs text-neutral-800 leading-relaxed mb-4">
The Press has no paywalls and no corporate parent. Our accountability dispatches depend on readers chipping in.
</p><div class="space-y-2"><a href="/support" class="block w-full bg-[#00e676] text-black text-center py-2 px-3 font-heavy text-xs uppercase tracking-wider border-2 border-black shadow-[2px_2px_0px_#000] hover:bg-white transition-all">
Become a Member ($130/year) →
</a><a href="/donate" class="block w-full bg-[#FEB619] text-black text-center py-2 px-3 font-heavy text-xs uppercase tracking-wider border-2 border-black shadow-[2px_2px_0px_#000] hover:bg-black hover:text-white transition-all">
Tax-Deductible Donation (501c3) →
</a></div><div class="mt-3 pt-3 border-t border-neutral-300 flex items-center justify-between text-[10px] font-mono text-neutral-600 uppercase"><span>100% Independent</span><span>No Paywalls</span></div></div><div class="border-t-2 border-neutral-200 pt-6"><aside aria-label="Advertisement" class="my-8 w-full flex flex-col items-center justify-center ad-slot-wrapper ad-slot-sidebar-halfpage "><div class="mb-1.5 flex items-center justify-center w-full max-w-4xl font-heavy text-[10px] tracking-widest text-neutral-400 uppercase text-center"><span>ADVERTISEMENT</span></div><div class="relative flex items-center justify-center overflow-hidden w-full min-h-[600px] w-full max-w-[300px]"><broadstreet-zone zone-id="191903" keywords="anchorage,news" soft-keywords="true" class="w-full flex items-center justify-center"><div class="relative flex flex-col justify-between p-5 sm:p-6 overflow-hidden w-full min-h-[600px] w-full max-w-[300px] bg-black text-white border-3 border-black shadow-[6px_6px_0px_#00e676]"><div class="absolute inset-0 opacity-10 bg-[radial-gradient(#ffffff_1px,transparent_1px)] [background-size:12px_12px] pointer-events-none"></div><div class="relative z-10 flex flex-col items-start text-left space-y-2"><div class="flex flex-wrap items-center gap-2 mb-1"><div class="flex items-center justify-center bg-black border-2 border-yellow-400 p-1 shadow-[2px_2px_0px_#000]"><img src="/assets/images/anchoragepress-favicon.svg" alt="Anchorage Press AP Logo Icon" class="h-3.5 w-3.5" width="14" height="14" loading="lazy"></div><span class="font-heavy text-[10px] px-2 py-0.5 uppercase tracking-widest border border-black shadow-[2px_2px_0px_#000] bg-yellow-400 text-black">SIDEBAR HALF-PAGE AD</span></div><h3 class="headline-heavy text-2xl sm:text-3xl tracking-tight text-white leading-none">Sponsor Local Journalism</h3><p class="font-editorial text-sm sm:text-base font-bold italic text-yellow-300">
"Support local reporting. Reach local customers."
</p><p class="font-sans text-xs text-neutral-300 leading-relaxed">Anchorage Press advertising connects your organization with readers while helping sustain independent community journalism.</p></div><div class="relative z-10 mt-5 w-full"><a href="/support" class="w-full inline-flex items-center justify-center font-heavy text-xs uppercase tracking-wider bg-yellow-400 text-black py-2.5 px-4 border-2 border-black shadow-[3px_3px_0px_#000] hover:shadow-[4px_4px_0px_#00e676] hover:bg-white hover:scale-[1.02] active:scale-98 transition-all group cursor-pointer text-center"><span>Become a Sponsor</span><span class="ml-1.5 transition-transform group-hover:translate-x-1">→</span></a></div></div></broadstreet-zone></div></aside></div><div class="bg-white border-3 border-black p-5 shadow-[4px_4px_0px_#000]"><div class="flex items-center justify-between border-b-2 border-black pb-2 mb-4"><h4 class="headline-heavy text-xl text-black">MORE DISPATCHES</h4><span class="bg-yellow-300 border border-black font-heavy text-[9px] px-1.5 py-0.5 uppercase">LATEST</span></div><ul class="divide-y divide-neutral-200 space-y-3"><li class="pt-3 pt-0"><a href="/when-were-divided-we-get-ignored-afns-president-seeks-unity-amid-a-generational-shift/" class="group block"><span class="text-[10px] font-heavy text-emerald-700 uppercase tracking-wider block mb-1">Alaska Federation of Natives</span><h5 class="headline-serif text-base text-black group-hover:underline group-hover:text-emerald-700 leading-snug line-clamp-2">“When we’re divided, we get ignored”: AFN’s president seeks unity amid a generational shift</h5></a><div class="mt-1.5 flex items-center justify-between text-[10px] font-heavy text-neutral-500 uppercase tracking-wider"><span>BY Cordelia Kellie</span><time datetime="2026-10-22T09:30:08.000-08:00">Oct 22, 2026</time></div></li><li class="pt-3 "><a href="/igyamcuk-gold-conversation-yupik-artist-advocate-nikki-quluqaaq-corbett/" class="group block"><span class="text-[10px] font-heavy text-emerald-700 uppercase tracking-wider block mb-1">arts-culture</span><h5 class="headline-serif text-base text-black group-hover:underline group-hover:text-emerald-700 leading-snug line-clamp-2">Igyamcuk and bricks of gold: A conversation with a Yup’ik artist and advocate</h5></a><div class="mt-1.5 flex items-center justify-between text-[10px] font-heavy text-neutral-500 uppercase tracking-wider"><span>BY Dewey Kk’ołeyo Putyuk Hoffman</span><time datetime="2026-10-21T16:08:41.000-08:00">Oct 21, 2026</time></div></li><li class="pt-3 "><a href="/denaina-alaska-native-heritage-center-exhibition/" class="group block"><span class="text-[10px] font-heavy text-emerald-700 uppercase tracking-wider block mb-1">arts-culture</span><h5 class="headline-serif text-base text-black group-hover:underline group-hover:text-emerald-700 leading-snug line-clamp-2">Seeing Dena’ina clearly: A new exhibition at the Alaska Native Heritage Center</h5></a><div class="mt-1.5 flex items-center justify-between text-[10px] font-heavy text-neutral-500 uppercase tracking-wider"><span>BY Melissa Nenantaxnen Shaginoff</span><time datetime="2026-10-20T12:01:07.000-08:00">Oct 20, 2026</time></div></li><li class="pt-3 "><a href="/revealed-the-money-behind-the-last-minute-fringe-candidate-ad-blitz-in-alaskas-u-s-senate-primary/" class="group block"><span class="text-[10px] font-heavy text-emerald-700 uppercase tracking-wider block mb-1">U.S. Senate</span><h5 class="headline-serif text-base text-black group-hover:underline group-hover:text-emerald-700 leading-snug line-clamp-2">Revealed: The money behind the last-minute fringe candidate ad blitz in Alaska’s U.S. Senate primary</h5></a><div class="mt-1.5 flex items-center justify-between text-[10px] font-heavy text-neutral-500 uppercase tracking-wider"><span>BY Nathaniel Herz</span><time datetime="2026-10-16T10:41:49.000-08:00">Oct 16, 2026</time></div></li></ul></div></aside></div></div><aside id="story-support-popup" class="fixed bottom-20 md:bottom-22 left-1/2 -translate-x-1/2 z-40 w-[calc(100vw-2rem)] max-w-3xl md:w-2/3 bg-[#fcfbf7] text-black border-4 border-black p-3.5 sm:p-4 shadow-[6px_6px_0px_#000] sm:shadow-[8px_8px_0px_#000] translate-y-28 opacity-0 pointer-events-none transition-all duration-500 ease-out" role="region" aria-label="Reader Support Dispatch" aria-live="polite">  <button type="button" id="close-support-popup-btn" aria-label="Dismiss support prompt" class="absolute top-2.5 right-2.5 size-6 bg-black text-white hover:bg-[#FF3C38] font-heavy text-xs flex items-center justify-center cursor-pointer transition-colors border border-black z-10">
✕
</button> <div class="flex flex-col md:flex-row md:items-center md:justify-between gap-3 md:gap-5">  <div class="flex-1 min-w-0 pr-6 md:pr-0"> <div class="flex items-center gap-2 mb-1"> <span class="bg-[#FEB619] text-black px-2 py-0.5 font-heavy text-[9px] sm:text-[10px] uppercase tracking-wider border border-black shrink-0">
READER SUPPORT
</span> <span class="font-heavy text-[9px] sm:text-[10px] text-emerald-800 uppercase tracking-wider">
ANCHORAGE PRESS
</span> </div> <h4 class="headline-heavy text-lg sm:text-xl text-black leading-tight tracking-tight">
ENJOYING THIS DISPATCH?
</h4> <p class="font-sans text-xs text-neutral-700 leading-snug mt-1 max-w-xl">
Keep Alaska's independent alt-weekly free for everyone. Chip in with a membership or a tax-deductible contribution.
</p> </div>  <div class="flex items-center gap-2 shrink-0 pt-2 md:pt-0 border-t-2 md:border-t-0 border-black/15"> <a href="/support" class="flex-1 md:flex-initial bg-[#00e676] hover:bg-white text-black text-center py-2 px-3.5 font-heavy text-xs uppercase tracking-wider border-2 border-black shadow-[2px_2px_0px_#000] hover:shadow-[4px_4px_0px_#000] active:shadow-[1px_1px_0px_#000] transition-all whitespace-nowrap">
Join ($130/year)
</a> <a href="/donate" class="flex-1 md:flex-initial bg-[#FEB619] hover:bg-black hover:text-white text-black text-center py-2 px-3.5 font-heavy text-xs uppercase tracking-wider border-2 border-black shadow-[2px_2px_0px_#000] hover:shadow-[4px_4px_0px_#000] active:shadow-[1px_1px_0px_#000] transition-all whitespace-nowrap">
Donate (501c3)
</a> </div> </div> </aside> <script type="module">function r(){const e=document.getElementById("story-support-popup"),s=document.getElementById("close-support-popup-btn");if(!e||!s||sessionStorage.getItem("anc_support_popup_dismissed")==="true")return;let o=!1;function t(){if(o)return;const n=document.documentElement.scrollHeight-window.innerHeight;if(n<=0)return;window.scrollY/n>.4&&(o=!0,e.classList.remove("translate-y-28","opacity-0","pointer-events-none"),e.classList.add("translate-y-0","opacity-100","pointer-events-auto"),window.removeEventListener("scroll",t))}function p(){e.classList.remove("translate-y-0","opacity-100","pointer-events-auto"),e.classList.add("translate-y-28","opacity-0","pointer-events-none"),sessionStorage.setItem("anc_support_popup_dismissed","true")}s.addEventListener("click",p),window.addEventListener("scroll",t,{passive:!0}),t()}r();document.addEventListener("astro:page-load",r);</script> </main> <footer class="bg-black text-white pt-16 pb-12 mt-16 border-t-8 border-black"> <div class="mx-auto max-w-7xl px-4 md:px-6"> <div class="grid grid-cols-1 gap-10 border-b-4 border-neutral-800 pb-16 lg:grid-cols-12">  <div class="lg:col-span-4 space-y-6"> <a href="/" class="inline-block group"> <img src="/assets/images/anchoragepress-stacked-white.svg" alt="ANCHORAGE PRESS" class="h-16 sm:h-20 w-auto transition-transform group-hover:scale-105"> </a> <p class="text-sm font-sans text-neutral-400 leading-relaxed max-w-md">
Independent local news, arts, culture, and investigative reporting for Anchorage and Alaska.
</p> <div class="pt-2 flex flex-wrap gap-2.5 font-heavy text-xs tracking-widest"> <a href="/tips" class="bg-yellow-400 text-black border border-black px-3.5 py-1.5 hover:bg-[#00e676] transition-colors shadow-[2px_2px_0px_#fff] flex items-center gap-1.5"> <span>GOT A TIP?</span> <span>→</span> </a> <a href="https://docs.google.com/forms/d/e/1FAIpQLSdIcJbFbi_bDMAl0bW0uyjVwYJ84qIqPNhbb53EbfyHyONhlw/viewform" target="_blank" rel="noopener noreferrer" class="bg-neutral-900 border border-neutral-700 px-3 py-1.5 text-yellow-400 hover:bg-yellow-400 hover:text-black transition-colors inline-flex items-center gap-1" title="Open Reader Feedback Form (Google Forms)"> <span>FEEDBACK</span> <span class="text-[10px]">↗</span> </a> <a href="/rss.xml" class="bg-neutral-900 border border-neutral-700 px-3 py-1.5 text-emerald-400 hover:bg-emerald-400 hover:text-black transition-colors">
RSS FEED
</a> <a href="https://instagram.com/anchpress" target="_blank" rel="noopener noreferrer" class="bg-neutral-900 border border-neutral-700 px-3 py-1.5 text-pink-400 hover:bg-pink-400 hover:text-black transition-colors">
@ANCHPRESS
</a> </div> </div>  <div class="lg:col-span-2"> <h3 class="font-heavy text-sm text-yellow-400 tracking-widest uppercase mb-4 pb-2 border-b border-neutral-800"> Reporting Desks </h3> <ul class="space-y-2 text-xs font-bold uppercase tracking-wider text-neutral-300"> <li> <a href="/news" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>All News &amp; Dispatches</span>  </a> </li><li> <a href="/politics-government" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Alaska Government &amp; Politics</span>  </a> </li><li> <a href="/arts-culture" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Arts &amp; Culture</span>  </a> </li><li> <a href="/events" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Events Calendar</span>  </a> </li><li> <a href="/environment" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Fisheries &amp; Environment</span>  </a> </li><li> <a href="/energy" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Energy &amp; Cook Inlet Gas</span>  </a> </li><li> <a href="/print" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Monthly Print Edition</span>  </a> </li><li> <a href="/find-the-press" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Find the Press in Print</span>  </a> </li><li> <a href="/map" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Press Finder Map App (20 Best Ideas)</span>  </a> </li><li> <a href="/archive" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Print Archives (2022)</span>  </a> </li> </ul> </div><div class="lg:col-span-2"> <h3 class="font-heavy text-sm text-yellow-400 tracking-widest uppercase mb-4 pb-2 border-b border-neutral-800"> Submissions &amp; Nominations </h3> <ul class="space-y-2 text-xs font-bold uppercase tracking-wider text-neutral-300"> <li> <a href="/submit/dish-of-the-month" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Dish of the Month</span>  </a> </li><li> <a href="/submit/love-and-sex" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Love &amp; Sex Advice Column</span>  </a> </li><li> <a href="/tips" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Submit a Tip</span>  </a> </li><li> <a href="/submit/freelance" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Freelance/Pitch Us</span>  </a> </li><li> <a href="/events/submit" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Submit an Event</span>  </a> </li><li> <a href="https://docs.google.com/forms/d/e/1FAIpQLSdIcJbFbi_bDMAl0bW0uyjVwYJ84qIqPNhbb53EbfyHyONhlw/viewform" target="_blank" rel="noopener noreferrer" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Reader Feedback Form</span> <span class="text-[10px] text-neutral-500 font-sans">↗</span> </a> </li> </ul> </div><div class="lg:col-span-2"> <h3 class="font-heavy text-sm text-yellow-400 tracking-widest uppercase mb-4 pb-2 border-b border-neutral-800"> Advertising &amp; Media Kit </h3> <ul class="space-y-2 text-xs font-bold uppercase tracking-wider text-neutral-300"> <li> <a href="/advertise" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Advertise with Us</span>  </a> </li><li> <a href="/advertise#campaign-funnel" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Ad &amp; Campaign Quotes</span>  </a> </li><li> <a href="/advertise#digital-specs" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Digital Ad Specs</span>  </a> </li><li> <a href="/advertise#print-specs" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Print Ad Specs</span>  </a> </li><li> <a href="/cdn-cgi/l/email-protection#422326342730362b312b2c2502232c212a2d3023252732302731316c212d2f" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Contact Advertising</span>  </a> </li> </ul> </div><div class="lg:col-span-2"> <h3 class="font-heavy text-sm text-yellow-400 tracking-widest uppercase mb-4 pb-2 border-b border-neutral-800"> About &amp; Support </h3> <ul class="space-y-2 text-xs font-bold uppercase tracking-wider text-neutral-300"> <li> <a href="/about" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Our Story</span>  </a> </li><li> <a href="/about/staff" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Our Team</span>  </a> </li><li> <a href="/support" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Ways to Support</span>  </a> </li><li> <a href="/account" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Manage Account</span>  </a> </li><li> <a href="https://docs.google.com/forms/d/e/1FAIpQLSdIcJbFbi_bDMAl0bW0uyjVwYJ84qIqPNhbb53EbfyHyONhlw/viewform" target="_blank" rel="noopener noreferrer" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Reader Feedback</span> <span class="text-[10px] text-neutral-500 font-sans">↗</span> </a> </li><li> <a href="/about/values-policies-actions#ai-policy" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>AI &amp; Ethics Policies</span>  </a> </li><li> <a href="/about/values-policies-actions#values" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Our Values</span>  </a> </li><li> <a href="/privacy" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Privacy &amp; Data Policy</span>  </a> </li><li> <a href="/newsletters" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Free Newsletters</span>  </a> </li><li> <a href="/get-involved" class="hover:text-emerald-400 transition-colors inline-flex items-center gap-1"> <span>Get Involved &amp; Jobs</span>  </a> </li> </ul> </div> </div>  <div class="mt-12 pt-8 border-t border-neutral-800 flex flex-wrap items-center justify-between gap-4"> <div class="flex items-center gap-3"> <span class="font-heavy text-xs uppercase tracking-widest text-yellow-400">CONNECT WITH THE PRESS:</span> <div class="flex items-center gap-2"> <a href="https://instagram.com/anchpress" target="_blank" rel="noopener noreferrer" class="w-8 h-8 flex items-center justify-center bg-neutral-900 border border-neutral-700 hover:border-pink-500 hover:text-pink-400 text-neutral-300 transition-colors" title="Instagram (@anchpress)" aria-label="Instagram (@anchpress)"> <svg class="w-4 h-4 fill-current" viewBox="0 0 24 24" aria-hidden="true"> <path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"></path> </svg> </a> <a href="https://facebook.com/anchoragepress" target="_blank" rel="noopener noreferrer" class="w-8 h-8 flex items-center justify-center bg-neutral-900 border border-neutral-700 hover:border-blue-500 hover:text-blue-400 text-neutral-300 transition-colors" title="Facebook" aria-label="Facebook"> <svg class="w-4 h-4 fill-current" viewBox="0 0 24 24" aria-hidden="true"> <path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"></path> </svg> </a> <a href="https://x.com/anchoragepress" target="_blank" rel="noopener noreferrer" class="w-8 h-8 flex items-center justify-center bg-neutral-900 border border-neutral-700 hover:border-white hover:text-white text-neutral-300 transition-colors" title="X (Twitter)" aria-label="X (Twitter)"> <svg class="w-4 h-4 fill-current" viewBox="0 0 24 24" aria-hidden="true"> <path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"></path> </svg> </a> <a href="/cdn-cgi/l/email-protection#70151419041f0230111e13181f0211171500021503035e131f1d" class="w-8 h-8 flex items-center justify-center bg-neutral-900 border border-neutral-700 hover:border-[#00e676] hover:text-[#00e676] text-neutral-300 transition-colors" title="Email Newsroom" aria-label="Email Newsroom"> <svg class="w-4 h-4 fill-none stroke-current stroke-2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <rect width="20" height="16" x="2" y="4" rx="2"></rect> <path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"></path> </svg> </a> </div> </div> <div class="flex flex-wrap items-center gap-x-4 gap-y-2 text-xs font-heavy text-neutral-400 uppercase tracking-widest"> <a href="/about/values-policies-actions#editorial-standards" class="hover:text-white">Editorial Standards</a> <span>·</span> <a href="/about/values-policies-actions#ai-policy" class="hover:text-white">AI Policy</a> <span>·</span> <a href="/about/values-policies-actions#ethics-corrections" class="hover:text-white">Corrections</a> <span>·</span> <a href="/privacy" class="hover:text-white">Privacy Policy</a> <span>·</span> <a href="https://docs.google.com/forms/d/e/1FAIpQLSdIcJbFbi_bDMAl0bW0uyjVwYJ84qIqPNhbb53EbfyHyONhlw/viewform" target="_blank" rel="noopener noreferrer" class="text-neutral-300 hover:text-yellow-400 transition-colors inline-flex items-center gap-1" title="Reader Feedback Form (Google Forms)"> <span>Feedback Form</span> <span class="text-[10px]">↗</span> </a> </div> </div>  <div class="mt-6 pt-4 border-t border-neutral-900 flex flex-col md:flex-row items-center justify-between gap-4 font-heavy text-xs text-neutral-400 uppercase tracking-widest"> <p>© 2026 Anchorage Press</p> <p class="font-serif italic text-neutral-300 text-sm normal-case tracking-normal text-center md:text-right">
Our organization is located near Dgheyey Kaq' on Dena’ina Ełnena.
</p> </div>  <div class="mt-8 flex flex-col items-center justify-center gap-2 pb-6"> <span class="text-[9px] uppercase tracking-[2px] text-neutral-700">Designed By</span> <a href="https://fourak.com" target="_blank" rel="noopener noreferrer" class="focus:outline-none focus-visible:ring-1 focus-visible:ring-white rounded group/logo flex items-center justify-center p-2" title="Four Media" aria-label="Visit Four Media website (opens in a new window)"> <div class="flex items-center justify-center overflow-hidden h-[14px]"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="78.726 0 35.299 63.521" class="h-full w-auto fill-[#ff6700] transition-all duration-500 ease-out translate-x-4 opacity-0 max-w-0 pr-[2px] group-hover/logo:translate-x-0 group-hover/logo:opacity-100 group-hover/logo:max-w-[12px]"><polygon points="89.071 10.527 114.025 10.527 114.025 0 78.726 0 78.726 63.521 89.071 63.521 89.071 36.752 111.847 36.752 111.847 26.225 89.071 26.225 89.071 10.527"></polygon></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 63.363 63.521" class="h-full w-auto fill-neutral-600 transition-all duration-500 ease-out max-w-[15px] opacity-100 group-hover/logo:opacity-0 group-hover/logo:max-w-0 group-hover/logo:scale-75 overflow-hidden"><path d="M49.004.079H14.358C6.428.079,0,6.508,0,14.438v34.646c0,7.93,6.428,14.358,14.358,14.358h34.646c7.93,0,14.358-6.428,14.358-14.358V14.438C63.363,6.508,56.934.079,49.004.079ZM27.369,46.533h-11.559c-1.1,0-2.141-.194-3.126-.584-.984-.388-1.855-.916-2.611-1.58-.756-.663-1.351-1.443-1.786-2.336-.435-.893-.653-1.844-.653-2.852v-3.37h7.97v1.172c0,.504.172.917.515,1.237.344.321.79.481,1.34.481h9.91v7.833ZM27.369,24.821h-9.91c-.55,0-.996.161-1.34.481-.343.321-.515.733-.515,1.237v1.171h-7.97v-3.301c0-1.007.218-1.958.653-2.851.436-.893,1.031-1.683,1.786-2.371.756-.687,1.627-1.225,2.611-1.615.986-.388,2.027-.584,3.126-.584h11.559v7.833ZM55.729,39.181c0,1.008-.217,1.958-.653,2.852-.435.893-1.031,1.672-1.786,2.336-.755.665-1.625,1.192-2.611,1.58-.984.39-2.027.584-3.126.584h-12.083v-7.833h10.434c.504,0,.939-.16,1.305-.481.367-.32.55-.732.55-1.237v-1.172h7.97v3.37ZM55.729,27.71h-7.97v-1.171c0-.504-.182-.916-.55-1.237-.366-.32-.801-.481-1.305-.481h-10.434v-7.833h12.083c1.099,0,2.142.196,3.126.584.986.39,1.855.928,2.611,1.615.756.687,1.352,1.477,1.786,2.371.436.893.653,1.844.653,2.851v3.301Z"></path></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="120.37 0 43.16 63.521" class="h-full w-auto fill-[#ff6700] transition-all duration-500 ease-out max-w-0 opacity-0 group-hover/logo:opacity-100 group-hover/logo:max-w-[12px] group-hover/logo:scale-100 scale-75 overflow-hidden"><g><path d="M151.049,50.545c0,.666-.213,1.241-.635,1.724-.424.485-.969.726-1.634.726h-1.547v10.526h4.36c1.33,0,2.586-.286,3.766-.862,1.18-.574,2.223-1.361,3.131-2.359.908-.998,1.618-2.147,2.133-3.448.513-1.3.771-2.677.771-4.129v-15.959h-10.345v13.781Z"></path><path d="M132.718,12.977c0-.726.212-1.316.635-1.77.422-.454.967-.68,1.633-.68h1.547V0h-4.451c-1.331,0-2.587.288-3.766.862-1.18.575-2.209,1.361-3.085,2.359-.878.998-1.574,2.148-2.087,3.448-.515,1.302-.771,2.677-.771,4.129v15.266h10.345v-13.088Z"></path><path d="M148.78,10.527c.665,0,1.21.227,1.634.68.422.454.635,1.044.635,1.77v13.088h10.345v-15.266c0-1.452-.259-2.827-.771-4.129-.515-1.3-1.225-2.45-2.133-3.448s-1.951-1.784-3.131-2.359c-1.18-.574-2.436-.862-3.766-.862h-4.36v10.527h1.547Z"></path><path d="M134.987,52.995c-.666,0-1.211-.241-1.633-.726-.424-.483-.635-1.058-.635-1.724v-13.781h-10.345v15.959c0,1.452.256,2.828.771,4.129.513,1.302,1.209,2.451,2.087,3.448.876.998,1.905,1.785,3.085,2.359,1.18.576,2.435.862,3.766.862h4.451v-10.526h-1.547Z"></path></g></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="171.852 0 93.17 63.521" class="h-full w-auto fill-[#ff6700] transition-all duration-500 ease-out -translate-x-4 opacity-0 max-w-0 pl-[2px] group-hover/logo:translate-x-0 group-hover/logo:opacity-100 group-hover/logo:max-w-[22px]"><g><path d="M199.959,50.545c0,.666-.227,1.241-.681,1.724-.454.485-1.014.726-1.679.726h-12.977c-.666,0-1.225-.241-1.679-.726-.454-.483-.681-1.058-.681-1.724V0h-10.345v52.632c0,1.452.257,2.844.771,4.174.513,1.331,1.209,2.496,2.087,3.494.876.998,1.905,1.785,3.085,2.359,1.18.576,2.435.862,3.766.862h18.875c1.33,0,2.586-.286,3.766-.862,1.18-.574,2.223-1.361,3.13-2.359.908-.998,1.618-2.162,2.133-3.494.513-1.33.771-2.722.771-4.174V0h-10.345v50.545Z"></path><path d="M251.229,32.94l6.534-4.265c1.875-1.271,2.963-2.451,3.267-3.539.363-1.089.544-2.208.544-3.358v-11.797c0-1.27-.227-2.509-.68-3.72-.454-1.209-1.089-2.269-1.906-3.176s-1.785-1.648-2.904-2.223c-1.12-.574-2.345-.862-3.676-.862h-29.855v63.521h10.345v-19.873l9.347-5.535,11.252,25.408h11.524l-13.793-30.581ZM248.87,22.323l-15.971,9.074V10.345h15.971c.604,0,1.148.242,1.634.726.483.666.726,1.27.726,1.815v5.263c0,1.15-.181,1.997-.544,2.541-.242.606-.848,1.15-1.815,1.634Z"></path></g></svg> </div> </a> </div> </div> </footer> </div> <div class="fixed bottom-6 left-1/2 -translate-x-1/2 z-40 pointer-events-none flex justify-center"> <button type="button" id="back-to-top-btn" aria-label="Scroll back to top" class="bg-black text-yellow-400 hover:bg-[#FEB619] hover:text-black border-2 border-black px-3.5 py-2 shadow-[4px_4px_0px_#000] hover:shadow-[6px_6px_0px_#000] active:shadow-[2px_2px_0px_#000] transition-all duration-300 font-heavy text-xs uppercase opacity-0 pointer-events-none translate-y-4 flex items-center gap-1.5 cursor-pointer group focus:outline-none focus-visible:ring-2 focus-visible:ring-yellow-400 focus-visible:ring-offset-2"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-arrow-up size-4 shrink-0 transition-transform group-hover:-translate-y-0.5">  <path d="m5 12 7-7 7 7"></path> <path d="M12 19V5"></path>  </svg> <span>TOP</span> </button> </div> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
  function initBackToTop() {
    const btn = document.getElementById('back-to-top-btn');
    if (!btn) return;

    function checkScroll() {
      if (window.scrollY > 400) {
        btn.classList.remove('opacity-0', 'pointer-events-none', 'translate-y-4');
        btn.classList.add('opacity-100', 'pointer-events-auto', 'translate-y-0');
      } else {
        btn.classList.add('opacity-0', 'pointer-events-none', 'translate-y-4');
        btn.classList.remove('opacity-100', 'pointer-events-auto', 'translate-y-0');
      }
    }

    window.addEventListener('scroll', checkScroll, { passive: true });
    checkScroll();

    btn.addEventListener('click', () => {
      window.scrollTo({ top: 0, behavior: 'smooth' });
    });
  }

  initBackToTop();
  document.addEventListener('astro:page-load', initBackToTop);
</script> <nav aria-label="Mobile Navigation" class="fixed bottom-0 left-0 right-0 z-50 md:hidden bg-black text-white border-t-4 border-black shadow-[0_-4px_12px_rgba(0,0,0,0.4)] pb-[env(safe-area-inset-bottom,0px)]"> <div class="grid grid-cols-6 h-14">  <button type="button" class="a11y-toggle-trigger flex flex-col items-center justify-center gap-0.5 transition-colors bg-yellow-400 text-black hover:bg-white active:scale-95 touch-manipulation cursor-pointer border-r border-neutral-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-yellow-400 focus-visible:ring-inset" aria-label="Open Accessibility Options" aria-expanded="false" aria-controls="a11y-panel"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-accessibility size-4.5 text-black shrink-0">  <circle cx="16" cy="4" r="1"></circle> <path d="m18 19 1-7-6 1"></path> <path d="m5 8 3-3 5.5 3-2.36 3.5"></path> <path d="M4.24 14.5a5 5 0 0 0 6.88 6"></path> <path d="M13.76 17.5a5 5 0 0 0-6.88-6"></path>  </svg> <span class="font-heavy text-[9px] uppercase tracking-wider text-black leading-none">A11Y</span> </button> <a href="/" aria-label="Home" class="flex flex-col items-center justify-center gap-0.5 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-400 focus-visible:ring-inset text-neutral-300 hover:text-emerald-400"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" class="lucide lucide-house size-4 shrink-0">  <path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"></path> <path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>  </svg> <span class="font-heavy text-[9px] uppercase tracking-wider leading-none">Home</span> </a><a href="/latest" aria-label="Latest" class="flex flex-col items-center justify-center gap-0.5 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-400 focus-visible:ring-inset text-neutral-300 hover:text-emerald-400"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" class="lucide lucide-newspaper size-4 shrink-0">  <path d="M15 18h-5"></path> <path d="M18 14h-8"></path> <path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2"></path> <rect width="8" height="4" x="10" y="6" rx="1"></rect>  </svg> <span class="font-heavy text-[9px] uppercase tracking-wider leading-none">Latest</span> </a><a href="/events" aria-label="Events" class="flex flex-col items-center justify-center gap-0.5 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-400 focus-visible:ring-inset text-neutral-300 hover:text-emerald-400"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" class="lucide lucide-calendar size-4 shrink-0">  <path d="M8 2v4"></path> <path d="M16 2v4"></path> <rect width="18" height="18" x="3" y="4" rx="2"></rect> <path d="M3 10h18"></path>  </svg> <span class="font-heavy text-[9px] uppercase tracking-wider leading-none">Events</span> </a><a href="/support" aria-label="Support" class="flex flex-col items-center justify-center gap-0.5 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-400 focus-visible:ring-inset text-neutral-300 hover:text-emerald-400"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" class="lucide lucide-heart-handshake size-4 shrink-0">  <path d="M19.414 14.414C21 12.828 22 11.5 22 9.5a5.5 5.5 0 0 0-9.591-3.676.6.6 0 0 1-.818.001A5.5 5.5 0 0 0 2 9.5c0 2.3 1.5 4 3 5.5l5.535 5.362a2 2 0 0 0 2.879.052 2.12 2.12 0 0 0-.004-3 2.124 2.124 0 1 0 3-3 2.124 2.124 0 0 0 3.004 0 2 2 0 0 0 0-2.828l-1.881-1.882a2.41 2.41 0 0 0-3.409 0l-1.71 1.71a2 2 0 0 1-2.828 0 2 2 0 0 1 0-2.828l2.823-2.762"></path>  </svg> <span class="font-heavy text-[9px] uppercase tracking-wider leading-none">Support</span> </a><a href="/search" aria-label="Search" class="flex flex-col items-center justify-center gap-0.5 transition-colors bg-yellow-400 text-black hover:bg-white active:scale-95 touch-manipulation cursor-pointer border-l border-neutral-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-yellow-400 focus-visible:ring-inset font-heavy"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" aria-hidden="true" class="lucide lucide-search size-4.5 text-black shrink-0">  <path d="m21 21-4.34-4.34"></path> <circle cx="11" cy="11" r="8"></circle>  </svg> <span class="font-heavy text-[9px] uppercase tracking-wider text-black leading-none">SEARCH</span> </a> </div> </nav>  <div id="member-welcome-toast" class="hidden fixed bottom-6 left-6 z-[95] max-w-sm bg-[#fcfbf7] border-3 border-black p-3.5 shadow-[6px_6px_0px_#000] transition-all duration-500 translate-y-28 opacity-0 pointer-events-none" role="status" aria-live="polite" hidden aria-hidden="true" style="display: none;"> <div class="flex items-start justify-between gap-3"> <div class="flex items-start gap-2.5"> <span class="text-xl shrink-0 select-none">👋</span> <div> <div class="font-heavy text-xs uppercase tracking-wider text-black" id="welcome-toast-title"></div> <p class="font-sans text-xs text-neutral-700 mt-0.5 leading-snug" id="welcome-toast-desc"></p> <div class="mt-2 flex items-center gap-3"> <a href="https://cms.anchoragepress.com/account/" id="welcome-toast-link" class="font-heavy text-[11px] uppercase tracking-wider text-black hover:text-emerald-700 underline underline-offset-2">
Manage Profile on CMS →
</a> <button type="button" id="welcome-toast-dismiss" class="font-mono text-[10px] uppercase text-neutral-500 hover:text-black cursor-pointer">
Dismiss
</button> </div> </div> </div> <button type="button" id="welcome-toast-close" class="text-neutral-500 hover:text-black font-heavy text-sm p-0.5 cursor-pointer leading-none" aria-label="Close notification">
✕
</button> </div> </div>  <script>
      (function setupMemberRecognitionEngine() {
        async function syncMemberData() {
          try {
            var email = localStorage.getItem('ghost-member-email');
            var token = sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token') || '';
            if (!email || !email.includes('@') || !token) return;

            // Fetch details if name or address not cached
            if (!localStorage.getItem('ghost-member-name') || !localStorage.getItem('ghost-member-address')) {
              var addrHeaders = {
                'X-AP-Requested-With': 'AnchoragePressClient',
                'Authorization': 'Bearer ' + token,
                'x-ghost-identity-token': token
              };
              var res = await fetch('/api/member-address?email=' + encodeURIComponent(email), {
                headers: addrHeaders
              });
              var data = await res.json();
              if (data && data.success) {
                if (data.member && data.member.name) {
                  localStorage.setItem('ghost-member-name', data.member.name);
                }
                if (data.address) {
                  var parts = [data.address.street, data.address.suite].filter(Boolean).join(', ');
                  var cityZip = data.address.city + ', ' + data.address.state + ' ' + (data.address.zip || '');
                  localStorage.setItem('ghost-member-address', parts + ' · ' + cityZip);
                }
              }
            }

            // Dispatch global event for header, drawer, and CTAs
            window.dispatchEvent(new CustomEvent('ap:member-sync'));

            // Check if we should trigger the Arrival Welcome Toast
            var welcomed = sessionStorage.getItem('ap_welcome_shown');
            if (!welcomed) {
              sessionStorage.setItem('ap_welcome_shown', '1');
              showWelcomeToast();
            }
          } catch (e) {}
        }

        function showWelcomeToast() {
          var toast = document.getElementById('member-welcome-toast');
          if (!toast) return;

          var token = (typeof window !== 'undefined' && (sessionStorage.getItem('ghost-identity-token') || localStorage.getItem('ghost-identity-token'))) || '';
          var email = token ? localStorage.getItem('ghost-member-email') : '';
          if (!token || !email) return;

          var name = localStorage.getItem('ghost-member-name');
          var firstName = (name && name.toLowerCase() !== 'undefined' && name.toLowerCase() !== 'null')
            ? name.trim().split(' ')[0]
            : (email ? email.split('@')[0] : 'Reader');
          var address = localStorage.getItem('ghost-member-address');

          var titleEl = document.getElementById('welcome-toast-title');
          var descEl = document.getElementById('welcome-toast-desc');

          if (titleEl) titleEl.textContent = 'Welcome back, ' + firstName + '!';
          var linkEl = document.getElementById('welcome-toast-link');
          if (descEl) {
            if (address) {
              descEl.textContent = 'Supporting Member · Print Delivery Active';
              if (linkEl) linkEl.textContent = 'Manage Profile on CMS →';
            } else {
              descEl.textContent = 'No print delivery address on file — update on Member Portal to receive print copies.';
              if (linkEl) linkEl.textContent = 'Add Delivery Address on CMS →';
            }
          }

          toast.classList.remove('hidden');
          toast.removeAttribute('hidden');
          toast.setAttribute('aria-hidden', 'false');
          toast.style.display = 'block';

          // Slide in after short delay
          setTimeout(function() {
            toast.classList.remove('translate-y-28', 'opacity-0', 'pointer-events-none');
            toast.classList.add('translate-y-0', 'opacity-100', 'pointer-events-auto');
          }, 1200);

          // Auto dismiss after 6s
          var hideTimer = setTimeout(dismissToast, 6500);

          function dismissToast() {
            clearTimeout(hideTimer);
            toast.classList.remove('translate-y-0', 'opacity-100', 'pointer-events-auto');
            toast.classList.add('translate-y-28', 'opacity-0', 'pointer-events-none');
            setTimeout(function() {
              toast.classList.add('hidden');
              toast.setAttribute('hidden', '');
              toast.setAttribute('aria-hidden', 'true');
              toast.style.display = 'none';
            }, 500);
          }

          var closeBtn = document.getElementById('welcome-toast-close');
          var dismissBtn = document.getElementById('welcome-toast-dismiss');
          if (closeBtn) closeBtn.onclick = dismissToast;
          if (dismissBtn) dismissBtn.onclick = dismissToast;
        }

        // Run on load and route transition
        syncMemberData();
        document.addEventListener('astro:page-load', syncMemberData);
      })();
    </script> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a4f5f7877f153123',t:'MTc5MjgxMzI5Nw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script><script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/vce701823e78c4301a35b7e07294d87301792088814092" integrity="sha512-UKNk8GbxkABxKcXYuLkO16EleLGUkcvJWtpSNmExE0Too3ZaFAxTscNWEc1OdAv5/BikHawapSCaiD2XCmp+Bw==" data-cf-beacon='{"version":"2024.11.0","token":"a041ab8c290e4437a9aaf4451de8f5b6","r":1,"spa":2}' crossorigin="anonymous"></script>
</body> </html>
Source reader

Source