--
-- Host: localhost    Database: RpgSeaonsAlpha_db
-- ------------------------------------------------------


--
-- Table structure for table `achievements`
--

CREATE TABLE `achievements` (
  `id` int NOT NULL AUTO_INCREMENT,
  `code` varchar(64) NOT NULL,
  `name` varchar(120) NOT NULL,
  `description` text,
  `points` int NOT NULL DEFAULT '0',
  `icon_path` varchar(255) DEFAULT NULL,
  `is_active` tinyint(1) NOT NULL DEFAULT '1',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `achievements`
--

INSERT INTO `achievements` VALUES (1,'Opening_the_book','Opening_the_book','Earned for createing an account for the first time welcome!',60,NULL,1,'2026-01-31 13:31:58'),(2,'First_Echo','First_Echo','Interacted with your first echo of another world/time',10,NULL,1,'2026-01-31 13:36:12'),(3,'those_that_watch','those_that_watch','earned for alerting Teshia Rothaman Envala shadow guards...',105,NULL,1,'2026-02-02 09:24:26');

--
-- Table structure for table `admin_users`
--

CREATE TABLE `admin_users` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(64) NOT NULL,
  `password_hash` varchar(255) NOT NULL,
  `role` enum('admin','editor') NOT NULL DEFAULT 'admin',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `admin_users`
--

INSERT INTO `admin_users` VALUES (1,'admin','JollyERoger@84','admin','2026-01-25 22:37:14');

--
-- Table structure for table `announcement_deliveries`
--

CREATE TABLE `announcement_deliveries` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `announcement_id` bigint unsigned NOT NULL,
  `user_id` bigint unsigned NOT NULL,
  `error` text,
  `sent_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `status` varchar(20) NOT NULL DEFAULT 'pending',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_announce_user` (`announcement_id`,`user_id`),
  KEY `fk_deliv_user` (`user_id`),
  CONSTRAINT `fk_deliv_announce` FOREIGN KEY (`announcement_id`) REFERENCES `announcements` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_deliv_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `announcement_deliveries`
--

INSERT INTO `announcement_deliveries` VALUES (7,1,1,'SMTP Error: Could not authenticate.','2026-02-07 08:28:27','error'),(8,1,2,'SMTP Error: Could not authenticate.','2026-02-07 08:28:28','error'),(11,1,5,'SMTP Error: Could not authenticate.','2026-02-07 08:28:29','error'),(12,1,6,'SMTP Error: Could not authenticate.','2026-02-07 08:28:30','error'),(13,2,1,NULL,'2026-02-07 08:48:17','sent'),(14,2,2,NULL,'2026-02-07 08:48:18','sent'),(17,2,5,NULL,'2026-02-07 08:48:21','sent'),(18,2,6,NULL,'2026-02-07 08:48:22','sent'),(19,3,1,NULL,'2026-02-07 08:52:53','sent'),(20,3,2,NULL,'2026-02-07 08:52:54','sent'),(21,3,5,NULL,'2026-02-07 08:52:56','sent'),(22,3,6,NULL,'2026-02-07 08:52:57','sent');

--
-- Table structure for table `announcement_reads`
--

CREATE TABLE `announcement_reads` (
  `announcement_id` bigint unsigned NOT NULL,
  `user_id` bigint unsigned NOT NULL,
  `read_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`announcement_id`,`user_id`),
  KEY `idx_ar_user` (`user_id`),
  CONSTRAINT `fk_ar_ann` FOREIGN KEY (`announcement_id`) REFERENCES `announcements` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_ar_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `announcement_reads`
--


--
-- Table structure for table `announcements`
--

CREATE TABLE `announcements` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(160) NOT NULL,
  `body` mediumtext NOT NULL,
  `is_published` tinyint(1) NOT NULL DEFAULT '0',
  `published_at` datetime DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `is_active` tinyint(1) NOT NULL DEFAULT '1',
  `starts_at` datetime DEFAULT NULL,
  `ends_at` datetime DEFAULT NULL,
  `created_by` bigint unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_ann_pub` (`is_published`,`published_at`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `announcements`
--

INSERT INTO `announcements` VALUES (1,'Security Team removed bad user accounts','Security Team removed bad user accounts',0,NULL,'2026-02-07 07:28:16',1,'2026-02-07 02:28:00','2026-02-14 02:28:00',1),(2,'test','test',0,NULL,'2026-02-07 08:47:59',1,'2026-02-07 03:47:00','2026-02-08 03:47:00',1),(3,'Security Team removed bad user accounts','Security Team removed bad user accounts',0,NULL,'2026-02-07 08:52:44',1,'2026-02-07 03:52:00','2026-02-07 03:55:00',1);

--
-- Table structure for table `auth_throttle`
--

CREATE TABLE `auth_throttle` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `action` varchar(32) NOT NULL,
  `ip_hash` char(64) NOT NULL,
  `identity_hash` char(64) DEFAULT NULL,
  `attempts` int NOT NULL DEFAULT '0',
  `locked_until` datetime DEFAULT NULL,
  `last_attempt_at` datetime NOT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_action_ip_ident` (`action`,`ip_hash`,`identity_hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `auth_throttle`
--


--
-- Table structure for table `characters`
--

CREATE TABLE `characters` (
  `id` int NOT NULL AUTO_INCREMENT,
  `slug` varchar(80) NOT NULL,
  `name` varchar(120) NOT NULL,
  `bio` text,
  `portrait_url` varchar(255) DEFAULT NULL,
  `base_hp` int NOT NULL DEFAULT '100',
  `base_mp` int NOT NULL DEFAULT '30',
  `base_atk` int NOT NULL DEFAULT '10',
  `base_def` int NOT NULL DEFAULT '10',
  `base_agi` int NOT NULL DEFAULT '10',
  `base_luck` int NOT NULL DEFAULT '10',
  `is_active` tinyint(1) NOT NULL DEFAULT '1',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `base_alignment` int NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `slug` (`slug`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `characters`
--

INSERT INTO `characters` VALUES (1,'echo_vallerie_initiate','echo_vallerie','From another facet of fate and reality she stood beside her friends as they lost a great battle however she herself was not giving up; now in this era she has gained more than she has ever lost and brings a stead fast aura.','',100,30,10,10,10,10,1,'2026-02-01 22:05:39',0);

--
-- Table structure for table `content_pages`
--

CREATE TABLE `content_pages` (
  `id` int NOT NULL AUTO_INCREMENT,
  `slug` varchar(80) NOT NULL,
  `title` varchar(160) NOT NULL,
  `content` mediumtext,
  `is_published` tinyint(1) NOT NULL DEFAULT '1',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `slug` (`slug`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `content_pages`
--

INSERT INTO `content_pages` VALUES (1,'features','Features','      <h2>World Systems</h2>\r\n      <p>Echoes, balance, corruption, and the Resonance Tree shape every run.</p>\r\n      <ul>\r\n        <li>Branching lore and character incarnations</li>\r\n        <li>Two-sided tree progression (light/abyss)</li>\r\n        <li>Secrets and long-form discovery</li>\r\n      </ul>\r\n\r\n      <h2>Community & Events</h2>\r\n      <p>Participation can grant points, unlock quests, and reveal new echoes.</p>\r\n\r\n      <h2>Device Integration (Optional)</h2>\r\n      <p>ESP32 companions can unlock dungeons, puzzles, quests, and spell grammar inputs.</p>\r\n    ',1,'2026-01-31 18:23:24','2026-02-06 06:00:30'),(2,'world','World','<h2>World</h2><p>Edit this page from the Admin dashboard.</p>',1,'2026-01-31 18:48:29','2026-01-31 18:48:29'),(5,'terms','Terms of Service','    <h2 style=\"margin:0 0 10px;\">Terms of Service</h2>\r\n    <p class=\"muted\" style=\"margin:0 0 14px;\">\r\n      Effective date: \r\n    </p>\r\n\r\n    \r\n      <p>\r\n        These Terms govern your access to and use of <strong></strong> (“Service”).\r\n        By using the Service, you agree to these Terms.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Accounts</h3>\r\n      <ul>\r\n        <li>You are responsible for maintaining the confidentiality of your credentials.</li>\r\n        <li>You agree not to share or sell accounts, or attempt to access accounts you don’t own.</li>\r\n        <li>We may suspend accounts for abuse, fraud, or violations of these Terms.</li>\r\n      </ul>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Community rules</h3>\r\n      <ul>\r\n        <li>No harassment, hate speech, threats, or doxxing.</li>\r\n        <li>No spam, automation abuse, or malicious linking.</li>\r\n        <li>No cheating, exploits, or attempts to bypass security.</li>\r\n      </ul>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Game content & rewards</h3>\r\n      <ul>\r\n        <li>Points, achievements, and rewards are subject to change for balance and fairness.</li>\r\n        <li>We may reset or adjust progression if required to address exploits or bugs.</li>\r\n        <li>Optional companion device features may be updated, limited, or discontinued.</li>\r\n      </ul>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Purchases (if enabled)</h3>\r\n      <p>\r\n        If you enable purchases later, you agree that digital items may not be refundable except where required by law.\r\n        We will present purchase terms at checkout.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Intellectual property</h3>\r\n      <p>\r\n        The Service, including artwork, code, design, and story content, is owned by us or our licensors.\r\n        You may not copy, distribute, or reverse engineer the Service except where permitted by law.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">User-generated content</h3>\r\n      <p>\r\n        If you submit content (chat, feedback, custom spell names, etc.), you grant us a non-exclusive license to use it\r\n        to operate and improve the Service. You are responsible for ensuring you have rights to what you submit.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Disclaimers</h3>\r\n      <p>\r\n        The Service is provided “as is” without warranties of any kind. We do not guarantee uninterrupted or error-free operation.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Limitation of liability</h3>\r\n      <p>\r\n        To the fullest extent permitted by law, we are not liable for indirect, incidental, special, consequential, or punitive\r\n        damages arising from your use of the Service.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Termination</h3>\r\n      <p>\r\n        We may suspend or terminate access to the Service at any time for violations of these Terms or to protect the Service.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Changes</h3>\r\n      <p>\r\n        We may update these Terms. Continued use after changes means you accept the updated Terms.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Contact</h3>\r\n      <p>\r\n        Contact us at: <strong>support@exodusblue.com</strong> (replace with your preferred address).\r\n      </p>\r\n    \r\n  ',0,'2026-01-31 20:43:26','2026-02-05 11:19:08'),(6,'privacy','Privacy Policy','    <h2 style=\"margin:0 0 10px;\">Privacy Policy</h2>\r\n    <p class=\"muted\" style=\"margin:0 0 14px;\">\r\n      Effective date: \r\n    </p>\r\n\r\n    \r\n      <p>\r\n        This Privacy Policy explains how <strong></strong> (“we”, “us”) collects, uses,\r\n        and protects information when you use our website, game services, and community features.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Information we collect</h3>\r\n      <ul>\r\n        <li><strong>Account info:</strong> username, email address, password hash (never your raw password).</li>\r\n        <li><strong>Session/auth data:</strong> login tokens (stored as hashes), session expiry, and optional hashes of IP/user-agent.</li>\r\n        <li><strong>Gameplay/community data:</strong> participation points, achievements, progression flags (as enabled).</li>\r\n        <li><strong>Support communications:</strong> information you send us if you contact support.</li>\r\n      </ul>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">How we use information</h3>\r\n      <ul>\r\n        <li>To create and manage accounts, sign-in sessions, and role-based access.</li>\r\n        <li>To operate game/community features (points, rewards, achievements, event participation).</li>\r\n        <li>To prevent abuse and secure the platform (rate limits, fraud prevention, security auditing).</li>\r\n        <li>To communicate service updates and respond to support requests.</li>\r\n      </ul>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Cookies & local storage</h3>\r\n      <p>\r\n        We use cookies/session storage necessary for authentication and basic site functionality.\r\n        We do not sell personal information.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Sharing</h3>\r\n      <p>\r\n        We do not sell your personal data. We may share information only when required to operate the service\r\n        (e.g., hosting/security providers) or when required by law.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Data retention</h3>\r\n      <p>\r\n        We retain account and gameplay/community data as long as your account remains active or as needed to provide\r\n        the service. You may request deletion, subject to legitimate interests (security logs, legal obligations).\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Security</h3>\r\n      <p>\r\n        We use reasonable measures to protect information, including hashed passwords, hashed session tokens, and\r\n        access control. No system is 100% secure; use strong passwords and keep them private.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Your choices</h3>\r\n      <ul>\r\n        <li>You can update account details (where enabled) and log out to end sessions.</li>\r\n        <li>You can request access or deletion of your data by contacting us.</li>\r\n      </ul>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Children</h3>\r\n      <p>\r\n        This service is not directed to children under 13. If you believe a child has provided personal data, contact us.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Changes</h3>\r\n      <p>\r\n        We may update this policy. If changes are material, we’ll provide a notice on the site.\r\n      </p>\r\n\r\n      <h3 style=\"margin:16px 0 8px;color:rgba(233,238,252,.92);font-size:13px;\">Contact</h3>\r\n      <p>\r\n        Contact us at: <strong>support@exodusblue.com</strong> (replace with your preferred address).\r\n      </p>\r\n    \r\n  ',0,'2026-01-31 20:43:30','2026-02-05 11:18:53'),(17,'factions','Factions','<p>New page. Edit me.</p>',1,'2026-02-06 05:33:51','2026-02-06 05:34:10'),(25,'skill-tree','skill-tree','',1,'2026-02-06 06:06:35','2026-02-07 07:22:56'),(27,'echoartifact','Echoartifact','<p>Echo Artifact EP32 Peripheral </p>',1,'2026-02-06 06:08:34','2026-02-06 06:13:47');

--
-- Table structure for table `email_verification_tokens`
--

CREATE TABLE `email_verification_tokens` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint unsigned NOT NULL,
  `token_hash` char(64) NOT NULL,
  `expires_at` datetime NOT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_evt_user` (`user_id`),
  KEY `idx_evt_token` (`token_hash`),
  CONSTRAINT `fk_evt_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `email_verification_tokens`
--


--
-- Table structure for table `hotspots`
--

CREATE TABLE `hotspots` (
  `id` int NOT NULL AUTO_INCREMENT,
  `x` decimal(6,3) NOT NULL DEFAULT '0.000',
  `y` decimal(6,3) NOT NULL DEFAULT '0.000',
  `w` decimal(6,3) NOT NULL DEFAULT '5.000',
  `h` decimal(6,3) NOT NULL DEFAULT '5.000',
  `title` varchar(120) DEFAULT NULL,
  `entity_type` varchar(40) DEFAULT 'unknown',
  `lore` text,
  `image` varchar(255) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `hotspots`
--


--
-- Table structure for table `logs`
--

CREATE TABLE `logs` (
  `id` int NOT NULL AUTO_INCREMENT,
  `type` varchar(64) NOT NULL,
  `message` text NOT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `logs`
--


--
-- Table structure for table `lore_entities`
--

CREATE TABLE `lore_entities` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `description` text,
  `x` float DEFAULT NULL,
  `y` float DEFAULT NULL,
  `w` float DEFAULT NULL,
  `h` float DEFAULT NULL,
  `is_active` tinyint(1) DEFAULT '1',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `lore_entities`
--

INSERT INTO `lore_entities` VALUES (1,'Karma – The Cursed Matriarch','The dark elf bound to rebirth across fractured timelines.',40.3,1.001,20.15,24.526,1,'2026-01-29 01:56:02'),(2,'Cassandra','vibrant intelligent observant of her surroundings. Cassandra',86.254,52.44,11.792,12.804,1,'2026-01-30 07:27:05'),(3,'Monta','Second Oldest son',9.531,50,12.528,18.27,1,'2026-01-31 08:29:00'),(4,'Luna Es ','Karma\'s Biological daughter who has been raised in her elf clan years after her mother left to search for the children in her dreams. Her and her mother share similar features they could almost pass as sisters. Her powers are much stronger during a full moon.',43.087,35.967,15.541,18.305,1,'2026-01-31 11:46:25');

--
-- Table structure for table `password_reset_tokens`
--

CREATE TABLE `password_reset_tokens` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint unsigned NOT NULL,
  `token_hash` char(64) NOT NULL,
  `expires_at` datetime NOT NULL,
  `used_at` datetime DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_prt_user` (`user_id`),
  KEY `idx_prt_token` (`token_hash`),
  CONSTRAINT `fk_prt_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `password_reset_tokens`
--


--
-- Table structure for table `patch_notes`
--

CREATE TABLE `patch_notes` (
  `id` int NOT NULL AUTO_INCREMENT,
  `version` varchar(32) NOT NULL,
  `title` varchar(140) NOT NULL,
  `body` mediumtext NOT NULL,
  `channel` enum('game','device','web','api') NOT NULL DEFAULT 'game',
  `is_published` tinyint(1) NOT NULL DEFAULT '1',
  `published_at` datetime DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_published` (`is_published`,`published_at`),
  KEY `idx_channel` (`channel`,`is_published`,`published_at`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `patch_notes`
--

INSERT INTO `patch_notes` VALUES (1,'0.1.0','First Resonance Build','- Added account system\n- Added resonance tree UI\n- Added patch notes page','web',1,'2026-01-26 08:27:30','2026-01-26 08:27:30','2026-01-26 08:27:30'),(2,'alpha 0.2','Site Stabalization Recovery after security update.','recovery at 40 percent','web',1,'2026-02-04 08:58:27','2026-02-04 08:58:27','2026-02-04 08:58:27'),(3,'alpha 0.2','Site Stabalization Recovery after security update.','recovery at 40 percent','web',1,'2026-02-04 08:58:53','2026-02-04 08:58:53','2026-02-04 08:58:53');

--
-- Table structure for table `points_log`
--

CREATE TABLE `points_log` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` int NOT NULL,
  `source` varchar(64) NOT NULL,
  `amount` int NOT NULL,
  `note` varchar(255) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `source` (`source`),
  KEY `created_at` (`created_at`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `points_log`
--

INSERT INTO `points_log` VALUES (1,4,'admin',106,'assisting with security','2026-02-02 09:20:29');

--
-- Table structure for table `rate_limits`
--

CREATE TABLE `rate_limits` (
  `k` varchar(128) NOT NULL,
  `count` int NOT NULL,
  `window_start` timestamp NOT NULL,
  PRIMARY KEY (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `rate_limits`
--

INSERT INTO `rate_limits` VALUES ('reg:afaee94e9163130ae1a3a0ca2d809a644cc9f471742182424cd9e4dae3bef68b',1,'2026-01-25 20:10:51'),('reg:c1c4bb54793332876cd6061cd5670237968a9d1734e55a559b15f5041a310f95',1,'2026-01-25 20:07:49'),('reg:ce1d3daf96cb06afda9c3b8e2912f06938b3d38971c53e0f0b9ac96f1d549ba2',1,'2026-01-25 20:14:21'),('reg:d5b4fa4c19ec02e25d3e4687f7e94ea9a2f5026598ca6a84147c4d34ebd87819',1,'2026-01-25 20:19:02');

--
-- Table structure for table `resonance_edges`
--

CREATE TABLE `resonance_edges` (
  `id` int NOT NULL AUTO_INCREMENT,
  `from_slug` varchar(80) NOT NULL,
  `to_slug` varchar(80) NOT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_edge` (`from_slug`,`to_slug`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `resonance_edges`
--


--
-- Table structure for table `resonance_nodes`
--

CREATE TABLE `resonance_nodes` (
  `id` int NOT NULL AUTO_INCREMENT,
  `slug` varchar(80) NOT NULL,
  `name` varchar(120) NOT NULL,
  `description` text,
  `node_type` varchar(32) NOT NULL DEFAULT 'glyph',
  `x` float NOT NULL DEFAULT '50',
  `y` float NOT NULL DEFAULT '50',
  `cost_points` int NOT NULL DEFAULT '0',
  `prereq_json` json DEFAULT NULL,
  `unlock_payload` json DEFAULT NULL,
  `is_active` tinyint(1) NOT NULL DEFAULT '1',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `side` varchar(16) NOT NULL DEFAULT 'root',
  `path_group` varchar(48) DEFAULT NULL,
  `t` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `slug` (`slug`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `resonance_nodes`
--

INSERT INTO `resonance_nodes` VALUES (1,'glyph_example','Echo Glyph','test','glyph',49.999,50,0,NULL,NULL,1,'2026-02-01 01:52:28','root','branchA',0.0000155265),(2,'node_20260202_014247','New Node','','glyph',50,50,1,'[]','{}',1,'2026-02-02 01:42:47','root',NULL,NULL),(3,'node_20260202_014248','New Node','','glyph',50,50,1,'[]','{}',1,'2026-02-02 01:42:48','root',NULL,NULL);

--
-- Table structure for table `resonance_paths`
--

CREATE TABLE `resonance_paths` (
  `id` int NOT NULL AUTO_INCREMENT,
  `path_group` varchar(32) NOT NULL,
  `svg_d` text NOT NULL,
  `points_json` mediumtext,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_path_group` (`path_group`)
) ENGINE=InnoDB AUTO_INCREMENT=207 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `resonance_paths`
--

INSERT INTO `resonance_paths` VALUES (162,'branchA','M 49.902 46.081 L 50.0 44.851 L 50.086 43.623 L 50.16 42.394 L 50.223 41.165 L 50.275 39.937 L 50.316 38.708 L 50.348 37.479 L 50.369 36.25 L 50.38 35.02 L 50.383 33.79 L 50.377 32.559 L 50.362 31.327 L 50.339 30.094 L 50.308 28.861 L 50.27 27.626 L 50.225 26.389 L 50.173 25.152 L 50.115 23.913 L 50.051 22.672 L 49.981 21.429 L 49.906 20.185 L 49.826 18.939 L 49.742 17.69 L 49.653 16.44 L 49.561 15.187 L 49.464 13.932 L 49.365 12.674','[[49.902,46.081],[50.0,44.851],[50.086,43.623],[50.16,42.394],[50.223,41.165],[50.275,39.937],[50.316,38.708],[50.348,37.479],[50.369,36.25],[50.38,35.02],[50.383,33.79],[50.377,32.559],[50.362,31.327],[50.339,30.094],[50.308,28.861],[50.27,27.626],[50.225,26.389],[50.173,25.152],[50.115,23.913],[50.051,22.672],[49.981,21.429],[49.906,20.185],[49.826,18.939],[49.742,17.69],[49.653,16.44],[49.561,15.187],[49.464,13.932],[49.365,12.674]]','2026-02-02 01:37:01'),(163,'trunk','M 49.902 46.081 L 49.93 46.796 L 49.954 47.512 L 49.974 48.228 L 49.992 48.945 L 50.007 49.661 L 50.019 50.378 L 50.028 51.096 L 50.035 51.814 L 50.039 52.533 L 50.041 53.252 L 50.041 53.973 L 50.038 54.694 L 50.033 55.416 L 50.027 56.139 L 50.019 56.864 L 50.009 57.59 L 49.997 58.317 L 49.984 59.045 L 49.97 59.775 L 49.955 60.506 L 49.938 61.239 L 49.921 61.974 L 49.902 62.711','[[49.902,46.081],[49.93,46.796],[49.954,47.512],[49.974,48.228],[49.992,48.945],[50.007,49.661],[50.019,50.378],[50.028,51.096],[50.035,51.814],[50.039,52.533],[50.041,53.252],[50.041,53.973],[50.038,54.694],[50.033,55.416],[50.027,56.139],[50.019,56.864],[50.009,57.59],[49.997,58.317],[49.984,59.045],[49.97,59.775],[49.955,60.506],[49.938,61.239],[49.921,61.974],[49.902,62.711]]','2026-02-01 21:44:13'),(164,'roots','M 49.902 62.711 L 49.875 63.201 L 49.852 63.692 L 49.833 64.183 L 49.819 64.674 L 49.808 65.166 L 49.801 65.658 L 49.798 66.151 L 49.797 66.644 L 49.8 67.139 L 49.805 67.634 L 49.813 68.13 L 49.823 68.628 L 49.836 69.126 L 49.85 69.626 L 49.866 70.128 L 49.884 70.631 L 49.902 71.136','[[49.902,62.711],[49.875,63.201],[49.852,63.692],[49.833,64.183],[49.819,64.674],[49.808,65.166],[49.801,65.658],[49.798,66.151],[49.797,66.644],[49.8,67.139],[49.805,67.634],[49.813,68.13],[49.823,68.628],[49.836,69.126],[49.85,69.626],[49.866,70.128],[49.884,70.631],[49.902,71.136]]','2026-02-01 21:44:13'),(165,'roots','M 49.902 71.136 L 49.934 71.484 L 49.96 71.832 L 49.981 72.18 L 49.996 72.529 L 50.006 72.878 L 50.011 73.228 L 50.012 73.578 L 50.009 73.929 L 50.002 74.28 L 49.992 74.632 L 49.979 74.986 L 49.963 75.34 L 49.945 75.696 L 49.924 76.052 L 49.902 76.41','[[49.902,71.136],[49.934,71.484],[49.96,71.832],[49.981,72.18],[49.996,72.529],[50.006,72.878],[50.011,73.228],[50.012,73.578],[50.009,73.929],[50.002,74.28],[49.992,74.632],[49.979,74.986],[49.963,75.34],[49.945,75.696],[49.924,76.052],[49.902,76.41]]','2026-02-01 21:44:13'),(166,'upper','M 49.902 46.081 L 47.507 46.309 L 45.169 46.339 L 42.886 46.177 L 40.654 45.832 L 38.473 45.31 L 36.338 44.619 L 34.249 43.766 L 32.201 42.759 L 30.193 41.606 L 28.223 40.313 L 26.287 38.889 L 24.384 37.341 L 22.51 35.676 L 20.664 33.901 L 18.843 32.025 L 17.045 30.054 L 15.266 27.997 L 13.505 25.86 L 11.758 23.651 L 10.024 21.378 L 8.301 19.048','[[49.902,46.081],[47.507,46.309],[45.169,46.339],[42.886,46.177],[40.654,45.832],[38.473,45.31],[36.338,44.619],[34.249,43.766],[32.201,42.759],[30.193,41.606],[28.223,40.313],[26.287,38.889],[24.384,37.341],[22.51,35.676],[20.664,33.901],[18.843,32.025],[17.045,30.054],[15.266,27.997],[13.505,25.86],[11.758,23.651],[10.024,21.378],[8.301,19.048]]','2026-02-01 21:44:13'),(167,'upper','M 49.902 46.081 L 47.661 46.932 L 45.45 47.579 L 43.269 48.031 L 41.115 48.295 L 38.988 48.379 L 36.885 48.29 L 34.806 48.036 L 32.748 47.625 L 30.711 47.064 L 28.693 46.363 L 26.693 45.527 L 24.708 44.565 L 22.738 43.484 L 20.781 42.293 L 18.835 40.998 L 16.9 39.609 L 14.973 38.132 L 13.054 36.575 L 11.14 34.945 L 9.231 33.252 L 7.324 31.502','[[49.902,46.081],[47.661,46.932],[45.45,47.579],[43.269,48.031],[41.115,48.295],[38.988,48.379],[36.885,48.29],[34.806,48.036],[32.748,47.625],[30.711,47.064],[28.693,46.363],[26.693,45.527],[24.708,44.565],[22.738,43.484],[20.781,42.293],[18.835,40.998],[16.9,39.609],[14.973,38.132],[13.054,36.575],[11.14,34.945],[9.231,33.252],[7.324,31.502]]','2026-02-01 21:44:13'),(168,'upper','M 49.902 46.081 L 48.329 46.507 L 46.784 46.795 L 45.264 46.95 L 43.77 46.977 L 42.3 46.882 L 40.852 46.67 L 39.426 46.345 L 38.02 45.914 L 36.633 45.382 L 35.263 44.752 L 33.909 44.032 L 32.571 43.226 L 31.246 42.339 L 29.934 41.377 L 28.634 40.344 L 27.343 39.247 L 26.061 38.089 L 24.787 36.878 L 23.519 35.616 L 22.255 34.311 L 20.996 32.967','[[49.902,46.081],[48.329,46.507],[46.784,46.795],[45.264,46.95],[43.77,46.977],[42.3,46.882],[40.852,46.67],[39.426,46.345],[38.02,45.914],[36.633,45.382],[35.263,44.752],[33.909,44.032],[32.571,43.226],[31.246,42.339],[29.934,41.377],[28.634,40.344],[27.343,39.247],[26.061,38.089],[24.787,36.878],[23.519,35.616],[22.255,34.311],[20.996,32.967]]','2026-02-01 21:44:13'),(169,'upper','M 49.902 46.081 L 47.759 45.942 L 45.68 45.634 L 43.661 45.165 L 41.7 44.539 L 39.794 43.763 L 37.942 42.844 L 36.139 41.788 L 34.383 40.601 L 32.672 39.29 L 31.003 37.86 L 29.373 36.318 L 27.78 34.67 L 26.221 32.923 L 24.693 31.082 L 23.194 29.155 L 21.72 27.147 L 20.27 25.064 L 18.841 22.914 L 17.429 20.702 L 16.032 18.434 L 14.648 16.117','[[49.902,46.081],[47.759,45.942],[45.68,45.634],[43.661,45.165],[41.7,44.539],[39.794,43.763],[37.942,42.844],[36.139,41.788],[34.383,40.601],[32.672,39.29],[31.003,37.86],[29.373,36.318],[27.78,34.67],[26.221,32.923],[24.693,31.082],[23.194,29.155],[21.72,27.147],[20.27,25.064],[18.841,22.914],[17.429,20.702],[16.032,18.434],[14.648,16.117]]','2026-02-01 21:44:13'),(170,'upper','M 49.902 46.081 L 52.218 46.423 L 54.483 46.569 L 56.7 46.528 L 58.87 46.305 L 60.995 45.909 L 63.079 45.346 L 65.123 44.625 L 67.13 43.753 L 69.101 42.736 L 71.04 41.583 L 72.947 40.3 L 74.826 38.895 L 76.679 37.376 L 78.507 35.75 L 80.314 34.023 L 82.101 32.204 L 83.871 30.3 L 85.625 28.318 L 87.367 26.265 L 89.098 24.149 L 90.82 21.978','[[49.902,46.081],[52.218,46.423],[54.483,46.569],[56.7,46.528],[58.87,46.305],[60.995,45.909],[63.079,45.346],[65.123,44.625],[67.13,43.753],[69.101,42.736],[71.04,41.583],[72.947,40.3],[74.826,38.895],[76.679,37.376],[78.507,35.75],[80.314,34.023],[82.101,32.204],[83.871,30.3],[85.625,28.318],[87.367,26.265],[89.098,24.149],[90.82,21.978]]','2026-02-01 21:44:13'),(171,'upper','M 49.902 46.081 L 51.697 46.589 L 53.461 46.94 L 55.196 47.138 L 56.903 47.191 L 58.583 47.102 L 60.238 46.88 L 61.869 46.529 L 63.479 46.056 L 65.067 45.467 L 66.636 44.767 L 68.186 43.963 L 69.72 43.061 L 71.239 42.066 L 72.744 40.985 L 74.236 39.824 L 75.718 38.588 L 77.189 37.283 L 78.653 35.917 L 80.11 34.494 L 81.561 33.02 L 83.008 31.502','[[49.902,46.081],[51.697,46.589],[53.461,46.94],[55.196,47.138],[56.903,47.191],[58.583,47.102],[60.238,46.88],[61.869,46.529],[63.479,46.056],[65.067,45.467],[66.636,44.767],[68.186,43.963],[69.72,43.061],[71.239,42.066],[72.744,40.985],[74.236,39.824],[75.718,38.588],[77.189,37.283],[78.653,35.917],[80.11,34.494],[81.561,33.02],[83.008,31.502]]','2026-02-01 21:44:13'),(172,'upper','M 49.902 46.081 L 52.007 47.044 L 54.088 47.813 L 56.148 48.393 L 58.187 48.792 L 60.206 49.019 L 62.207 49.08 L 64.192 48.982 L 66.16 48.733 L 68.113 48.342 L 70.053 47.814 L 71.98 47.157 L 73.896 46.38 L 75.802 45.489 L 77.699 44.492 L 79.588 43.396 L 81.47 42.209 L 83.346 40.938 L 85.219 39.591 L 87.088 38.174 L 88.954 36.697 L 90.82 35.165','[[49.902,46.081],[52.007,47.044],[54.088,47.813],[56.148,48.393],[58.187,48.792],[60.206,49.019],[62.207,49.08],[64.192,48.982],[66.16,48.733],[68.113,48.342],[70.053,47.814],[71.98,47.157],[73.896,46.38],[75.802,45.489],[77.699,44.492],[79.588,43.396],[81.47,42.209],[83.346,40.938],[85.219,39.591],[87.088,38.174],[88.954,36.697],[90.82,35.165]]','2026-02-01 21:44:13'),(173,'upper','M 49.902 46.081 L 51.591 46.9 L 53.263 47.562 L 54.92 48.071 L 56.561 48.434 L 58.188 48.657 L 59.802 48.746 L 61.404 48.708 L 62.994 48.547 L 64.573 48.27 L 66.142 47.883 L 67.703 47.392 L 69.255 46.803 L 70.801 46.123 L 72.34 45.356 L 73.873 44.51 L 75.402 43.59 L 76.927 42.603 L 78.45 41.553 L 79.97 40.448 L 81.489 39.294 L 83.008 38.095','[[49.902,46.081],[51.591,46.9],[53.263,47.562],[54.92,48.071],[56.561,48.434],[58.188,48.657],[59.802,48.746],[61.404,48.708],[62.994,48.547],[64.573,48.27],[66.142,47.883],[67.703,47.392],[69.255,46.803],[70.801,46.123],[72.34,45.356],[73.873,44.51],[75.402,43.59],[76.927,42.603],[78.45,41.553],[79.97,40.448],[81.489,39.294],[83.008,38.095]]','2026-02-01 21:44:13'),(174,'lower','M 49.902 62.711 L 48.56 64.035 L 47.214 65.192 L 45.866 66.185 L 44.514 67.024 L 43.16 67.712 L 41.802 68.258 L 40.441 68.668 L 39.077 68.948 L 37.709 69.105 L 36.338 69.145 L 34.963 69.075 L 33.584 68.901 L 32.202 68.629 L 30.815 68.267 L 29.425 67.821 L 28.031 67.297 L 26.633 66.701 L 25.23 66.041 L 23.823 65.322 L 22.412 64.552 L 20.996 63.736','[[49.902,62.711],[48.56,64.035],[47.214,65.192],[45.866,66.185],[44.514,67.024],[43.16,67.712],[41.802,68.258],[40.441,68.668],[39.077,68.948],[37.709,69.105],[36.338,69.145],[34.963,69.075],[33.584,68.901],[32.202,68.629],[30.815,68.267],[29.425,67.821],[28.031,67.297],[26.633,66.701],[25.23,66.041],[23.823,65.322],[22.412,64.552],[20.996,63.736]]','2026-02-01 21:44:13'),(175,'lower','M 49.902 62.711 L 48.862 64.377 L 47.793 65.888 L 46.699 67.251 L 45.578 68.472 L 44.432 69.557 L 43.263 70.511 L 42.07 71.34 L 40.855 72.051 L 39.619 72.65 L 38.362 73.143 L 37.086 73.535 L 35.791 73.833 L 34.478 74.042 L 33.148 74.169 L 31.802 74.22 L 30.441 74.201 L 29.065 74.117 L 27.676 73.975 L 26.275 73.781 L 24.861 73.541 L 23.438 73.26','[[49.902,62.711],[48.862,64.377],[47.793,65.888],[46.699,67.251],[45.578,68.472],[44.432,69.557],[43.263,70.511],[42.07,71.34],[40.855,72.051],[39.619,72.65],[38.362,73.143],[37.086,73.535],[35.791,73.833],[34.478,74.042],[33.148,74.169],[31.802,74.22],[30.441,74.201],[29.065,74.117],[27.676,73.975],[26.275,73.781],[24.861,73.541],[23.438,73.26]]','2026-02-01 21:44:13'),(176,'lower','M 49.902 62.711 L 51.259 64.048 L 52.618 65.216 L 53.98 66.219 L 55.346 67.065 L 56.714 67.761 L 58.085 68.312 L 59.46 68.725 L 60.839 69.008 L 62.22 69.165 L 63.605 69.205 L 64.994 69.134 L 66.387 68.958 L 67.783 68.683 L 69.183 68.317 L 70.588 67.865 L 71.996 67.335 L 73.408 66.733 L 74.825 66.066 L 76.246 65.339 L 77.672 64.561 L 79.102 63.736','[[49.902,62.711],[51.259,64.048],[52.618,65.216],[53.98,66.219],[55.346,67.065],[56.714,67.761],[58.085,68.312],[59.46,68.725],[60.839,69.008],[62.22,69.165],[63.605,69.205],[64.994,69.134],[66.387,68.958],[67.783,68.683],[69.183,68.317],[70.588,67.865],[71.996,67.335],[73.408,66.733],[74.825,66.066],[76.246,65.339],[77.672,64.561],[79.102,63.736]]','2026-02-01 21:44:13'),(177,'lower','M 49.902 62.711 L 50.98 64.411 L 52.085 65.953 L 53.217 67.341 L 54.374 68.584 L 55.557 69.685 L 56.763 70.653 L 57.993 71.492 L 59.245 72.209 L 60.518 72.811 L 61.812 73.303 L 63.125 73.692 L 64.458 73.984 L 65.808 74.185 L 67.175 74.301 L 68.558 74.339 L 69.957 74.304 L 71.37 74.203 L 72.796 74.042 L 74.236 73.827 L 75.687 73.564 L 77.148 73.26','[[49.902,62.711],[50.98,64.411],[52.085,65.953],[53.217,67.341],[54.374,68.584],[55.557,69.685],[56.763,70.653],[57.993,71.492],[59.245,72.209],[60.518,72.811],[61.812,73.303],[63.125,73.692],[64.458,73.984],[65.808,74.185],[67.175,74.301],[68.558,74.339],[69.957,74.304],[71.37,74.203],[72.796,74.042],[74.236,73.827],[75.687,73.564],[77.148,73.26]]','2026-02-01 21:44:13'),(178,'upper_offshoots','M 30.193 41.606 L 29.94 42.906 L 29.618 44.09 L 29.231 45.167 L 28.783 46.142 L 28.278 47.025 L 27.72 47.823 L 27.114 48.543 L 26.464 49.194 L 25.774 49.782 L 25.047 50.316 L 24.29 50.803 L 23.505 51.251 L 22.696 51.667','[[30.193,41.606],[29.94,42.906],[29.618,44.09],[29.231,45.167],[28.783,46.142],[28.278,47.025],[27.72,47.823],[27.114,48.543],[26.464,49.194],[25.774,49.782],[25.047,50.316],[24.29,50.803],[23.505,51.251],[22.696,51.667]]','2026-02-01 21:44:13'),(179,'upper_offshoots','M 38.473 45.31 L 38.315 45.301 L 38.163 45.273 L 38.017 45.227 L 37.876 45.165 L 37.739 45.088 L 37.607 44.997 L 37.479 44.893 L 37.354 44.777 L 37.232 44.65 L 37.113 44.514 L 36.996 44.37 L 36.88 44.218 L 36.766 44.061','[[38.473,45.31],[38.315,45.301],[38.163,45.273],[38.017,45.227],[37.876,45.165],[37.739,45.088],[37.607,44.997],[37.479,44.893],[37.354,44.777],[37.232,44.65],[37.113,44.514],[36.996,44.37],[36.88,44.218],[36.766,44.061]]','2026-02-01 21:44:13'),(180,'upper_offshoots','M 28.693 46.363 L 28.498 46.439 L 28.309 46.484 L 28.123 46.501 L 27.942 46.492 L 27.765 46.458 L 27.591 46.402 L 27.42 46.325 L 27.252 46.228 L 27.085 46.115 L 26.921 45.987 L 26.758 45.846 L 26.597 45.694 L 26.436 45.532','[[28.693,46.363],[28.498,46.439],[28.309,46.484],[28.123,46.501],[27.942,46.492],[27.765,46.458],[27.591,46.402],[27.42,46.325],[27.252,46.228],[27.085,46.115],[26.921,45.987],[26.758,45.846],[26.597,45.694],[26.436,45.532]]','2026-02-01 21:44:13'),(181,'upper_offshoots','M 22.738 43.484 L 22.803 44.234 L 22.82 44.956 L 22.792 45.655 L 22.722 46.33 L 22.613 46.984 L 22.468 47.62 L 22.289 48.238 L 22.081 48.842 L 21.846 49.432 L 21.586 50.011 L 21.305 50.581 L 21.006 51.143 L 20.693 51.7','[[22.738,43.484],[22.803,44.234],[22.82,44.956],[22.792,45.655],[22.722,46.33],[22.613,46.984],[22.468,47.62],[22.289,48.238],[22.081,48.842],[21.846,49.432],[21.586,50.011],[21.305,50.581],[21.006,51.143],[20.693,51.7]]','2026-02-01 21:44:13'),(182,'upper_offshoots','M 31.246 42.339 L 30.909 43.047 L 30.545 43.691 L 30.157 44.274 L 29.747 44.801 L 29.314 45.276 L 28.861 45.704 L 28.39 46.088 L 27.902 46.433 L 27.398 46.744 L 26.88 47.024 L 26.349 47.278 L 25.807 47.51 L 25.255 47.724','[[31.246,42.339],[30.909,43.047],[30.545,43.691],[30.157,44.274],[29.747,44.801],[29.314,45.276],[28.861,45.704],[28.39,46.088],[27.902,46.433],[27.398,46.744],[26.88,47.024],[26.349,47.278],[25.807,47.51],[25.255,47.724]]','2026-02-01 21:44:13'),(183,'upper_offshoots','M 40.852 46.67 L 40.697 46.937 L 40.533 47.174 L 40.361 47.381 L 40.181 47.561 L 39.993 47.717 L 39.799 47.849 L 39.598 47.961 L 39.391 48.054 L 39.179 48.13 L 38.962 48.191 L 38.74 48.239 L 38.514 48.277 L 38.285 48.305','[[40.852,46.67],[40.697,46.937],[40.533,47.174],[40.361,47.381],[40.181,47.561],[39.993,47.717],[39.799,47.849],[39.598,47.961],[39.391,48.054],[39.179,48.13],[38.962,48.191],[38.74,48.239],[38.514,48.277],[38.285,48.305]]','2026-02-01 21:44:13'),(184,'upper_offshoots','M 20.27 25.064 L 19.632 25.542 L 18.993 25.922 L 18.351 26.211 L 17.707 26.414 L 17.06 26.538 L 16.411 26.589 L 15.759 26.574 L 15.104 26.498 L 14.447 26.368 L 13.786 26.19 L 13.123 25.97 L 12.456 25.715 L 11.786 25.43','[[20.27,25.064],[19.632,25.542],[18.993,25.922],[18.351,26.211],[17.707,26.414],[17.06,26.538],[16.411,26.589],[15.759,26.574],[15.104,26.498],[14.447,26.368],[13.786,26.19],[13.123,25.97],[12.456,25.715],[11.786,25.43]]','2026-02-01 21:44:13'),(185,'upper_offshoots','M 39.794 43.763 L 39.448 44.119 L 39.096 44.42 L 38.737 44.67 L 38.371 44.873 L 38.0 45.032 L 37.622 45.151 L 37.24 45.233 L 36.852 45.282 L 36.46 45.301 L 36.062 45.293 L 35.661 45.263 L 35.256 45.213 L 34.847 45.148','[[39.794,43.763],[39.448,44.119],[39.096,44.42],[38.737,44.67],[38.371,44.873],[38.0,45.032],[37.622,45.151],[37.24,45.233],[36.852,45.282],[36.46,45.301],[36.062,45.293],[35.661,45.263],[35.256,45.213],[34.847,45.148]]','2026-02-01 21:44:13'),(186,'upper_offshoots','M 78.507 35.75 L 78.549 36.988 L 78.676 38.109 L 78.882 39.122 L 79.163 40.033 L 79.512 40.851 L 79.925 41.583 L 80.396 42.237 L 80.921 42.821 L 81.494 43.341 L 82.109 43.807 L 82.763 44.226 L 83.448 44.604 L 84.161 44.951','[[78.507,35.75],[78.549,36.988],[78.676,38.109],[78.882,39.122],[79.163,40.033],[79.512,40.851],[79.925,41.583],[80.396,42.237],[80.921,42.821],[81.494,43.341],[82.109,43.807],[82.763,44.226],[83.448,44.604],[84.161,44.951]]','2026-02-01 21:44:13'),(187,'upper_offshoots','M 69.101 42.736 L 69.362 43.158 L 69.63 43.499 L 69.904 43.766 L 70.184 43.963 L 70.47 44.096 L 70.761 44.169 L 71.058 44.188 L 71.359 44.158 L 71.665 44.083 L 71.975 43.97 L 72.289 43.822 L 72.606 43.646 L 72.927 43.446','[[69.101,42.736],[69.362,43.158],[69.63,43.499],[69.904,43.766],[70.184,43.963],[70.47,44.096],[70.761,44.169],[71.058,44.188],[71.359,44.158],[71.665,44.083],[71.975,43.97],[72.289,43.822],[72.606,43.646],[72.927,43.446]]','2026-02-01 21:44:13'),(188,'upper_offshoots','M 71.239 42.066 L 71.368 42.53 L 71.519 42.943 L 71.692 43.309 L 71.884 43.629 L 72.095 43.909 L 72.323 44.151 L 72.567 44.358 L 72.825 44.534 L 73.096 44.682 L 73.379 44.806 L 73.673 44.909 L 73.975 44.994 L 74.285 45.065','[[71.239,42.066],[71.368,42.53],[71.519,42.943],[71.692,43.309],[71.884,43.629],[72.095,43.909],[72.323,44.151],[72.567,44.358],[72.825,44.534],[73.096,44.682],[73.379,44.806],[73.673,44.909],[73.975,44.994],[74.285,45.065]]','2026-02-01 21:44:13'),(189,'upper_offshoots','M 71.239 42.066 L 71.48 43.106 L 71.769 44.075 L 72.105 44.977 L 72.484 45.817 L 72.902 46.6 L 73.358 47.332 L 73.847 48.016 L 74.369 48.657 L 74.918 49.261 L 75.493 49.832 L 76.09 50.375 L 76.706 50.895 L 77.34 51.396','[[71.239,42.066],[71.48,43.106],[71.769,44.075],[72.105,44.977],[72.484,45.817],[72.902,46.6],[73.358,47.332],[73.847,48.016],[74.369,48.657],[74.918,49.261],[75.493,49.832],[76.09,50.375],[76.706,50.895],[77.34,51.396]]','2026-02-01 21:44:13'),(190,'upper_offshoots','M 62.207 49.08 L 62.294 49.354 L 62.393 49.599 L 62.504 49.815 L 62.626 50.006 L 62.759 50.172 L 62.901 50.316 L 63.052 50.44 L 63.212 50.545 L 63.378 50.635 L 63.552 50.71 L 63.731 50.772 L 63.916 50.825 L 64.104 50.869','[[62.207,49.08],[62.294,49.354],[62.393,49.599],[62.504,49.815],[62.626,50.006],[62.759,50.172],[62.901,50.316],[63.052,50.44],[63.212,50.545],[63.378,50.635],[63.552,50.71],[63.731,50.772],[63.916,50.825],[64.104,50.869]]','2026-02-01 21:44:13'),(191,'upper_offshoots','M 73.896 46.38 L 73.759 47.181 L 73.693 47.929 L 73.693 48.625 L 73.755 49.275 L 73.875 49.882 L 74.047 50.449 L 74.268 50.98 L 74.534 51.48 L 74.839 51.95 L 75.179 52.396 L 75.55 52.82 L 75.948 53.227 L 76.368 53.62','[[73.896,46.38],[73.759,47.181],[73.693,47.929],[73.693,48.625],[73.755,49.275],[73.875,49.882],[74.047,50.449],[74.268,50.98],[74.534,51.48],[74.839,51.95],[75.179,52.396],[75.55,52.82],[75.948,53.227],[76.368,53.62]]','2026-02-01 21:44:13'),(192,'upper_offshoots','M 70.801 46.123 L 70.923 46.256 L 71.044 46.357 L 71.163 46.429 L 71.281 46.473 L 71.398 46.492 L 71.514 46.487 L 71.629 46.46 L 71.744 46.414 L 71.858 46.351 L 71.972 46.271 L 72.085 46.178 L 72.199 46.074 L 72.312 45.96','[[70.801,46.123],[70.923,46.256],[71.044,46.357],[71.163,46.429],[71.281,46.473],[71.398,46.492],[71.514,46.487],[71.629,46.46],[71.744,46.414],[71.858,46.351],[71.972,46.271],[72.085,46.178],[72.199,46.074],[72.312,45.96]]','2026-02-01 21:44:13'),(193,'upper_offshoots','M 62.994 48.547 L 62.661 49.019 L 62.387 49.505 L 62.17 50.005 L 62.005 50.518 L 61.888 51.044 L 61.816 51.581 L 61.785 52.13 L 61.791 52.688 L 61.83 53.257 L 61.898 53.834 L 61.992 54.419 L 62.107 55.011 L 62.24 55.61','[[62.994,48.547],[62.661,49.019],[62.387,49.505],[62.17,50.005],[62.005,50.518],[61.888,51.044],[61.816,51.581],[61.785,52.13],[61.791,52.688],[61.83,53.257],[61.898,53.834],[61.992,54.419],[62.107,55.011],[62.24,55.61]]','2026-02-01 21:44:13'),(194,'lower_offshoots','M 30.815 68.267 L 30.933 69.061 L 30.986 69.809 L 30.978 70.514 L 30.912 71.179 L 30.792 71.808 L 30.624 72.402 L 30.41 72.966 L 30.156 73.503 L 29.865 74.016 L 29.541 74.508 L 29.188 74.982 L 28.81 75.441 L 28.413 75.889','[[30.815,68.267],[30.933,69.061],[30.986,69.809],[30.978,70.514],[30.912,71.179],[30.792,71.808],[30.624,72.402],[30.41,72.966],[30.156,73.503],[29.865,74.016],[29.541,74.508],[29.188,74.982],[28.81,75.441],[28.413,75.889]]','2026-02-01 21:44:13'),(195,'lower_offshoots','M 30.815 68.267 L 30.89 68.922 L 30.909 69.524 L 30.878 70.076 L 30.798 70.582 L 30.674 71.046 L 30.509 71.471 L 30.306 71.861 L 30.069 72.218 L 29.801 72.548 L 29.506 72.853 L 29.187 73.136 L 28.847 73.402 L 28.49 73.654','[[30.815,68.267],[30.89,68.922],[30.909,69.524],[30.878,70.076],[30.798,70.582],[30.674,71.046],[30.509,71.471],[30.306,71.861],[30.069,72.218],[29.801,72.548],[29.506,72.853],[29.187,73.136],[28.847,73.402],[28.49,73.654]]','2026-02-01 21:44:13'),(196,'lower_offshoots','M 37.086 73.535 L 37.058 73.557 L 37.03 73.572 L 37.003 73.581 L 36.978 73.584 L 36.953 73.582 L 36.928 73.576 L 36.905 73.565 L 36.881 73.549 L 36.859 73.531 L 36.836 73.509 L 36.814 73.484 L 36.793 73.457 L 36.771 73.428','[[37.086,73.535],[37.058,73.557],[37.03,73.572],[37.003,73.581],[36.978,73.584],[36.953,73.582],[36.928,73.576],[36.905,73.565],[36.881,73.549],[36.859,73.531],[36.836,73.509],[36.814,73.484],[36.793,73.457],[36.771,73.428]]','2026-02-01 21:44:13'),(197,'lower_offshoots','M 38.362 73.143 L 38.703 73.39 L 39.003 73.672 L 39.266 73.987 L 39.495 74.333 L 39.691 74.707 L 39.858 75.108 L 39.998 75.533 L 40.114 75.981 L 40.208 76.449 L 40.283 76.935 L 40.341 77.438 L 40.385 77.955 L 40.418 78.484','[[38.362,73.143],[38.703,73.39],[39.003,73.672],[39.266,73.987],[39.495,74.333],[39.691,74.707],[39.858,75.108],[39.998,75.533],[40.114,75.981],[40.208,76.449],[40.283,76.935],[40.341,77.438],[40.385,77.955],[40.418,78.484]]','2026-02-01 21:44:13'),(198,'lower_offshoots','M 60.839 69.008 L 60.662 69.293 L 60.522 69.581 L 60.416 69.871 L 60.342 70.164 L 60.298 70.459 L 60.281 70.756 L 60.289 71.055 L 60.32 71.356 L 60.37 71.66 L 60.439 71.966 L 60.524 72.273 L 60.621 72.583 L 60.73 72.895','[[60.839,69.008],[60.662,69.293],[60.522,69.581],[60.416,69.871],[60.342,70.164],[60.298,70.459],[60.281,70.756],[60.289,71.055],[60.32,71.356],[60.37,71.66],[60.439,71.966],[60.524,72.273],[60.621,72.583],[60.73,72.895]]','2026-02-01 21:44:13'),(199,'lower_offshoots','M 63.605 69.205 L 63.427 69.464 L 63.282 69.731 L 63.168 70.004 L 63.082 70.283 L 63.023 70.568 L 62.988 70.858 L 62.976 71.154 L 62.984 71.455 L 63.01 71.761 L 63.052 72.071 L 63.108 72.384 L 63.176 72.702 L 63.253 73.022','[[63.605,69.205],[63.427,69.464],[63.282,69.731],[63.168,70.004],[63.082,70.283],[63.023,70.568],[62.988,70.858],[62.976,71.154],[62.984,71.455],[63.01,71.761],[63.052,72.071],[63.108,72.384],[63.176,72.702],[63.253,73.022]]','2026-02-01 21:44:13'),(200,'lower_offshoots','M 55.557 69.685 L 55.114 69.602 L 54.687 69.582 L 54.275 69.623 L 53.877 69.72 L 53.491 69.87 L 53.117 70.068 L 52.754 70.309 L 52.4 70.591 L 52.054 70.909 L 51.714 71.26 L 51.381 71.638 L 51.052 72.041 L 50.726 72.464','[[55.557,69.685],[55.114,69.602],[54.687,69.582],[54.275,69.623],[53.877,69.72],[53.491,69.87],[53.117,70.068],[52.754,70.309],[52.4,70.591],[52.054,70.909],[51.714,71.26],[51.381,71.638],[51.052,72.041],[50.726,72.464]]','2026-02-01 21:44:13'),(201,'lower_offshoots','M 65.808 74.185 L 65.548 74.35 L 65.312 74.543 L 65.098 74.762 L 64.905 75.005 L 64.73 75.271 L 64.573 75.558 L 64.432 75.864 L 64.305 76.189 L 64.191 76.529 L 64.089 76.884 L 63.995 77.252 L 63.91 77.631 L 63.832 78.019','[[65.808,74.185],[65.548,74.35],[65.312,74.543],[65.098,74.762],[64.905,75.005],[64.73,75.271],[64.573,75.558],[64.432,75.864],[64.305,76.189],[64.191,76.529],[64.089,76.884],[63.995,77.252],[63.91,77.631],[63.832,78.019]]','2026-02-01 21:44:13'),(202,'branchA','M 50.111 13.629 L 49.936 21.751',NULL,'2026-02-01 21:46:54'),(203,'branchA','M 49.761 29.873 C 49.761 28.519, 49.790 24.633, 49.761 21.751 C 49.732 18.869, 49.615 14.109, 49.586 12.581',NULL,'2026-02-01 21:51:52'),(204,'branchA','M 50.111 13.105 C 50.111 14.240, 50.169 17.384, 50.111 19.917 C 50.052 22.450, 49.790 25.463, 49.761 28.301 C 49.732 31.139, 49.965 33.585, 49.936 36.947 C 49.907 40.309, 49.644 46.554, 49.586 48.475',NULL,'2026-02-01 21:54:07'),(205,'branchB','M 49.936 28.563 C 50.548 27.864, 52.472 25.419, 53.609 24.371 C 54.745 23.323, 55.678 22.886, 56.757 22.275 C 57.835 21.664, 59.001 21.140, 60.080 20.703 C 61.158 20.266, 62.003 19.655, 63.228 19.655 C 64.452 19.655, 66.084 20.397, 67.425 20.703 C 68.766 21.009, 69.728 21.227, 71.273 21.489 C 72.817 21.751, 75.353 21.751, 76.694 22.275 C 78.035 22.799, 78.152 24.240, 79.318 24.633 C 80.484 25.026, 82.378 24.895, 83.690 24.633 C 85.002 24.371, 86.051 23.716, 87.188 23.061 C 88.325 22.406, 89.957 21.096, 90.511 20.703','[[49.936 28.563],[50.548 27.864],[52.472 25.419],[53.609 24.371],[54.745 23.323],[ 55.678 22.886],[56.757 22.275],[57.835 21.664],[59.001 21.140],[60.080 20.703],[ 61.158 20.266], 62.003 19.655, 63.228 19.655 C 64.452 19.655, 66.084 20.397, 67.425 20.703 C 68.766 21.009, 69.728 21.227, 71.273 21.489 C 72.817 21.751, 75.353 21.751, 76.694 22.275 C 78.035 22.799, 78.152 24.240, 79.318 24.633 C 80.484 25.026, 82.378 24.895, 83.690 24.633 C 85.002 24.371, 86.051 23.716, 87.188 23.061 C 88.325 22.406, 89.957 21.096, 90.511 20.703','2026-02-01 22:00:05'),(206,'branchA','M 50.067 61.307 L 50.427 65.885',NULL,'2026-02-02 01:38:10');

--
-- Table structure for table `settings`
--

CREATE TABLE `settings` (
  `id` int NOT NULL AUTO_INCREMENT,
  `setting_key` varchar(128) NOT NULL,
  `setting_value` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `setting_key` (`setting_key`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `settings`
--

INSERT INTO `settings` VALUES (1,'site_name','Project Resonance-RPG game'),(2,'site_tagline','Follow the path of the lost or forge your own. Seek the truth or feed the lie where will your story take you?');

--
-- Table structure for table `site_pages`
--

CREATE TABLE `site_pages` (
  `id` int NOT NULL AUTO_INCREMENT,
  `slug` varchar(80) NOT NULL,
  `link_type` enum('file','db') NOT NULL DEFAULT 'file',
  `title` varchar(140) NOT NULL,
  `content` mediumtext,
  `nav_group` varchar(40) NOT NULL DEFAULT 'main',
  `nav_order` int NOT NULL DEFAULT '100',
  `show_in_nav` tinyint(1) NOT NULL DEFAULT '1',
  `is_enabled` tinyint(1) NOT NULL DEFAULT '1',
  `is_header_only` tinyint(1) NOT NULL DEFAULT '0',
  `requires_login` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `slug` (`slug`),
  KEY `idx_nav` (`nav_group`,`show_in_nav`,`is_enabled`,`nav_order`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `site_pages`
--

INSERT INTO `site_pages` VALUES (1,'play','file','Play','','main',10,1,1,0,0,'2026-01-27 05:34:21','2026-01-27 05:34:21'),(2,'patch-notes','file','Patch Notes','','main',20,1,1,0,0,'2026-01-27 05:34:21','2026-01-27 05:34:21'),(3,'privacy','file','Privacy','','footer',10,1,1,0,0,'2026-01-27 05:34:21','2026-01-27 05:34:21'),(4,'terms','file','Terms','','footer',20,1,1,0,0,'2026-01-27 05:34:21','2026-01-27 05:34:21'),(5,'community','db','Commuity','Community Quests\r\nTime windows unlock special branches: dungeons, quests, and rare recruits that shift the world’s balance.','main',10,1,1,0,0,'2026-01-27 06:13:32','2026-01-27 06:14:14'),(6,'features','file','Features','Features overview...','features',10,1,1,0,0,'2026-01-27 06:20:46','2026-02-04 02:49:03'),(7,'skill-tree','db','Resonance Tree','<div id=\"skillTree\"></div>\r\n<script src=\"https://asongforthelost.exodusblue.com/assets/js/skill_tree.js\"></script>\r\n','features',20,1,1,0,0,'2026-01-27 06:20:46','2026-02-07 06:53:39'),(8,'leaderboard','db','Leaderboard','Leaderboard coming soon...','community',20,1,1,0,0,'2026-01-27 06:20:46','2026-01-27 06:20:46'),(10,'world','db','World Overview','World page...','world',10,1,1,0,0,'2026-01-27 06:24:21','2026-01-27 06:24:21'),(12,'resonance-tree','db','Echoes','Echoes of another time world or place effected or ineffected by the presence of individuals','features',20,1,1,0,0,'2026-01-27 06:24:21','2026-01-27 06:27:21'),(14,'factions','file','factions','factions overview...','world',10,1,0,0,0,'2026-01-27 06:20:46','2026-02-06 05:52:49'),(18,'echoartifact','db','echoartifact','factions overview...','world',10,1,0,0,0,'2026-01-27 06:20:46','2026-02-06 06:12:37');

--
-- Table structure for table `site_settings`
--

CREATE TABLE `site_settings` (
  `skey` varchar(64) NOT NULL,
  `svalue` text,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`skey`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `site_settings`
--

INSERT INTO `site_settings` VALUES ('maintenance_bypass_roles','admin,moderator','2026-01-26 11:08:53','2026-02-03 07:27:41'),('maintenance_enabled','0','2026-02-03 08:52:29','2026-02-03 07:27:41'),('maintenance_message','We are performing maintenance. Please check back soon.','2026-02-04 00:06:48','2026-02-03 07:27:41');

--
-- Table structure for table `skill_edges`
--

CREATE TABLE `skill_edges` (
  `id` int NOT NULL AUTO_INCREMENT,
  `from_id` int NOT NULL,
  `to_id` int NOT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_edge` (`from_id`,`to_id`),
  KEY `fk_edge_to` (`to_id`),
  CONSTRAINT `fk_edge_from` FOREIGN KEY (`from_id`) REFERENCES `skill_nodes` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_edge_to` FOREIGN KEY (`to_id`) REFERENCES `skill_nodes` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `skill_edges`
--

INSERT INTO `skill_edges` VALUES (1,1,2,'2026-01-31 21:59:15'),(2,2,3,'2026-01-31 21:59:16'),(3,2,4,'2026-01-31 21:59:16'),(4,4,5,'2026-01-31 21:59:16'),(5,5,6,'2026-01-31 21:59:16'),(6,2,7,'2026-01-31 21:59:16'),(7,7,8,'2026-01-31 21:59:16'),(8,8,9,'2026-01-31 21:59:16');

--
-- Table structure for table `skill_node_effects`
--

CREATE TABLE `skill_node_effects` (
  `id` int NOT NULL AUTO_INCREMENT,
  `node_id` int NOT NULL,
  `effect_key` varchar(64) NOT NULL,
  `effect_value` decimal(10,3) NOT NULL,
  `stack_mode` enum('add','mul') NOT NULL DEFAULT 'add',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `node_id` (`node_id`),
  CONSTRAINT `fk_sne_node` FOREIGN KEY (`node_id`) REFERENCES `skill_nodes` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `skill_node_effects`
--


--
-- Table structure for table `skill_nodes`
--

CREATE TABLE `skill_nodes` (
  `id` int NOT NULL AUTO_INCREMENT,
  `slug` varchar(80) NOT NULL,
  `name` varchar(120) NOT NULL,
  `description` text,
  `side` enum('good','evil','shared') NOT NULL DEFAULT 'shared',
  `x` float NOT NULL DEFAULT '50',
  `y` float NOT NULL DEFAULT '50',
  `cost_points` int NOT NULL DEFAULT '1',
  `is_active` tinyint(1) NOT NULL DEFAULT '1',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `slug` (`slug`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `skill_nodes`
--

INSERT INTO `skill_nodes` VALUES (1,'trunk_root','Resonance Core','The point where all echoes intersect.','shared',50,55,0,1,'2026-01-31 21:59:15'),(2,'trunk_memory','Memory Thread','Recall fragments to unlock deeper branches.','shared',50,42,1,1,'2026-01-31 21:59:15'),(3,'trunk_bind','Echo Bind','Stabilize an echo; improves synthesis across trees.','shared',50,30,2,1,'2026-01-31 21:59:15'),(4,'good_light','Vala (Light)','Radiant alignment. Healing, clarity, warding.','good',30,38,1,1,'2026-01-31 21:59:15'),(5,'good_mercy','Mercy Loop','Protect allies when balance is maintained.','good',22,26,2,1,'2026-01-31 21:59:15'),(6,'good_sanctum','Sanctum Sigil','Create a safe zone node in certain dungeons.','good',34,20,3,1,'2026-01-31 21:59:15'),(7,'evil_dark','Eeyh (Dark)','Umbral alignment. Debilitation, fear, shadowcraft.','evil',70,38,1,1,'2026-01-31 21:59:15'),(8,'evil_hunger','Hunger Spiral','Convert echoes into power at a cost.','evil',78,26,2,1,'2026-01-31 21:59:15'),(9,'evil_abyss','Abyss Mark','Open forbidden routes; increases corruption gain.','evil',66,20,3,1,'2026-01-31 21:59:15');

--
-- Table structure for table `themes`
--

CREATE TABLE `themes` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(80) NOT NULL,
  `slug` varchar(80) NOT NULL,
  `is_active` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `version` varchar(20) DEFAULT '1.0.0',
  `author` varchar(100) DEFAULT '',
  `description` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `slug` (`slug`)
) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `themes`
--

INSERT INTO `themes` VALUES (1,'Resonance','Resonance',1,'2026-01-26 00:40:01','1.0.0','',NULL),(18,'Echoes','Echoes',0,'2026-01-28 02:08:05','1.0.0','ExodusBlue','Echoes are incarnations of characters across time, memory, and fate.'),(37,'KarmasLament','KarmasLament',0,'2026-01-28 02:08:05','1.0.0','ExodusBlue','Echoes are incarnations of characters across time, memory, and fate.');

--
-- Table structure for table `user_achievements`
--

CREATE TABLE `user_achievements` (
  `user_id` int NOT NULL,
  `achievement_id` int NOT NULL,
  `awarded_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`,`achievement_id`),
  KEY `achievement_id` (`achievement_id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_achievements`
--

INSERT INTO `user_achievements` VALUES (2,1,'2026-01-31 13:38:02'),(4,3,'2026-02-02 09:24:57');

--
-- Table structure for table `user_character_skill_unlocks`
--

CREATE TABLE `user_character_skill_unlocks` (
  `user_character_id` int NOT NULL,
  `node_id` int NOT NULL,
  `unlocked_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_character_id`,`node_id`),
  KEY `fk_ucsu_node` (`node_id`),
  CONSTRAINT `fk_ucsu_node` FOREIGN KEY (`node_id`) REFERENCES `skill_nodes` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_ucsu_uc` FOREIGN KEY (`user_character_id`) REFERENCES `user_characters` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_character_skill_unlocks`
--

INSERT INTO `user_character_skill_unlocks` VALUES (1,1,'2026-02-02 11:38:59'),(1,2,'2026-02-02 11:47:09'),(1,4,'2026-02-02 11:47:32');

--
-- Table structure for table `user_character_stats`
--

CREATE TABLE `user_character_stats` (
  `user_character_id` int NOT NULL,
  `hp_base` int NOT NULL DEFAULT '0',
  `mp_base` int NOT NULL DEFAULT '0',
  `atk_base` int NOT NULL DEFAULT '0',
  `def_base` int NOT NULL DEFAULT '0',
  `agi_base` int NOT NULL DEFAULT '0',
  `luck_base` int NOT NULL DEFAULT '0',
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_character_id`),
  CONSTRAINT `fk_ucs_uc` FOREIGN KEY (`user_character_id`) REFERENCES `user_characters` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_character_stats`
--


--
-- Table structure for table `user_characters`
--

CREATE TABLE `user_characters` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` int NOT NULL,
  `character_id` int NOT NULL,
  `nickname` varchar(120) DEFAULT NULL,
  `is_in_party` tinyint(1) NOT NULL DEFAULT '1',
  `party_slot` int NOT NULL DEFAULT '1',
  `level` int NOT NULL DEFAULT '1',
  `xp` int NOT NULL DEFAULT '0',
  `skill_points` int NOT NULL DEFAULT '0',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `bond` int NOT NULL DEFAULT '0',
  `is_leader` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_user_char` (`user_id`,`character_id`),
  KEY `user_id` (`user_id`,`is_in_party`,`party_slot`),
  KEY `fk_uc_char` (`character_id`),
  CONSTRAINT `fk_uc_char` FOREIGN KEY (`character_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_characters`
--

INSERT INTO `user_characters` VALUES (1,1,1,'',1,1,1,0,1,'2026-02-02 11:38:06',0,0);

--
-- Table structure for table `user_email_verifications`
--

CREATE TABLE `user_email_verifications` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` bigint unsigned NOT NULL,
  `token_hash` char(64) NOT NULL,
  `expires_at` datetime NOT NULL,
  `used_at` datetime DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_verify_token` (`token_hash`),
  KEY `idx_verify_user` (`user_id`),
  CONSTRAINT `fk_verify_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_email_verifications`
--


--
-- Table structure for table `user_password_resets`
--

CREATE TABLE `user_password_resets` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint unsigned NOT NULL,
  `token_hash` char(64) NOT NULL,
  `expires_at` datetime NOT NULL,
  `used_at` datetime DEFAULT NULL,
  `ip_hash` char(64) DEFAULT NULL,
  `user_agent_hash` char(64) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_reset_user` (`user_id`),
  KEY `idx_reset_token` (`token_hash`),
  CONSTRAINT `fk_reset_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_password_resets`
--

INSERT INTO `user_password_resets` VALUES (1,5,'654e383a32dc29b61374622f1bc81bf1129459610ba4462d7e051807c40b0124','2026-02-03 02:37:12',NULL,'edcc00d2a219e4cd263648e939f7d819bdef8ccb2072c21813bb6b7e1d3a6d2f','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-03 01:52:12'),(2,5,'36732547fa66b36e53e47d47c311501ae012fcabcf4c4006390e2151c95d1445','2026-02-03 03:03:20',NULL,'c1c4bb54793332876cd6061cd5670237968a9d1734e55a559b15f5041a310f95','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-03 02:18:20'),(3,5,'69710136066aa4e09e626080a04fd832323809c5b95983405534cb467528b65a','2026-02-03 03:33:49',NULL,'d53c908eab85653932330e71c22a317466b14e8ff32f84ac6f26835ac1a266ac','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-03 02:48:49');

--
-- Table structure for table `user_profile`
--

CREATE TABLE `user_profile` (
  `user_id` bigint unsigned NOT NULL,
  `participation_points` int NOT NULL DEFAULT '0',
  `corruption` decimal(4,3) NOT NULL DEFAULT '0.000',
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`),
  CONSTRAINT `fk_profile_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_profile`
--

INSERT INTO `user_profile` VALUES (1,0,0.000,'2026-01-26 08:09:47'),(2,50,0.000,'2026-02-05 23:57:12'),(5,0,0.000,'2026-02-02 23:41:54'),(6,60,0.000,'2026-02-05 23:56:49');

--
-- Table structure for table `user_resonance_unlocks`
--

CREATE TABLE `user_resonance_unlocks` (
  `user_id` int NOT NULL,
  `node_id` int NOT NULL,
  `unlocked_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`,`node_id`),
  KEY `idx_user` (`user_id`),
  KEY `idx_node` (`node_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_resonance_unlocks`
--


--
-- Table structure for table `user_sessions`
--

CREATE TABLE `user_sessions` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint unsigned NOT NULL,
  `token_hash` char(64) NOT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `expires_at` timestamp NOT NULL,
  `last_seen_at` timestamp NULL DEFAULT NULL,
  `ip_hash` char(64) DEFAULT NULL,
  `user_agent_hash` char(64) DEFAULT NULL,
  `revoked_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_token_hash` (`token_hash`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `fk_sessions_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_sessions`
--

INSERT INTO `user_sessions` VALUES (1,1,'fc2dc1778baf158c8a79c950e1bd2761569d3db95bcf7575c9d22dee477ee087','2026-01-26 08:09:47','2026-02-25 08:09:47',NULL,'a95c150287161c921c60e15f1c51d76b12c37677b570aff213493212978f497b','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-01-26 08:12:05'),(2,1,'220577f3a7e1c317901a8a26b4f5cd5cddf4b0afa94c4600f2ca158c675d696f','2026-01-26 08:12:11','2026-02-25 08:12:11',NULL,'5108b00c68eeb4ef54fade9144ce4684e30a991a779a7a74dc8283cae52fd9d7','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(3,1,'363a1a29ba88355a77ea5b4653522e64c235961e6122407e0df6775249a1ea07','2026-01-26 08:40:35','2026-02-25 08:40:35',NULL,'779c5a8efd7e570da5c4e3978c860d4701580ac1447960e757375aecda8a4fd9','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(4,1,'8c0baa1c4aefe1296b7e2cf00f9a2a5a1771d064e2beb7f848e76c41b2223cb5','2026-01-26 10:38:48','2026-02-25 10:38:48',NULL,'6ca9b5f600c31e889040d8d50613cb48306a85652dd43c87f9f53e1517f14f35','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(5,1,'b053341c3bd7c8a8a20f53928a3795fa45d1e22b98abf29f13d916cb0af36a24','2026-01-26 23:30:39','2026-02-25 23:30:39',NULL,'7078a51bef717a612774e4e94b7fef94c44d75f225c1091f92b4d5c8e91efa48','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(6,1,'58033a9b77ac6ed922b55251f99e629b2cbda6a651b805e51c1df439c5eb0cf0','2026-01-27 05:43:21','2026-02-26 05:43:21',NULL,'affa8bf6ef3b3c855a759b5cb18d6337e28db2bd6c5d367df62ea598df5b4e61','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(7,1,'b19012f6f4d808929495a9bca724f71c4afd8bbd96e4992f6d678560db6b06e2','2026-01-27 06:11:42','2026-02-26 06:11:42',NULL,'f1567cd161ec3ade0c143516ae6f1da10fdae58613d916906881eaeeaebb08f6','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(8,1,'1f426e1ff231d800861e63486f0ffb57a7ee3250b3500bed01ba0989f4a61dda','2026-01-28 01:14:54','2026-02-27 01:14:54',NULL,'4f27feaa9408009c069fbc23d65566e02662cc898589985c73134a8ffa285117','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(9,1,'b1fbe25569181ff2da2c10513c0f6dca9d7e585d6311632c692f850482707f71','2026-01-28 01:29:01','2026-02-27 01:29:01',NULL,'44bc38ee8af04559209f0852257840a135842baf1a70e785c50933489115f691','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(10,1,'cb4f642815363b50b630b357f5494033c637dfbe3c9c103d3534009ddda180de','2026-01-28 01:55:22','2026-02-27 01:55:22',NULL,'831339f25c4fc54602818152f4d6bafa14a42ccbf0aeb7feec2a281ac271be32','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(11,1,'19e0d91aed554ee25413d67cd3430fce014ddb85f233d6bda04c1e2a105e8436','2026-01-28 16:52:19','2026-02-27 16:52:19',NULL,'41fec3f08ac3067f735a7865a65852a45dc23258662fad4a0e99e10c73c304b8','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(12,2,'5dac8035821e5d317c9c99a6ee4724ba2eddc233381297fb6096421b0a34be88','2026-01-29 21:06:39','2026-02-28 21:06:39',NULL,'44bc38ee8af04559209f0852257840a135842baf1a70e785c50933489115f691','36709a46e19405c3706894c673dbb5b2b55893ebfc03ce488a370fab29ef487a',NULL),(13,1,'011f499a5f855db501984e5cc2daa2ab6038b49d29c09887730825086e518c63','2026-01-31 11:54:03','2026-03-02 11:54:03',NULL,'bb0ee04fa0d982f7a379d1424fcaf54c300c3bc32d3e6119ac4481f63d782bc4','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(14,1,'fbc3a394d3525350648214f24f17d27b7532c272dc40666431a9791da8ed9a65','2026-01-31 13:09:56','2026-03-02 13:09:56',NULL,'5fb78e53979d8de178fb75ca743998650c72144280ddeeef2c2a53bad2349971','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(15,1,'5d46ea7ba2c994bffe113797d9b070fa392865768a5f1dbcd5b295a89e4470d8','2026-01-31 15:30:30','2026-03-02 15:30:30',NULL,'d53c908eab85653932330e71c22a317466b14e8ff32f84ac6f26835ac1a266ac','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(16,1,'26969a131307ffb2043e3e9d3a6e5db21ab2d35dda956c348b4ed1de0c79d9a9','2026-01-31 18:22:35','2026-03-02 18:22:35',NULL,'5fb78e53979d8de178fb75ca743998650c72144280ddeeef2c2a53bad2349971','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(17,1,'1df87462c9a5a95aa161640214a5abda34235027d36adcf8ecd3118655a151fc','2026-01-31 20:43:57','2026-03-02 20:43:57',NULL,'71a4b573bc41e395b5c836c9c56fb0cc82ba3b61158b455d530415d2e78a2207','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(18,1,'f8f94feae9ce1ae9c80e5dbf7907108f21ef415120de0b615b800cbb6d22b298','2026-01-31 22:00:45','2026-03-02 22:00:45',NULL,'414b6193213c1183bfab374d5a682be48dc3006f724c38d6d0ffe96b1d45cd18','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(19,1,'b4d2296e05ecb05f190f5689a1b7f3e3a63b7bf442a5f7951a71929f5d51fe07','2026-02-01 01:30:00','2026-03-03 01:30:00',NULL,'af47f3a90430e9d147ee952603dc38807301d01a18a3cbaab118e867ccb897c6','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(20,1,'76a16a4ceb233c3ab8ce9020fff7b9c0bb6f0cb7ce83f71c77ac3773f141d62f','2026-02-01 16:08:56','2026-03-03 16:08:56',NULL,'6588a9db72fa08df8ff5793c15475202d33c8a955e97fa078c9c7fddd339e56c','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(21,1,'79542a9b3c0758dbe5c7971d27a828868b8f19a2d610ee603a7d70749c7dab7f','2026-02-01 18:31:11','2026-03-03 18:31:11',NULL,'f1567cd161ec3ade0c143516ae6f1da10fdae58613d916906881eaeeaebb08f6','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(22,1,'bd2daef93f2c53b02c3a488b343545f80b1f3e04ef4ee5906704d843b60fd7b9','2026-02-01 19:19:58','2026-03-03 19:19:58',NULL,'e370c99a5085e79fdd32399c8e17b6d578e9971ec506396d7e557f34f4106a92','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(23,1,'d1e4ad0e394a9131f899097c86604fc6225ee8a4588f4ff9e6d8e6b5467f963c','2026-02-01 20:48:06','2026-03-03 20:48:06',NULL,'0f7a222a3201328975bbe585e817aff292a6d81a197f68fe41f268ea3a55cf7b','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(26,1,'f580e89d04f044172f66cee8104e7847bd8fc4bca0baa91b1ca65ae942cdf5aa','2026-02-02 01:37:12','2026-03-04 01:37:12',NULL,'ab69e38aa299736cea5a874f67312df3b16be89e8aa51a431389abf4a84caa98','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-02 02:36:15'),(27,1,'a740101e16ea5f8d9d8d688cafe2802e10ba0524bdfd5e1a91c441201e0516b3','2026-02-02 02:40:08','2026-03-04 02:40:08',NULL,'4b6a5dccc8f40aad38756e4c465b300ea830a8b09fac0729cf83eb3d97a9ce8a','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-02 02:40:13'),(28,1,'288273dee846a6677d9e63daf5b3bb8e21849eee021dd4a9ffea0a57ddcd2e7e','2026-02-02 09:08:48','2026-03-04 09:08:48',NULL,'c1125cd9d0a69e1f52af317943b7842f149a251c3e0db5d5f104464c4f40b28b','86acc63eeb312d9b50cf3bd08e81df351cb2c141ce38a7002e0c5e7df8fa0731',NULL),(29,1,'aac968c09f65deb0d639b0edcaef9334d507b6de7019a7a583526a6759b6383f','2026-02-02 09:17:45','2026-03-04 09:17:45',NULL,'71a4b573bc41e395b5c836c9c56fb0cc82ba3b61158b455d530415d2e78a2207','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-02 09:26:43'),(30,1,'0dfee82a1c71089aa9d17a510b692a53335cb0bfc285461abf177379d8454025','2026-02-02 09:26:57','2026-03-04 09:26:57',NULL,'831339f25c4fc54602818152f4d6bafa14a42ccbf0aeb7feec2a281ac271be32','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(31,1,'ac6c719db1c8c8ed83898c7f3f32af321f4ddf4e8ebe65c43878e1f61a11e057','2026-02-02 11:37:01','2026-03-04 11:37:01',NULL,'71a4b573bc41e395b5c836c9c56fb0cc82ba3b61158b455d530415d2e78a2207','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(32,1,'e7dac19823c2010d1e9702f85a4ffc9a587540550991534e7753a0dcc83c8777','2026-02-02 13:58:24','2026-03-04 13:58:24',NULL,'831339f25c4fc54602818152f4d6bafa14a42ccbf0aeb7feec2a281ac271be32','2bf039ee060747d8e49b862966e6c9f8fe6252e71c3c597f43b70f6a0e500d2a',NULL),(33,1,'bca82b99e6c5318284861111ae72497d133f1ed64c9521e6d96089d1be1ed0f7','2026-02-02 13:58:48','2026-03-04 13:58:48',NULL,'831339f25c4fc54602818152f4d6bafa14a42ccbf0aeb7feec2a281ac271be32','2bf039ee060747d8e49b862966e6c9f8fe6252e71c3c597f43b70f6a0e500d2a',NULL),(34,1,'e9e10151ae50c0c0e7e38ebf0f11c6d98b31d0ffb42e439ebf614af18ee60c0b','2026-02-02 23:07:21','2026-03-04 23:07:21',NULL,'5108b00c68eeb4ef54fade9144ce4684e30a991a779a7a74dc8283cae52fd9d7','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(35,5,'9bca87b811fcef923934159105ec6f01d14bcb23ff49350dc7d5fc3778eb3744','2026-02-02 23:41:54','2026-03-04 23:41:54',NULL,'5108b00c68eeb4ef54fade9144ce4684e30a991a779a7a74dc8283cae52fd9d7','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-02 23:46:42'),(36,1,'7e5ceecd027b02e0d3e99c8157903c08aa1d549702b63adad1c79ff62dc5bbc5','2026-02-03 03:12:30','2026-03-05 03:12:30',NULL,'8e1438c607bfda2a9fd3b47bf8bf94eeb31ff2fb542fbbf126befcec096cf174','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(37,1,'bc0a134ccf4c694e96cfb090e7a217a802ff754d8307653445d36acef5f0bef6','2026-02-03 06:43:45','2026-03-05 06:43:45',NULL,'7bce147075a0d2415a33c7f6f6323c3cffc0f5526f345e6276addb4ad5319470','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(38,1,'ec6728de6e6b1fc68ffc950f887dd88b7ae39eb606827b3668e985b7404be789','2026-02-03 07:20:35','2026-03-05 07:20:35',NULL,'e370c99a5085e79fdd32399c8e17b6d578e9971ec506396d7e557f34f4106a92','86acc63eeb312d9b50cf3bd08e81df351cb2c141ce38a7002e0c5e7df8fa0731',NULL),(39,1,'cd62c4c966e832cabb29d4c5f9dac1a1c40a0c38503c77c79a1ac15426b6f45c','2026-02-04 00:04:45','2026-03-06 00:04:45',NULL,'779c5a8efd7e570da5c4e3978c860d4701580ac1447960e757375aecda8a4fd9','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(40,1,'c8257372d302247bf24a35595adbf3afadb627885567769c2e8ebbbe2777aced','2026-02-04 00:05:47','2026-03-06 00:05:47',NULL,'0ef046d6896cdc1d8afad568575278089935298f8635634989bd1f524a3fc93c','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-04 00:16:42'),(41,1,'f0f96452b395571466fe156a7e0fb4ba0e3407c7f3cf321d06bbf24f84aa2cb0','2026-02-04 00:07:04','2026-03-06 00:07:04',NULL,'924c3f62f6946927f8652dde619be732a6ba0e1f23516089b5e69843527e118d','86acc63eeb312d9b50cf3bd08e81df351cb2c141ce38a7002e0c5e7df8fa0731',NULL),(42,1,'e7425b044b32c9af961aa8ae2214cacdacb4bbb33f1dbf7dac72a8235b994c9c','2026-02-04 00:07:27','2026-03-06 00:07:27',NULL,'e370c99a5085e79fdd32399c8e17b6d578e9971ec506396d7e557f34f4106a92','86acc63eeb312d9b50cf3bd08e81df351cb2c141ce38a7002e0c5e7df8fa0731',NULL),(43,1,'b47c8890ac02d3f980455a731294ddd1e83bb6502c9e122fb65b7620f65c0610','2026-02-04 00:19:59','2026-03-06 00:19:59',NULL,'c96750b586b61f1ee47593287b3dc56af154790b7be901c5fe8bd86ea3e49fd7','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(44,1,'b5e66ee522b7751e7b45665c29c59d17995be316479412eacb9bfcbd75ce3183','2026-02-04 00:35:55','2026-03-06 00:35:55',NULL,'9ed239404364758cd4dbdbc8a9459adced2c5f45b12c36e7c992a1af0ba7ef83','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(45,1,'6021a397f62184f0c5c24a5afe893bf68d1693cde9cf92425843106f6ea4b54d','2026-02-04 02:20:26','2026-03-06 02:20:26',NULL,'e370c99a5085e79fdd32399c8e17b6d578e9971ec506396d7e557f34f4106a92','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-04 02:20:32'),(46,1,'15140ddc9a6559b9dec4ea6314737a1ba2cca105ed53ae6ba5aef1125b6de99e','2026-02-04 02:20:37','2026-03-06 02:20:37',NULL,'e370c99a5085e79fdd32399c8e17b6d578e9971ec506396d7e557f34f4106a92','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(47,1,'858029841dc80614fbc70dd7d284e35d1070bb2299a7ba13bac5257f199a4a84','2026-02-04 08:53:26','2026-03-06 08:53:26',NULL,'a95c150287161c921c60e15f1c51d76b12c37677b570aff213493212978f497b','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(48,1,'13e0372995e2eb549bf837bdd1be42323fc66580cf211f15e101ce827cfe269b','2026-02-04 08:56:51','2026-03-06 08:56:51',NULL,'4f27feaa9408009c069fbc23d65566e02662cc898589985c73134a8ffa285117','86acc63eeb312d9b50cf3bd08e81df351cb2c141ce38a7002e0c5e7df8fa0731',NULL),(49,1,'037c5b55d726c514ff8279424f5c80a1654468f8b24acc7c24b4982822311e0e','2026-02-04 09:23:11','2026-03-06 09:23:11',NULL,'edcc00d2a219e4cd263648e939f7d819bdef8ccb2072c21813bb6b7e1d3a6d2f','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-04 09:29:17'),(50,1,'e42733edea99e2c9ac2a38b9507ba444a5920934718f58f91fdc1efad61d5832','2026-02-05 02:18:47','2026-03-07 02:18:47',NULL,'4972f8e009cdb5d8dee3d43b73326d4bea1506c235445ff7fc51cfed73967647','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-05 02:19:12'),(51,1,'f3fce41b08f27610d9e12b1b126571347dd6f7afa2dd30d3c8e6581e5fd22f25','2026-02-05 02:19:49','2026-03-07 02:19:49',NULL,'6a60c4735b5e5dd3697c9c4ecc27b189627bb1719654f0ff41746e05377285b8','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-05 02:25:18'),(52,1,'790838dc884efe22f31e214f7af7311c972195055061031412b8a5da0ef13bc8','2026-02-05 02:28:42','2026-03-07 02:28:42',NULL,'0f7a222a3201328975bbe585e817aff292a6d81a197f68fe41f268ea3a55cf7b','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-05 02:31:37'),(53,1,'bb4e70d035ad48715a5a654042ff366c64327df37ab2f3b6cf66476c40f297b8','2026-02-05 11:05:21','2026-03-07 11:05:21',NULL,'c96750b586b61f1ee47593287b3dc56af154790b7be901c5fe8bd86ea3e49fd7','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2','2026-02-05 11:05:27'),(54,1,'e475c6b1c06a5116e712ea23536c7a54fe023a9b21fdd015154c7f235f2097eb','2026-02-05 11:06:04','2026-03-07 11:06:04',NULL,'01f54a934d6ad547777309e99aad27d193f05e4dfb38734eb5a28f3bf3871441','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(55,6,'e0ecc0b51d8e69d0a6bdfc218c77b14961ecd04da486aba015673963176dc179','2026-02-05 23:30:52','2026-03-07 23:30:52',NULL,'506cf3aa40903b07da7c167672d2823598b4013ee32b9ff9a4aea1a8d98f7c76','ff9b6d5d995c1983bdeff028fb2abdfca05db296c62989f1dd230e821d593b9b',NULL),(56,1,'57f967689f5e8a8501b708941a55025a9d640559220aeb0c0e0e301134549bea','2026-02-05 23:54:37','2026-03-07 23:54:37',NULL,'71e33ae7cd4ab4f1a66ba976f5841659cff989c0e03646e1b359e2729fba007d','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(57,1,'f66a8da81d1632e53e084de1dc9029bee0485447d3ab219b8d3f2305c6344ba8','2026-02-06 00:42:08','2026-03-08 00:42:08',NULL,'5108b00c68eeb4ef54fade9144ce4684e30a991a779a7a74dc8283cae52fd9d7','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(58,1,'b8ac85d269c31ce5bf641c86120112522f77dfb8723f1053e35aa5e494a9bfde','2026-02-06 02:31:23','2026-03-08 02:31:23',NULL,'c96750b586b61f1ee47593287b3dc56af154790b7be901c5fe8bd86ea3e49fd7','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(59,1,'c3a3e6afcfc1f3b7caab0ca896c01c1406d3209fd1900f4c6b90ec6f74782be9','2026-02-06 03:33:21','2026-03-08 03:33:21',NULL,'007c47351e61faa69b1c4d565e44495e58b74246f2ffa5b610d90c8f5315cad3','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(60,1,'c7cc5fc17f2d9a6cdb8536e2b77f0f9f3f9fbd635b213bdc7b805d8ed7d0c763','2026-02-06 04:44:37','2026-03-08 04:44:37',NULL,'c96750b586b61f1ee47593287b3dc56af154790b7be901c5fe8bd86ea3e49fd7','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(61,1,'4681b558d2b3dc865846757a60318233606d0cf6079cb27633a3bf006db42958','2026-02-06 11:01:36','2026-03-08 11:01:36',NULL,'5b6bff4b93a75171a519672157c062de427a5d536f12c5d5898362d71e5e5697','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(62,1,'403c7fcb024a7a1f5fd574991a78dff7ce7a5c84ca07e6049ebe7ec8e942af85','2026-02-07 06:38:10','2026-03-09 06:38:10',NULL,'506cf3aa40903b07da7c167672d2823598b4013ee32b9ff9a4aea1a8d98f7c76','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(63,1,'17fb4c114a6b72d8f01031068b4c36f01cf5e9fde9cd7848e2cc5264c5750a8a','2026-02-07 13:24:49','2026-03-09 13:24:49',NULL,'bb0ee04fa0d982f7a379d1424fcaf54c300c3bc32d3e6119ac4481f63d782bc4','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL),(64,1,'9525b55683a9931c0608f4434c9d1bca5fac1804573e4014842b48d2dbc2c530','2026-02-07 13:37:21','2026-03-09 13:37:21',NULL,'779c5a8efd7e570da5c4e3978c860d4701580ac1447960e757375aecda8a4fd9','816147bedd84317a66534e444e60842858f0f2a3b3fa43710b4ef836da4252d2',NULL);

--
-- Table structure for table `user_skill_unlocks`
--

CREATE TABLE `user_skill_unlocks` (
  `user_id` int NOT NULL,
  `node_id` int NOT NULL,
  `unlocked_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`,`node_id`),
  KEY `fk_unlock_node` (`node_id`),
  CONSTRAINT `fk_unlock_node` FOREIGN KEY (`node_id`) REFERENCES `skill_nodes` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_skill_unlocks`
--


--
-- Table structure for table `user_status`
--

CREATE TABLE `user_status` (
  `user_id` bigint unsigned NOT NULL,
  `email_verified` tinyint(1) NOT NULL DEFAULT '0',
  `admin_approved` tinyint(1) NOT NULL DEFAULT '0',
  `is_active` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `approved_by_admin` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`user_id`),
  CONSTRAINT `fk_user_status_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `user_status`
--


--
-- Table structure for table `users`
--

CREATE TABLE `users` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password_hash` varchar(255) NOT NULL,
  `role` enum('admin','moderator','user') NOT NULL DEFAULT 'user',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `last_login_at` timestamp NULL DEFAULT NULL,
  `is_banned` tinyint(1) NOT NULL DEFAULT '0',
  `is_verified` tinyint(1) NOT NULL DEFAULT '0',
  `verified_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `users`
--

INSERT INTO `users` VALUES (1,'admin','bluecometspt@gmail.com','$2y$10$X2iIz2DaZRzykG4BgXYZLeIg9ZAvDSLjhQG9iZ5ySZRcNUrWvr/9C','admin','2026-01-26 08:09:47','2026-02-07 13:37:21',0,1,NULL),(2,'ThaTank56','Datdude.ab0216@gmail.com','$2y$10$YoPw1nsaoUM9T5VRkykgoOS1.0QQFNfw3D/1ZA20T45.19dd4Mw62','user','2026-01-29 21:06:39',NULL,0,1,NULL),(5,'admin2','studio.excelia.zero@gmail.com','$2y$10$lVrTdSAFo4Ij1DkJBi8lkef8EaUCIW7fv0Nx.5LVa/9bfTCes9bZS','user','2026-02-02 23:41:54',NULL,0,0,NULL),(6,'NekroTechie','nekrotechie@gmail.com','$2y$10$ucxwgtSl/uzlGkI6C86I5eaPqQ.P1uvuy9yapjCxjmlk5yd1x1WKe','admin','2026-02-05 23:30:52',NULL,0,0,NULL);


