Bravegpt.com - Gm.bravegpt.com
([^ log.error('Failed to download chat:', err)
})
}
]
)
// Prefix icon to title
const modalTitle = shareChatModal.querySelector('h2'), titleIcon = icons.create({ key: 'speechBalloons' })
titleIcon.style.cssText = 'height: 28px ; width: 28px ; position: relative ; top: 7px ; right: 8px ;'
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }`
modalTitle.prepend(titleIcon)
// Hide Dismiss button, localize other labels
const modalBtns = shareChatModal.querySelectorAll('button')
modalBtns[0].style.display = 'none' // hide Dismiss button
if (!env.browser.language.startsWith('en')) // localize button labels
modalBtns.forEach(btn => {
if (/copy/i.test(btn.textContent)) btn.textContent = `${app.msgs.tooltip_copy} URL`
else if (/visit/i.test(btn.textContent)) btn.textContent = app.msgs.btnLabel_visitPage
else if (/download/i.test(btn.textContent))
btn.textContent = `${app.msgs.btnLabel_download} ${log.toTitleCase(app.msgs.btnLabel_convo)}`
})
// Style elements
shareChatModal.style.wordBreak = 'break-all' // since URL really long
shareChatModal.querySelector('h2').style.justifySelf = 'center'
shareChatModal.querySelector('p').style.cssText = 'text-align: center ; margin: 10px 0 -24px'
shareChatModal.querySelector('.modal-buttons').style.cssText = 'justify-content: center'
return shareChatModal
},
stylize() {
if (!this.styles) document.head.append(this.styles = dom.create.elem('style'))
this.styles.textContent = (
// Vars
`:root {
--modal-btn-zoom: scale(1.055) ; --modal-btn-transition: transform 0.15s ease ;
--settings-li-transition: transform 0.1s ease ; /* for Settings entry hover-zoom */
--fg-transition: opacity 0.65s cubic-bezier(0.165,0.84,0.44,1), /* fade-in */
transform 0.55s cubic-bezier(0.165,0.84,0.44,1) !important ; /* move-in */
--bg-transition: background-color 0.25s ease !important } /* dim */`
// Main modal styles
+ '@keyframes modal-zoom-fade-out {'
+ '0% { opacity: 1 } 50% { opacity: 0.25 ; transform: scale(1.05) }'
+ '100% { opacity: 0 ; transform: scale(1.35) }}'
+ '.chatgpt-modal > div { background-color: white !important ; color: #202124 }'
+ '.chatgpt-modal p { margin: 14px 0 -20px 4px ; font-size: 18px }' // pos/size modal msg
+ `.chatgpt-modal a { color: #${ env.ui.app.scheme == 'dark' ? '00cfff' : '1e9ebb' } !important }`
+ '.modal-buttons {'
+ `margin: 38px 0 1px ${ env.browser.isMobile ? 0 : -7 }px !important ; width: 100% }`
+ '.chatgpt-modal button {' // this.alert() buttons
+ `min-width: 123px ; padding: ${ env.browser.isMobile ? '5px' : '4px 8px' } !important ;`
+ 'cursor: pointer ; border-radius: 0 !important ; height: 39px ;'
+ 'border: 1px solid ' + ( env.ui.app.scheme == 'dark' ? 'white' : 'black' ) + ' !important }'
+ '.primary-modal-btn { background: black !important ; color: white !important }'
+ '.chatgpt-modal button:hover { background-color: #9cdaff !important ; color: black !important }'
+ ( env.ui.app.scheme == 'dark' ? // darkmode chatgpt.alert() styles
( '.chatgpt-modal > div, .chatgpt-modal button:not(.primary-modal-btn) {'
+ 'color: white !important }'
+ '.primary-modal-btn { background: hsl(186 100% 69%) !important ; color: black !important }'
+ '.chatgpt-modal a { color: #00cfff !important }'
+ '.chatgpt-modal button:hover {'
+ 'background-color: #00cfff !important ; color: black !important }' ) : '' )
+ `.${modals.class} { display: grid ; place-items: center }` // for centered icon/logo
+ '[class*=modal-close-btn] {'
+ 'position: absolute !important ; float: right ; top: 14px !important ; right: 16px !important ;'
+ 'cursor: pointer ; width: 33px ; height: 33px ; border-radius: 20px }'
+ `[class*=modal-close-btn] path {${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white'
: 'stroke: #9f9f9f ; fill: #9f9f9f' }}`
+ ( env.ui.app.scheme == 'dark' ? // invert dark mode hover paths
'[class*=modal-close-btn]:hover path { stroke: black ; fill: black }' : '' )
+ '[class*=modal-close-btn]:hover { background-color: #f2f2f2 }' // hover underlay
+ '[class*=modal-close-btn] svg { margin: 11.5px }' // center SVG for hover underlay
+ '[class*=-modal] h2 {'
+ 'font-size: 26px ; line-height: 32px ; padding: 0 ; margin: 4px 0 -1px !important ;'
+ `${ env.browser.isMobile ? 'text-align: center' // center on mobile
: 'justify-self: start' }}` // left-align on desktop
+ '[class*=-modal] p { justify-self: start ; font-size: 20px }'
+ '[class*=-modal] button { font-size: 14px !important ; background: none }'
+ '[class*=-modal-bg] {'
+ 'pointer-events: auto ;' // override any disabling from site modals
+ 'position: fixed ; top: 0 ; left: 0 ; width: 100% ; height: 100% ;' // expand to full view-port
+ 'display: flex ; justify-content: center ; align-items: center ; z-index: 9999 ;' // align
+ `transition: var(--bg-transition) ; /* dim */
-webkit-transition: var(--bg-transition) ; -moz-transition: var(--bg-transition) ;
-o-transition: var(--bg-transition) ; -ms-transition: var(--bg-transition) }`
+ '[class*=-modal-bg].animated > div {'
+ 'z-index: 13456 ; opacity: 0.98 ; transform: translateX(0) translateY(0) }'
+ '[class$=-modal] {' // native modals + chatgpt.alert()s
+ 'position: absolute ;' // to be click-draggable
+ 'opacity: 0 ;' // to fade-in
+ `background-image: linear-gradient(180deg, ${
env.ui.app.scheme == 'dark' ? '#99a8a6 -200px, black 200px' : '#b6ebff -296px, white 171px' }) ;`
+ `border: 1px solid ${ env.ui.app.scheme == 'dark' ? 'white' : '#b5b5b5' } !important ;`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };`
+ 'transform: translateX(-3px) translateY(7px) ;' // offset to move-in from
+ `transition: var(--fg-transition) ; /* fade-in + move-in */
-webkit-transition: var(--fg-transition) ; -moz-transition: var(--fg-transition) ;
-o-transition: var(--fg-transition) ; -ms-transition: var(--fg-transition) }
${ env.browser.isMobile ? '' : `[class$=-modal] button:hover { transform: var(--modal-btn-zoom) }`}
${ config.fgAnimationsDisabled ? '' : `[class$=-modal] button {
${ env.browser.isMobile ? '' : 'will-change: transform ;' }
transition: var(--modal-btn-transition) ;
-webkit-transition: var(--modal-btn-transition) ;
-moz-transition: var(--modal-btn-transition) ;
-o-transition: var(--modal-btn-transition) ;
-ms-transition: var(--modal-btn-transition) }`}`
// Settings modal
+ `#${app.slug}-settings {
font-family: var(--brand-font) ;
min-width: ${ env.browser.isPortrait ? 288 : 758 }px ; max-width: 75vw ; margin: 12px 23px ;
word-wrap: break-word ; border-radius: 15px ;
${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white' : 'stroke: black ; fill: black' };
--shadow: 0 30px 60px rgba(0,0,0,0.12) ;
box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow) }`
+ `#${app.slug}-settings-title {`
+ 'font-weight: bold ; line-height: 19px ; text-align: center ;'
+ `margin: 0 ${ env.browser.isMobile ? -31 : -6 }px -3px 0 }`
+ `#${app.slug}-settings-title h4 {`
+ `font-size: ${ env.browser.isPortrait ? 26 : 30 }px ; font-weight: bold ;`
+ 'margin: -31px 17px 7px 0 }'
+ `#${app.slug}-settings ul {`
+ 'list-style: none ; padding: 0 ; margin: 0 ;' // hide bullets, override Brave ul margins
+ `width: ${ env.browser.isPortrait ? 100 : 50 }% }` // set width based on column cnt
+ ( env.browser.isPhone ? '' : ( `#${app.slug}-settings ul:first-of-type {` // color desktop middle separator
+ `border-right: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }}` ))
+ `#${app.slug}-settings li {`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };`
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };`
+ `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };`
+ 'height: 37px ; padding: 7px 10px ; font-size: 14.5px ;'
+ `border-bottom: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };` // add separators
+ 'border-radius: 3px ;' // slightly round highlight strip
+ `${ config.fgAnimationsDisabled || env.browser.isMobile ? '' :
`transition: var(--settings-li-transition) ;
-webkit-transition: var(--settings-li-transition) ;
-moz-transition: var(--settings-li-transition) ;
-o-transition: var(--settings-li-transition) ;
-ms-transition: var(--settings-li-transition)` }}`
+ `#${app.slug}-settings li.active {`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for text
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for icons
+ `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' }}` // for icons
+ `#${app.slug}-settings li label { padding-right: 20px }` // right-pad labels so toggles don't hug
+ `#${app.slug}-settings li:last-of-type { border-bottom: none }` // remove last bottom-border
+ `#${app.slug}-settings li, #${app.slug}-settings li label { cursor: pointer }` // add finger on hover
+ `#${app.slug}-settings li:hover {`
+ 'background: rgba(100,149,237,0.88) ; color: white ; fill: white ; stroke: white ;'
+ `${ env.browser.isMobile ? '' : 'transform: scale(1.15)' }}`
+ `#${app.slug}-settings li > input { float: right } /* pos toggles */
#${app.slug}-settings li > .track {
position: relative ; left: -1px ; bottom: -5.5px ; float: right ;
background-color: #ccc ; width: 26px ; height: 13px ; border-radius: 28px ;
${ config.fgAnimationsDisabled ? '' :
`transition: 0.4s ; -webkit-transition: 0.4s ; -moz-transition: 0.4s ;
-o-transition: 0.4s ; -ms-transition: 0.4s` }}
#${app.slug}-settings li .*** {
position: absolute ; left: 1px ; bottom: 1px ; content: "" ;
background-color: white ; width: 11px ; height: 11px ; border-radius: 28px ;
${ config.fgAnimationsDisabled ? '' :
`transition: 0.2s ; -webkit-transition: 0.2s ; -moz-transition: 0.2s ;
-o-transition: 0.2s ; -ms-transition: 0.2s` }}`
+ '#scheme-settings-entry > span { margin: 3px -2px 0 }' // align Scheme status
+ '#scheme-settings-entry > span > svg {' // v-align/left-pad Scheme status icon
+ 'position: relative ; top: 2px ; margin-left: 4px }'
+ ( config.fgAnimationsDisabled ? '' // spin cycle arrows icon when scheme is Auto
: ( '#scheme-settings-entry svg[class*=arrowsCyclic],'
+ '.chatgpt-notif svg[class*=arrowsCyclic] { animation: rotate 5s linear infinite }' ))
+ `#about-settings-entry span { color: ${ env.ui.app.scheme == 'dark' ? '#28ee28' : 'green' }}`
+ '#about-settings-entry > span {' // outer About status span
+ `width: ${ env.browser.isPortrait ? '15vw' : '95px' }; height: 20px ; overflow: hidden ;`
+ `${ config.fgAnimationsDisabled ? '' : ( // fade edges
'mask-image: linear-gradient('
+ 'to right, transparent, black 20%, black 89%, transparent) ;'
+ '-webkit-mask-image: linear-gradient('
+ 'to right, transparent, black 20%, black 89%, transparent)' )}}`
+ '#about-settings-entry > span > div {'
+ `text-wrap: nowrap ; ${
config.fgAnimationsDisabled ? '' : 'animation: ticker linear 75s infinite' }}`
+ '@keyframes ticker { 0% { transform: translateX(100%) } 100% { transform: translateX(-2000%) }}'
+ `.about-em { color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'green' } !important }`
)
},
update: {
width: 489,
available() {
// Show modal
const updateAvailModal = modals.alert(`ð ${app.msgs.alert_updateAvail}!`, // title
`${app.msgs.alert_newerVer} ${app.name} ` // msg
+ `(v${app.latestVer}) ${app.msgs.alert_isAvail}! `
+ '${app.msgs.link_viewChanges}`,
function update() { // button
modals.safeWinOpen(`${app.urls.update.gm}?t=${Date.now()}`)
}, '', modals.update.width
)
// Localize button labels if needed
if (!env.browser.language.startsWith('en')) {
const updateBtns = updateAvailModal.querySelectorAll('button')
updateBtns[1].textContent = app.msgs.btnLabel_update
updateBtns[0].textContent = app.msgs.btnLabel_dismiss
}
return updateAvailModal
},
unavailable() {
return modals.alert(`${app.msgs.alert_upToDate}!`, // title
`${app.name} (v${app.version}) ${app.msgs.alert_isUpToDate}!`, // msg
'', '', modals.update.width
)
}
}
}
// Run MAIN routine
menus.toolbar.register()
// Init UI props
env.ui = { app: { scheme: config.scheme || ui.getScheme() }, site: { scheme: ui.getScheme() }}
// Create/ID/classify/listenerize/stylize APP container
app.div = dom.create.elem('div', { id: app.slug, class: 'fade-in snippet' })
themes.apply(config.theme) ; ui.addListeners.appDiv()
;['anchored', 'expanded', 'sticky', 'wider'].forEach(mode =>
(config[mode] || config[`${mode}Sidebar`]) && app.div.classList.add(mode))
update.appStyle()
;['rpg', 'rpw'].forEach(cssType => // rising particles
document.head.append(dom.create.style(GM_getResourceText(`${cssType}CSS`))))
// Hide GF alert on GitHub if found
if (location.host == 'github.com') {
const gfAlert = [...document.querySelectorAll('.markdown-alert')]
.find(alert => alert.textContent.includes('Greasy Fork'))
return !gfAlert ? undefined : gfAlert.style.display = 'none'
}
// APPEND to Brave
app.parentDivSelector = env.browser.isMobile ? '#results' : '.sidebar'
app.parentDiv = await new Promise(resolve => {
const appDivParent = document.querySelector(app.parentDivSelector)
if (appDivParent) resolve(appDivParent)
else new MutationObserver((_, obs) => {
const appDivParent = document.querySelector(app.parentDivSelector)
if (appDivParent) { obs.disconnect() ; resolve(appDivParent) }
}).observe(document.body, { childList: true, subtree: true })
})
setTimeout(() => {
app.parentDiv.prepend(app.div) ; ui.visibilizeOverflow()
setTimeout(() => app.div.classList.add('active'), 100) // fade in
}, env.scriptManager.name == 'Violentmonkey' ?
1000 : 0) // delay in VM to avoid mutation bug https://github.com/KudoAI/bravegpt/issues/123
// Init footer CTA to share feedback
const braveClassList = 'feedback svelte-8js1iq'
app.footerContent = dom.create.anchor('#', app.msgs.link_shareFeedback, { target: '_self', class: braveClassList })
app.footerContent.onclick = () => modals.open('feedback')
// REFERRALIZE links to support author
setTimeout(() => document.querySelectorAll('a[href^="https://www.amazon."]').forEach(anchor => {
const url = new URL(anchor.href) ; url.searchParams.set('tag', 'kudo-ai-20')
anchor.href = url.toString()
}), 1500)
// AUTO-GEN reply or show STANDBY mode
app.msgChain = [] ; const searchQuery = new URL(location.href).searchParams.get('q')
if (!config.autoGetDisabled || config.autoSummarize // Auto-Gen on
|| (config.prefixEnabled || config.suffixEnabled) // or Manual-Gen on
&& [config.prefixEnabled && location.href.includes('q=%2F'), // prefix required/present
config.suffixEnabled // suffix required/present
&& /q=.*?(?:%3F|ï¼|%EF%BC%9F)(?:&|$)/.test(location.href)
].filter(Boolean).length == (config.prefixEnabled + config.suffixEnabled) // validate both Manual-Gen modes
) { // auto-gen reply
app.msgChain.push({
time: Date.now(), role: 'user',
content: config.autoSummarize ? prompts.create('summarizeResults') : searchQuery
})
get.reply({ msgs: app.msgChain, src: 'query' })
} else { // show Standby mode
show.reply({ standby: true })
if (!config.rqDisabled)
get.related(searchQuery)
.then(queries => show.related(queries))
.catch(err => { log.error(err.message) ; api.tryNew(get.related) })
}
saveAppDiv() // to fight Brave Svelte mutations
// Monitor SCHEME PREF changes to update app scheme if auto-scheme mode
new MutationObserver(handleSchemePrefChange).observe( // class changes from Brave Search theme settings
document.documentElement, { attributes: true, attributeFilter: ['class'] })
window.matchMedia('(prefers-color-scheme: dark)').addEventListener( // for browser/system scheme pref changes
'change', () => requestAnimationFrame(handleSchemePrefChange))
function handleSchemePrefChange() {
if (config.scheme) return // since light/dark hard-set
const displayedScheme = ui.getScheme()
if (env.ui.app.scheme != displayedScheme) update.scheme(displayedScheme)
}
// Observe DOM for need to re-insert app div
new MutationObserver((_, obs) => {
if (!document.getElementById(app.slug)) { restoreAppDiv() ; obs.disconnect() }
}).observe(document.body, { subtree: true, childList: true })
function saveAppDiv() { if (restoreAppDiv.restored) return ; saveAppDiv.html = app.div.innerHTML }
function restoreAppDiv() {
log.caller = 'restoreAppDiv()'
log.debug(`Restoring ${app.name} from mutation...`)
app.div = dom.create.elem('div', { id: app.slug, class: 'fade-in active snippet' }) ; ui.addListeners.appDiv()
;['anchored', 'expanded', 'sticky', 'wider'].forEach(mode =>
(config[mode] || config[`${mode}Sidebar`]) && app.div.classList.add(mode))
app.div.innerHTML = saveAppDiv.html
if (app.div.querySelector(`.${app.slug}-header-btn`)) ui.addListeners.btns.appHeader()
app.div.querySelectorAll(`.${app.slug}-standby-btn`).forEach((btn, idx) =>
btn.onclick = show.reply[`${['query', 'summarize'][idx]}BtnClickHandler`])
show.codeCornerBtns()
if (app.div.querySelector(`.${app.slug}-chatbar-btn`)) ui.addListeners.replySection()
document.querySelector(app.parentDivSelector).prepend(app.div) ; ui.visibilizeOverflow()
restoreAppDiv.restored = true
}
})()
Domain Summary
What IP addresses does Gm.bravegpt.com resolve to?
Where are Gm.bravegpt.com servers located in?
gm.bravegpt.com Profile
Title:([^ log.error('Failed to download chat:', err)
})
}
]
)
// Prefix icon to title
const modalTitle = shareChatModal.querySelector('h2'), titleIcon = icons.create({ key: 'speechBalloons' })
titleIcon.style.cssText = 'height: 28px ; width: 28px ; position: relative ; top: 7px ; right: 8px ;'
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }`
modalTitle.prepend(titleIcon)
// Hide Dismiss button, localize other labels
const modalBtns = shareChatModal.querySelectorAll('button')
modalBtns[0].style.display = 'none' // hide Dismiss button
if (!env.browser.language.startsWith('en')) // localize button labels
modalBtns.forEach(btn => {
if (/copy/i.test(btn.textContent)) btn.textContent = `${app.msgs.tooltip_copy} URL`
else if (/visit/i.test(btn.textContent)) btn.textContent = app.msgs.btnLabel_visitPage
else if (/download/i.test(btn.textContent))
btn.textContent = `${app.msgs.btnLabel_download} ${log.toTitleCase(app.msgs.btnLabel_convo)}`
})
// Style elements
shareChatModal.style.wordBreak = 'break-all' // since URL really long
shareChatModal.querySelector('h2').style.justifySelf = 'center'
shareChatModal.querySelector('p').style.cssText = 'text-align: center ; margin: 10px 0 -24px'
shareChatModal.querySelector('.modal-buttons').style.cssText = 'justify-content: center'
return shareChatModal
},
stylize() {
if (!this.styles) document.head.append(this.styles = dom.create.elem('style'))
this.styles.textContent = (
// Vars
`:root {
--modal-btn-zoom: scale(1.055) ; --modal-btn-transition: transform 0.15s ease ;
--settings-li-transition: transform 0.1s ease ; /* for Settings entry hover-zoom */
--fg-transition: opacity 0.65s cubic-bezier(0.165,0.84,0.44,1), /* fade-in */
transform 0.55s cubic-bezier(0.165,0.84,0.44,1) !important ; /* move-in */
--bg-transition: background-color 0.25s ease !important } /* dim */`
// Main modal styles
+ '@keyframes modal-zoom-fade-out {'
+ '0% { opacity: 1 } 50% { opacity: 0.25 ; transform: scale(1.05) }'
+ '100% { opacity: 0 ; transform: scale(1.35) }}'
+ '.chatgpt-modal > div { background-color: white !important ; color: #202124 }'
+ '.chatgpt-modal p { margin: 14px 0 -20px 4px ; font-size: 18px }' // pos/size modal msg
+ `.chatgpt-modal a { color: #${ env.ui.app.scheme == 'dark' ? '00cfff' : '1e9ebb' } !important }`
+ '.modal-buttons {'
+ `margin: 38px 0 1px ${ env.browser.isMobile ? 0 : -7 }px !important ; width: 100% }`
+ '.chatgpt-modal button {' // this.alert() buttons
+ `min-width: 123px ; padding: ${ env.browser.isMobile ? '5px' : '4px 8px' } !important ;`
+ 'cursor: pointer ; border-radius: 0 !important ; height: 39px ;'
+ 'border: 1px solid ' + ( env.ui.app.scheme == 'dark' ? 'white' : 'black' ) + ' !important }'
+ '.primary-modal-btn { background: black !important ; color: white !important }'
+ '.chatgpt-modal button:hover { background-color: #9cdaff !important ; color: black !important }'
+ ( env.ui.app.scheme == 'dark' ? // darkmode chatgpt.alert() styles
( '.chatgpt-modal > div, .chatgpt-modal button:not(.primary-modal-btn) {'
+ 'color: white !important }'
+ '.primary-modal-btn { background: hsl(186 100% 69%) !important ; color: black !important }'
+ '.chatgpt-modal a { color: #00cfff !important }'
+ '.chatgpt-modal button:hover {'
+ 'background-color: #00cfff !important ; color: black !important }' ) : '' )
+ `.${modals.class} { display: grid ; place-items: center }` // for centered icon/logo
+ '[class*=modal-close-btn] {'
+ 'position: absolute !important ; float: right ; top: 14px !important ; right: 16px !important ;'
+ 'cursor: pointer ; width: 33px ; height: 33px ; border-radius: 20px }'
+ `[class*=modal-close-btn] path {${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white'
: 'stroke: #9f9f9f ; fill: #9f9f9f' }}`
+ ( env.ui.app.scheme == 'dark' ? // invert dark mode hover paths
'[class*=modal-close-btn]:hover path { stroke: black ; fill: black }' : '' )
+ '[class*=modal-close-btn]:hover { background-color: #f2f2f2 }' // hover underlay
+ '[class*=modal-close-btn] svg { margin: 11.5px }' // center SVG for hover underlay
+ '[class*=-modal] h2 {'
+ 'font-size: 26px ; line-height: 32px ; padding: 0 ; margin: 4px 0 -1px !important ;'
+ `${ env.browser.isMobile ? 'text-align: center' // center on mobile
: 'justify-self: start' }}` // left-align on desktop
+ '[class*=-modal] p { justify-self: start ; font-size: 20px }'
+ '[class*=-modal] button { font-size: 14px !important ; background: none }'
+ '[class*=-modal-bg] {'
+ 'pointer-events: auto ;' // override any disabling from site modals
+ 'position: fixed ; top: 0 ; left: 0 ; width: 100% ; height: 100% ;' // expand to full view-port
+ 'display: flex ; justify-content: center ; align-items: center ; z-index: 9999 ;' // align
+ `transition: var(--bg-transition) ; /* dim */
-webkit-transition: var(--bg-transition) ; -moz-transition: var(--bg-transition) ;
-o-transition: var(--bg-transition) ; -ms-transition: var(--bg-transition) }`
+ '[class*=-modal-bg].animated > div {'
+ 'z-index: 13456 ; opacity: 0.98 ; transform: translateX(0) translateY(0) }'
+ '[class$=-modal] {' // native modals + chatgpt.alert()s
+ 'position: absolute ;' // to be click-draggable
+ 'opacity: 0 ;' // to fade-in
+ `background-image: linear-gradient(180deg, ${
env.ui.app.scheme == 'dark' ? '#99a8a6 -200px, black 200px' : '#b6ebff -296px, white 171px' }) ;`
+ `border: 1px solid ${ env.ui.app.scheme == 'dark' ? 'white' : '#b5b5b5' } !important ;`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };`
+ 'transform: translateX(-3px) translateY(7px) ;' // offset to move-in from
+ `transition: var(--fg-transition) ; /* fade-in + move-in */
-webkit-transition: var(--fg-transition) ; -moz-transition: var(--fg-transition) ;
-o-transition: var(--fg-transition) ; -ms-transition: var(--fg-transition) }
${ env.browser.isMobile ? '' : `[class$=-modal] button:hover { transform: var(--modal-btn-zoom) }`}
${ config.fgAnimationsDisabled ? '' : `[class$=-modal] button {
${ env.browser.isMobile ? '' : 'will-change: transform ;' }
transition: var(--modal-btn-transition) ;
-webkit-transition: var(--modal-btn-transition) ;
-moz-transition: var(--modal-btn-transition) ;
-o-transition: var(--modal-btn-transition) ;
-ms-transition: var(--modal-btn-transition) }`}`
// Settings modal
+ `#${app.slug}-settings {
font-family: var(--brand-font) ;
min-width: ${ env.browser.isPortrait ? 288 : 758 }px ; max-width: 75vw ; margin: 12px 23px ;
word-wrap: break-word ; border-radius: 15px ;
${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white' : 'stroke: black ; fill: black' };
--shadow: 0 30px 60px rgba(0,0,0,0.12) ;
box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow) }`
+ `#${app.slug}-settings-title {`
+ 'font-weight: bold ; line-height: 19px ; text-align: center ;'
+ `margin: 0 ${ env.browser.isMobile ? -31 : -6 }px -3px 0 }`
+ `#${app.slug}-settings-title h4 {`
+ `font-size: ${ env.browser.isPortrait ? 26 : 30 }px ; font-weight: bold ;`
+ 'margin: -31px 17px 7px 0 }'
+ `#${app.slug}-settings ul {`
+ 'list-style: none ; padding: 0 ; margin: 0 ;' // hide bullets, override Brave ul margins
+ `width: ${ env.browser.isPortrait ? 100 : 50 }% }` // set width based on column cnt
+ ( env.browser.isPhone ? '' : ( `#${app.slug}-settings ul:first-of-type {` // color desktop middle separator
+ `border-right: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }}` ))
+ `#${app.slug}-settings li {`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };`
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };`
+ `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };`
+ 'height: 37px ; padding: 7px 10px ; font-size: 14.5px ;'
+ `border-bottom: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };` // add separators
+ 'border-radius: 3px ;' // slightly round highlight strip
+ `${ config.fgAnimationsDisabled || env.browser.isMobile ? '' :
`transition: var(--settings-li-transition) ;
-webkit-transition: var(--settings-li-transition) ;
-moz-transition: var(--settings-li-transition) ;
-o-transition: var(--settings-li-transition) ;
-ms-transition: var(--settings-li-transition)` }}`
+ `#${app.slug}-settings li.active {`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for text
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for icons
+ `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' }}` // for icons
+ `#${app.slug}-settings li label { padding-right: 20px }` // right-pad labels so toggles don't hug
+ `#${app.slug}-settings li:last-of-type { border-bottom: none }` // remove last bottom-border
+ `#${app.slug}-settings li, #${app.slug}-settings li label { cursor: pointer }` // add finger on hover
+ `#${app.slug}-settings li:hover {`
+ 'background: rgba(100,149,237,0.88) ; color: white ; fill: white ; stroke: white ;'
+ `${ env.browser.isMobile ? '' : 'transform: scale(1.15)' }}`
+ `#${app.slug}-settings li > input { float: right } /* pos toggles */
#${app.slug}-settings li > .track {
position: relative ; left: -1px ; bottom: -5.5px ; float: right ;
background-color: #ccc ; width: 26px ; height: 13px ; border-radius: 28px ;
${ config.fgAnimationsDisabled ? '' :
`transition: 0.4s ; -webkit-transition: 0.4s ; -moz-transition: 0.4s ;
-o-transition: 0.4s ; -ms-transition: 0.4s` }}
#${app.slug}-settings li .*** {
position: absolute ; left: 1px ; bottom: 1px ; content: "" ;
background-color: white ; width: 11px ; height: 11px ; border-radius: 28px ;
${ config.fgAnimationsDisabled ? '' :
`transition: 0.2s ; -webkit-transition: 0.2s ; -moz-transition: 0.2s ;
-o-transition: 0.2s ; -ms-transition: 0.2s` }}`
+ '#scheme-settings-entry > span { margin: 3px -2px 0 }' // align Scheme status
+ '#scheme-settings-entry > span > svg {' // v-align/left-pad Scheme status icon
+ 'position: relative ; top: 2px ; margin-left: 4px }'
+ ( config.fgAnimationsDisabled ? '' // spin cycle arrows icon when scheme is Auto
: ( '#scheme-settings-entry svg[class*=arrowsCyclic],'
+ '.chatgpt-notif svg[class*=arrowsCyclic] { animation: rotate 5s linear infinite }' ))
+ `#about-settings-entry span { color: ${ env.ui.app.scheme == 'dark' ? '#28ee28' : 'green' }}`
+ '#about-settings-entry > span {' // outer About status span
+ `width: ${ env.browser.isPortrait ? '15vw' : '95px' }; height: 20px ; overflow: hidden ;`
+ `${ config.fgAnimationsDisabled ? '' : ( // fade edges
'mask-image: linear-gradient('
+ 'to right, transparent, black 20%, black 89%, transparent) ;'
+ '-webkit-mask-image: linear-gradient('
+ 'to right, transparent, black 20%, black 89%, transparent)' )}}`
+ '#about-settings-entry > span > div {'
+ `text-wrap: nowrap ; ${
config.fgAnimationsDisabled ? '' : 'animation: ticker linear 75s infinite' }}`
+ '@keyframes ticker { 0% { transform: translateX(100%) } 100% { transform: translateX(-2000%) }}'
+ `.about-em { color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'green' } !important }`
)
},
update: {
width: 489,
available() {
// Show modal
const updateAvailModal = modals.alert(`ð ${app.msgs.alert_updateAvail}!`, // title
`${app.msgs.alert_newerVer} ${app.name} ` // msg
+ `(v${app.latestVer}) ${app.msgs.alert_isAvail}! `
+ '${app.msgs.link_viewChanges}`,
function update() { // button
modals.safeWinOpen(`${app.urls.update.gm}?t=${Date.now()}`)
}, '', modals.update.width
)
// Localize button labels if needed
if (!env.browser.language.startsWith('en')) {
const updateBtns = updateAvailModal.querySelectorAll('button')
updateBtns[1].textContent = app.msgs.btnLabel_update
updateBtns[0].textContent = app.msgs.btnLabel_dismiss
}
return updateAvailModal
},
unavailable() {
return modals.alert(`${app.msgs.alert_upToDate}!`, // title
`${app.name} (v${app.version}) ${app.msgs.alert_isUpToDate}!`, // msg
'', '', modals.update.width
)
}
}
}
// Run MAIN routine
menus.toolbar.register()
// Init UI props
env.ui = { app: { scheme: config.scheme || ui.getScheme() }, site: { scheme: ui.getScheme() }}
// Create/ID/classify/listenerize/stylize APP container
app.div = dom.create.elem('div', { id: app.slug, class: 'fade-in snippet' })
themes.apply(config.theme) ; ui.addListeners.appDiv()
;['anchored', 'expanded', 'sticky', 'wider'].forEach(mode =>
(config[mode] || config[`${mode}Sidebar`]) && app.div.classList.add(mode))
update.appStyle()
;['rpg', 'rpw'].forEach(cssType => // rising particles
document.head.append(dom.create.style(GM_getResourceText(`${cssType}CSS`))))
// Hide GF alert on GitHub if found
if (location.host == 'github.com') {
const gfAlert = [...document.querySelectorAll('.markdown-alert')]
.find(alert => alert.textContent.includes('Greasy Fork'))
return !gfAlert ? undefined : gfAlert.style.display = 'none'
}
// APPEND to Brave
app.parentDivSelector = env.browser.isMobile ? '#results' : '.sidebar'
app.parentDiv = await new Promise(resolve => {
const appDivParent = document.querySelector(app.parentDivSelector)
if (appDivParent) resolve(appDivParent)
else new MutationObserver((_, obs) => {
const appDivParent = document.querySelector(app.parentDivSelector)
if (appDivParent) { obs.disconnect() ; resolve(appDivParent) }
}).observe(document.body, { childList: true, subtree: true })
})
setTimeout(() => {
app.parentDiv.prepend(app.div) ; ui.visibilizeOverflow()
setTimeout(() => app.div.classList.add('active'), 100) // fade in
}, env.scriptManager.name == 'Violentmonkey' ?
1000 : 0) // delay in VM to avoid mutation bug https://github.com/KudoAI/bravegpt/issues/123
// Init footer CTA to share feedback
const braveClassList = 'feedback svelte-8js1iq'
app.footerContent = dom.create.anchor('#', app.msgs.link_shareFeedback, { target: '_self', class: braveClassList })
app.footerContent.onclick = () => modals.open('feedback')
// REFERRALIZE links to support author
setTimeout(() => document.querySelectorAll('a[href^="https://www.amazon."]').forEach(anchor => {
const url = new URL(anchor.href) ; url.searchParams.set('tag', 'kudo-ai-20')
anchor.href = url.toString()
}), 1500)
// AUTO-GEN reply or show STANDBY mode
app.msgChain = [] ; const searchQuery = new URL(location.href).searchParams.get('q')
if (!config.autoGetDisabled || config.autoSummarize // Auto-Gen on
|| (config.prefixEnabled || config.suffixEnabled) // or Manual-Gen on
&& [config.prefixEnabled && location.href.includes('q=%2F'), // prefix required/present
config.suffixEnabled // suffix required/present
&& /q=.*?(?:%3F|ï¼|%EF%BC%9F)(?:&|$)/.test(location.href)
].filter(Boolean).length == (config.prefixEnabled + config.suffixEnabled) // validate both Manual-Gen modes
) { // auto-gen reply
app.msgChain.push({
time: Date.now(), role: 'user',
content: config.autoSummarize ? prompts.create('summarizeResults') : searchQuery
})
get.reply({ msgs: app.msgChain, src: 'query' })
} else { // show Standby mode
show.reply({ standby: true })
if (!config.rqDisabled)
get.related(searchQuery)
.then(queries => show.related(queries))
.catch(err => { log.error(err.message) ; api.tryNew(get.related) })
}
saveAppDiv() // to fight Brave Svelte mutations
// Monitor SCHEME PREF changes to update app scheme if auto-scheme mode
new MutationObserver(handleSchemePrefChange).observe( // class changes from Brave Search theme settings
document.documentElement, { attributes: true, attributeFilter: ['class'] })
window.matchMedia('(prefers-color-scheme: dark)').addEventListener( // for browser/system scheme pref changes
'change', () => requestAnimationFrame(handleSchemePrefChange))
function handleSchemePrefChange() {
if (config.scheme) return // since light/dark hard-set
const displayedScheme = ui.getScheme()
if (env.ui.app.scheme != displayedScheme) update.scheme(displayedScheme)
}
// Observe DOM for need to re-insert app div
new MutationObserver((_, obs) => {
if (!document.getElementById(app.slug)) { restoreAppDiv() ; obs.disconnect() }
}).observe(document.body, { subtree: true, childList: true })
function saveAppDiv() { if (restoreAppDiv.restored) return ; saveAppDiv.html = app.div.innerHTML }
function restoreAppDiv() {
log.caller = 'restoreAppDiv()'
log.debug(`Restoring ${app.name} from mutation...`)
app.div = dom.create.elem('div', { id: app.slug, class: 'fade-in active snippet' }) ; ui.addListeners.appDiv()
;['anchored', 'expanded', 'sticky', 'wider'].forEach(mode =>
(config[mode] || config[`${mode}Sidebar`]) && app.div.classList.add(mode))
app.div.innerHTML = saveAppDiv.html
if (app.div.querySelector(`.${app.slug}-header-btn`)) ui.addListeners.btns.appHeader()
app.div.querySelectorAll(`.${app.slug}-standby-btn`).forEach((btn, idx) =>
btn.onclick = show.reply[`${['query', 'summarize'][idx]}BtnClickHandler`])
show.codeCornerBtns()
if (app.div.querySelector(`.${app.slug}-chatbar-btn`)) ui.addListeners.replySection()
document.querySelector(app.parentDivSelector).prepend(app.div) ; ui.visibilizeOverflow()
restoreAppDiv.restored = true
}
})()
What technologies does gm.bravegpt.com use?
These are the technologies used at gm.bravegpt.com. gm.bravegpt.com has a total of 7 technologies installed in 4 different categories.gm.bravegpt.com Traffic Analysis
There's no enough data about gm.bravegpt.com traffic.- Daily Unique Visitors:
- n/a
- Monthly Visits:
- n/a
- Pages per Visit:
- n/a
- Daily Pageviews:
- n/a
- Avg. visit duration:
- n/a
- Bounce rate:
- n/a
- Global Reach:
- n/a
- HypeRank:
- n/a
This can take up to 60 seconds. Please wait...
▼
SEMrush is a complete on line advertising and marketing platform that gives a extensive variety of gear and functions to help companies and entrepreneurs in enhancing their on line visibility and optimizing their virtual advertising and marketing strategies.- Domain:
- gm.bravegpt.com
- Rank:
(Rank based on keywords, cost and organic traffic) - n/a
- Organic Keywords:
(Number of keywords in top 20 Google SERP) - 0
- Organic Traffic:
(Number of visitors coming from top 20 search results) - 0
- Organic Cost:
((How much need to spend if get same number of visitors from Google Adwords) - $0.00
Ad Experience Report ▼
Summary of the ad experience rating of a website for a specific platform.Mobile summary
- Root domain:
- bravegpt.com
- Ad filtering:
(Chrome is not filtering ads on your site.) - Off
- Status:
(The status of the site that is reviewed for the Better Ads Standards.) - Not reviewed
Desktop summary
- Root domain:
- bravegpt.com
- Ad filtering:
(Chrome is not filtering ads on your site.) - Off
- Status:
(The status of the site that is reviewed for the Better Ads Standards.) - Not reviewed
Abusive Experience Report ▼
Summary of the abusive experience rating of a website.- Root domain:
- bravegpt.com
- Enforcement:
(Chrome is not preventing your site from opening new windows or tabs.) - Off
- Status:
(The status of the site reviewed for the abusive experiences.) - Not reviewed
Where is gm.bravegpt.com hosted? ▼
Gm.bravegpt.com may be hosted in multiple data centers distributed in different locations around the world. This is probably just one of them.- Server IP:
- 2606:4700:3036::6815:4776, 172.67.144.204
- ASN:
- AS13335
- ISP:
- Cloudflare Inc
- Server Location:
United States, US
Other sites hosted on 172.67.144.204
How fast does gm.bravegpt.com load? ▼
The average loading time of gm.bravegpt.com is 195 ms.- Average Load Time:
- 195 ms
Does gm.bravegpt.com use compression? ▼
Website compression is the process of reducing the size of website files, such as HTML, CSS, JavaScript, and image files, to improve website performance and load times. Compressing website files can significantly reduce the amount of data that needs to be transferred from the server to the user's browser, resulting in faster page load times and improved user experience. Files on gm.bravegpt.com are reduced by 75%.Compressed size: 45.57 KB
File reduced by: 138.44 KB (75%)
Google Safe Browsing ▼
Google Safe Browsing is a service provided by Google that helps protect users from visiting websites that may contain malicious or harmful content, such as malware, phishing attempts, or deceptive software.SSL Checker - SSL Certificate Verify ▼
An SSL (Secure Sockets Layer) certificate is a digital certificate that establishes a secure encrypted connection between a web server and a user's web browser. It provides authentication and encryption, ensuring that data transmitted between the server and the browser remains private and protected. gm.bravegpt.com supports HTTPS.Verifying SSL Support. Please wait...
Organization:
Location:
Issuer: Sectigo RSA Domain Validation Secure Server CA
Valid from: Mar 7 00:00:00 2025 GMT
Valid until: Mar 7 23:59:59 2026 GMT
Authority: CA:FALSE
Keysize: 2048 Bits
Organization: Sectigo Limited
Location: Salford, Greater Manchester, GB
Issuer: USERTrust RSA Certification Authority
Valid from: Nov 2 00:00:00 2018 GMT
Valid until: Dec 31 23:59:59 2030 GMT
Authority: CA:TRUE
Keysize: 2048 Bits
Organization: The USERTRUST Network
Location: Jersey City, New Jersey, US
Issuer: AAA Certificate Services
Valid from: Mar 12 00:00:00 2019 GMT
Valid until: Dec 31 23:59:59 2028 GMT
Authority: CA:TRUE
Keysize: 4096 Bits
Verify HTTP/2 Support ▼
HTTP/2 (Hypertext Transfer Protocol version 2) is a major revision of the HTTP protocol, which is the foundation of data communication on the World Wide Web. It was developed as an improvement over the previous HTTP/1.1 version to enhance web performance and efficiency.Verifying HTTP/2.0 Support. Please wait...
Http Header ▼
HTTP headers are extra portions of records despatched among a consumer (which include an internet browser) and a server at some stage in an HTTP request or response. They offer instructions, metadata, or manipulate parameters for the conversation among the consumer and server.date: Mon, 23 Jun 2025 03:45:21 GMT
location: https://github.com/KudoAI/bravegpt/raw/refs/heads/main/greasemonkey/bravegpt.user.js
vary: accept-encoding
report-to: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=T%2FPhcl2crATVH%2B123ac91CIDsMlYPOqNzCuFNX4iNWC6ddC0UqS5dtv1tJTuPQOUQ4812Rv5FcS9B%2BtWBz%2Fc02K0EgyK0Na0CpRY3YOxNVcXtZDWv9X3wbT6DA%3D%3D"}]}
nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
server: cloudflare
cf-ray: 9540fe002edc37ca-FRA
HTTP/2 302
date: Mon, 23 Jun 2025 03:45:21 GMT
content-type: text/html; charset=utf-8
content-length: 0
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
access-control-allow-origin:
location: https://raw.githubusercontent.com/KudoAI/bravegpt/refs/heads/main/greasemonkey/bravegpt.user.js
cache-control: no-cache
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
x-github-request-id: A0B2:384614:DEAE867:E5DBBC8:6858CDD1
HTTP/2 200
cache-control: max-age=300
content-security-policy: default-src 'none'; style-src 'unsafe-inline'; sandbox
content-type: text/plain; charset=utf-8
etag: W/"2a5f8764c4d5f2f76a3999918098419fd03c871d299dc2718770abd3ef4b3a36"
strict-transport-security: max-age=31536000
x-content-type-options: nosniff
x-frame-options: deny
x-xss-protection: 1; mode=block
x-github-request-id: 60CF:38479C:2ABBB33:30677CD:6858CDCE
content-encoding: gzip
via: 1.1 varnish, 1.1 varnish
expires: Mon, 23 Jun 2025 03:50:22 GMT
accept-ranges: bytes
date: Mon, 23 Jun 2025 03:45:22 GMT
x-served-by: cache-fra-etou8220032-FRA, cache-fra-eddf8230166-FRA
x-cache: MISS, MISS
x-cache-hits: 0, 0
x-timer: S1750650322.002100,VS0,VE107
vary: Authorization,Accept-Encoding
access-control-allow-origin: *
cross-origin-resource-policy: cross-origin
x-fastly-request-id: 7aca59aef11099ea5d950a95f53b969db888af4b
source-age: 0
content-length: 46665
DNS Lookup ▼
DNS entries (Domain Name System) are a critical component of the Internet infrastructure. They act as directories that translate human-readable domain names (such as example.com) to machine-readable IP addresses. DNS records are stored on DNS servers and help forward internet traffic efficiently.| Type | Ip | Target/Txt | TTL |
| A | 104.21.71.118 | 296 | |
| A | 172.67.144.204 | 296 | |
| AAAA | 2606:4700:3032::ac43:90cc | 296 | |
| AAAA | 2606:4700:3036::6815:4776 | 296 |