// ==UserScript==
// @name Seiko Mod Quick Reference Guide
// @namespace http://tampermonkey.net/
// @version 1.5
// @description Universal Seiko modding reference guide accessible on any website. Press Ctrl+Shift+S for instant access to mod compatibility charts, movement specs, and custom watch inspiration. Perfect companion for Seiko mod watches enthusiasts!
// @author SkyrimWrist
// @match *://*/*
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @license MIT
// ==/UserScript==
(function() {
'use strict';
const RESOURCE_URL = 'https://skyrimwrist.com';
// Comprehensive Seiko mod compatibility database
const MOD_DATABASE = {
cases: {
'SKX007/009': {
movement: 'NH35, NH36, 4R36, 7S26',
dialSize: '28.5mm',
handsHole: '1.5mm',
crystal: '30.4mm × 3.8mm',
caseback: '30mm screw-down',
bezel: '31.5mm outer, 30.5mm inner'
},
'SKX013': {
movement: 'NH35, NH36, 7S26',
dialSize: '28.5mm',
handsHole: '1.5mm',
crystal: '29mm × 3.8mm',
caseback: '29mm screw-down',
bezel: '30mm outer'
},
'Turtle': {
movement: 'NH35, NH36, 4R36',
dialSize: '28.5mm',
handsHole: '1.5mm',
crystal: '30.5mm × 4mm',
caseback: '30mm screw-down',
bezel: '31.5mm'
},
'5KX (SRPD)': {
movement: 'NH36, 4R36',
dialSize: '28.5mm',
handsHole: '1.5mm',
crystal: '29.5mm',
caseback: '29mm screw-down',
bezel: '30.5mm'
}
},
movements: {
'NH35': {
diameter: '27.4mm',
height: '5.32mm',
jewels: '24',
frequency: '21,600 bph',
powerReserve: '41 hours',
features: 'Hacking, hand-winding',
dateWheel: 'No (time-only)',
price: '$$'
},
'NH36': {
diameter: '27.4mm',
height: '5.32mm',
jewels: '24',
frequency: '21,600 bph',
powerReserve: '41 hours',
features: 'Hacking, hand-winding, day-date',
dateWheel: '3 o\'clock',
price: '$$'
},
'4R36': {
diameter: '27.4mm',
height: '5.32mm',
jewels: '24',
frequency: '21,600 bph',
powerReserve: '41 hours',
features: 'Hacking, hand-winding, day-date',
dateWheel: 'OEM quality',
price: '$$$'
},
'7S26': {
diameter: '27.4mm',
height: '5.32mm',
jewels: '21',
frequency: '21,600 bph',
powerReserve: '41 hours',
features: 'No hacking, automatic-only',
dateWheel: '3 o\'clock',
price: '$'
}
},
tools: [
{ name: 'Hand Removal Tool', essential: true, cost: '$' },
{ name: 'Crystal Press', essential: true, cost: '$$' },
{ name: 'Case Opening Tool', essential: true, cost: '$' },
{ name: 'Rodico Cleaning Putty', essential: true, cost: '$' },
{ name: 'Tweezers (Non-magnetic)', essential: true, cost: '$' },
{ name: 'Movement Holder', essential: false, cost: '$' },
{ name: 'Bezel Removal Tool', essential: false, cost: '$' },
{ name: 'Screwdriver Set', essential: true, cost: '$$' }
]
};
GM_addStyle(`
#seiko-reference-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.85);
z-index: 999999999;
display: none;
justify-content: center;
align-items: center;
backdrop-filter: blur(8px);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
}
#seiko-reference-overlay.active {
display: flex;
}
.seiko-ref-container {
width: 90%;
max-width: 1200px;
height: 90vh;
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
border-radius: 16px;
box-shadow: 0 20px 60px rgba(0, 212, 255, 0.3);
display: flex;
flex-direction: column;
overflow: hidden;
animation: slideIn 0.3s ease-out;
}
@keyframes slideIn {
from {
opacity: 0;
transform: scale(0.9) translateY(20px);
}
to {
opacity: 1;
transform: scale(1) translateY(0);
}
}
.seiko-ref-header {
background: linear-gradient(135deg, #00d4ff 0%, #0096c7 100%);
padding: 20px 30px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 3px solid #00d4ff;
}
.seiko-ref-title {
margin: 0;
font-size: 24px;
font-weight: 700;
color: #ffffff;
display: flex;
align-items: center;
gap: 12px;
}
.seiko-ref-close {
background: rgba(255, 255, 255, 0.2);
border: none;
color: white;
width: 36px;
height: 36px;
border-radius: 50%;
cursor: pointer;
font-size: 24px;
line-height: 1;
transition: all 0.2s;
display: flex;
align-items: center;
justify-content: center;
}
.seiko-ref-close:hover {
background: rgba(255, 0, 0, 0.6);
transform: rotate(90deg);
}
.seiko-ref-tabs {
display: flex;
background: rgba(0, 0, 0, 0.3);
padding: 0 20px;
gap: 5px;
border-bottom: 1px solid rgba(0, 212, 255, 0.2);
}
.seiko-ref-tab {
padding: 15px 25px;
background: transparent;
border: none;
color: rgba(255, 255, 255, 0.6);
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s;
border-bottom: 3px solid transparent;
position: relative;
}
.seiko-ref-tab:hover {
color: #00d4ff;
background: rgba(0, 212, 255, 0.05);
}
.seiko-ref-tab.active {
color: #00d4ff;
border-bottom-color: #00d4ff;
}
.seiko-ref-content {
flex: 1;
overflow-y: auto;
padding: 30px;
color: #ffffff;
}
.seiko-ref-content::-webkit-scrollbar {
width: 10px;
}
.seiko-ref-content::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.2);
}
.seiko-ref-content::-webkit-scrollbar-thumb {
background: rgba(0, 212, 255, 0.5);
border-radius: 5px;
}
.seiko-ref-content::-webkit-scrollbar-thumb:hover {
background: rgba(0, 212, 255, 0.7);
}
.ref-section {
display: none;
}
.ref-section.active {
display: block;
}
.ref-card {
background: rgba(0, 212, 255, 0.05);
border: 1px solid rgba(0, 212, 255, 0.2);
border-radius: 12px;
padding: 20px;
margin-bottom: 20px;
transition: all 0.2s;
}
.ref-card:hover {
border-color: #00d4ff;
box-shadow: 0 4px 20px rgba(0, 212, 255, 0.2);
transform: translateY(-2px);
}
.ref-card-title {
font-size: 18px;
font-weight: 700;
color: #00d4ff;
margin: 0 0 15px 0;
display: flex;
align-items: center;
gap: 10px;
}
.ref-spec-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 12px;
}
.ref-spec-item {
display: flex;
flex-direction: column;
gap: 4px;
}
.ref-spec-label {
font-size: 12px;
color: rgba(255, 255, 255, 0.6);
text-transform: uppercase;
font-weight: 600;
letter-spacing: 0.5px;
}
.ref-spec-value {
font-size: 14px;
color: #ffffff;
font-weight: 500;
}
.ref-tools-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 12px;
}
.ref-tool-item {
background: rgba(0, 0, 0, 0.3);
padding: 15px;
border-radius: 8px;
display: flex;
justify-content: space-between;
align-items: center;
border-left: 3px solid transparent;
transition: all 0.2s;
}
.ref-tool-item.essential {
border-left-color: #ffd700;
}
.ref-tool-item:hover {
background: rgba(0, 212, 255, 0.1);
}
.ref-tool-name {
font-size: 14px;
color: #ffffff;
font-weight: 500;
}
.ref-tool-badge {
padding: 4px 10px;
background: rgba(255, 215, 0, 0.2);
border-radius: 12px;
font-size: 11px;
color: #ffd700;
font-weight: 600;
}
.ref-footer {
background: rgba(0, 0, 0, 0.3);
padding: 20px 30px;
border-top: 1px solid rgba(0, 212, 255, 0.2);
display: flex;
justify-content: space-between;
align-items: center;
}
.ref-footer-links {
display: flex;
gap: 15px;
}
.ref-footer-link {
padding: 10px 20px;
background: rgba(0, 212, 255, 0.15);
border: 1px solid rgba(0, 212, 255, 0.3);
border-radius: 8px;
text-decoration: none;
color: #00d4ff;
font-size: 13px;
font-weight: 600;
transition: all 0.2s;
display: flex;
align-items: center;
gap: 8px;
}
.ref-footer-link:hover {
background: rgba(0, 212, 255, 0.25);
border-color: #00d4ff;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 212, 255, 0.3);
}
.ref-footer-info {
font-size: 12px;
color: rgba(255, 255, 255, 0.5);
}
.ref-shortcut-hint {
position: fixed;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
background: rgba(0, 212, 255, 0.9);
color: white;
padding: 12px 24px;
border-radius: 25px;
font-size: 13px;
font-weight: 600;
box-shadow: 0 4px 20px rgba(0, 212, 255, 0.4);
z-index: 999999998;
display: none;
animation: fadeInOut 3s ease-in-out;
}
@keyframes fadeInOut {
0%, 100% { opacity: 0; transform: translateX(-50%) translateY(10px); }
10%, 90% { opacity: 1; transform: translateX(-50%) translateY(0); }
}
.ref-intro {
background: linear-gradient(135deg, rgba(0, 212, 255, 0.1), rgba(0, 150, 199, 0.1));
border-radius: 12px;
padding: 25px;
margin-bottom: 25px;
border: 1px solid rgba(0, 212, 255, 0.3);
}
.ref-intro h3 {
color: #00d4ff;
margin-top: 0;
margin-bottom: 15px;
}
.ref-intro p {
color: rgba(255, 255, 255, 0.85);
line-height: 1.6;
margin: 10px 0;
}
.ref-highlight {
color: #ffd700;
font-weight: 600;
}
`);
// Create overlay HTML
function createOverlay() {
const overlay = document.createElement('div');
overlay.id = 'seiko-reference-overlay';
const casesHtml = Object.entries(MOD_DATABASE.cases)
.map(([model, specs]) => `
<div class="ref-card">
<h3 class="ref-card-title">📦 ${model}</h3>
<div class="ref-spec-grid">
${Object.entries(specs).map(([key, value]) => `
<div class="ref-spec-item">
<div class="ref-spec-label">${key}</div>
<div class="ref-spec-value">${value}</div>
</div>
`).join('')}
</div>
</div>
`).join('');
const movementsHtml = Object.entries(MOD_DATABASE.movements)
.map(([model, specs]) => `
<div class="ref-card">
<h3 class="ref-card-title">⚙️ ${model}</h3>
<div class="ref-spec-grid">
${Object.entries(specs).map(([key, value]) => `
<div class="ref-spec-item">
<div class="ref-spec-label">${key}</div>
<div class="ref-spec-value">${value}</div>
</div>
`).join('')}
</div>
</div>
`).join('');
const toolsHtml = MOD_DATABASE.tools
.map(tool => `
<div class="ref-tool-item ${tool.essential ? 'essential' : ''}">
<div class="ref-tool-name">
${tool.essential ? '⭐ ' : ''}${tool.name}
</div>
<div class="ref-tool-badge">${tool.cost}</div>
</div>
`).join('');
overlay.innerHTML = `
<div class="seiko-ref-container">
<div class="seiko-ref-header">
<h2 class="seiko-ref-title">
⌚ Seiko Mod Quick Reference
</h2>
<button class="seiko-ref-close" title="Close (or press Esc)">×</button>
</div>
<div class="seiko-ref-tabs">
<button class="seiko-ref-tab active" data-tab="home">🏠 Home</button>
<button class="seiko-ref-tab" data-tab="cases">📦 Cases</button>
<button class="seiko-ref-tab" data-tab="movements">⚙️ Movements</button>
<button class="seiko-ref-tab" data-tab="tools">🛠️ Tools</button>
</div>
<div class="seiko-ref-content">
<div class="ref-section active" data-section="home">
<div class="ref-intro">
<h3>Welcome to Seiko Mod Quick Reference! ⌚</h3>
<p>
This tool provides instant access to essential <span class="ref-highlight">Seiko mod watches</span>
compatibility information, helping you plan your next <span class="ref-highlight">custom Seiko watch</span> build.
</p>
<p>
<strong>How to use:</strong> Navigate between tabs to explore case dimensions, movement specifications,
and required tools for modding. All information is available offline and updates automatically.
</p>
<p>
<strong>Keyboard Shortcut:</strong> Press <span class="ref-highlight">Ctrl+Shift+S</span> on any website
to open this reference guide instantly!
</p>
</div>
<div class="ref-card">
<h3 class="ref-card-title">🎯 Quick Start Guide</h3>
<div class="ref-spec-grid">
<div class="ref-spec-item">
<div class="ref-spec-label">Most Popular Base</div>
<div class="ref-spec-value">SKX007/009</div>
</div>
<div class="ref-spec-item">
<div class="ref-spec-label">Best Movement</div>
<div class="ref-spec-value">NH36 (Day-Date)</div>
</div>
<div class="ref-spec-item">
<div class="ref-spec-label">Beginner Budget</div>
<div class="ref-spec-value">$150-300</div>
</div>
<div class="ref-spec-item">
<div class="ref-spec-label">Difficulty Level</div>
<div class="ref-spec-value">Beginner-Friendly</div>
</div>
</div>
</div>
<div class="ref-card">
<h3 class="ref-card-title">🔥 Popular Mod Styles</h3>
<div class="ref-spec-grid">
<div class="ref-spec-item">
<div class="ref-spec-label">📊 Vintage Explorer</div>
<div class="ref-spec-value">Faux-patina lume, vintage dial, domed crystal</div>
</div>
<div class="ref-spec-item">
<div class="ref-spec-label">🌊 Modern Diver</div>
<div class="ref-spec-value">Ceramic bezel, sapphire crystal, NH36 movement</div>
</div>
<div class="ref-spec-item">
<div class="ref-spec-label">🎨 Custom Build</div>
<div class="ref-spec-value">Unique dial + hands combo, aftermarket case</div>
</div>
<div class="ref-spec-item">
<div class="ref-spec-label">⚡ OEM+</div>
<div class="ref-spec-value">Sapphire upgrade, bracelet swap, slight improvements</div>
</div>
</div>
</div>
</div>
<div class="ref-section" data-section="cases">
${casesHtml}
</div>
<div class="ref-section" data-section="movements">
${movementsHtml}
</div>
<div class="ref-section" data-section="tools">
<div class="ref-card">
<h3 class="ref-card-title">🛠️ Essential Modding Tools</h3>
<div class="ref-tools-list">
${toolsHtml}
</div>
<p style="margin-top: 20px; color: rgba(255, 255, 255, 0.7); font-size: 13px;">
⭐ Essential tools are marked with a star. Cost: $ = under $20, $$ = $20-50, $$$ = over $50
</p>
</div>
</div>
</div>
<div class="ref-footer">
<div class="ref-footer-links">
<a href="${RESOURCE_URL}/collections/seiko-mod-watches" target="_blank" class="ref-footer-link">
🔧 Browse Seiko Mod Watches
</a>
<a href="${RESOURCE_URL}/collections/custom-seiko-watches" target="_blank" class="ref-footer-link">
✨ View Custom Seiko Watches
</a>
<a href="${RESOURCE_URL}/pages/seiko-mod-guide" target="_blank" class="ref-footer-link">
📚 Complete Mod Guide
</a>
</div>
<div class="ref-footer-info">
Powered by SkyrimWrist • Press Ctrl+Shift+S to toggle
</div>
</div>
</div>
`;
document.body.appendChild(overlay);
// Setup event listeners
setupEventListeners(overlay);
return overlay;
}
function setupEventListeners(overlay) {
// Close button
overlay.querySelector('.seiko-ref-close').addEventListener('click', () => {
overlay.classList.remove('active');
});
// Click outside to close
overlay.addEventListener('click', (e) => {
if (e.target === overlay) {
overlay.classList.remove('active');
}
});
// Tab switching
const tabs = overlay.querySelectorAll('.seiko-ref-tab');
const sections = overlay.querySelectorAll('.ref-section');
tabs.forEach(tab => {
tab.addEventListener('click', () => {
const targetTab = tab.dataset.tab;
tabs.forEach(t => t.classList.remove('active'));
sections.forEach(s => s.classList.remove('active'));
tab.classList.add('active');
overlay.querySelector(`[data-section="${targetTab}"]`).classList.add('active');
});
});
// ESC key to close
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && overlay.classList.contains('active')) {
overlay.classList.remove('active');
}
});
}
// Show hint on first load
function showHint() {
const hasSeenHint = GM_getValue('seiko_ref_hint_seen', false);
if (!hasSeenHint) {
const hint = document.createElement('div');
hint.className = 'ref-shortcut-hint';
hint.textContent = '⌚ Seiko Mod Reference: Press Ctrl+Shift+S anytime!';
document.body.appendChild(hint);
hint.style.display = 'block';
setTimeout(() => {
hint.remove();
}, 3000);
GM_setValue('seiko_ref_hint_seen', true);
}
}
// Initialize
function init() {
const overlay = createOverlay();
// Keyboard shortcut: Ctrl+Shift+S
document.addEventListener('keydown', (e) => {
if (e.ctrlKey && e.shiftKey && e.key === 'S') {
e.preventDefault();
overlay.classList.toggle('active');
}
});
// Show hint after page loads
setTimeout(showHint, 2000);
}
// Start when page is ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();