diff --git a/.gitignore b/.gitignore index 8bf0af1d..f0764af7 100644 --- a/.gitignore +++ b/.gitignore @@ -18,4 +18,7 @@ betterseqtaplus-safari/ .million/ .vscode/ -**/.DS_Store \ No newline at end of file +**/.DS_Store + +# Electron +electron-dist/ \ No newline at end of file diff --git a/electron/index.html b/electron/index.html new file mode 100644 index 00000000..9c89ecbc --- /dev/null +++ b/electron/index.html @@ -0,0 +1,88 @@ + + + + BetterSEQTA Settings + + + +
+

BetterSEQTA Settings

+
+ + + +
+
+ + + + \ No newline at end of file diff --git a/electron/main.js b/electron/main.js new file mode 100644 index 00000000..74ce1f79 --- /dev/null +++ b/electron/main.js @@ -0,0 +1,207 @@ +import { app, BrowserWindow, ipcMain, session } from 'electron'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import Store from 'electron-store'; + +// Fix for __dirname in ES modules +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const store = new Store(); +let mainWindow = null; +let settingsWindow = null; + +// CSS to inject +const customCSS = ` +#alertBar { + display: none !important; +} +`; + +// Get the correct path for the extension based on whether we're in development or production +function getExtensionPath() { + if (app.isPackaged) { + // In production, the extension is in the resources directory + return path.join(process.resourcesPath, 'chrome-extension'); + } else { + // In development, the extension is in the dist directory + return path.join(__dirname, '..', 'dist', 'chrome'); + } +} + +// Load the Chrome extension +async function loadExtension() { + try { + const extensionPath = getExtensionPath(); + console.log('Loading extension from:', extensionPath); + + await session.defaultSession.loadExtension(extensionPath, { + allowFileAccess: true + }); + console.log('Extension loaded successfully!'); + } catch (err) { + console.error('Failed to load extension:', err); + } +} + +function createMainWindow() { + mainWindow = new BrowserWindow({ + width: 1200, + height: 800, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + // Performance optimizations + backgroundThrottling: false, + enableWebSQL: false, + webgl: false, + offscreen: false + }, + // Performance optimizations + show: false, // Don't show until ready + backgroundColor: '#ffffff' + }); + + const seqtaUrl = store.get('seqtaUrl'); + + // Optimize page loading + mainWindow.webContents.setWindowOpenHandler(({ url }) => { + // Open external links in browser instead of new electron window + if (url.startsWith('http')) { + require('electron').shell.openExternal(url); + return { action: 'deny' }; + } + return { action: 'allow' }; + }); + + // Inject CSS when the page loads + mainWindow.webContents.on('did-finish-load', () => { + mainWindow.webContents.insertCSS(customCSS).catch(err => { + console.error('Failed to inject CSS:', err); + }); + }); + + // Only show window when it's ready + mainWindow.once('ready-to-show', () => { + mainWindow.show(); + mainWindow.focus(); + }); + + if (seqtaUrl) { + mainWindow.loadURL(seqtaUrl, { + // Performance optimizations for page loading + httpReferrer: seqtaUrl, + userAgent: 'Chrome', + cache: 'force-cache' + }).then(() => { + // Re-inject CSS after URL change + mainWindow.webContents.insertCSS(customCSS).catch(err => { + console.error('Failed to inject CSS after URL change:', err); + }); + }); + } else { + createSettingsWindow(); + } + + // Optimize memory usage + mainWindow.on('minimize', () => { + if (process.platform === 'darwin') return; // Skip for macOS + mainWindow.webContents.setBackgroundThrottling(true); + }); + + mainWindow.on('restore', () => { + mainWindow.webContents.setBackgroundThrottling(false); + }); + + // Only enable DevTools in development + if (process.env.NODE_ENV === 'development') { + mainWindow.webContents.openDevTools(); + } +} + +function createSettingsWindow() { + if (settingsWindow) { + settingsWindow.focus(); + return; + } + + settingsWindow = new BrowserWindow({ + width: 600, + height: 400, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + // Performance optimizations + backgroundThrottling: false, + enableWebSQL: false, + webgl: false + }, + show: false, + backgroundColor: '#ffffff' + }); + + const settingsPath = path.join(__dirname, 'index.html'); + settingsWindow.loadFile(settingsPath); + + settingsWindow.once('ready-to-show', () => { + settingsWindow.show(); + settingsWindow.focus(); + }); + + // Only enable DevTools in development + if (process.env.NODE_ENV === 'development') { + settingsWindow.webContents.openDevTools(); + } + + settingsWindow.on('closed', () => { + settingsWindow = null; + }); +} + +// Performance optimization: Disable hardware acceleration if running on low-end device +if (process.platform !== 'darwin') { // Skip for macOS + app.disableHardwareAcceleration(); +} + +// Performance optimization: Disable smooth scrolling +app.commandLine.appendSwitch('disable-smooth-scrolling'); + +// Wait for app to be ready before creating windows +app.whenReady().then(async () => { + await loadExtension(); + createMainWindow(); +}); + +// Performance optimization: Quit immediately instead of gracefully +app.on('window-all-closed', () => { + app.quit(); +}); + +app.on('activate', () => { + if (BrowserWindow.getAllWindows().length === 0) { + createMainWindow(); + } +}); + +// Handle setting the SEQTA URL +ipcMain.on('set-seqta-url', (event, url) => { + console.log('Setting SEQTA URL:', url); + store.set('seqtaUrl', url); + if (mainWindow) { + mainWindow.loadURL(url, { + httpReferrer: url, + userAgent: 'Chrome', + cache: 'force-cache' + }).then(() => { + // Re-inject CSS after URL change + mainWindow.webContents.insertCSS(customCSS).catch(err => { + console.error('Failed to inject CSS after URL change:', err); + }); + }); + } else { + createMainWindow(); + } + if (settingsWindow) { + settingsWindow.close(); + } +}); \ No newline at end of file diff --git a/package.json b/package.json index bb28e191..1f6f2631 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "3.4.2", "type": "module", "description": "Enhance SEQTA Learn's usability and aesthetics! A fork of BetterSEQTA to continue development, while incorporating a plethora of new and improved features!", + "main": "electron/main.js", "browserslist": "> 0.5%, last 2 versions, not dead", "scripts": { "dev": "cross-env MODE=chrome vite dev", @@ -14,7 +15,11 @@ "convert:safari": "xcrun safari-web-extension-converter dist/safari --project-location . --app-name $npm_package_name-safari", "release": "gh release create $npm_package_name@$npm_package_version ./dist/*.zip --generate-notes", "publish": "bun lib/publish.js --b", - "zip": "bedframe zip" + "zip": "bedframe zip", + "electron-dev": "npm run build:chrome && electron .", + "electron-build": "electron-builder", + "electron-pack": "npm run build:chrome && electron-builder --dir", + "electron-dist": "npm run build:chrome && electron-builder" }, "targets": { "prod": { @@ -37,6 +42,8 @@ "@types/mime-types": "^2.1.4", "@vitejs/plugin-react-swc": "^3.7.0", "cross-env": "^7.0.3", + "electron": "^33.2.1", + "electron-builder": "^25.1.8", "eslint": "^8.57.0", "glob": "^11.0.0", "mime-types": "^2.1.35", @@ -74,6 +81,7 @@ "codemirror": "^6.0.1", "color": "^4.2.3", "dompurify": "^3.1.6", + "electron-store": "^10.0.0", "embla-carousel-autoplay": "^8.3.1", "embla-carousel-svelte": "^8.3.1", "fuse.js": "^7.0.0", @@ -95,5 +103,48 @@ "uuid": "^9.0.1", "vite": "^5.4.4", "webextension-polyfill": "^0.10.0" + }, + "build": { + "appId": "com.betterseqta.app", + "productName": "BetterSEQTA", + "directories": { + "output": "electron-dist", + "buildResources": "build" + }, + "files": [ + "dist/**/*", + "electron/**/*", + "!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}", + "!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}", + "!**/node_modules/*.d.ts", + "!**/node_modules/.bin", + "!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}", + "!.editorconfig", + "!**/._*", + "!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}", + "!**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}", + "!**/{appveyor.yml,.travis.yml,circle.yml}", + "!**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}" + ], + "extraResources": [ + { + "from": "dist/chrome", + "to": "chrome-extension", + "filter": ["**/*"] + } + ], + "mac": { + "category": "public.app-category.education", + "target": ["dmg", "zip"], + "icon": "build/icon.icns" + }, + "win": { + "target": "nsis", + "icon": "build/icon.ico" + }, + "linux": { + "target": "AppImage", + "icon": "build/icon.png" + } } } diff --git a/src/SEQTA.ts b/src/SEQTA.ts index aa853af3..9a7117d5 100644 --- a/src/SEQTA.ts +++ b/src/SEQTA.ts @@ -1019,9 +1019,11 @@ export async function ObserveMenuItemPosition() { }); } -function main() { +async function main() { if (typeof settingsState.onoff === 'undefined') { browser.runtime.sendMessage({ type: 'setDefaultStorage' }) + + await delay(10) } const handleDisabled = () => { diff --git a/text b/text deleted file mode 100644 index 93c1b7e9..00000000 --- a/text +++ /dev/null @@ -1,402 +0,0 @@ -https://sethburkart123.github.io/sf-pro-https://sethburkart123.github.io/sf-pro-fonts/fonts/ - -/* ------------------------------------------------------------------------- - * SF Pro Display - * ------------------------------------------------------------------------- */ - -@font-face { - font-family: 'SF Pro Display'; - font-style: normal; - font-weight: 100; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-ultralight.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-ultralight.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-ultralight.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: normal; - font-weight: 200; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-thin.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-thin.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-thin.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: normal; - font-weight: 300; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-light.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-light.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-light.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: normal; - font-weight: 400; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-regular.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-regular.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-regular.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: normal; - font-weight: 500; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-medium.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-medium.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-medium.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: normal; - font-weight: 600; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-semibold.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-semibold.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-semibold.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: normal; - font-weight: 700; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-bold.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-bold.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-bold.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: normal; - font-weight: 800; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-heavy.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-heavy.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-heavy.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: normal; - font-weight: 900; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-black.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-black.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-black.ttf') format('truetype'); -} - - - -/* ------------------------------------------------------------------------- - * SF Pro Display Italic - * ------------------------------------------------------------------------- */ - -@font-face { - font-family: 'SF Pro Display'; - font-style: italic; - font-weight: 100; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-ultralightitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-ultralightitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-ultralightitalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: italic; - font-weight: 200; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-thinitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-thinitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-thinitalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: italic; - font-weight: 300; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-lightitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-lightitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-lightitalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: italic; - font-weight: 400; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-regularitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-regularitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-regularitalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: italic; - font-weight: 500; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-mediumitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-mediumitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-mediumitalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: italic; - font-weight: 600; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-semibolditalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-semibolditalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-semibolditalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: italic; - font-weight: 700; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-bolditalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-bolditalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-bolditalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: italic; - font-weight: 800; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-heavyitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-heavyitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-heavyitalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Display'; - font-style: italic; - font-weight: 900; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-blackitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-blackitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-display-blackitalic.ttf') format('truetype'); -} - - - -/* ------------------------------------------------------------------------- - * SF Pro Text - * ------------------------------------------------------------------------- */ - -@font-face { - font-family: 'SF Pro Text'; - font-style: regular; - font-weight: 300; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-light.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-light.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-light.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Text'; - font-style: regular; - font-weight: 400; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-regular.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-regular.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-regular.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Text'; - font-style: regular; - font-weight: 500; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-medium.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-medium.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-medium.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Text'; - font-style: regular; - font-weight: 600; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-semibold.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-semibold.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-semibold.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Text'; - font-style: regular; - font-weight: 700; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-bold.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-bold.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-bold.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Text'; - font-style: regular; - font-weight: 800; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-heavy.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-heavy.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-heavy.ttf') format('truetype'); -} - - - -/* ------------------------------------------------------------------------- - * SF Pro Text Italic - * ------------------------------------------------------------------------- */ - -@font-face { - font-family: 'SF Pro Text'; - font-style: italic; - font-weight: 300; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-lightitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-lightitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-lightitalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Text'; - font-style: italic; - font-weight: 400; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-regularitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-regularitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-regularitalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Text'; - font-style: italic; - font-weight: 500; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-mediumitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-mediumitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-mediumitalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Text'; - font-style: italic; - font-weight: 600; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-semibolditalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-semibolditalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-semibolditalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Text'; - font-style: italic; - font-weight: 700; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-bolditalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-bolditalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-bolditalic.ttf') format('truetype'); -} - -@font-face { - font-family: 'SF Pro Text'; - font-style: italic; - font-weight: 800; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-heavyitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-heavyitalic.woff') format('woff'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sf-pro-text-heavyitalic.ttf') format('truetype'); -} - - - - -/* ------------------------------------------------------------------------- - * SF Mono - * ------------------------------------------------------------------------- */ - -@font-face { - font-family: 'SF Mono'; - font-style: regular; - font-weight: 300; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-light.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-light.woff') format('woff'); -} - -@font-face { - font-family: 'SF Mono'; - font-style: regular; - font-weight: 400; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-regular.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-regular.woff') format('woff'); -} - -@font-face { - font-family: 'SF Mono'; - font-style: regular; - font-weight: 500; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-medium.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-medium.woff') format('woff'); -} - -@font-face { - font-family: 'SF Mono'; - font-style: regular; - font-weight: 600; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-semibold.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-semibold.woff') format('woff'); -} - -@font-face { - font-family: 'SF Mono'; - font-style: regular; - font-weight: 700; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-bold.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-bold.woff') format('woff'); -} - -@font-face { - font-family: 'SF Mono'; - font-style: regular; - font-weight: 800; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-heavy.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-heavy.woff') format('woff'); -} - - - -/* ------------------------------------------------------------------------- - * SF Pro Text Italic - * ------------------------------------------------------------------------- */ - -@font-face { - font-family: 'SF Mono'; - font-style: italic; - font-weight: 300; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-lightitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-lightitalic.woff') format('woff'); -} - -@font-face { - font-family: 'SF Mono'; - font-style: italic; - font-weight: 400; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-regularitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-regularitalic.woff') format('woff'); -} - -@font-face { - font-family: 'SF Mono'; - font-style: italic; - font-weight: 500; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-mediumitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-mediumitalic.woff') format('woff'); -} - -@font-face { - font-family: 'SF Mono'; - font-style: italic; - font-weight: 600; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-semibolditalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-semibolditalic.woff') format('woff'); -} - -@font-face { - font-family: 'SF Mono'; - font-style: italic; - font-weight: 700; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-bolditalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-bolditalic.woff') format('woff'); -} - -@font-face { - font-family: 'SF Mono'; - font-style: italic; - font-weight: 800; - src: url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-heavyitalic.woff2') format('woff2'), - url('https://sethburkart123.github.io/sf-pro-fonts/fonts/sfmono-heavyitalic.woff') format('woff'); -}