Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
e374e0e
Animated themes
faisalnjs Jul 23, 2026
fc3acd3
Set up LFS for animated themes videos
faisalnjs Jul 24, 2026
9836a99
Bug fixes and improvements
faisalnjs Jul 24, 2026
31f0c15
Add Waterfall theme
faisalnjs Jul 24, 2026
3994572
Add Water theme
faisalnjs Jul 24, 2026
05f1110
Add Snowstorm theme
faisalnjs Jul 24, 2026
c3c8be4
Fix Snowstorm theme
faisalnjs Jul 24, 2026
a0bff07
Add USA theme
faisalnjs Jul 24, 2026
9760df1
Increase prices for animated themes
faisalnjs Jul 24, 2026
a918661
Bug fixes
faisalnjs Jul 24, 2026
50f6f60
Bug fixes
faisalnjs Jul 24, 2026
368ffaf
Add Synthwave Terrain theme, bug fixes
faisalnjs Jul 24, 2026
599c8c7
Add Mountains theme
faisalnjs Jul 24, 2026
04b0754
Theme store refunds, bug fixes
faisalnjs Jul 24, 2026
1b0834a
Service worker caching
faisalnjs Jul 26, 2026
dee81d0
PWA nativity
faisalnjs Jul 27, 2026
abaf975
Feature: Restrict new student registration
faisalnjs Aug 7, 2026
314526e
Trigger API fail popup on NetworkError
faisalnjs Aug 7, 2026
6240e29
Fix data sync and theme images
faisalnjs Aug 7, 2026
3273329
Feature: Missed class tracker
faisalnjs Aug 7, 2026
76c209d
Bug fix
faisalnjs Aug 7, 2026
fecb11b
Modal input pattern support
faisalnjs Aug 9, 2026
f067ce4
Feature: Missed class recordings
faisalnjs Aug 10, 2026
5966d6c
Add Cherry Blossom themes
faisalnjs Aug 11, 2026
ee600a8
Misc upgrades
faisalnjs Aug 14, 2026
c7c494b
Bug fix
faisalnjs Aug 14, 2026
4bff789
Fruits themes
faisalnjs Aug 14, 2026
23b6782
Merge branch 'beta' of https://github.com/faisalnjs/virtual-clicker i…
faisalnjs Aug 24, 2026
f704031
v5.3.0
faisalnjs Aug 24, 2026
3f6b954
Coconut Tree theme
faisalnjs Aug 24, 2026
87d0b38
Calm Palm theme
faisalnjs Aug 24, 2026
ece6e66
Japan theme
faisalnjs Aug 24, 2026
2959b4b
Wood theme
faisalnjs Aug 24, 2026
fd1cc63
Sugar Bites theme
faisalnjs Aug 24, 2026
83e8198
Pattern themes
faisalnjs Aug 24, 2026
4d6521a
Cookies theme
faisalnjs Aug 24, 2026
1f05e8c
Pandas theme
faisalnjs Aug 24, 2026
5108ec0
Colorized themes
faisalnjs Aug 27, 2026
d167d85
Balloons themes
faisalnjs Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,9 @@ <h1 id="frq-score">4</h1>
</div>
<!-- Controls -->
<div id="controls-container" class="pill">
<button class="icon" data-modal-view="colorize" tooltip="Colorize Theme" hidden>
<i class="bi bi-palette2"></i>
</button>
<button class="icon" data-modal-view="store" tooltip="Theme Store">
<i class="bi bi-shop-window"></i>
</button>
Expand Down Expand Up @@ -514,6 +517,14 @@ <h1 class="text-placeholder">000</h1>
<p>You have missed classes.</p>
<div id="makeup-dates"></div>
</dialog>
<!-- Colorize Theme -->
<dialog data-modal-page="colorize" data-page-title="Colorize Theme">
<p>Colorize your current theme.</p>
<input type="range" min="-180" max="180" value="0" step="1" id="colorize" />
<div data-modal-actions>
<button class="submit-button" id="reset-colorize">Reset</button>
</div>
</dialog>
<dialog data-modal-page="menu" data-page-title="Virtual Clicker">
<div class="menu-icons">
<a href="https://check.vssfalcons.com/" tooltip="Virtual Checker">
Expand Down
19 changes: 10 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "virtual-clicker",
"private": true,
"version": "5.2.0",
"version": "5.3.0",
"type": "module",
"scripts": {
"dev": "vite --host",
Expand Down
Binary file added public/store/backdrop/balloon-pro.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/backdrop/balloon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/backdrop/balloons.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/backdrop/calm-palm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/backdrop/coconut-tree.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/backdrop/cookies.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/backdrop/japan.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/backdrop/pandas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/backdrop/sugar-bites.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/backdrop/wood.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/thumb/balloon-pro.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/thumb/balloon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/thumb/balloons.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/thumb/calm-palm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/thumb/coconut-tree.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/thumb/cookies.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/thumb/japan.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/thumb/pandas.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/thumb/sugar-bites.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/store/thumb/wood.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
32 changes: 32 additions & 0 deletions src/design.css
Original file line number Diff line number Diff line change
Expand Up @@ -733,3 +733,35 @@ hidden,
opacity: 0.75;
cursor: not-allowed;
}

#colorize {
color: var(--accent-color);
-webkit-appearance: none;
width: -webkit-fill-available;
height: 20px;
border-radius: 10px;
background: var(--surface-color);
outline: none;
margin-top: 5px;
accent-color: var(--accent-color);
}

