1 of 3 | Miles Russell hits from the fairway on the first hole during the first round of the U.S. Open golf tournament at Shinnecock Hills Golf Club in Southampton, N.Y., Thursday, June 18, 2026.(AP Photo/David J. Phillip) 2 of 3 | Miles Russell walks off the green on the third hole during the second round of the U.S. Open golf tournament at Shinnecock Hills Golf Club in Southampton, N.Y., Friday, June 19, 2026.(AP Photo/Gerald Herbert) 3 of 3 | Miles Russell hits from the fairway on the third hole during the first round of the U.S. Open golf tournament at Shinnecock Hills Golf Club in Southampton, N.Y., Thursday, June 18, 2026.(AP Photo/Seth Wenig) 1 of 3 | Miles Russell hits from the fairway on the first hole during the first round of the U.S. Open golf tournament at Shinnecock Hills Golf Club in Southampton, N.Y., Thursday, June 18, 2026.(AP Photo/David J. Phillip) Miles Russell hits from the fairway on the first hole during the first round of the U.S. Open golf tournament at Shinnecock Hills Golf Club in Southampton, N.Y., Thursday, June 18, 2026.(AP Photo/David J. Phillip) Add AP News as your preferred source to see more of our stories on Google. Share Share Facebook Copy Link copied Print Email X LinkedIn Bluesky Flipboard Pinterest Reddit Read More 2 of 3 | Miles Russell walks off the green on the third hole during the second round of the U.S. Open golf tournament at Shinnecock Hills Golf Club in Southampton, N.Y., Friday, June 19, 2026.(AP Photo/Gerald Herbert) Miles Russell walks off the green on the third hole during the second round of the U.S. Open golf tournament at Shinnecock Hills Golf Club in Southampton, N.Y., Friday, June 19, 2026.(AP Photo/Gerald Herbert) Add AP News as your preferred source to see more of our stories on Google. Share Share Facebook Copy Link copied Print Email X LinkedIn Bluesky Flipboard Pinterest Reddit Read More 3 of 3 | Miles Russell hits from the fairway on the third hole during the first round of the U.S. Open golf tournament at Shinnecock Hills Golf Club in Southampton, N.Y., Thursday, June 18, 2026.(AP Photo/Seth Wenig) Miles Russell hits from the fairway on the third hole during the first round of the U.S. Open golf tournament at Shinnecock Hills Golf Club in Southampton, N.Y., Thursday, June 18, 2026.(AP Photo/Seth Wenig) Add AP News as your preferred source to see more of our stories on Google. Share Share Facebook Copy Link copied Print Email X LinkedIn Bluesky Flipboard Pinterest Reddit Read More By BRIAN MAHONEY Updated : , , Leer en español Add AP News on Google Add AP News as your preferred source to see more of our stories on Google. Share (function () { const counter = document.getElementById("scrollToComments"); const HEADER_OFFSET = 120; function findCommentsModule() { return document.querySelector('.vf3-comments, #vf-conversations, '); } function maybeShowCounter() { if (findCommentsModule()) { counter.style.display = "inline-flex"; } else { counter.style.display = "none"; } } // Show only when Viafoura is present maybeShowCounter(); // Watch DOM for late loads const observer = new MutationObserver(maybeShowCounter); observer.observe(document.documentElement, { childList: true, subtree: true }); // Scroll action counter.addEventListener("click", function () { const el = findCommentsModule(); if (!el) return; const top = el.getBoundingClientRect().top + window.scrollY - HEADER_OFFSET; window.scrollTo({ top, behavior: "smooth" }); }); })(); .thin-line-button { display: inline-flex; align-items: center; justify-content: center; border: 1px solid #ccc; height: 30px; padding: 0 10px; cursor: pointer; border-radius: 5px; background: none; text-align: center; font-size: 1.4rem; font-weight: 700; white-space: nowrap; flex-shrink: 0; color: inherit; transition: none; /* Remove animation effect */ } .thin-line-button { color: #000; background: white; } /* Remove hover effect */ .thin-line-button:hover { border: 1px solid #ccc; } .comment-icon { width: 20px; height: 20px; min-width: 20px; min-height: 20px; flex: 0 0 20px; object-fit: contain; display: inline-block; } .Page-actions-commentCounter .embed-caption { display: none; } .vf-comments-count.vf-is-logged-in { margin-left: 4px; } SOUTHAMPTON, N.Y. (AP) — Miles Russell had quite a Father’s Day gift for his dad: the chance to be the caddie in his son’s U.S. Open debut. The 17-year-old amateur surprised his father, Joe, on the 18th hole Sunday when his caddie brought Russell’s clubs to him outside the ropes to carry them the rest of the way. “It was kind of a fun Father’s Day gift,” Miles Russell said. “Kind of cool since it was my first one. Hopefully it’s something he’ll remember for a long time.” Russell had Charlie Woods, Tiger Woods’ son and his future teammate at Florida State, carrying the bag for him when he advanced to the U.S. Open through a 36-hole qualifying tournament earlier this month. Ramon Bescansa was on the bag for Russell at Shinnecock Hills — but only for 71 1/2 holes. As Russell walked toward the 18th green, Bescansa turned toward the ropes and found Joe Russell. He placed the bag down just inside the ropes and removed his caddie bib and handed it to Joe, who put it on. According to the NBC broadcast, Miles Russell asked a USGA rules official in the morning if he would be allowed to make the switch and was given permission. Joe Russell was not aware of the plan. KPMG Women’s PGA boosts purse to $13 million, the largest in women’s golf 2 MIN READ At US Open, Wyndham Clark proves he doesn’t have to be perfect to be a winner 4 MIN READ Wyndham Clark quiets a US Open crowd that rooted for him to lose 3 MIN READ Miles Russell smiled widely as his father caught up to him and they walked up to the green. Russell tapped in for par to finish off an even-par 70 in the final round. After becoming the second-youngest male amateur since World War II to play the weekend at the U.S. Open, he finished at 7 over for the tournament while being paired the final two rounds with fellow amateur Jackson Koivun, who led Auburn to two NCAA championships and shared low amateur honors with Ryder Cowan at 5 over in his final tournament before turning pro. “It was a pretty special week,” Russell said. “Just to be here was really special, and to make the cut was kind of bonus points. I didn’t quite have my best stuff the last two days, but still really cool. Just a great experience.” BRIAN MAHONEY Mahoney is an editor on the AP Sports desk. He also is a pro basketball writer, primarily covering the two NBA teams in New York. twitter mailto window.vfQ = window.vfQ || ; // Tags that always block comments on ANY story, regardless of section. Example const COMMENT_BLOCK_TAGS = ; // Section name we care about (as it appears in ). // We'll normalize to lowercase, so "World News" -> "world news". const WORLD_NEWS_SECTION = 'world news'; // Tags that block comments ONLY when the story is in the World News section. const WORLD_NEWS_EXCLUSION_TAGS = ; window.vfQ = window.vfQ || ; // Zephr mod handling + prepublish + login failure handling setTimeout(() => { const all = document.querySelectorAll('.Zephr.Zephr-mod'); // If there's more than one of this element, delete the one with ID if (all.length > 1) { const withId = document.getElementById('viafoura-zephr-mod'); if (withId) withId.remove(); return } // prepublish → Zephr auth / walls handling window.vfQ.push(() => { if (!window.vf || typeof window.vf.$prepublish !== 'function') return; window.vf.$prepublish((channel, event, ...args) => { if (channel === 'authentication' && event === 'required') { window.vf.$publish && window.vf.$publish('tray', 'close'); window.Zephr?.openModal?.(); // window.location.href = `/login?target=${window.location.pathname}` return false; } else if (channel === 'walls' && event === 'post-attempt') { if (window.zephrQueue && typeof window.zephrQueue.enqueue === 'function') { window.zephrQueue.enqueue(async (zephr) => { if ( !zephr?.accessDetails?.authenticated || !window.Zephr?.openModal ) { return; } window.Zephr.openModal(); }); } return { channel, event, args }; } else { return { channel, event, args }; } }); }); // login failure → show ban message + tooltip window.vfQ.push(() => { if (!window.vf || typeof window.vf.$subscribe !== 'function') return; window.vf.$subscribe('login', 'failure', (errorContext) => { if (!errorContext) return; const isBanned = errorContext.error_key === 'login_banned'; if (!isBanned) return; let reasonText = 'Your account has been permanently banned from posting.'; if (errorContext.isPermanent === 0) { const date = new Date(errorContext.endDate); const formatted = date.toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit', hour12: true, }); reasonText = 'Your account has been banned from posting until ' + formatted; } waitForEditorWrapper((wrapper) => { if (wrapper && !document.querySelector('.vf-ban-container')) { const container = document.createElement('div'); container.className = 'vf-ban-container'; // Message const message = document.createElement('div'); message.className = 'vf-ban-message'; message.innerHTML = '❗' + '' + reasonText + ''; // Tooltip trigger if (errorContext.reason) { const tooltip = document.createElement('span'); tooltip.className = 'vf-ban-tooltip'; tooltip.textContent = ' — WHY WAS I BANNED?'; const tooltipContent = document.createElement('div'); tooltipContent.className = 'vf-ban-tooltip-content'; tooltipContent.textContent = errorContext.reason; tooltip.appendChild(tooltipContent); message.appendChild(tooltip); } container.appendChild(message); wrapper.parentNode.insertBefore(container, wrapper.nextSibling); } }); }); }); }, 50); function waitForEditorWrapper(callback, maxTries = 50, interval = 100) { let tries = 0; const iv = setInterval(() => { const wrapper = document.querySelector('.vf-new-content__content-editor-wrapper'); if (wrapper) { clearInterval(iv); callback(wrapper); } else if (++tries >= maxTries) { clearInterval(iv); } }, interval); } function pageHasBlockedTag(tagsToBlock = COMMENT_BLOCK_TAGS) { const metas = Array.from( document.querySelectorAll(', 'meta' ].join(',')) ); const pageTags = metas .map(m => (m.getAttribute('content') || '')) .flatMap(c => c.split(',')) .map(s => s.trim().toLowerCase()) .filter(Boolean); const blockSet = new Set( (tagsToBlock || ).map(t => String(t).trim().toLowerCase()).filter(Boolean) ); return pageTags.some(t => blockSet.has(t)); } function getPageSection() { // Look for // or just in case. const meta = document.querySelector( 'meta, meta' ); if (!meta) return ''; return (meta.getAttribute('content') || '').trim().toLowerCase(); } function replaceBellIconInNav(container) { if (!container) return; const bellButtons = container.querySelectorAll( '.comment-nav-right .vf-tray-trigger.comment-nav-right__icon, .vf-tray-trigger' ); bellButtons.forEach((btn) => { if (btn.dataset.iconSwapped === '1') return; const bellSvg = btn.querySelector('.vf-icon_bell_icon'); if (bellSvg) bellSvg.remove(); const img = document.createElement('img'); img.src = 'https://assets.apnews.com/75/e2/83fe757647f790e4a0bf06370f10/comment-2.png'; img.alt = 'Comments'; img.style.height = '24px'; img.style.width = '24px'; img.style.verticalAlign = 'middle'; img.setAttribute('data-ap-bell', '1'); // precise selector for dark-mode tweak btn.appendChild(img); btn.dataset.iconSwapped = '1'; }); } function injectNoticeInContainer(container) { if (!container) return false; if (container.querySelector('.vf-guidelines-notice')) return true; const header = container.querySelector('.vf-comment-header'); if (!header) return false; const notice = document.createElement('div'); notice.className = 'vf-guidelines-notice'; notice.innerHTML = 'All comments are subject to our ' + 'Community Guidelines.' + 'Please note that comments are not moderated immediately — every post is reviewed before appearing publicly to ensure it meets our community guidelines. This means there may be a delay before your comment is visible.'; header.parentNode.insertBefore(notice, header.nextSibling); return true; } function hideFloatingBellButton() { document.querySelectorAll('.vf-tray-trigger--floating').forEach((btn) => { btn.style.display = 'none'; }); } function moveTrendingAboveCommentsFooter() { const trendingHost = document.getElementById('ap-trending-host'); if (!trendingHost || trendingHost.dataset.moved === '1') return; const footer = document.querySelector('#vf-conversations > div > section > div > footer'); if (footer && footer.parentNode) { footer.parentNode.insertBefore(trendingHost, footer); trendingHost.dataset.moved = '1'; } } function onCommentingLoaded() { const container = document.getElementById('ap-comments'); if (!container) return; injectNoticeInContainer(container); replaceBellIconInNav(container); moveTrendingAboveCommentsFooter(); } function wireViafoura() { if (window.vf && typeof window.vf.$subscribe === 'function') { window.vf.$subscribe('commenting', 'loaded', onCommentingLoaded); } } /* ----------------- DARK THEME HANDLING ----------------- */ function isDarkColor(rgb) { if (!rgb) return false; const m = rgb.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i); if (!m) return false; const r = +m, g = +m, b = +m; const lum = (0.2126*r + 0.7152*g + 0.0722*b) / 255; return lum < 0.5; } function shouldUseDarkTheme() { if (document.querySelector('')) return true; const carrier = document.querySelector('') || document.body || document.documentElement; const bg = carrier ? getComputedStyle(carrier).backgroundColor : ''; return isDarkColor(bg); } function getEffectiveDarkBg() { const carrier = document.querySelector('') || document.body || document.documentElement; const bg = carrier ? getComputedStyle(carrier).backgroundColor : ''; return bg && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'transparent' ? bg : '#0b0b0b'; } // NEW: normalize dropdown/menu background in dark mode (solid dark, non-transparent) function fixDarkModeDropdowns() { if (!shouldUseDarkTheme()) return; const bg = getEffectiveDarkBg(); const text = 'rgba(255,255,255,0.85)'; const dropdowns = document.querySelectorAll( ',,.vf-dropdown__menu,.vf-select__menu' ); dropdowns.forEach((el) => { const cs = getComputedStyle(el); const bgColor = cs.backgroundColor; // Only fix ones that are effectively transparent / not already dark if ( bgColor === 'rgba(0, 0, 0, 0)' || bgColor === 'transparent' ) { el.style.setProperty('--default-color', bg); el.style.setProperty('--background-color', bg); el.style.setProperty('--light-text-on-default-color', text); el.style.setProperty('--dark-text-on-default-color', '#ffffff'); el.style.setProperty('--light-text-on-background-color', text); el.style.setProperty('--dark-text-on-background-color', '#ffffff'); el.style.backgroundColor = bg; el.style.color = text; } }); } function applyDarkThemeIfNeeded() { const container = document.getElementById('ap-comments'); if (!container) return; const useDark = shouldUseDarkTheme(); const bg = useDark ? getEffectiveDarkBg() : null; container.classList.toggle('ap-comments--dark', useDark); if (useDark) { container.style.setProperty('--apc-bg', bg); container.style.setProperty('--apc-text', '#e8e8e8'); container.style.setProperty('--apc-link', '#9ecbff'); container.setAttribute('data-theme', 'dark'); container.style.setProperty('background', 'var(--apc-bg)', 'important'); // Normalize Viafoura / AP-style variables INSIDE the comments container container.style.setProperty('--default-color', bg); container.style.setProperty('--background-color', bg); container.style.setProperty('--light-text-on-default-color', 'rgba(255, 255, 255, 0.8)'); container.style.setProperty('--dark-text-on-default-color', '#ffffff'); container.style.setProperty('--light-text-on-background-color', 'rgba(255, 255, 255, 0.8)'); container.style.setProperty('--dark-text-on-background-color', '#ffffff'); } else { container.removeAttribute('data-theme'); container.style.removeProperty('background'); .forEach(v => container.style.removeProperty(v)); } const elConv = document.getElementById('vf-conv'); const elTrend = document.getElementById('vf-trending'); const realConv = document.querySelector('#vf-conversations'); const realTrend = document.querySelector('#vf-trending-articles'); .forEach(el => { if (!el) return; if (useDark) { el.setAttribute('data-vf-theme', 'dark'); el.setAttribute('vf-theme', 'dark'); el.setAttribute('theme', 'dark'); el.style.removeProperty('background'); el.style.color = 'var(--apc-text)'; } else { .forEach(a => el.removeAttribute(a)); el.style.removeProperty('background'); el.style.removeProperty('color'); } }); .forEach((root) => { if (!root) return; if (useDark) { root.classList.add('ap-vf-dark'); root.setAttribute('data-theme', 'dark'); } else { root.classList.remove('ap-vf-dark'); root.removeAttribute('data-theme'); } }); // fix dropdowns / sort menus any time theme is recalculated if (useDark) { fixDarkModeDropdowns(); } } const vfObserver = new MutationObserver(() => { applyDarkThemeIfNeeded(); }); (function bootComments() { const container = document.getElementById('ap-comments'); if (!container) return; // Initial theme & dropdown fix applyDarkThemeIfNeeded(); // --------- NEW: Global block tags (e.g. no_comment) ---------- // If the page has ANY of the COMMENT_BLOCK_TAGS, hide comments on all stories. if (pageHasBlockedTag(COMMENT_BLOCK_TAGS)) { container.innerHTML = ''; container.classList.remove('viafoura'); container.id = 'comments-hidden'; hideFloatingBellButton(); return; } // --------- NEW: Section-specific logic (World News) ---------- const section = getPageSection(); // Only apply this rule if the story is in World News. if (section === WORLD_NEWS_SECTION) { // If a World News story has any tag in WORLD_NEWS_EXCLUSION_TAGS (e.g. Israel), // hide the embed. Other sections with those tags are still allowed. if (pageHasBlockedTag(WORLD_NEWS_EXCLUSION_TAGS)) { container.innerHTML = ''; container.classList.remove('viafoura'); container.id = 'comments-hidden'; hideFloatingBellButton(); return; } } // --------- Existing Viafoura boot logic ---------- if (!window.vf && !document.querySelector('script')) { const s = document.createElement('script'); s.async = true; s.src = '//cdn.viafoura.net/entry/index.js'; document.head.appendChild(s); } if (document.readyState === 'complete' || document.readyState === 'interactive') { wireViafoura(); } else { document.addEventListener('DOMContentLoaded', wireViafoura); } (function startCappedRetry() { let tries = 0; const maxTries = 120; const iv = setInterval(() => { injectNoticeInContainer(container); replaceBellIconInNav(container); hideFloatingBellButton(); moveTrendingAboveCommentsFooter(); applyDarkThemeIfNeeded(); if (++tries >= maxTries) clearInterval(iv); }, 100); })(); try { vfObserver.observe(container, { childList: true, subtree: true }); } catch (e) {} })(); .vf-guidelines-notice { font-family: var(--primary-font, 'AP', sans-serif); font-size: 1.0em; color: #666; margin: 0 0 10px 0; padding-left: 4px; opacity: 0.85; line-height: 1.4; } .vf-guidelines-notice a { text-decoration: underline; font-weight: 500; } #vf-trending-articles > div > div > h2 { font-size: 14px !important; line-height: 1.2; text-transform: uppercase; } #vf-trending-articles p.vf-trending-article__comment-count { font-size: 16px !important; line-height: 1.1; } #comments-hidden { display: none; } /* ---------- Dark theme for AP comments ---------- */ #ap-comments.ap-comments--dark { --apc-bg: #0b0b0b; --apc-text: #e8e8e8; --apc-muted: #a7a7a7; --apc-border: #2a2a2a; --apc-link: #9ecbff; background: var(--apc-bg) !important; color: var(--apc-text); color-scheme: dark; } /* DO NOT touch every descendant’s colors anymore – that was killing badges/icons */ #ap-comments.ap-comments--dark a { color: var(--apc-link); } #ap-comments.ap-comments--dark a:hover, #ap-comments.ap-comments--dark a:focus { text-decoration: underline; } #ap-comments.ap-comments--dark hr, #ap-comments.ap-comments--dark .vf-divider, #ap-comments.ap-comments--dark .vf-comment + .vf-comment, #ap-comments.ap-comments--dark .vf-card { border-color: var(--apc-border) !important; } #ap-comments.ap-comments--dark .vf-guidelines-notice { color: var(--apc-muted); } #ap-comments.ap-comments--dark #vf-trending-articles > div > div > h2, #ap-comments.ap-comments--dark p.vf-trending-article__comment-count { color: var(--apc-text) !important; } #ap-comments.ap-comments--dark #vf-conversations.ap-vf-dark, #ap-comments.ap-comments--dark #vf-trending-articles.ap-vf-dark { background: transparent !important; color: var(--apc-text) !important; color-scheme: dark; } #ap-comments.ap-comments--dark #vf-conversations, #ap-comments.ap-comments--dark #vf-trending-articles { background-color: var(--apc-bg) !important; } /* Removed “*:not(input)” background/color override so badges keep their own colors */ #ap-comments.ap-comments--dark #vf-conversations section, #ap-comments.ap-comments--dark #vf-conversations article, #ap-comments.ap-comments--dark #vf-conversations header, #ap-comments.ap-comments--dark #vf-conversations footer, #ap-comments.ap-comments--dark #vf-conversations .vf-card, #ap-comments.ap-comments--dark #vf-trending-articles section, #ap-comments.ap-comments--dark #vf-trending-articles article, #ap-comments.ap-comments--dark #vf-trending-articles header, #ap-comments.ap-comments--dark #vf-trending-articles footer, #ap-comments.ap-comments--dark #vf-trending-articles .vf-card { background-color: transparent !important; border-color: var(--apc-border) !important; } #ap-comments.ap-comments--dark .vf-content-editor-form, #ap-comments.ap-comments--dark .vf-editor-area { background-color: rgba(255,255,255,0.08) !important; border: 1px solid rgba(255,255,255,0.24) !important; border-radius: 6px !important; } #ap-comments.ap-comments--dark .vf-content-editor-input { color: var(--apc-text) !important; caret-color: var(--apc-text) !important; } #ap-comments.ap-comments--dark .vf-content-editor-input::placeholder { color: #cfcfcf !important; opacity: 1 !important; } #ap-comments.ap-comments--dark .vf-content-editor-input:focus, #ap-comments.ap-comments--dark .vf-editor-area:focus-within { outline: none !important; border-color: rgba(255,255,255,0.36) !important; box-shadow: 0 0 0 2px rgba(255,255,255,0.12) !important; } #ap-comments.ap-comments--dark .vf-dropdown-button, #ap-comments.ap-comments--dark .vf-dropdown-button__text { background-color: transparent !important; color: var(--apc-text) !important; border-color: var(--apc-border) !important; } #ap-comments.ap-comments--dark .vf-dropdown-button:hover, #ap-comments.ap-comments--dark .vf-dropdown-button:focus { background-color: rgba(255,255,255,0.06) !important; } /* Only tweak the swapped bell icon in dark mode; leave other badges alone */ #ap-comments.ap-comments--dark .vf-tray-trigger img { filter: invert(1) hue-rotate(180deg) brightness(1.1); opacity: 1; mix-blend-mode: normal; } /* Ban message styles */ .vf-ban-container { margin: 10px 0 15px; padding: 10px 12px; border-radius: 4px; background-color: #fff3cd; border: 1px solid #ffeeba; } .vf-ban-message { font-family: var(--primary-font, 'AP', sans-serif); font-size: 0.95em; color: #856404; display: flex; align-items: center; flex-wrap: wrap; } .vf-ban-icon { margin-right: 8px; } .vf-ban-tooltip { margin-left: 4px; font-weight: 600; text-decoration: underline; cursor: pointer; position: relative; } .vf-ban-tooltip-content { display: none; position: absolute; z-index: 9999; top: 120%; left: 0; width: 260px; padding: 8px 10px; background: #fff; border: 1px solid #ccc; border-radius: 4px; font-weight: 400; text-decoration: none; color: #333; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .vf-ban-tooltip:hover .vf-ban-tooltip-content { display: block; }