about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/manifest.json2
-rw-r--r--src/pages/components/Button.svelte (renamed from src/pages/src/components/Button.svelte)0
-rw-r--r--src/pages/components/Checkbox.svelte (renamed from src/pages/src/components/Checkbox.svelte)2
-rw-r--r--src/pages/components/Input.svelte (renamed from src/pages/src/components/Input.svelte)0
-rw-r--r--src/pages/components/Label.svelte (renamed from src/pages/src/components/Label.svelte)0
-rw-r--r--src/pages/components/Row.svelte (renamed from src/pages/src/components/Row.svelte)2
-rw-r--r--src/pages/components/RowCheckbox.svelte (renamed from src/pages/src/components/RowCheckbox.svelte)0
-rw-r--r--src/pages/components/RowSelect.svelte (renamed from src/pages/src/components/RowSelect.svelte)0
-rw-r--r--src/pages/components/Select.svelte (renamed from src/pages/src/components/Select.svelte)0
-rw-r--r--src/pages/icons/AboutIcon.svelte (renamed from src/pages/src/icons/AboutIcon.svelte)0
-rw-r--r--src/pages/icons/AddIcon.svelte (renamed from src/pages/src/icons/AddIcon.svelte)0
-rw-r--r--src/pages/icons/CloseIcon.svelte (renamed from src/pages/src/icons/CloseIcon.svelte)0
-rw-r--r--src/pages/icons/CopyIcon.svelte12
-rw-r--r--src/pages/icons/ExportIcon.svelte (renamed from src/pages/src/icons/ExportIcon.svelte)0
-rw-r--r--src/pages/icons/GeneralIcon.svelte (renamed from src/pages/src/icons/GeneralIcon.svelte)0
-rw-r--r--src/pages/icons/ImportIcon.svelte (renamed from src/pages/src/icons/ImportIcon.svelte)0
-rw-r--r--src/pages/icons/PingIcon.svelte (renamed from src/pages/src/icons/PingIcon.svelte)0
-rw-r--r--src/pages/icons/RedirectIcon.svelte10
-rw-r--r--src/pages/icons/RedirectToOriginalIcon.svelte13
-rw-r--r--src/pages/icons/ResetIcon.svelte (renamed from src/pages/src/icons/ResetIcon.svelte)0
-rw-r--r--src/pages/icons/ServicesIcon.svelte (renamed from src/pages/src/icons/ServicesIcon.svelte)0
-rw-r--r--src/pages/icons/SettingsIcon.svelte12
-rw-r--r--src/pages/icons/SwitchInstanceIcon.svelte15
-rw-r--r--src/pages/options/index.html16
-rw-r--r--src/pages/options/init.js45
-rw-r--r--src/pages/options_src/App.svelte (renamed from src/pages/src/App.svelte)1
-rw-r--r--src/pages/options_src/General/Exceptions.svelte (renamed from src/pages/src/General/Exceptions.svelte)12
-rw-r--r--src/pages/options_src/General/General.svelte (renamed from src/pages/src/General/General.svelte)4
-rw-r--r--src/pages/options_src/General/SettingsButtons.svelte (renamed from src/pages/src/General/SettingsButtons.svelte)8
-rw-r--r--src/pages/options_src/Services/FrontendIcon.svelte (renamed from src/pages/src/Services/FrontendIcon.svelte)0
-rw-r--r--src/pages/options_src/Services/Instances.svelte (renamed from src/pages/src/Services/Instances.svelte)14
-rw-r--r--src/pages/options_src/Services/RedirectType.svelte (renamed from src/pages/src/Services/RedirectType.svelte)6
-rw-r--r--src/pages/options_src/Services/ServiceIcon.svelte (renamed from src/pages/src/Services/ServiceIcon.svelte)15
-rw-r--r--src/pages/options_src/Services/Services.svelte (renamed from src/pages/src/Services/Services.svelte)10
-rw-r--r--src/pages/options_src/Sidebar.svelte (renamed from src/pages/src/Sidebar.svelte)6
-rw-r--r--src/pages/options_src/main.js (renamed from src/pages/src/main.js)0
-rw-r--r--src/pages/options_src/stores.js (renamed from src/pages/src/stores.js)0
-rw-r--r--src/pages/popup/index.html17
-rw-r--r--src/pages/popup/popup.js119
-rw-r--r--src/pages/popup/popup.pug53
-rw-r--r--src/pages/popup/style.css65
-rw-r--r--src/pages/popup/switches.pug14
-rw-r--r--src/pages/popup_src/App.svelte114
-rw-r--r--src/pages/popup_src/Buttons.svelte158
-rw-r--r--src/pages/popup_src/components/PopupButton.svelte11
-rw-r--r--src/pages/popup_src/components/Row.svelte13
-rw-r--r--src/pages/popup_src/components/ServiceIcon.svelte40
-rw-r--r--src/pages/popup_src/main.js7
-rw-r--r--src/pages/popup_src/stores.js5
-rw-r--r--src/pages/stylesheets/styles.css365
50 files changed, 489 insertions, 697 deletions
diff --git a/src/manifest.json b/src/manifest.json
index cf763247..4f3ad431 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -27,7 +27,7 @@
   "browser_action": {
     "default_title": "__MSG_extensionName__",
     "browser_style": false,
-    "default_popup": "pages/popup/popup.html",
+    "default_popup": "pages/popup/index.html",
     "default_icon": {
       "16": "assets/images/libredirect-16.png",
       "32": "assets/images/libredirect-32.png",
diff --git a/src/pages/src/components/Button.svelte b/src/pages/components/Button.svelte
index 3405c2ea..3405c2ea 100644
--- a/src/pages/src/components/Button.svelte
+++ b/src/pages/components/Button.svelte
diff --git a/src/pages/src/components/Checkbox.svelte b/src/pages/components/Checkbox.svelte
index f5245045..dbefd7e9 100644
--- a/src/pages/src/components/Checkbox.svelte
+++ b/src/pages/components/Checkbox.svelte
@@ -3,7 +3,7 @@
   export let onChange
 </script>
 
-<input bind:checked on:change={onChange} type="checkbox" />
+<input {...$$restProps} bind:checked on:change={onChange} type="checkbox" />
 
 <style>
   input[type="checkbox"] {
diff --git a/src/pages/src/components/Input.svelte b/src/pages/components/Input.svelte
index d963233c..d963233c 100644
--- a/src/pages/src/components/Input.svelte
+++ b/src/pages/components/Input.svelte
diff --git a/src/pages/src/components/Label.svelte b/src/pages/components/Label.svelte
index 39930cd1..39930cd1 100644
--- a/src/pages/src/components/Label.svelte
+++ b/src/pages/components/Label.svelte
diff --git a/src/pages/src/components/Row.svelte b/src/pages/components/Row.svelte
index 4f23cffa..68b528e3 100644
--- a/src/pages/src/components/Row.svelte
+++ b/src/pages/components/Row.svelte
@@ -1,4 +1,4 @@
-<div {...$$props}>
+<div {...$$props} on:click>
   <slot></slot>
 </div>
 
diff --git a/src/pages/src/components/RowCheckbox.svelte b/src/pages/components/RowCheckbox.svelte
index b7ccab93..b7ccab93 100644
--- a/src/pages/src/components/RowCheckbox.svelte
+++ b/src/pages/components/RowCheckbox.svelte
diff --git a/src/pages/src/components/RowSelect.svelte b/src/pages/components/RowSelect.svelte
index d685803e..d685803e 100644
--- a/src/pages/src/components/RowSelect.svelte
+++ b/src/pages/components/RowSelect.svelte
diff --git a/src/pages/src/components/Select.svelte b/src/pages/components/Select.svelte
index 7829c53e..7829c53e 100644
--- a/src/pages/src/components/Select.svelte
+++ b/src/pages/components/Select.svelte
diff --git a/src/pages/src/icons/AboutIcon.svelte b/src/pages/icons/AboutIcon.svelte
index e113dd68..e113dd68 100644
--- a/src/pages/src/icons/AboutIcon.svelte
+++ b/src/pages/icons/AboutIcon.svelte
diff --git a/src/pages/src/icons/AddIcon.svelte b/src/pages/icons/AddIcon.svelte
index ab26f078..ab26f078 100644
--- a/src/pages/src/icons/AddIcon.svelte
+++ b/src/pages/icons/AddIcon.svelte
diff --git a/src/pages/src/icons/CloseIcon.svelte b/src/pages/icons/CloseIcon.svelte
index ddfb29cb..ddfb29cb 100644
--- a/src/pages/src/icons/CloseIcon.svelte
+++ b/src/pages/icons/CloseIcon.svelte
diff --git a/src/pages/icons/CopyIcon.svelte b/src/pages/icons/CopyIcon.svelte
new file mode 100644
index 00000000..37c13f98
--- /dev/null
+++ b/src/pages/icons/CopyIcon.svelte
@@ -0,0 +1,12 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  height="24px"
+  width="24px"
+  viewBox="0 0 24 24"
+  preserveAspectRatio="xMinYMin meet"
+  fill="currentColor"
+>
+  <path
+    d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"
+  />
+</svg>
diff --git a/src/pages/src/icons/ExportIcon.svelte b/src/pages/icons/ExportIcon.svelte
index 196726a8..196726a8 100644
--- a/src/pages/src/icons/ExportIcon.svelte
+++ b/src/pages/icons/ExportIcon.svelte
diff --git a/src/pages/src/icons/GeneralIcon.svelte b/src/pages/icons/GeneralIcon.svelte
index b9429021..b9429021 100644
--- a/src/pages/src/icons/GeneralIcon.svelte
+++ b/src/pages/icons/GeneralIcon.svelte
diff --git a/src/pages/src/icons/ImportIcon.svelte b/src/pages/icons/ImportIcon.svelte
index f022b4f0..f022b4f0 100644
--- a/src/pages/src/icons/ImportIcon.svelte
+++ b/src/pages/icons/ImportIcon.svelte
diff --git a/src/pages/src/icons/PingIcon.svelte b/src/pages/icons/PingIcon.svelte
index 8fcfe27b..8fcfe27b 100644
--- a/src/pages/src/icons/PingIcon.svelte
+++ b/src/pages/icons/PingIcon.svelte
diff --git a/src/pages/icons/RedirectIcon.svelte b/src/pages/icons/RedirectIcon.svelte
new file mode 100644
index 00000000..9392762a
--- /dev/null
+++ b/src/pages/icons/RedirectIcon.svelte
@@ -0,0 +1,10 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  height="24px"
+  width="24px"
+  viewBox="0 0 24 24"
+  preserveAspectRatio="xMinYMin meet"
+  fill="currentColor"
+>
+  <path d="M7 20v-9q0-.825.588-1.413Q8.175 9 9 9h8.2l-1.6-1.6L17 6l4 4-4 4-1.4-1.4 1.6-1.6H9v9Z" />
+</svg>
diff --git a/src/pages/icons/RedirectToOriginalIcon.svelte b/src/pages/icons/RedirectToOriginalIcon.svelte
new file mode 100644
index 00000000..aad5c48e
--- /dev/null
+++ b/src/pages/icons/RedirectToOriginalIcon.svelte
@@ -0,0 +1,13 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  height="24px"
+  width="24px"
+  viewBox="0 0 24 24"
+  preserveAspectRatio="xMinYMin meet"
+  fill="currentColor"
+>
+  <path
+    d="M 17,20 V 11 Q 17,10.175 16.412,9.587 15.825,9 15,9 H 6.8 L 8.4,7.4 7,6 3,10 7,14 8.4,12.6 6.8,11 H 15 v 9 z"
+    id="path2"
+  />
+</svg>
diff --git a/src/pages/src/icons/ResetIcon.svelte b/src/pages/icons/ResetIcon.svelte
index 0900aef8..0900aef8 100644
--- a/src/pages/src/icons/ResetIcon.svelte
+++ b/src/pages/icons/ResetIcon.svelte
diff --git a/src/pages/src/icons/ServicesIcon.svelte b/src/pages/icons/ServicesIcon.svelte
index ec24259b..ec24259b 100644
--- a/src/pages/src/icons/ServicesIcon.svelte
+++ b/src/pages/icons/ServicesIcon.svelte
diff --git a/src/pages/icons/SettingsIcon.svelte b/src/pages/icons/SettingsIcon.svelte
new file mode 100644
index 00000000..f47d078a
--- /dev/null
+++ b/src/pages/icons/SettingsIcon.svelte
@@ -0,0 +1,12 @@
+<svg
+  xmlns="http://www.w3.org/2000/svg"
+  height="24px"
+  width="24px"
+  viewBox="0 0 24 24"
+  preserveAspectRatio="xMinYMin meet"
+  fill="currentColor"
+>
+  <path
+    d="m9.25 22-.4-3.2q-.325-.125-.612-.3-.288-.175-.563-.375L4.7 19.375l-2.75-4.75 2.575-1.95Q4.5 12.5 4.5 12.337v-.675q0-.162.025-.337L1.95 9.375l2.75-4.75 2.975 1.25q.275-.2.575-.375.3-.175.6-.3l.4-3.2h5.5l.4 3.2q.325.125.613.3.287.175.562.375l2.975-1.25 2.75 4.75-2.575 1.95q.025.175.025.337v.675q0 .163-.05.338l2.575 1.95-2.75 4.75-2.95-1.25q-.275.2-.575.375-.3.175-.6.3l-.4 3.2Zm2.8-6.5q1.45 0 2.475-1.025Q15.55 13.45 15.55 12q0-1.45-1.025-2.475Q13.5 8.5 12.05 8.5q-1.475 0-2.488 1.025Q8.55 10.55 8.55 12q0 1.45 1.012 2.475Q10.575 15.5 12.05 15.5Z"
+  />
+</svg>
diff --git a/src/pages/icons/SwitchInstanceIcon.svelte b/src/pages/icons/SwitchInstanceIcon.svelte
new file mode 100644
index 00000000..6a1f96ac
--- /dev/null
+++ b/src/pages/icons/SwitchInstanceIcon.svelte
@@ -0,0 +1,15 @@
+<svg
+  {...$$restProps}
+  xmlns="http://www.w3.org/2000/svg"
+  height="24px"
+  width="24px"
+  viewBox="0 0 24 24"
+  preserveAspectRatio="xMinYMin meet"
+  fill="currentColor"
+  on:click
+  on:keydown={null}
+>
+  <path
+    d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"
+  />
+</svg>
diff --git a/src/pages/options/index.html b/src/pages/options/index.html
new file mode 100644
index 00000000..c3dcff71
--- /dev/null
+++ b/src/pages/options/index.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+	<meta charset='utf-8'>
+	<meta name='viewport' content='width=device-width,initial-scale=1'>
+	<link rel="icon" type="image/x-icon" href="../../../assets/images/libredirect.svg">
+	<title>Settings</title>
+	<link rel='stylesheet' href='build/bundle.css'>
+	<script defer src='build/bundle.js'></script>
+</head>
+
+<body>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/src/pages/options/init.js b/src/pages/options/init.js
index 07da1859..5a7ffb6e 100644
--- a/src/pages/options/init.js
+++ b/src/pages/options/init.js
@@ -1,51 +1,8 @@
 window.browser = window.browser || window.chrome
-
 import localise from "../../assets/javascripts/localise.js"
-import utils from "../../assets/javascripts/utils.js"
-import servicesHelper from "../../assets/javascripts/services.js"
-
-if (!(await utils.getOptions())) {
-  await servicesHelper.initDefaults()
-}
 
-async function changeTheme() {
-  switch ((await utils.getOptions()).theme) {
-    case "dark":
-      document.body.classList.add("dark-theme")
-      document.body.classList.remove("light-theme")
-      for (const element of document.body.getElementsByClassName("dark")) {
-        element.style.display = "none"
-      }
-      break
-    case "light":
-      document.body.classList.add("light-theme")
-      document.body.classList.remove("dark-theme")
-      for (const element of document.body.getElementsByClassName("light")) {
-        element.style.display = "none"
-      }
-      break
-    default:
-      if (matchMedia("(prefers-color-scheme: light)").matches) {
-        document.body.classList.add("light-theme")
-        document.body.classList.remove("dark-theme")
-        for (const element of document.body.getElementsByClassName("light")) {
-          element.style.display = "none"
-        }
-      } else {
-        document.body.classList.add("dark-theme")
-        document.body.classList.remove("light-theme")
-        for (const element of document.body.getElementsByClassName("dark")) {
-          element.style.display = "none"
-        }
-      }
-  }
-}
-
-changeTheme()
 if (["ar", "iw", "ku", "fa", "ur"].includes(browser.i18n.getUILanguage())) {
   document.getElementsByTagName("body")[0].classList.add("rtl")
   document.getElementsByTagName("body")[0].dir = "rtl"
 }
-localise.localisePage()
-
-window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", changeTheme)
+localise.localisePage()
\ No newline at end of file
diff --git a/src/pages/src/App.svelte b/src/pages/options_src/App.svelte
index c96d72df..6bbacb9b 100644
--- a/src/pages/src/App.svelte
+++ b/src/pages/options_src/App.svelte
@@ -93,6 +93,7 @@
 {/if}
 
 <style>
+ 
   :global(body) {
     width: 100vw;
     height: 100vh;
diff --git a/src/pages/src/General/Exceptions.svelte b/src/pages/options_src/General/Exceptions.svelte
index e43afaf6..4ef5591b 100644
--- a/src/pages/src/General/Exceptions.svelte
+++ b/src/pages/options_src/General/Exceptions.svelte
@@ -1,10 +1,10 @@
 <script>
-  import Row from "../components/Row.svelte"
-  import Select from "../components/Select.svelte"
-  import AddIcon from "../icons/AddIcon.svelte"
-  import CloseIcon from "../icons/CloseIcon.svelte"
-  import Input from "../components/Input.svelte"
-  import Label from "../components/Label.svelte"
+  import Row from "../../components/Row.svelte"
+  import Select from "../../components/Select.svelte"
+  import AddIcon from "../../icons/AddIcon.svelte"
+  import CloseIcon from "../../icons/CloseIcon.svelte"
+  import Input from "../../components/Input.svelte"
+  import Label from "../../components/Label.svelte"
   import { options, config } from "../stores"
   import { onDestroy } from "svelte"
 
diff --git a/src/pages/src/General/General.svelte b/src/pages/options_src/General/General.svelte
index 1a5e8329..d5b2dd59 100644
--- a/src/pages/src/General/General.svelte
+++ b/src/pages/options_src/General/General.svelte
@@ -3,8 +3,8 @@
 
   import Exceptions from "./Exceptions.svelte"
   import SettingsButtons from "./SettingsButtons.svelte"
-  import RowSelect from "../components/RowSelect.svelte"
-  import Checkbox from "../components/RowCheckbox.svelte"
+  import RowSelect from "../../components/RowSelect.svelte"
+  import Checkbox from "../../components/RowCheckbox.svelte"
   import { options } from "../stores"
   import { onDestroy } from "svelte"
 
diff --git a/src/pages/src/General/SettingsButtons.svelte b/src/pages/options_src/General/SettingsButtons.svelte
index 89d5e95d..c37a3702 100644
--- a/src/pages/src/General/SettingsButtons.svelte
+++ b/src/pages/options_src/General/SettingsButtons.svelte
@@ -2,10 +2,10 @@
   let browser = window.browser || window.chrome
 
   import { onDestroy } from "svelte"
-  import Button from "../components/Button.svelte"
-  import ExportIcon from "../icons/ExportIcon.svelte"
-  import ImportIcon from "../icons/ImportIcon.svelte"
-  import ResetIcon from "../icons/ResetIcon.svelte"
+  import Button from "../../components/Button.svelte"
+  import ExportIcon from "../../icons/ExportIcon.svelte"
+  import ImportIcon from "../../icons/ImportIcon.svelte"
+  import ResetIcon from "../../icons/ResetIcon.svelte"
   import { options } from "../stores"
   import servicesHelper from "../../../assets/javascripts/services.js"
   import utils from "../../../assets/javascripts/utils.js"
diff --git a/src/pages/src/Services/FrontendIcon.svelte b/src/pages/options_src/Services/FrontendIcon.svelte
index 24942fd6..24942fd6 100644
--- a/src/pages/src/Services/FrontendIcon.svelte
+++ b/src/pages/options_src/Services/FrontendIcon.svelte
diff --git a/src/pages/src/Services/Instances.svelte b/src/pages/options_src/Services/Instances.svelte
index 39d61f26..892e395b 100644
--- a/src/pages/src/Services/Instances.svelte
+++ b/src/pages/options_src/Services/Instances.svelte
@@ -1,14 +1,14 @@
 <script>
   let browser = window.browser || window.chrome
 
-  import Button from "../components/Button.svelte"
-  import AddIcon from "../icons/AddIcon.svelte"
+  import Button from "../../components/Button.svelte"
+  import AddIcon from "../../icons/AddIcon.svelte"
   import { options, config } from "../stores"
-  import PingIcon from "../icons/PingIcon.svelte"
-  import Row from "../components/Row.svelte"
-  import Input from "../components/Input.svelte"
-  import Label from "../components/Label.svelte"
-  import CloseIcon from "../icons/CloseIcon.svelte"
+  import PingIcon from "../../icons/PingIcon.svelte"
+  import Row from "../../components/Row.svelte"
+  import Input from "../../components/Input.svelte"
+  import Label from "../../components/Label.svelte"
+  import CloseIcon from "../../icons/CloseIcon.svelte"
   import { onDestroy, onMount } from "svelte"
   import utils from "../../../assets/javascripts/utils"
 
diff --git a/src/pages/src/Services/RedirectType.svelte b/src/pages/options_src/Services/RedirectType.svelte
index 16b99083..7f7a2843 100644
--- a/src/pages/src/Services/RedirectType.svelte
+++ b/src/pages/options_src/Services/RedirectType.svelte
@@ -1,11 +1,11 @@
 <script>
   import { onDestroy } from "svelte"
 
-  import RowSelect from "../components/RowSelect.svelte"
+  import RowSelect from "../../components/RowSelect.svelte"
   import SvelteSelect from "svelte-select"
   import { options, config } from "../stores"
-  import Row from "../components/Row.svelte"
-  import Label from "../components/Label.svelte"
+  import Row from "../../components/Row.svelte"
+  import Label from "../../components/Label.svelte"
   import FrontendIcon from "./FrontendIcon.svelte"
 
   let _options
diff --git a/src/pages/src/Services/ServiceIcon.svelte b/src/pages/options_src/Services/ServiceIcon.svelte
index 0779c02b..89393cf6 100644
--- a/src/pages/src/Services/ServiceIcon.svelte
+++ b/src/pages/options_src/Services/ServiceIcon.svelte
@@ -24,14 +24,17 @@
       theme = "light"
     }
   }
+  $: imageType = _config.services[details.value].imageType
 </script>
 
-{#if _config.services[details.value].imageType == "svgMono"}
-  {#if theme == "dark"}
-    <img src={`/assets/images/${details.value}-icon-light.svg`} alt={details.label} />
+{#if imageType}
+  {#if imageType == "svgMono"}
+    {#if theme == "dark"}
+      <img src={`/assets/images/${details.value}-icon-light.svg`} alt={details.label} />
+    {:else}
+      <img src={`/assets/images/${details.value}-icon.svg`} alt={details.label} />
+    {/if}
   {:else}
-    <img src={`/assets/images/${details.value}-icon.svg`} alt={details.label} />
+    <img src={`/assets/images/${details.value}-icon.${imageType}`} alt={details.label} />
   {/if}
-{:else}
-  <img src={`/assets/images/${details.value}-icon.${_config.services[details.value].imageType}`} alt={details.label} />
 {/if}
diff --git a/src/pages/src/Services/Services.svelte b/src/pages/options_src/Services/Services.svelte
index 22a82195..cb1efacb 100644
--- a/src/pages/src/Services/Services.svelte
+++ b/src/pages/options_src/Services/Services.svelte
@@ -1,9 +1,9 @@
 <script>
-  import Checkbox from "../components/RowCheckbox.svelte"
-  import RowSelect from "../components/RowSelect.svelte"
-  import Row from "../components/Row.svelte"
-  import Label from "../components/Label.svelte"
-  import Select from "../components/Select.svelte"
+  import Checkbox from "../../components/RowCheckbox.svelte"
+  import RowSelect from "../../components/RowSelect.svelte"
+  import Row from "../../components/Row.svelte"
+  import Label from "../../components/Label.svelte"
+  import Select from "../../components/Select.svelte"
   import { options, config } from "../stores"
   import RedirectType from "./RedirectType.svelte"
   import { onDestroy } from "svelte"
diff --git a/src/pages/src/Sidebar.svelte b/src/pages/options_src/Sidebar.svelte
index a05ac631..ff44995f 100644
--- a/src/pages/src/Sidebar.svelte
+++ b/src/pages/options_src/Sidebar.svelte
@@ -1,8 +1,8 @@
 <script>
   import { page } from "./stores"
-  import GeneralIcon from "./icons/GeneralIcon.svelte"
-  import ServicesIcon from "./icons/ServicesIcon.svelte"
-  import AboutIcon from "./icons/AboutIcon.svelte"
+  import GeneralIcon from "../icons/GeneralIcon.svelte"
+  import ServicesIcon from "../icons/ServicesIcon.svelte"
+  import AboutIcon from "../icons/AboutIcon.svelte"
 </script>
 
 <div>
diff --git a/src/pages/src/main.js b/src/pages/options_src/main.js
index c4012f4a..c4012f4a 100644
--- a/src/pages/src/main.js
+++ b/src/pages/options_src/main.js
diff --git a/src/pages/src/stores.js b/src/pages/options_src/stores.js
index 782f6064..782f6064 100644
--- a/src/pages/src/stores.js
+++ b/src/pages/options_src/stores.js
diff --git a/src/pages/popup/index.html b/src/pages/popup/index.html
new file mode 100644
index 00000000..5c589bf7
--- /dev/null
+++ b/src/pages/popup/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+	<meta charset='utf-8'>
+	<meta name='viewport' content='width=device-width,initial-scale=1'>
+	<link rel="icon" type="image/x-icon" href="../../../assets/images/libredirect.svg">
+	<title>Settings</title>
+	<link rel='stylesheet' href='build/bundle.css'>
+	<link rel='stylesheet' href='../stylesheets/styles.css'>
+	<script defer src='build/bundle.js'></script>
+</head>
+
+<body>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js
deleted file mode 100644
index 77a43000..00000000
--- a/src/pages/popup/popup.js
+++ /dev/null
@@ -1,119 +0,0 @@
-"use strict"
-window.browser = window.browser || window.chrome
-
-import servicesHelper from "../../assets/javascripts/services.js"
-import utils from "../../assets/javascripts/utils.js"
-
-document.getElementById("more-options").href = browser.runtime.getURL("pages/options/index.html")
-document.getElementById("more-options").setAttribute("target", "_blank")
-
-await browser.runtime.getPlatformInfo(r => {
-  switch (r.os) {
-    case "fuchsia":
-    case "ios":
-    case "android":
-      document.getElementsByTagName("html")[0].classList.add("mobile")
-  }
-})
-
-const allSites = document.getElementById("all_sites")
-const currSite = document.getElementById("current_site")
-const currentSiteDivider = document.getElementById("current_site_divider")
-
-const config = await utils.getConfig()
-const divs = {}
-
-for (const service in config.services) {
-  divs[service] = {}
-
-  divs[service].all = allSites.getElementsByClassName(service)[0]
-  divs[service].current = currSite.getElementsByClassName(service)[0]
-
-  divs[service].all_toggle = allSites.getElementsByClassName(`${service}-enabled`)[0]
-  divs[service].all_toggle.addEventListener("change", async () => {
-    const options = await utils.getOptions()
-    options[service].enabled = divs[service].all_toggle.checked
-    browser.storage.local.set({ options })
-  })
-
-  allSites.getElementsByClassName(`${service}-change_instance`)[0].addEventListener("click", () => {
-    browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
-      if (tabs[0].url) {
-        const url = new URL(tabs[0].url)
-        browser.tabs.update({ url: await servicesHelper.switchInstance(url, service) })
-      }
-    })
-  })
-
-  divs[service].current_toggle = currSite.getElementsByClassName(`${service}-enabled`)[0]
-  divs[service].current_toggle.addEventListener("change", async () => {
-    const options = await utils.getOptions()
-    options[service].enabled = divs[service].current_toggle.checked
-    browser.storage.local.set({ options })
-  })
-
-  currSite.getElementsByClassName(`${service}-change_instance`)[0].addEventListener("click", () => {
-    browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
-      if (tabs[0].url) {
-        const url = new URL(tabs[0].url)
-        browser.tabs.update({ url: await servicesHelper.switchInstance(url, service) })
-      }
-    })
-  })
-}
-
-browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
-  // Set visibility of control buttons
-  if (tabs[0].url) {
-    const hr = document.getElementById("hr")
-    var url = new URL(tabs[0].url)
-    servicesHelper.switchInstance(url).then(r => {
-      if (r) {
-        document.getElementById("change_instance_div").style.display = ""
-        hr.style.display = ""
-        document
-          .getElementById("change_instance")
-          .addEventListener("click", async () => browser.tabs.update({ url: await servicesHelper.switchInstance(url) }))
-      }
-    })
-    servicesHelper.reverse(url).then(r => {
-      if (r) {
-        hr.style.display = ""
-
-        document.getElementById("copy_original_div").style.display = ""
-        document.getElementById("copy_original").addEventListener("click", () => servicesHelper.copyRaw(url))
-
-        document.getElementById("redirect_to_original_div").style.display = ""
-        document
-          .getElementById("redirect_to_original")
-          .addEventListener("click", () => browser.runtime.sendMessage("reverseTab"))
-      }
-    })
-    servicesHelper.redirectAsync(url, "main_frame", null, true).then(r => {
-      if (r) {
-        document.getElementById("redirect_div").style.display = ""
-        hr.style.display = ""
-        document.getElementById("redirect").addEventListener("click", () => browser.runtime.sendMessage("redirectTab"))
-      }
-    })
-  }
-
-  const options = await utils.getOptions()
-
-  // Set visibility of all service buttons
-  for (const service of options.popupServices) {
-    divs[service].all.classList.remove("hide")
-    divs[service].all_toggle.checked = options[service].enabled
-  }
-
-  // Set visibility of current page service button
-  if (url) {
-    const service = await servicesHelper.computeService(url)
-    if (service) {
-      divs[service].all.classList.add("hide")
-      divs[service].current.classList.remove("hide")
-      divs[service].current_toggle.checked = options[service].enabled
-      currentSiteDivider.style.display = ""
-    }
-  }
-})
diff --git a/src/pages/popup/popup.pug b/src/pages/popup/popup.pug
deleted file mode 100644
index ed4c7319..00000000
--- a/src/pages/popup/popup.pug
+++ /dev/null
@@ -1,53 +0,0 @@
-doctype html
-html(lang="en")
-    head
-        meta(charset="UTF-8")
-        meta(name="viewport" content="width=device-width, initial-scale=1.0")
-        link(href="../stylesheets/styles.css" rel="stylesheet")
-        link(href="./style.css" rel="stylesheet")
-    body(dir="auto")
-        div(class="block" id="change_instance_div" style="display: none")
-            button(class="title button bottom-button" id="change_instance")
-                label(data-localise="__MSG_switchInstance__") Switch Instance
-                svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" preserveAspectRatio="xMinYMin meet" fill="currentColor")
-                    path(d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z")
-
-        div(class="block" id="copy_original_div" title="Copy the original redirected link" style="display: none")
-            button(class="title button bottom-button" id="copy_original")
-                label() Copy Original
-                svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" preserveAspectRatio="xMinYMin meet" fill="currentColor")
-                    path(d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z")
-
-        div(class="block" id="redirect_div" style="display: none")
-            button(class="title button bottom-button" id="redirect")
-                label Redirect
-                svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" preserveAspectRatio="xMinYMin meet" fill="currentColor")
-                    path(d="M7 20v-9q0-.825.588-1.413Q8.175 9 9 9h8.2l-1.6-1.6L17 6l4 4-4 4-1.4-1.4 1.6-1.6H9v9Z")
-
-        div(class="block" id="redirect_to_original_div" style="display: none")
-            button(class="title button bottom-button" id="redirect_to_original")
-                label Redirect To Original
-                svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" preserveAspectRatio="xMinYMin meet" fill="currentColor")
-                    path(d="M 17,20 V 11 Q 17,10.175 16.412,9.587 15.825,9 15,9 H 6.8 L 8.4,7.4 7,6 3,10 7,14 8.4,12.6 6.8,11 H 15 v 9 z" id="path2")
-
-        hr(id="hr" style="display: none")
-
-        div(id="current_site")
-            include /src/pages/popup/switches
-            div(id="current_site_divider" style="display: none")
-                hr
-
-        div(id="all_sites")
-            include /src/pages/popup/switches
-
-        hr
-
-        div(class="block")
-            a(class="title button bottom-button" id="more-options")
-                label(data-localise="__MSG_settings__") Settings
-                svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" preserveAspectRatio="xMinYMin meet" fill="currentColor")
-                    path(d="m9.25 22-.4-3.2q-.325-.125-.612-.3-.288-.175-.563-.375L4.7 19.375l-2.75-4.75 2.575-1.95Q4.5 12.5 4.5 12.337v-.675q0-.162.025-.337L1.95 9.375l2.75-4.75 2.975 1.25q.275-.2.575-.375.3-.175.6-.3l.4-3.2h5.5l.4 3.2q.325.125.613.3.287.175.562.375l2.975-1.25 2.75 4.75-2.575 1.95q.025.175.025.337v.675q0 .163-.05.338l2.575 1.95-2.75 4.75-2.95-1.25q-.275.2-.575.375-.3.175-.6.3l-.4 3.2Zm2.8-6.5q1.45 0 2.475-1.025Q15.55 13.45 15.55 12q0-1.45-1.025-2.475Q13.5 8.5 12.05 8.5q-1.475 0-2.488 1.025Q8.55 10.55 8.55 12q0 1.45 1.012 2.475Q10.575 15.5 12.05 15.5Z")
-
-        div(class="space")
-        script(type="module" src="../options/init.js")
-        script(type="module" src="./popup.js")
diff --git a/src/pages/popup/style.css b/src/pages/popup/style.css
deleted file mode 100644
index 41510615..00000000
--- a/src/pages/popup/style.css
+++ /dev/null
@@ -1,65 +0,0 @@
-body {
-  width: 270px;
-  min-height: auto;
-}
-
-html,
-body {
-  margin: 0;
-}
-
-.hide {
-  display: none !important;
-}
-
-.button {
-  display: flex;
-  margin: 0 auto;
-  justify-content: space-between;
-}
-
-.button svg {
-  width: 26px;
-  height: 26px;
-}
-
-.bottom-button {
-  width: 100%;
-}
-
-.space {
-  height: 10px;
-}
-
-input {
-  height: 23px;
-  width: 46px;
-}
-
-div.block label {
-  margin: 0;
-  font-size: 18px;
-  font-weight: bold;
-  max-width: 180px;
-}
-
-div.block label:hover {
-  cursor: pointer;
-}
-
-div.block div {
-  display: flex;
-}
-
-html.mobile body {
-  width: 100%;
-}
-
-html.mobile div.block label {
-  font-size: 24px;
-}
-
-html.mobile .button svg {
-  width: 30px;
-  height: 30px;
-}
diff --git a/src/pages/popup/switches.pug b/src/pages/popup/switches.pug
deleted file mode 100644
index 20ed8c61..00000000
--- a/src/pages/popup/switches.pug
+++ /dev/null
@@ -1,14 +0,0 @@
-each _, service in services    
-    div(class=`${service} block hide`)
-        a(class="title" href=services[service].url)
-            if services[service].imageType == 'svgMono'
-                img(class='dark' src=`/assets/images/${service}-icon.svg`)
-                img(class='light' src=`/assets/images/${service}-icon-light.svg`)
-            else
-                img(src=`/assets/images/${service}-icon.${services[service].imageType}`)
-            label=services[service].name
-        div 
-            input(class=`${service}-enabled` type="checkbox" aria-label=`toggle ${services[service].name}`)
-            button(class=`${service}-change_instance title button` aria-label=`change instance for ${services[service].name}`)
-                svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" preserveAspectRatio="xMinYMin meet" fill="currentColor")
-                    path(d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z")
\ No newline at end of file
diff --git a/src/pages/popup_src/App.svelte b/src/pages/popup_src/App.svelte
new file mode 100644
index 00000000..cf88234d
--- /dev/null
+++ b/src/pages/popup_src/App.svelte
@@ -0,0 +1,114 @@
+<script>
+  let browser = window.browser || window.chrome
+
+  import utils from "../../assets/javascripts/utils.js"
+  import { onDestroy } from "svelte"
+  import servicesHelper from "../../assets/javascripts/services.js"
+  import { onMount } from "svelte"
+  import Buttons from "./Buttons.svelte"
+
+  import { options, config, page } from "./stores"
+
+  let _options
+  const unsubscribeOptions = options.subscribe(val => {
+    if (val) {
+      _options = val
+      browser.storage.local.set({ options: val })
+    }
+  })
+
+  let _config
+  const unsubscribeConfig = config.subscribe(val => (_config = val))
+
+  onDestroy(() => {
+    unsubscribeOptions()
+    unsubscribeConfig()
+  })
+
+  onMount(async () => {
+    let opts = await utils.getOptions()
+    if (!opts) {
+      await servicesHelper.initDefaults()
+      opts = await utils.getOptions()
+    }
+    options.set(opts)
+    config.set(await utils.getConfig())
+  })
+
+  let _page
+  page.subscribe(val => (_page = val))
+
+  const dark = {
+    text: "#fff",
+    bgMain: "#121212",
+    bgSecondary: "#202020",
+    active: "#fbc117",
+    danger: "#f04141",
+    lightGrey: "#c3c3c3",
+  }
+  const light = {
+    text: "black",
+    bgMain: "white",
+    bgSecondary: "#e4e4e4",
+    active: "#fb9817",
+    danger: "#f04141",
+    lightGrey: "#c3c3c3",
+  }
+  let cssVariables
+  $: if (_options) {
+    if (_options.theme == "dark") {
+      cssVariables = dark
+    } else if (_options.theme == "light") {
+      cssVariables = light
+    } else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
+      cssVariables = dark
+    } else {
+      cssVariables = light
+    }
+  }
+</script>
+
+{#if _options && _config}
+  <div
+    class="main"
+    dir="auto"
+    style="
+    --text: {cssVariables.text};
+    --bg-main: {cssVariables.bgMain};
+    --bg-secondary: {cssVariables.bgSecondary};
+    --active: {cssVariables.active};
+    --danger: {cssVariables.danger};
+    --light-grey: {cssVariables.lightGrey};"
+  >
+    <Buttons />
+  </div>
+{:else}
+  <p>Loading...</p>
+{/if}
+
+<style>
+  :global(html, body) {
+    width: 250px;
+    height: min-content;
+    min-height: auto;
+    margin: 0;
+    padding: 0;
+    box-sizing: border-box;
+  }
+
+  :global(body) {
+    margin-top: -20px;
+  }
+
+  div {
+    font-weight: bold;
+    height: 100%;
+    margin: 0;
+    padding: 10px;
+    padding-top: 20px;
+    font-family: "Inter";
+    font-size: 16px;
+    background-color: var(--bg-main);
+    color: var(--text);
+  }
+</style>
diff --git a/src/pages/popup_src/Buttons.svelte b/src/pages/popup_src/Buttons.svelte
new file mode 100644
index 00000000..39208c37
--- /dev/null
+++ b/src/pages/popup_src/Buttons.svelte
@@ -0,0 +1,158 @@
+<script>
+  let browser = window.browser || window.chrome
+
+  import Row from "./components/Row.svelte"
+  import Label from "../components/Label.svelte"
+  import CopyIcon from "../icons/CopyIcon.svelte"
+  import RedirectToOriginalIcon from "../icons/RedirectToOriginalIcon.svelte"
+  import RedirectIcon from "../icons/RedirectIcon.svelte"
+  import SwitchInstanceIcon from "../icons/SwitchInstanceIcon.svelte"
+  import SettingsIcon from "../icons/SettingsIcon.svelte"
+  import { options, config } from "./stores"
+  import ServiceIcon from "./components/ServiceIcon.svelte"
+  import { onDestroy } from "svelte"
+  import servicesHelper from "../../assets/javascripts/services"
+  import Checkbox from "../components/Checkbox.svelte"
+
+  let _options
+  let _config
+
+  const unsubscribeOptions = options.subscribe(val => (_options = val))
+  const unsubscribeConfig = config.subscribe(val => (_config = val))
+  onDestroy(() => {
+    unsubscribeOptions()
+    unsubscribeConfig()
+  })
+
+  let url
+  let switchInstance
+  let redirectToOriginal
+  let redirect
+  let currentService
+  browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
+    if (tabs[0].url) {
+      url = new URL(tabs[0].url)
+      servicesHelper.switchInstance(url).then(r => (switchInstance = r))
+      servicesHelper.reverse(url).then(r => (redirectToOriginal = r))
+      servicesHelper.redirectAsync(url, "main_frame", null, true).then(r => (redirect = r))
+      currentService = await servicesHelper.computeService(url)
+    }
+  })
+</script>
+
+{#if redirect}
+  <Row class="row" on:click={() => browser.runtime.sendMessage("redirectTab")}>
+    <Label>Redirect</Label>
+    <RedirectIcon />
+  </Row>
+{/if}
+
+{#if switchInstance}
+  <Row class="row" on:click={async () => browser.tabs.update({ url: await servicesHelper.switchInstance(url) })}>
+    <Label>Switch Instance</Label>
+    <SwitchInstanceIcon />
+  </Row>
+{/if}
+
+{#if redirectToOriginal}
+  <Row class="row" on:click={() => servicesHelper.copyRaw(url)}>
+    <Label>Copy Original</Label>
+    <CopyIcon />
+  </Row>
+  <Row class="row" on:click={() => browser.runtime.sendMessage("reverseTab")}>
+    <Label>Redirect To Original</Label>
+    <RedirectToOriginalIcon />
+  </Row>
+{/if}
+
+<hr />
+
+{#if currentService}
+  <Row>
+    <div
+      style="display: flex;justify-content: space-between;align-items: center;"
+      class="row"
+      on:keydown={null}
+      on:click={() => window.open(browser.runtime.getURL(_config.services[currentService].url), "_blank")}
+    >
+      <ServiceIcon details={{ value: currentService, label: _config.services[currentService].name }} />
+      <Label>{_config.services[currentService].name}</Label>
+    </div>
+    <div style="display: flex;align-items: center;">
+      <Checkbox
+        style="margin-right:5px"
+        label="Enable"
+        checked={_options[currentService].enabled}
+        onChange={e => {
+          _options[currentService].enabled = e.target.checked
+          options.set(_options)
+        }}
+      />
+      <SwitchInstanceIcon
+        class="row"
+        on:click={async () => browser.tabs.update({ url: await servicesHelper.switchInstance(url, currentService) })}
+      />
+    </div>
+  </Row>
+{/if}
+
+<hr />
+
+{#each _options.popupServices as serviceKey}
+  {#if currentService !== serviceKey}
+    <Row>
+      <div
+        style="display: flex;align-items: center;"
+        class="row"
+        on:keydown={null}
+        on:click={() => window.open(browser.runtime.getURL(_config.services[serviceKey].url), "_blank")}
+      >
+        <ServiceIcon details={{ value: serviceKey, label: _config.services[serviceKey].name }} />
+        <Label>{_config.services[serviceKey].name}</Label>
+      </div>
+      <div style="display: flex;align-items: center;">
+        <Checkbox
+          style="margin-right:5px"
+          label="Enable"
+          checked={_options[serviceKey].enabled}
+          onChange={e => {
+            console.log(e.target.checked)
+            _options[serviceKey].enabled = e.target.checked
+            options.set(_options)
+          }}
+        />
+        <SwitchInstanceIcon
+          class="row"
+          on:click={async () => browser.tabs.update({ url: await servicesHelper.switchInstance(url, serviceKey) })}
+        />
+      </div>
+    </Row>
+  {/if}
+{/each}
+
+<hr />
+
+<Row class="row" on:click={() => window.open(browser.runtime.getURL("pages/options/index.html"), "_blank")}>
+  <Label>Settings</Label>
+  <SettingsIcon />
+</Row>
+
+<style>
+  :global(.row) {
+    transition: 0.1s;
+  }
+  :global(.row:hover) {
+    color: var(--active);
+    cursor: pointer;
+  }
+  :global(.row:active) {
+    transform: translateY(1px);
+  }
+
+  :global(img, svg) {
+    margin-right: 10px;
+    height: 26px;
+    width: 26px;
+    color: var(--text);
+  }
+</style>
diff --git a/src/pages/popup_src/components/PopupButton.svelte b/src/pages/popup_src/components/PopupButton.svelte
new file mode 100644
index 00000000..9c4953c4
--- /dev/null
+++ b/src/pages/popup_src/components/PopupButton.svelte
@@ -0,0 +1,11 @@
+<script>
+  import Row from "../components/Row.svelte"
+  import Label from "../components/Label.svelte"
+  import CopyIcon from "../icons/CopyIcon.svelte"
+  export let label
+</script>
+
+<Row on:click>
+  <Label>{label}</Label>
+  <CopyIcon />
+</Row>
diff --git a/src/pages/popup_src/components/Row.svelte b/src/pages/popup_src/components/Row.svelte
new file mode 100644
index 00000000..a4d78f07
--- /dev/null
+++ b/src/pages/popup_src/components/Row.svelte
@@ -0,0 +1,13 @@
+<div {...$$props} on:click>
+    <slot></slot>
+  </div>
+  
+  <style>
+    div {
+      justify-content: space-between;
+      display: flex;
+      align-items: center;
+      margin: 10px 0;
+    }
+  </style>
+  
\ No newline at end of file
diff --git a/src/pages/popup_src/components/ServiceIcon.svelte b/src/pages/popup_src/components/ServiceIcon.svelte
new file mode 100644
index 00000000..89393cf6
--- /dev/null
+++ b/src/pages/popup_src/components/ServiceIcon.svelte
@@ -0,0 +1,40 @@
+<script>
+  import { onDestroy } from "svelte"
+  export let details
+  import { config, options } from "../stores"
+  let _options
+  let _config
+
+  const unsubscribeOptions = options.subscribe(val => (_options = val))
+  const unsubscribeConfig = config.subscribe(val => (_config = val))
+  onDestroy(() => {
+    unsubscribeOptions()
+    unsubscribeConfig()
+  })
+
+  let theme
+  $: if (_options) {
+    if (_options.theme == "dark") {
+      theme = "dark"
+    } else if (_options.theme == "light") {
+      theme = "light"
+    } else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
+      theme = "dark"
+    } else {
+      theme = "light"
+    }
+  }
+  $: imageType = _config.services[details.value].imageType
+</script>
+
+{#if imageType}
+  {#if imageType == "svgMono"}
+    {#if theme == "dark"}
+      <img src={`/assets/images/${details.value}-icon-light.svg`} alt={details.label} />
+    {:else}
+      <img src={`/assets/images/${details.value}-icon.svg`} alt={details.label} />
+    {/if}
+  {:else}
+    <img src={`/assets/images/${details.value}-icon.${imageType}`} alt={details.label} />
+  {/if}
+{/if}
diff --git a/src/pages/popup_src/main.js b/src/pages/popup_src/main.js
new file mode 100644
index 00000000..c4012f4a
--- /dev/null
+++ b/src/pages/popup_src/main.js
@@ -0,0 +1,7 @@
+import App from "./App.svelte"
+
+const app = new App({
+  target: document.body,
+})
+
+export default app
diff --git a/src/pages/popup_src/stores.js b/src/pages/popup_src/stores.js
new file mode 100644
index 00000000..782f6064
--- /dev/null
+++ b/src/pages/popup_src/stores.js
@@ -0,0 +1,5 @@
+import { writable } from "svelte/store"
+
+export const options = writable(null)
+export const config = writable(null)
+export const page = writable("general")
diff --git a/src/pages/stylesheets/styles.css b/src/pages/stylesheets/styles.css
index ca6f0dca..9e8fedb3 100644
--- a/src/pages/stylesheets/styles.css
+++ b/src/pages/stylesheets/styles.css
@@ -1,12 +1,3 @@
-body {
-  --text: #fff;
-  --bg-main: #121212;
-  --bg-secondary: #202020;
-  --active: #fbc117;
-  --danger: #f04141;
-  --light-grey: #c3c3c3;
-}
-
 @font-face {
   font-family: "Inter";
   src: url("Inter-VariableFont_slnt,wght.ttf");
@@ -21,359 +12,7 @@ body {
   font-style: normal;
 }
 
-body {
-  margin: auto;
-  padding: 0;
-  font-family: "Inter";
-  font-size: 16px;
-  background-color: var(--bg-main);
-  color: var(--text);
-}
-
-body * {
-  font-family: "Inter";
-}
-
-body.rtl {
-  font-family: "Vazirmatn";
-}
-
-body.rtl * {
-  font-family: "Vazirmatn";
-}
-
-div.block input[type="checkbox"] {
-  appearance: none;
-  -moz-appearance: none;
-  -webkit-appearance: none;
-}
-
-.title {
-  display: flex;
-  align-items: center;
-  text-decoration: none;
-  width: min-content;
-  color: var(--text);
-  transition: 0.1s;
-}
-
-.title:hover {
-  opacity: 1 !important;
-}
-
-.title:hover a {
-  color: var(--active);
-}
-
-img,
-svg {
-  margin-right: 10px;
-  height: 26px;
-  width: 26px;
-  color: var(--text);
-}
-
-body.rtl img,
-body.rtl svg {
-  margin-right: 0px;
-  margin-left: 10px;
-}
-
-input[type="url"],
-input[type="text"],
-select {
-  font-weight: bold;
-  box-sizing: border-box;
-  border-style: solid;
-  border-color: #767676;
-  color: var(--text);
-  font-size: 16px;
-  padding: 8px;
-  background-color: var(--bg-secondary);
-  border: none;
-  margin: 0;
-  max-width: 500px;
-  border-radius: 3px;
-}
-
-input[type="url"],
-input[type="text"] {
-  width: 400px;
-  cursor: text;
-}
-
-input:invalid {
-  color: var(--danger);
-}
-
-.button svg {
-  height: 18px;
-  width: 18px;
-}
-
-section.block-option {
-  width: 750px;
-  margin: 0 50px;
-}
-
-section.block-option h2 {
-  margin: 0;
-}
-
-body.option {
-  display: flex;
-  padding: 40px;
-  width: 1160px;
-}
-
-section.links {
-  display: flex;
-  flex-wrap: wrap;
-  flex-direction: column;
-  width: 350px;
-  max-height: 1030px;
-}
-
-section.links div {
-  margin: 10px;
-  width: max-content;
-}
-
-a {
-  text-decoration: none;
-  color: var(--text);
-  transition: 0.1s;
-}
-
-a:hover {
-  color: var(--active);
-}
-
-section.links a {
-  display: flex;
-  align-items: center;
-  font-size: 18px;
-  text-decoration: none;
-  color: white;
-  transition: 0.1s;
-}
-
-section.links a:hover,
-section.links .selected {
-  opacity: 1 !important;
-}
-
-section.links .selected a {
-  color: var(--active);
-}
-
-::placeholder {
-  color: var(--text);
-  opacity: 0.7;
-}
-
-hr {
-  height: 2px;
-  margin: 0 15px;
-  background-color: rgb(77, 77, 77);
-  border: none;
-}
-
-div.block {
-  padding: 0 15px;
-  justify-content: space-between;
-  display: flex;
-  align-items: center;
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-
-div.block-option {
-  margin: 30px 0;
-}
-
-div.block-option label {
-  margin-right: 5px;
-  width: 80%;
-  min-width: 150px;
-  font-size: 18px;
-}
-
-div.block-option h1 {
-  margin: 0;
-  font-size: 28px;
-  color: var(--text);
-}
-
-div.block-option div {
-  text-align: center;
-}
-
-div.block input[type="checkbox"] {
-  width: 46px;
-  height: 24px;
-  background-color: var(--light-grey);
-  border-radius: 50px;
-  transition: 0.4s;
-  cursor: pointer;
-}
-
-div.block input[type="checkbox"]:checked {
-  background-color: var(--active);
-}
-
-div.block input[type="checkbox"]::before {
-  content: "";
-  display: inline-block;
-  width: 18px;
-  height: 18px;
-  box-sizing: border-box;
-  position: relative;
-  top: 2.5px;
-  left: 3.5px;
-  background-color: white;
-  border-radius: 50%;
-  transition: 0.3s;
-}
-
-body.rtl div.block input[type="checkbox"]::before {
-  left: auto;
-  right: 4px;
-}
-
-div.block input[type="checkbox"]:checked::before {
-  left: 24px;
-}
-
-body.rtl div.block input[type="checkbox"]:checked::before {
-  left: auto;
-  right: 24px;
-}
-
-div.buttons {
-  display: flex;
-  margin: 0 15px;
-  margin-bottom: 15px;
-  margin-top: 15px;
-  flex-wrap: wrap;
-  align-items: center;
-  justify-content: start;
-}
-
-.button {
-  color: var(--text);
-  font-size: 16px;
-  font-weight: bold;
-  text-decoration: none;
-  cursor: pointer;
-  transition-duration: 0.1s;
-}
-
-.button:hover {
-  color: var(--active);
-}
-
-.button svg {
-  width: auto;
-  height: auto;
-  padding: 0;
-  margin-right: 5px;
-}
-
-.button:hover svg {
-  color: var(--active);
-}
-
-.button-inline {
-  display: inline-flex;
-  align-items: center;
-  margin: 7.5px 0;
-  background-color: var(--bg-secondary);
-  border-radius: 5px;
-  padding: 10px;
-}
-
-.button:active {
-  transform: translateY(1px);
-}
-
-button svg {
-  color: var(--text);
-}
-
-div.checklist div {
-  justify-content: space-between;
-  margin: 5px 15px;
-  padding: 10px 0;
-  word-wrap: break-word;
-  display: flex;
-}
-
-div.checklist a {
-  text-decoration: none;
-  color: var(--text);
-}
-
-div.checklist a:hover {
-  text-decoration: underline;
-}
-
-div.custom-checklist x a {
-  color: var(--active);
-}
-
-button.add {
-  background-color: transparent;
-  border: none;
-  padding: 0;
-  margin: 0;
-  text-decoration: none;
-  display: inline-block;
-  cursor: pointer;
-}
-
-body.light-theme {
-  --text: black;
-  --bg-main: white;
-  --bg-secondary: #e4e4e4;
-  --active: #fb9817;
-}
-
-body.light-theme select {
-  border: 1px solid black;
-}
-
-body.light-theme a {
-  color: black;
-}
-
-body.light-theme a:hover {
-  color: var(--active);
-}
-
-button {
-  background-color: transparent;
-  color: var(--text);
-  border: none;
-  text-decoration: none;
-  display: inline-block;
-  cursor: pointer;
-  border-radius: 5px;
-}
-
-body div section {
-  display: none;
-}
-
-select:disabled {
-  opacity: 0.6;
-  cursor: not-allowed;
-}
-
-input:disabled {
-  opacity: 0.6;
-  cursor: not-allowed;
-}
+/* 
 
 @media (max-width: 1250px) {
   body.option {
@@ -446,4 +85,4 @@ html.mobile section.links {
 
 html.mobile section.block-option {
   width: 100%;
-}
+} */
\ No newline at end of file