#colorize::-webkit-slider-thumb,
#colorize::-moz-range-thumb {
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--accent-color);
cursor: grab;
transition: 0.25s;
-webkit-appearance: none;
appearance: none;
}

#colorize::-webkit-slider-thumb:active,
#colorize::-moz-range-thumb:active {
width: 25px;
height: 25px;
cursor: grabbing;
transition: 0.25s;
}
3 changes: 1 addition & 2 deletions src/layout.css
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,7 @@ div.spacer {
align-items: center;
justify-content: center;
flex-direction: column;
backdrop-filter: blur(24px);
background: transparent;
background: var(--surface-color);
border-radius: 0.5rem;
cursor: pointer;
}
Expand Down
91 changes: 87 additions & 4 deletions src/modules/ui.css
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,10 @@ body:has(.topbar) {
}

[data-modal-page="store"]::-webkit-scrollbar {
width: 12px !important;
}

[data-modal-page="store"]::-moz-scrollbar {
width: 28px !important;
}

Expand Down Expand Up @@ -571,7 +575,10 @@ body:has(.topbar) {
left: 0;
}

[data-modal-page="store"] .themes-grid .theme-item i:not(.hd):not(.animated) {
[data-modal-page="store"]
.themes-grid
.theme-item
i:not(.hd):not(.animated):not(.pattern):not(.colorized) {
position: absolute;
bottom: 10px;
right: 20px;
Expand All @@ -580,7 +587,10 @@ body:has(.topbar) {
transition: opacity 0.25s ease-in-out;
}

[data-modal-page="store"] .themes-grid .theme-item:hover i:not(.hd):not(.animated) {
[data-modal-page="store"]
.themes-grid
.theme-item:hover
i:not(.hd):not(.animated):not(.pattern):not(.colorized) {
opacity: 1;
transition: opacity 0.25s ease-in-out;
}
Expand All @@ -592,17 +602,37 @@ body:has(.topbar) {
font-size: 25px;
}

[data-modal-page="store"] .themes-grid .theme-item i.animated {
[data-modal-page="store"] .themes-grid .theme-item i.animated,
[data-modal-page="store"] .themes-grid .theme-item i.pattern,
[data-modal-page="store"] .themes-grid .theme-item i.colorized {
position: absolute;
top: 12.5px;
right: 20px;
font-size: 20px;
}

[data-modal-page="store"] .themes-grid .theme-item:has(i.hd) i.animated {
[data-modal-page="store"] .themes-grid .theme-item:has(i.hd) i.animated,
[data-modal-page="store"] .themes-grid .theme-item:has(i.hd) i.pattern,
[data-modal-page="store"] .themes-grid .theme-item:has(i.hd) i.colorized,
[data-modal-page="store"] .themes-grid .theme-item:has(i.animated) i.pattern,
[data-modal-page="store"] .themes-grid .theme-item:has(i.animated) i.colorized,
[data-modal-page="store"] .themes-grid .theme-item:has(i.pattern) i.colorized {
right: 50px;
}

[data-modal-page="store"] .themes-grid .theme-item:has(i.hd):has(i.animated) i.colorized,
[data-modal-page="store"] .themes-grid .theme-item:has(i.hd):has(i.pattern) i.colorized,
[data-modal-page="store"] .themes-grid .theme-item:has(i.animated):has(i.pattern) i.colorized {
right: 75px;
}

[data-modal-page="store"]
.themes-grid
.theme-item:has(i.hd):has(i.animated):has(i.pattern)
i.colorized {
right: 100px;
}

[data-modal-page="store"] .themes-grid .theme-item h5,
[data-modal-page="store"] .themes-grid .theme-item p,
[data-modal-page="store"] .themes-grid .theme-item small {
Expand Down Expand Up @@ -644,6 +674,32 @@ body:has(.topbar) {
--error-color: #fa8796;
}

[data-modal-page="store"] .themes-grid .theme-item:has(i.colorized) * {
z-index: 1;
}

[data-modal-page="store"] .themes-grid .theme-item:has(i.colorized) h5::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: calc(100% / 3);
height: 100%;
backdrop-filter: hue-rotate(-90deg);
z-index: 0;
}

[data-modal-page="store"] .themes-grid .theme-item:has(i.colorized) h5::after {
content: "";
position: absolute;
top: 0;
right: 0;
width: calc(100% / 3);
height: 100%;
backdrop-filter: hue-rotate(90deg);
z-index: 0;
}

[data-modal-page="store"] .cost-info {
margin-top: 10px;
}
Expand Down Expand Up @@ -672,3 +728,30 @@ body > video {
pointer-events: none;
z-index: -1;
}

[data-modal-page="colorize"] #colorize-controls {
width: 100%;
height: 200px;
border-radius: 10px;
background-size: cover !important;
background-position: center !important;
background-repeat: no-repeat !important;
position: relative;
overflow: hidden;
}

[data-modal-page="colorize"] #colorize-controls::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(
to right,
hsl(0, 0%, 100%) 0%,
hsl(0, 0%, 100%) 0%,
transparent 50%,
hsl(0, 0%, 100%) 100%
);
filter: hue-rotate(calc(var(--max-hue, 120deg) * ((2 * ((var(--x) - 0.5))))));
mix-blend-mode: color;
pointer-events: none;
}
Loading
Loading