diff --git a/.gitignore b/.gitignore index d917b432c..0c3ace360 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ !/themes/default !/themes/bootstrap !/themes/installer +!/themes/kunairo # Import Configs /config/import diff --git a/config/application.php b/config/application.php index 4ff69e220..0320218e4 100644 --- a/config/application.php +++ b/config/application.php @@ -10,9 +10,9 @@ // WARNING: This will be mostly IGNORED on non-POSIX-compliant OSes (e.g. Windows). 'DefaultLoginGroup' => null, 'DefaultCharMapServer' => null, - 'DefaultLanguage' => 'en_us', // Specify the default control panel language (see FLUX_ROOT/lang/ directory for available languages.) + 'DefaultLanguage' => 'es_es', // Spanish only. Change to 'en_us' for English. 'SiteTitle' => 'Flux Control Panel', // This value is only used if the theme decides to use it. - 'ThemeName' => array('default', 'bootstrap'), // Names of the themes you would like list for use in the footer. Themes are in FLUX_ROOT/themes. + 'ThemeName' => array('kunairo'), // Only kunairo theme available. Add 'default','bootstrap' to re-enable selector. 'ScriptTimeLimit' => 0, // Script execution time limit. Specifies (in seconds) how long a page should run before timing out. (0 means forever) 'MissingEmblemBMP' => 'empty.bmp', // 'ItemIconNameFormat' => '%d.png', // The filename format for item icons (defaults to {itemid}.png). diff --git a/config/servers.php b/config/servers.php index 8ea3e7518..9526a2425 100644 --- a/config/servers.php +++ b/config/servers.php @@ -61,15 +61,15 @@ 'CharMapServers' => array( array( 'ServerName' => 'FluxRO', - 'Renewal' => true, + 'Renewal' => false, 'MaxCharSlots' => 9, 'DateTimezone' => null, // Specifies game server's timezone for this char/map pair. (See: http://php.net/timezones) //'ResetDenyMaps' => 'sec_pri', // Defaults to 'sec_pri'. This value can be an array of map names. //'Database' => 'ragnarok', // Defaults to DbConfig.Database 'ExpRates' => array( - 'Base' => 100, // Rate at which (base) exp is given - 'Job' => 100, // Rate at which job exp is given - 'Mvp' => 100 // MVP bonus exp rate + 'Base' => 250, // Rate at which (base) exp is given + 'Job' => 250, // Rate at which job exp is given + 'Mvp' => 250 // MVP bonus exp rate ), 'DropRates' => array( // If drop rate was below this amount and bonus is applied to it, the bonus can't make it exceed this amount. diff --git a/lang/en_us.php b/lang/en_us.php index 44737a395..4e9b07582 100755 --- a/lang/en_us.php +++ b/lang/en_us.php @@ -836,5 +836,82 @@ // Module: webcommands 'WCTitleLabel' => 'Web Commands', + // KunaiRO Theme + 'KunaiROHeroTitle' => 'KunaiRO', + 'KunaiROHeroTagline' => 'Where War Matters', + 'KunaiROHeroDescription' => 'Competitive Pre-Renewal server with a living economy and real progression.', + 'KunaiROBadgePreRenewal' => 'Pre-Renewal', + 'KunaiROBadgeRates' => '250x / 250x / 50x', + 'KunaiROBadgeNoPTW' => 'No Pay-to-Win', + 'KunaiROBtnPlay' => 'Download', + 'KunaiROBtnRegister' => 'Create Account', + 'KunaiROBtnDiscord' => 'Discord', + 'KunaiROFooterTagline' => 'Where War Matters', + 'KunaiROFooterCopyright' => 'All rights reserved.', + 'KunaiROFooterNavDownload' => 'Download', + 'KunaiROFooterNavSupport' => 'Support', + + // KunaiRO — Stats bar + 'KunaiROStatsPlayersLabel' => 'Active Players', + 'KunaiROStatsWoELabel' => 'WoE Status', + 'KunaiROStatsWoEActive' => 'Active', + 'KunaiROStatsUptimeLabel' => 'Uptime', + 'KunaiROStatsRatesLabel' => 'Rates', + 'KunaiROStatsRatesValue' => '250x / 250x / 50x', + + // KunaiRO — Why section + 'KunaiROWhyHeading' => 'Why KunaiRO', + 'KunaiROWhyBalancedTitle' => 'Balanced Pre-Renewal', + 'KunaiROWhyBalancedDesc' => 'Classes tuned for competitive PvP and WoE. No broken builds, no exploits.', + 'KunaiROWhyNoPTWTitle' => 'Zero Pay-to-Win', + 'KunaiROWhyNoPTWDesc' => 'Every advantage is earned in-game. No cash shop shortcuts.', + 'KunaiROWhyEconomyTitle' => 'Living Economy', + 'KunaiROWhyEconomyDesc' => 'Player-driven market with real supply and demand. Vending matters.', + 'KunaiROWhyCompetitionTitle' => 'Real Competition', + 'KunaiROWhyCompetitionDesc' => 'Weekly WoE, ranked PvP seasons, and guild rivalries that define the server.', + + // KunaiRO — News section + 'KunaiRONewsHeading' => 'Latest News', + 'KunaiRONewsEmpty' => 'No news yet. Stay tuned for updates.', + 'KunaiROLabelLanguage' => 'Language', + + // KunaiRO — Submenu translations (account module) + 'KunaiROSubLogin' => 'Login', + 'KunaiROSubRegister' => 'Register', + 'KunaiROSubResetPass' => 'Reset Password', + 'KunaiROSubResend' => 'Resend E-mail Confirmation', + 'KunaiROSubChangePass' => 'Change Password', + 'KunaiROSubChangeMail' => 'Change E-mail', + 'KunaiROSubChangeGender' => 'Change Gender', + 'KunaiROSubViewAccount' => 'View Account', + 'KunaiROSubTransfer' => 'Transfer Credits', + 'KunaiROSubXferLog' => 'Credit Transfer History', + 'KunaiROSubCart' => 'Go to Shopping Cart', + 'KunaiROSubListAccounts' => 'List Accounts', + + // KunaiRO — Purchase/Donate submenu + 'KunaiROSubShop' => 'Shop', + 'KunaiROSubGoToCart' => 'Go to Cart', + 'KunaiROSubCheckout' => 'Checkout', + 'KunaiROSubEmptyCart' => 'Empty Cart', + 'KunaiROSubPending' => 'Pending Redemption', + 'KunaiROSubDonate' => 'Make a Donation', + 'KunaiROSubDonateHistory' => 'Donation History', + 'KunaiROSubTrustedPaypal' => 'Trusted PayPal E-mails', + + // KunaiRO — Day names + 'KunaiRODaySunday' => 'Sunday', + 'KunaiRODayMonday' => 'Monday', + 'KunaiRODayTuesday' => 'Tuesday', + 'KunaiRODayWednesday' => 'Wednesday', + 'KunaiRODayThursday' => 'Thursday', + 'KunaiRODayFriday' => 'Friday', + 'KunaiRODaySaturday' => 'Saturday', + + // KunaiRO — Stats + 'KunaiROStatsWoEInactive' => 'Inactive', + 'KunaiROStatsOnline' => 'Online', + 'KunaiROStatsOffline' => 'Offline', + ); ?> diff --git a/lang/es_es.php b/lang/es_es.php index 7a1c8e315..9c777c7df 100755 --- a/lang/es_es.php +++ b/lang/es_es.php @@ -844,5 +844,82 @@ 'SDGroup3' => 'Administration', 'SDLinkOpenNew' => 'Open a new ticket', + // KunaiRO Theme + 'KunaiROHeroTitle' => 'KunaiRO', + 'KunaiROHeroTagline' => 'Donde la guerra sí importa', + 'KunaiROHeroDescription' => 'Servidor Pre-Renewal competitivo con economía viva y progreso real.', + 'KunaiROBadgePreRenewal' => 'Pre-Renewal', + 'KunaiROBadgeRates' => '250x / 250x / 50x', + 'KunaiROBadgeNoPTW' => 'Sin Pay-to-Win', + 'KunaiROBtnPlay' => 'Descargar', + 'KunaiROBtnRegister' => 'Crear cuenta', + 'KunaiROBtnDiscord' => 'Discord', + 'KunaiROFooterTagline' => 'Donde la guerra sí importa', + 'KunaiROFooterCopyright' => 'Todos los derechos reservados.', + 'KunaiROFooterNavDownload' => 'Descargar', + 'KunaiROFooterNavSupport' => 'Soporte', + + // KunaiRO — Stats bar + 'KunaiROStatsPlayersLabel' => 'Jugadores activos', + 'KunaiROStatsWoELabel' => 'Estado WoE', + 'KunaiROStatsWoEActive' => 'Activo', + 'KunaiROStatsUptimeLabel' => 'Uptime', + 'KunaiROStatsRatesLabel' => 'Rates', + 'KunaiROStatsRatesValue' => '250x / 250x / 50x', + + // KunaiRO — Why section + 'KunaiROWhyHeading' => 'Por qué KunaiRO', + 'KunaiROWhyBalancedTitle' => 'Pre-Renewal balanceado', + 'KunaiROWhyBalancedDesc' => 'Clases ajustadas para PvP y WoE competitivo. Sin builds rotos ni exploits.', + 'KunaiROWhyNoPTWTitle' => 'Sin Pay-to-Win', + 'KunaiROWhyNoPTWDesc' => 'Cada ventaja se gana jugando. Sin atajos de cash shop.', + 'KunaiROWhyEconomyTitle' => 'Economía viva', + 'KunaiROWhyEconomyDesc' => 'Mercado impulsado por jugadores con oferta y demanda real. El vending importa.', + 'KunaiROWhyCompetitionTitle' => 'Competencia real', + 'KunaiROWhyCompetitionDesc' => 'WoE semanal, temporadas PvP rankeadas y rivalidades de guild que definen el servidor.', + + // KunaiRO — News section + 'KunaiRONewsHeading' => 'Últimas noticias', + 'KunaiRONewsEmpty' => 'Sin noticias por ahora. Pronto habrá novedades.', + 'KunaiROLabelLanguage' => 'Idioma', + + // KunaiRO — Submenu translations (account module) + 'KunaiROSubLogin' => 'Iniciar sesión', + 'KunaiROSubRegister' => 'Registrarse', + 'KunaiROSubResetPass' => 'Restablecer contraseña', + 'KunaiROSubResend' => 'Reenviar confirmación de e-mail', + 'KunaiROSubChangePass' => 'Cambiar contraseña', + 'KunaiROSubChangeMail' => 'Cambiar e-mail', + 'KunaiROSubChangeGender' => 'Cambiar género', + 'KunaiROSubViewAccount' => 'Ver cuenta', + 'KunaiROSubTransfer' => 'Transferir créditos', + 'KunaiROSubXferLog' => 'Historial de transferencias', + 'KunaiROSubCart' => 'Ir al carrito de compras', + 'KunaiROSubListAccounts' => 'Listar cuentas', + + // KunaiRO — Purchase/Donate submenu + 'KunaiROSubShop' => 'Tienda', + 'KunaiROSubGoToCart' => 'Ir al carrito', + 'KunaiROSubCheckout' => 'Pagar', + 'KunaiROSubEmptyCart' => 'Vaciar carrito', + 'KunaiROSubPending' => 'Pendientes de canjear', + 'KunaiROSubDonate' => 'Hacer una donación', + 'KunaiROSubDonateHistory' => 'Historial de donaciones', + 'KunaiROSubTrustedPaypal' => 'Emails de PayPal confiables', + + // KunaiRO — Day names + 'KunaiRODaySunday' => 'Domingo', + 'KunaiRODayMonday' => 'Lunes', + 'KunaiRODayTuesday' => 'Martes', + 'KunaiRODayWednesday' => 'Miércoles', + 'KunaiRODayThursday' => 'Jueves', + 'KunaiRODayFriday' => 'Viernes', + 'KunaiRODaySaturday' => 'Sábado', + + // KunaiRO — Stats + 'KunaiROStatsWoEInactive' => 'Inactivo', + 'KunaiROStatsOnline' => 'Online', + 'KunaiROStatsOffline' => 'Offline', + ); ?> diff --git a/modules/purchase/cart.php b/modules/purchase/cart.php index f2ae777cc..8bf400470 100644 --- a/modules/purchase/cart.php +++ b/modules/purchase/cart.php @@ -4,11 +4,11 @@ $this->loginRequired(); if ($server->cart->isEmpty()) { - $session->setMessageData('Your cart is currently empty.'); + $session->setMessageData('Tu carrito está vacío.'); $this->redirect($this->url('purchase')); } -$title = 'Shopping Cart'; +$title = 'Carrito de compras'; require_once 'Flux/ItemShop.php'; $items = $server->cart->getCartItems(); diff --git a/modules/purchase/checkout.php b/modules/purchase/checkout.php index 2a8345733..dba8fa090 100644 --- a/modules/purchase/checkout.php +++ b/modules/purchase/checkout.php @@ -3,14 +3,14 @@ $this->loginRequired(); -$title = 'Checkout Area'; +$title = 'Pagar'; if ($server->cart->isEmpty()) { - $session->setMessageData('Your cart is currently empty.'); + $session->setMessageData('Tu carrito está vacío.'); $this->redirect($this->url('purchase')); } elseif (!$server->cart->hasFunds()) { - $session->setMessageData('You do not have sufficient funds to make this purchase!'); + $session->setMessageData('No tienes suficientes créditos para esta compra.'); $this->redirect($this->url('purchase')); } @@ -51,19 +51,19 @@ if ($res) { if (!$deduct) { $server->cart->clear(); - $session->setMessageData('Failed to purchase all of the items in your cart!'); + $session->setMessageData('No se pudieron comprar los items de tu carrito.'); } elseif ($deduct != $server->cart->getTotal()) { $server->cart->clear(); - $session->setMessageData('Items have been purchased, however, some failed (your credits are still there.)'); + $session->setMessageData('Items comprados, pero algunos fallaron (tus créditos siguen ahí).'); } else { $server->cart->clear(); - $session->setMessageData('Items have been purchased. You may redeem them from the Redemption NPC.'); + $session->setMessageData('Items comprados exitosamente. Puedes canjearlos en el NPC de Canjeo.'); } } else { - $session->setMessageData('Purchase went bad, contact an admin!'); + $session->setMessageData('Error en la compra, contacta a un administrador.'); } $this->redirect(); diff --git a/modules/purchase/clear.php b/modules/purchase/clear.php index 099e88821..f3ad877b8 100644 --- a/modules/purchase/clear.php +++ b/modules/purchase/clear.php @@ -6,10 +6,10 @@ require_once 'Flux/ItemShop.php'; if ($server->cart && $server->cart->clear()) { - $session->setMessageData("Your cart has been emptied."); + $session->setMessageData("Tu carrito ha sido vaciado."); } else { - $session->setMessageData("Couldn't empty your cart, maybe it's already empty."); + $session->setMessageData("No se pudo vaciar tu carrito, puede que ya esté vacío."); } $this->redirect($this->url('purchase')); diff --git a/modules/purchase/remove.php b/modules/purchase/remove.php index 9da7c6266..f76bc133d 100644 --- a/modules/purchase/remove.php +++ b/modules/purchase/remove.php @@ -12,20 +12,20 @@ $nRemoved = $server->cart->deleteByItemNum($num); if ($nRemoved) { if (!$server->cart->isEmpty()) { - $session->setMessageData("Removed $nRemoved item(s) from your cart."); + $session->setMessageData("Se eliminaron $nRemoved item(s) de tu carrito."); $this->redirect($this->url('purchase', 'cart')); } else { - $session->setMessageData("Removed $nRemoved item(s) from your cart. Your cart is now empty."); + $session->setMessageData("Se eliminaron $nRemoved item(s) de tu carrito. Tu carrito ahora está vacío."); } } else { - $session->setMessageData("There were no items to remove from your cart."); + $session->setMessageData("No había items para eliminar de tu carrito."); } - + $this->redirect($this->url('purchase')); } -$session->setMessageData('No items were removed from your cart because none were selected.'); +$session->setMessageData('No se eliminaron items porque no seleccionaste ninguno.'); $this->redirect($this->url('purchase', 'cart')); ?> diff --git a/modules/woe/custom.php b/modules/woe/custom.php index d277a4a07..050798299 100644 --- a/modules/woe/custom.php +++ b/modules/woe/custom.php @@ -6,7 +6,15 @@ $col = "sday.value AS sday, eday.value AS eday, "; $col .= "stime.value AS stime, etime.value AS etime"; -$dayNames = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); +$dayNames = array( + Flux::message('KunaiRODaySunday'), + Flux::message('KunaiRODayMonday'), + Flux::message('KunaiRODayTuesday'), + Flux::message('KunaiRODayWednesday'), + Flux::message('KunaiRODayThursday'), + Flux::message('KunaiRODayFriday'), + Flux::message('KunaiRODaySaturday') +); $woeTimes = array(); foreach ($session->loginAthenaGroup->athenaServers as $athenaServer) { $sql = "SELECT $col FROM {$athenaServer->charMapDatabase}.mapreg AS sday "; diff --git a/modules/woe/index.php b/modules/woe/index.php index 3c5ef80fe..84dfd9bf2 100644 --- a/modules/woe/index.php +++ b/modules/woe/index.php @@ -2,7 +2,15 @@ if (!defined('FLUX_ROOT')) exit; $title = Flux::message('WoeTitle'); -$dayNames = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"); +$dayNames = array( + Flux::message('KunaiRODaySunday'), + Flux::message('KunaiRODayMonday'), + Flux::message('KunaiRODayTuesday'), + Flux::message('KunaiRODayWednesday'), + Flux::message('KunaiRODayThursday'), + Flux::message('KunaiRODayFriday'), + Flux::message('KunaiRODaySaturday') +); $woeTimes = array(); foreach ($session->loginAthenaGroup->athenaServers as $athenaServer) { diff --git a/themes/kunairo/account/create.php b/themes/kunairo/account/create.php new file mode 100644 index 000000000..cb9903c66 --- /dev/null +++ b/themes/kunairo/account/create.php @@ -0,0 +1,120 @@ + +

+

url('service', 'tos').'">'.Flux::message('AccountCreateTerms').'') ?>

+ +

Note:

+ +

Note:

+ 0): ?> +

Note:

+ + 0): ?> +

Note:

+ + 0): ?> +

Note:

+ + 0): ?> +

Note:

+ + +

Note:

+ + +

+ +
+ + + + + 1): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+

+ + + ? +

+
dateField('birthdate',null,0) ?>
+
+ +
+ +
+ +
+
+
+ url('service', 'tos').'">'.Flux::message('AccountCreateTerms').'') ?> +
+
+ +
+
+
diff --git a/themes/kunairo/account/login.php b/themes/kunairo/account/login.php new file mode 100644 index 000000000..1ba223fae --- /dev/null +++ b/themes/kunairo/account/login.php @@ -0,0 +1,61 @@ + +

+ +

+ + +actionAllowed('account', 'create')): ?> +

url('account', 'create')); ?>

+ + + +
+ + + + + + + + + + + + + 1): ?> + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +
+ +
+
+
diff --git a/themes/kunairo/css/flux.css b/themes/kunairo/css/flux.css new file mode 100644 index 000000000..9c0ae08b3 --- /dev/null +++ b/themes/kunairo/css/flux.css @@ -0,0 +1,1152 @@ + /********************************************* + ** KunaiRO dark theme override of flux.css ** + ** Based on default FluxCP stylesheet. ** + *********************************************/ + +.loginbox-admin-menu { + padding-top: 5px; + color: #C9A45C; +} + +body { + margin: 0 0 20px 0; + padding: 0; + font-family: "Lucida Grande", "Lucida Sans", Verdana, Tahoma, sans-serif; + font-size: 9pt; + color: #EDE6D6; + background-color: #07070B; +} + +table { + font-family: "Lucida Grande", "Lucida Sans", Verdana, Tahoma, sans-serif; + font-size: 9pt; +} + +tr, td, th { + vertical-align: top; +} + +.horizontal-table tr, .vertical-table tr, .generic-form-table tr, +.horizontal-table td, .vertical-table td, .generic-form-table td { + vertical-align: middle; +} + +.horizontal-table th, .vertical-table th, .generic-form-table th { + vertical-align: top; +} + +h2 { + color: #EDE6D6; + letter-spacing: 0; +} + +h3 { + font-weight: normal; + font-size: 120%; + color: #EDE6D6; + border-bottom: 1px dotted rgba(201,164,92,0.2); + text-transform: uppercase; +} + +h3:first-letter { + font-weight: bold; +} + +p { + margin: 4px 0 8px 0; + padding: 0; + color: rgba(237,230,214,0.65); +} + +a img { + border: 0; +} + +a { + color: #C9A45C; + text-decoration: none; +} + +input[type=text], input[type=password], input[type=file], textarea { + font-family: "Lucida Grande", "Lucida Sans", Verdana, Tahoma, sans-serif; + padding: 4px; + font-size: 10pt; + color: #EDE6D6; + background-color: #151822; + border: 1px solid rgba(201,164,92,0.15); + outline-width: 0; +} + +label:hover { + cursor: pointer; + color: #EDE6D6; +} + +.module-name { + font-weight: bold; + font-size: 12pt; +} + +.message { + display: block; + padding: 10px; + font-weight: bold; + font-size: 120%; + color: #C9A45C; + background-color: rgba(201,164,92,0.08); + border: 1px solid rgba(201,164,92,0.2); + border-radius: 6px; +} + +.notice { + display: block; + padding: 10px; + font-weight: normal; + font-size: 120%; + color: #FF7A1A; + background-color: rgba(255,122,26,0.06); + border: 1px solid rgba(255,122,26,0.2); + border-radius: 6px; +} + +.center { + text-align: center; +} + +#admin_sidebar, #sidebar { + margin-bottom: 10px; + border-collapse: collapse; + border-spacing: 0; +} + +#admin_sidebar img, #sidebar img { + display: block; +} + +#admin_sidebar td, #sidebar td { + padding: 0; +} + +#admin_sidebar td.menuitem, #admin_sidebar th.menuitem { + display: block; + font-size: 10pt; + border-width: 0 13px 0 11px; + border-style: solid; + border-color: #1C1F2E; +} + +#admin_sidebar th.menuitem { + background-color: #151822; +} + +#admin_sidebar th.menuitem strong { + display: block; + margin: 0 12px; + padding: 10px 0 2px 0; + font-size: 100%; + text-align: center; + color: #C9A45C; + border-bottom: 1px solid rgba(201,164,92,0.15); +} + +#admin_sidebar td.menuitem a { + margin: 0 auto; + display: block; + padding: 2px 5px 4px 18px; + color: rgba(237,230,214,0.65); + background-color: #151822; + text-align: left; + text-shadow: none; + text-decoration: none; +} + +#admin_sidebar td.menuitem a:hover { + color: #EDE6D6; + background-color: #1C1F2E; + text-shadow: none; +} + +#admin_sidebar td.menuitem a span { +} + +#sidebar td.sidebar-left, #sidebar td.sidebar-right { + background-color: #0F1118; +} + +#sidebar td.menuitem, #sidebar th.menuitem { + display: block; + font-size: 10pt; + border-width: 0 13px 0 11px; + border-style: solid; + border-color: #1C1F2E; +} + +#sidebar th.menuitem { + background-color: #151822; +} + +#sidebar th.menuitem strong { + display: block; + margin: 0 12px; + padding: 10px 0 2px 0; + font-size: 100%; + text-align: center; + color: #C9A45C; + border-bottom: 1px solid rgba(201,164,92,0.15); +} + +#sidebar td.menuitem a { + margin: 0 auto; + display: block; + padding: 2px 5px 4px 18px; + color: rgba(237,230,214,0.65); + background-color: #151822; + text-align: left; + text-shadow: none; + text-decoration: none; +} + +#sidebar td.menuitem a:hover { + color: #EDE6D6; + background-color: #1C1F2E; + text-shadow: none; +} + +#sidebar td.menuitem a span { + display: block; +} + +.request, .fs-path { + display: inline-block; + padding: 2px; + font-family: Monaco, "Lucida Console", "Bitsteam Vera Sans Mono", monospace; + font-size: 8pt; + background-color: #151822; + border: 1px solid rgba(201,164,92,0.1); +} + +.keyword { + color: #ffba00; + font-style: italic; +} + +.red { + display: block; + padding: 10px; + font-weight: bold; + font-size: 120%; + color: #E85A3E; + background-color: rgba(217,72,43,0.08); + border-left: 3px solid #D9482B; + border-radius: 4px; +} + +.green { + display: block; + padding: 10px; + font-weight: bold; + font-size: 120%; + color: #5cb85c; + background-color: rgba(92,184,92,0.08); + border-left: 3px solid #5cb85c; + border-radius: 4px; +} + +.note { + padding: 5px; + color: rgba(237,230,214,0.65); + background-color: rgba(201,164,92,0.04); + font-style: italic; + border-radius: 4px; +} + +.up { + font-weight: bold; + color: #5cb85c; + text-transform: uppercase; +} + +.down { + color: #D9482B; + text-transform: uppercase; +} + +.submit_button { + display: block; + margin: 10px; + padding: 5px; + background-color: #151822; + border: 1px solid rgba(201,164,92,0.15); + border-radius: 4px; +} + +.submit_button:hover { + color: #EDE6D6; + background-color: #1C1F2E; + border: 1px solid rgba(201,164,92,0.25); + cursor: pointer; +} + +.install_table th, .install_table td { + padding: 5px 10px; + border: 1px solid rgba(201,164,92,0.1); +} + +.install_table th { + background-color: #1A0D12; +} + +.install_table td { + width: 180px; + text-align: center; +} + +.created { + color: #5cb85c; + width: 80px; +} + +.missing { + color: #D9482B; + width: 80px; +} + +.pages { + margin-top: 20px; + padding-top: 10px; + color: rgba(237,230,214,0.4); + text-align: center; + border-top: 1px solid rgba(201,164,92,0.1); +} + +.pages .page-prev, .pages .page-next { + color: #C9A45C; +} + +.pages .page-num { + padding: 0 5px; +} + +.pages .current-page { + color: #EDE6D6; + font-weight: bold; +} + +.horizontal-table { + border-spacing: 0; + border-collapse: collapse; + width: 100%; +} + +.horizontal-table th { + padding: 5px 10px; + background-color: #1A0D12; + color: #C9A45C; +} + +.horizontal-table td { + padding: 5px 10px; + background-color: #0F1118; +} + +.horizontal-table th, .horizontal-table td { + font-size: 9pt; + border: 1px solid rgba(201,164,92,0.1); +} + +.vertical-table { + border-spacing: 0; + border-collapse: collapse; +} + +.vertical-table th { + padding: 5px 10px; + background-color: #1A0D12; + color: #C9A45C; +} + +.vertical-table td { + padding: 5px 12px; + background-color: #0F1118; +} + +.vertical-table th, .vertical-table td { + font-size: 9pt; + border: 1px solid rgba(201,164,92,0.1); +} + +.vertical-table label { + display: block; + padding: 5px; +} + +.current-sub-menu { + font-weight: bold; +} + +.td-checkbox { + text-align: center; +} + +.td-action { + color: rgba(237,230,214,0.4); + text-align: center; +} + +.vertical-table .td-action { + text-align: right; +} + +.vertical-table form { + margin: 0; + padding: 0; +} + +.not-applicable { + font-style: italic; + color: rgba(237,230,214,0.35); +} + +.state-pending { + color: #FF7A1A; +} + +.state-banned { + color: #D9482B; +} + +.state-permanently-banned { + font-weight: bold; + color: #D9482B; +} + +.raw-txn-log { + padding: 10px; + font-family: "Monaco", "Lucida Console", "Courier New", monospace; + background-color: #151822; + border: 1px solid rgba(201,164,92,0.1); + width: 96%; + overflow: scroll; +} + +.online { + color: #5cb85c; +} + +.offline { + color: rgba(237,230,214,0.35); +} + +.info-text-total { + font-weight: bold; +} + +.info-text-results { + font-weight: bold; +} + +.info-text { + margin-bottom: 6px; + padding: 5px; + color: rgba(237,230,214,0.65); + background-color: #0F1118; + border: 1px solid rgba(201,164,92,0.1); + text-align: center; + border-radius: 4px; +} + +.toggler { + font-weight: bold; + font-style: italic; +} + +.toggler a { + color: #C9A45C; +} + +.search-form, search-form2 { + display: none; + margin: 0 0 10px 0; + padding: 0; + border-top: 1px solid rgba(201,164,92,0.1); +} + +.search-form p, .search-form2 p { + margin: 0; + padding: 5px; + color: rgba(237,230,214,0.5); + text-align: left; + border-bottom: 1px solid rgba(201,164,92,0.08); +} + +.search-form label, .search-form2 label { + display: inline-block; + margin: 0 0 3px 0; + font-size: 8pt; + font-style: italic; + color: rgba(237,230,214,0.65); +} + +.search-form input[type=text], .search-form2 input[type=text] { + display: inline-block; + margin: 0 0 2px 0; + padding: 2px; + font-size: 8pt; + width: 80px; +} + +.search-form input[type=submit], .search-form2 input[type=submit] { + display: inline-block; + margin: 0 0 2px 0; + font-size: 8pt; + font-weight: bold; +} + +.search-form input[type=button], .search-form input[type=reset], +.search-form2 input[type=button], .search-form2 input[type=reset] { + display: inline-block; + margin: 0 0 2px 0; + font-size: 8pt; +} + +.search-form input[type=checkbox], .search-form2 input[type=checkbox] { + display: inline-block; + margin: 0 0 2px 0; +} + +.search-form select, .search-form2 select { + display: inline-block; + margin: 2px 0; +} + +#submenu { + color: rgba(237,230,214,0.4); +} + +#pagemenu { + margin-top: 5px; + padding: 5px 0; + font-size: 8pt; + color: rgba(237,230,214,0.4); + border-width: 1px 0; + border-style: dotted; + border-color: rgba(201,164,92,0.1); +} + +#pagemenu a { + color: #C9A45C; + text-decoration: underline; +} + +#pagemenu a:hover { + color: #D4B472; +} + +#loginbox { + margin-bottom: 10px; + color: rgba(237,230,214,0.65); +} + +#content { + color: rgba(237,230,214,0.65); +} + +#register_form table td, #login_form table td { + padding: 1px; +} + +#register_form table th label, #login_form table th label { + display: block; + padding: 5px; + text-align: center; +} + +#register_form input[type=text], #register_form input[type=password], #login_form input[type=text], #login_form input[type=password] { + width: 140px; +} + +#register_form select, #login_form select { + width: 147px; +} + +#server_status th, #server_status td { + padding: 8px 12px 8px 12px; + text-align: left; + border-bottom: 1px solid rgba(201,164,92,0.1); +} + +#server_status { + border-spacing: 0; + border-collapse: collapse; + background-color: #0F1118; + border: 1px solid rgba(201,164,92,0.1); + border-radius: 6px; +} + +#server_status .server { + color: #EDE6D6; +} + +#server_status .status { + text-align: center; +} + +#copyright p { + margin-top: 5px; + margin-bottom: 0px; + font-style: italic; + font-size: 8pt; + color: rgba(237,230,214,0.3); + text-align: right; +} + +#info p { + margin-top: 5px; + margin-bottom: 0px; + font-style: italic; + font-size: 8pt; + color: rgba(237,230,214,0.3); + text-align: right; +} + +.sortable { + color: #C9A45C; + text-decoration: underline; +} + +.sortable:hover { + color: #D4B472; +} + +.character-stats { + border-spacing: 0; + border-collapse: collapse; + color: rgba(237,230,214,0.5); +} + +.character-stats td { + padding: 0px 10px 5px 0; + border: 0; + text-align: center; +} + +.character-stats .stat-name { + color: rgba(237,230,214,0.5); +} + +.character-stats .stat-value { + color: #EDE6D6; +} + +.credit-balance { + float: right; + display: inline-block; + padding: 10px; + color: #C9A45C; + background-color: rgba(201,164,92,0.04); + border: 1px solid rgba(201,164,92,0.15); + border-radius: 6px; +} + +.credit-balance .balance-text { + display: inline-block; + margin-right: 5px; + color: rgba(237,230,214,0.4); + text-transform: uppercase; +} + +.credit-balance .balance-amount { + font-weight: bold; +} + +.emblem-server { + margin: 0 0 2px 0; + padding: 0 0 2px 0; + font-size: 120%; + border-bottom: 1px solid rgba(201,164,92,0.1); +} + +.emblem-server label { + display: block; +} + +.emblem-server label:hover { + cursor: pointer; +} + +.block { + display: block; + width: 80%; + height: 40px; +} + +.script-line { + font-family: Monaco, "Lucida Console", monospace; +} + +.script-line-num { + display: inline-block; + margin: 0; + padding: 5px; + background-color: #1A0D12; + border-right: 1px solid rgba(201,164,92,0.1); +} + +.script-line-code { + display: inline-block; + margin: 0; + padding: 5px; +} + +.shop-table { + width: 100%; + color: #EDE6D6; + border-spacing: 0 10px; + border-collapse: separate; +} + +.shop-table td { + padding: 10px; + background-color: #0F1118; + border: 1px solid rgba(201,164,92,0.1); +} + +.shop-item-image { + width: 75px; + height: 100px; + text-align: center; +} + +.shop-item-name { + margin: 0 0 5px 0; + padding: 0 0 2px 0; + font-size: 140%; + color: #EDE6D6; + border-bottom: 1px solid rgba(201,164,92,0.1); +} + +.shop-item-cost-qty { + width: 150px; + color: rgba(237,230,214,0.5); + text-align: center; +} + +.cost { + color: #C9A45C; + font-size: 120%; + font-weight: bold; + text-transform: uppercase; +} + +.qty { + color: rgba(237,230,214,0.65); +} + +.shop-item-action { + color: rgba(201,164,92,0.3); +} + +.shop-item-action a { + color: #C9A45C; + border-bottom: 1px solid rgba(201,164,92,0.15); +} + +.shop-item-action a:hover { + border-bottom: 1px solid #C9A45C; +} + +.short { + width: 40px; +} + +.shop-server-name { + color: #EDE6D6; +} + +.shop-item-info { + text-align: justify; +} + +textarea { + width: 100%; + max-width: 320px; + height: 120px; +} + +.cart-items-text { + margin: 0 0 5px 0; + padding: 5px; + color: rgba(237,230,214,0.65); + background-color: #1A0D12; + border: 5px solid #151822; +} + +.cart-info-text { + margin: 0 0 5px 0; + padding: 0; +} + +.cart-total-text { + margin: 0; + padding: 0; +} + +.cart-item-name { + color: #EDE6D6; + border-bottom: 1px dotted rgba(201,164,92,0.2); +} + +.cart-item-count { + font-size: 120%; + font-weight: bold; + color: #C9A45C; +} + +.cart-sub-total { + color: #EDE6D6; +} + +.cart { + width: 100%; +} + +.cart label { + display: block; +} + +.cart h4 { + margin: 10px 0 2px 0; + font-size: 140%; +} + +.remove-from-cart { + width: 100%; + text-align: right; +} + +.checkout-text { + font-size: 120%; + font-weight: bold; +} + +.checkout-text a { + border-bottom: 1px dotted rgba(201,164,92,0.2); +} + +.checkout-text a:hover { + color: #D4B472; + border-bottom: 1px solid #C9A45C; +} + +.enter-donation-amount { + margin: 0; + padding: 0 0 5px 0; + font-size: 120%; +} + +.donation-amount-text { + margin: 0; + padding: 0; + font-size: 120%; + text-align: center; +} + +.credit-amount-text { + font-size: 8pt; + text-transform: uppercase; + color: rgba(237,230,214,0.4); + text-align: center; + letter-spacing: 1px; +} + +.donation-amount { + font-weight: bold; + color: #C9A45C; +} + +.credit-amount { + color: rgba(237,230,214,0.65); +} + +.reset-amount-text { + margin: 0; + padding: 0; + font-size: 8pt; + text-align: center; +} + +.checkout-info-text { + margin: 0 0 5px 0; + padding: 0; +} + +.remaining-balance { + color: #C9A45C; +} + +.exchange-rate { + font-size: 120%; + font-weight: bold; + color: #EDE6D6; +} + +.important { + font-size: 120%; + color: #FF7A1A; +} + +.important .server-name { + font-weight: bold; +} + +.generic-form { + padding: 10px; + background-color: transparent; + border: none; + width: auto; +} + +.generic-form-div { + padding: 10px; + background-color: transparent; + border: none; + width: auto; +} +.generic-form-table th label { + display: block; + padding: 6px; +} + +.generic-form-table td div { + display: block; + padding: 6px 0; +} + +.generic-form-table th { + text-align: right; +} + +.generic-form-table td input[type=checkbox] { + display: inline-block; + margin-top: 6px; +} + +.generic-form-table td p { + margin: 6px 5px; + color: rgba(237,230,214,0.5); +} + +.security-code { + margin: 5px 0; + text-align: left; + width: 145px; + height: 50px; +} + +.action { + color: rgba(201,164,92,0.3); +} + +.action a, .action span.anchor { + color: #C9A45C; + border-bottom: 1px solid rgba(201,164,92,0.15); + cursor: pointer; +} + +.block-link { + display: block; + padding: 3px; + color: #C9A45C; + border-bottom: 1px solid rgba(201,164,92,0.1); +} + +.button-action { + padding: 5px 0; + text-align: left; +} + +.woe-table { + border-spacing: 0; + border-collapse: collapse; + background-color: #0F1118; + border: 1px solid rgba(201,164,92,0.1); + border-radius: 6px; +} + +.woe-table th, .woe-table td { + padding: 5px 10px; +} + +.woe-table th { + font-weight: normal; + border-bottom: 1px solid rgba(201,164,92,0.1); + color: #C9A45C; +} + +.woe-table td { + font-size: 120%; +} + +.woe-table .server { + font-weight: bold; + color: #EDE6D6; +} + +.woe-table .time { + font-style: italic; + color: rgba(237,230,214,0.65); +} + +.script { + width: 98%; +} + +.multi-select { + width: 100%; +} + +.jump-to-page { + margin-top: 8px; + font-size: 8pt; + text-align: center; +} + +.jump-to-page input { + padding: 2px; + font-size: 8pt; +} + +.top-ranked td { + font-weight: bold; + color: #C9A45C; + background-color: rgba(201,164,92,0.06); +} + +.top-ranked a { + color: #C9A45C; + border-bottom: 1px dotted rgba(201,164,92,0.3); +} + +.empty-row { + display: none; +} + +.item-drop-mvp td { + color: #E85A3E; + background-color: rgba(217,72,43,0.06); +} + +.item-drop-card td { + color: #C9A45C; + background-color: rgba(201,164,92,0.04); +} + +.mvp { + font-size: xx-small; + font-weight: bold; + color: #D9482B; + vertical-align: top; +} + +.monster-mode { + margin: 0; + padding: 0; + list-style: square inside; +} + +.monster-mode li { + padding: 1px; + border-bottom: 1px dotted rgba(201,164,92,0.08); +} + +.equipped td { + background-color: rgba(201,164,92,0.04); +} + +.job-classes { + border-spacing: 0; +} + +.job-classes td { + padding-right: 10px; + border-right: 1px solid rgba(201,164,92,0.1); +} + +.current-shop-category { + font-weight: bold; +} + +.normalslotted .equipped { + color: rgba(237,230,214,0.65); +} + +.overslotted1 { + color: #32cd32; +} + +.overslotted2 { + color: #00bfff; +} + +.overslotted3 { + color: #ffa500; +} + +.overslotted4 { + color: #9932cc; +} + +.hold-hours { + color: #ffba00; + font-style: italic; +} + +/* ===== News classes (missing from original flux.css) ===== */ +.newsDiv { + margin-bottom: 10px; +} + +.newsCont { + padding: 10px 0; + border-bottom: 1px solid rgba(201,164,92,0.08); + color: rgba(237,230,214,0.65); +} + +.newsDate { + color: rgba(237,230,214,0.35); +} + +.news_link { + color: #D9482B; +} +.news_link:hover { + color: #FF7A1A; +} + +.clear { + clear: both; +} + +/* ===== Item status classes ===== */ +.refineable.yes, .for-sale.yes, .identified.yes { + color: #5cb85c; +} +.refineable.no, .for-sale.no, .identified.no { + color: rgba(237,230,214,0.35); +} +.broken.yes { + color: #D9482B; +} +.broken.no { + color: rgba(237,230,214,0.35); +} +.item_name { + color: #EDE6D6; +} + +/* ===== Select element dark theme ===== */ +select { + background-color: #151822; + color: #EDE6D6; + border: 1px solid rgba(201,164,92,0.15); +} diff --git a/themes/kunairo/css/kunairo.css b/themes/kunairo/css/kunairo.css new file mode 100644 index 000000000..70f7565d7 --- /dev/null +++ b/themes/kunairo/css/kunairo.css @@ -0,0 +1,2428 @@ +/* ========================================================================== + KunaiRO Theme — Complete Visual System v2 + Dark premium MMORPG theme — aggressive, competitive, AAA feel + ========================================================================== */ + +/* -------------------------------------------------------------------------- + 1. CUSTOM PROPERTIES + -------------------------------------------------------------------------- */ +:root { + /* Core palette */ + --kr-black: #0A0A0F; + --kr-dark: #0F1118; + --kr-dark-warm: #1A0D12; + --kr-dark-elevated: #151822; + --kr-dark-surface: #1C1F2E; + --kr-red: #D9482B; + --kr-red-light: #E85A3E; + --kr-red-dark: #A83520; + --kr-orange: #FF7A1A; + --kr-orange-light: #FF9344; + --kr-gold: #C9A45C; + --kr-gold-light: #D4B472; + --kr-gold-pale: #E8D5A8; + --kr-cream: #EDE6D6; + --kr-white: #F5F0E6; + + /* Backgrounds */ + --kr-bg-body: #07070B; + --kr-bg-primary: #0A0A0F; + --kr-bg-secondary: #0F1118; + --kr-bg-elevated: #151822; + --kr-bg-surface: #1C1F2E; + + /* Text */ + --kr-text-primary: #EDE6D6; + --kr-text-secondary: rgba(237, 230, 214, 0.65); + --kr-text-muted: rgba(237, 230, 214, 0.35); + --kr-text-inverse: #0A0A0F; + + /* Borders */ + --kr-border-subtle: rgba(201, 164, 92, 0.08); + --kr-border-default: rgba(201, 164, 92, 0.15); + --kr-border-strong: rgba(201, 164, 92, 0.3); + --kr-border-red: rgba(217, 72, 43, 0.3); + --kr-border-red-strong: rgba(217, 72, 43, 0.6); + + /* Shadows */ + --kr-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.4); + --kr-shadow-md: 0 4px 20px rgba(0, 0, 0, 0.5); + --kr-shadow-lg: 0 8px 40px rgba(0, 0, 0, 0.6); + --kr-shadow-xl: 0 16px 64px rgba(0, 0, 0, 0.7); + --kr-shadow-inner: inset 0 2px 8px rgba(0, 0, 0, 0.3); + --kr-shadow-card: 0 4px 24px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(201, 164, 92, 0.06); + + /* Glows */ + --kr-glow-red: 0 0 30px rgba(217, 72, 43, 0.4); + --kr-glow-red-strong: 0 0 50px rgba(217, 72, 43, 0.5), 0 0 100px rgba(217, 72, 43, 0.2); + --kr-glow-red-text: 0 0 40px rgba(217, 72, 43, 0.6), 0 0 80px rgba(217, 72, 43, 0.3); + --kr-glow-orange: 0 0 25px rgba(255, 122, 26, 0.35); + --kr-glow-gold: 0 0 20px rgba(201, 164, 92, 0.3); + --kr-glow-gold-text: 0 0 12px rgba(201, 164, 92, 0.5); + + /* Spacing */ + --kr-space-xs: 0.25rem; + --kr-space-sm: 0.5rem; + --kr-space-md: 1rem; + --kr-space-lg: 1.5rem; + --kr-space-xl: 2rem; + --kr-space-2xl: 3rem; + --kr-space-3xl: 4rem; + --kr-space-4xl: 6rem; + --kr-space-5xl: 8rem; + + /* Radius */ + --kr-radius-sm: 4px; + --kr-radius-md: 6px; + --kr-radius-lg: 10px; + --kr-radius-xl: 16px; + --kr-radius-full: 9999px; + + /* Typography */ + --kr-font-display: 'Cinzel', serif; + --kr-font-heading: 'Rajdhani', sans-serif; + --kr-font-body: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; + + /* Transitions */ + --kr-ease: 0.25s ease; + --kr-ease-fast: 0.15s ease; + --kr-ease-slow: 0.4s ease; +} + +/* -------------------------------------------------------------------------- + 2. RESET & BASE + -------------------------------------------------------------------------- */ +*, *::before, *::after { box-sizing: border-box; } + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + scroll-behavior: smooth; + overflow-x: hidden; +} + +body.kr-body { + margin: 0; + padding: 0; + background: var(--kr-bg-body); + color: var(--kr-text-primary); + font-family: var(--kr-font-body); + font-size: 0.9375rem; + line-height: 1.6; + min-height: 100vh; + display: flex; + flex-direction: column; + overflow-x: hidden; + width: 100%; +} + +a { + color: var(--kr-gold); + text-decoration: none; + transition: color var(--kr-ease-fast); +} +a:hover { color: var(--kr-gold-light); } + +h1, h2, h3, h4, h5, h6 { + font-family: var(--kr-font-heading); + font-weight: 600; + color: var(--kr-text-primary); + margin: 0 0 var(--kr-space-md); + line-height: 1.2; +} + +img { max-width: 100%; height: auto; } +body.kr-body table { border-collapse: collapse; } +body.kr-body td, body.kr-body th { padding: 0; } + +.kr-container { + max-width: 1200px; + margin: 0 auto; + padding: 0 var(--kr-space-xl); +} + +/* -------------------------------------------------------------------------- + 3. NAVBAR — Premium horizontal + -------------------------------------------------------------------------- */ +.kr-navbar { + position: sticky; + top: 0; + z-index: 1000; + background: rgba(7, 7, 11, 0.85); + backdrop-filter: blur(20px) saturate(1.2); + -webkit-backdrop-filter: blur(20px) saturate(1.2); + border-bottom: 1px solid var(--kr-border-subtle); + height: 64px; +} + +.kr-navbar__inner { + max-width: 1200px; + margin: 0 auto; + padding: 0 var(--kr-space-xl); + display: flex; + align-items: center; + height: 100%; + gap: var(--kr-space-xl); +} + +/* Brand */ +.kr-navbar__brand { + font-family: var(--kr-font-display); + font-size: 1.5rem; + font-weight: 700; + letter-spacing: 0.05em; + color: var(--kr-cream) !important; + flex-shrink: 0; +} +.kr-navbar__logo-accent { + color: var(--kr-red); + text-shadow: 0 0 20px rgba(217, 72, 43, 0.5); +} + +/* Horizontal nav */ +.kr-navbar__nav { + display: flex; + align-items: center; + gap: var(--kr-space-xs); + flex: 1; +} + +.kr-navbar__link { + padding: 0.375rem 0.75rem; + font-family: var(--kr-font-heading); + font-size: 0.8125rem; + font-weight: 500; + letter-spacing: 0.05em; + text-transform: uppercase; + color: var(--kr-text-secondary) !important; + border-radius: var(--kr-radius-sm); + transition: all var(--kr-ease-fast); + white-space: nowrap; +} +.kr-navbar__link:hover { + color: var(--kr-cream) !important; + background: rgba(237, 230, 214, 0.06); + box-shadow: inset 0 -2px 0 var(--kr-red); +} +.kr-navbar__link--active { + color: var(--kr-gold) !important; + background: rgba(201, 164, 92, 0.08); + box-shadow: inset 0 -2px 0 var(--kr-gold); +} + +/* Actions */ +.kr-navbar__actions { + display: flex; + align-items: center; + gap: var(--kr-space-sm); + flex-shrink: 0; +} + +.kr-navbar__user-link { + color: var(--kr-gold) !important; + font-weight: 500; + font-size: 0.875rem; +} + +/* Mobile nav toggle */ +.kr-nav-toggle { + display: none; + flex-direction: column; + justify-content: center; + gap: 5px; + background: none; + border: 1px solid var(--kr-border-default); + border-radius: var(--kr-radius-sm); + cursor: pointer; + padding: 8px; + margin-left: var(--kr-space-sm); +} +.kr-nav-toggle span { + display: block; + width: 18px; + height: 2px; + background: var(--kr-cream); + border-radius: 2px; + transition: var(--kr-ease); +} +.kr-nav-toggle--active span:nth-child(1) { transform: rotate(45deg) translate(5px, 5px); } +.kr-nav-toggle--active span:nth-child(2) { opacity: 0; } +.kr-nav-toggle--active span:nth-child(3) { transform: rotate(-45deg) translate(5px, -5px); } + +/* -------------------------------------------------------------------------- + 4. USER BAR + -------------------------------------------------------------------------- */ +.kr-userbar { + background: var(--kr-dark-warm); + border-bottom: 1px solid var(--kr-border-subtle); + padding: var(--kr-space-xs) 0; + font-size: 0.8125rem; +} +.kr-userbar__inner { + max-width: 1200px; + margin: 0 auto; + padding: 0 var(--kr-space-xl); + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + gap: var(--kr-space-sm); +} +.kr-userbar__info { color: var(--kr-text-secondary); } +.kr-userbar__admin { display: flex; gap: var(--kr-space-sm); flex-wrap: wrap; } +.kr-userbar__admin-link { + color: var(--kr-orange) !important; + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; +} +.kr-userbar__admin-link:hover { color: var(--kr-orange-light) !important; } + +/* -------------------------------------------------------------------------- + 5. PAGE LAYOUT + -------------------------------------------------------------------------- */ + +/* Homepage: full-width, no sidebar */ +.kr-page--home { + flex: 1; +} +.kr-main--full { + width: 100%; +} + +/* Internal pages: sidebar + content */ +.kr-page--internal { + display: flex; + max-width: 1200px; + margin: 0 auto; + padding: var(--kr-space-2xl) var(--kr-space-xl); + gap: var(--kr-space-2xl); + flex: 1; + width: 100%; +} +.kr-main--with-sidebar { + flex: 1; + min-width: 0; +} + +/* Sidebar toggle for internal pages mobile */ +.kr-page--internal > .kr-sidebar-toggle { + display: none; + position: fixed; + bottom: var(--kr-space-lg); + right: var(--kr-space-lg); + z-index: 1001; + width: 48px; + height: 48px; + background: linear-gradient(135deg, var(--kr-red), var(--kr-orange)); + border: none; + border-radius: 50%; + cursor: pointer; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 4px; + box-shadow: var(--kr-glow-red), var(--kr-shadow-lg); +} +.kr-page--internal > .kr-sidebar-toggle span { + display: block; + width: 18px; + height: 2px; + background: white; + border-radius: 2px; +} + +/* -------------------------------------------------------------------------- + 6. SIDEBAR — Premium redesign + -------------------------------------------------------------------------- */ +.kr-sidebar { + width: 230px; + flex-shrink: 0; + position: sticky; + top: 80px; + max-height: calc(100vh - 100px); + overflow-y: auto; + scrollbar-width: thin; + scrollbar-color: var(--kr-border-default) transparent; +} +.kr-sidebar::-webkit-scrollbar { width: 4px; } +.kr-sidebar::-webkit-scrollbar-track { background: transparent; } +.kr-sidebar::-webkit-scrollbar-thumb { background: var(--kr-border-default); border-radius: 4px; } + +.kr-sidebar__section { + margin-bottom: var(--kr-space-md); + background: var(--kr-bg-secondary); + border: 1px solid var(--kr-border-subtle); + border-radius: var(--kr-radius-lg); + overflow: hidden; + transition: border-color var(--kr-ease); +} +.kr-sidebar__section:hover { + border-color: var(--kr-border-default); +} + +.kr-sidebar__heading { + font-family: var(--kr-font-heading); + font-size: 0.625rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.14em; + color: var(--kr-gold); + padding: var(--kr-space-sm) var(--kr-space-md); + margin: 0; + background: linear-gradient(135deg, var(--kr-bg-elevated), rgba(26, 13, 18, 0.4)); + border-bottom: 1px solid var(--kr-border-subtle); + position: relative; +} +.kr-sidebar__heading::after { + content: ''; + position: absolute; + bottom: -1px; + left: var(--kr-space-md); + width: 24px; + height: 1px; + background: var(--kr-red); + box-shadow: 0 0 6px rgba(217, 72, 43, 0.4); +} + +.kr-sidebar__menu { + list-style: none; + margin: 0; + padding: var(--kr-space-xs) 0; +} +.kr-sidebar__menu li a { + display: flex; + align-items: center; + padding: 0.4rem var(--kr-space-md); + color: var(--kr-text-secondary); + font-size: 0.8125rem; + font-weight: 400; + border-left: 2px solid transparent; + transition: all var(--kr-ease-fast); + position: relative; +} +.kr-sidebar__menu li a:hover { + color: var(--kr-cream); + background: rgba(201, 164, 92, 0.04); + border-left-color: var(--kr-red); + padding-left: calc(var(--kr-space-md) + 4px); +} +.kr-sidebar__menu li a:active { + background: rgba(217, 72, 43, 0.06); +} + +/* -------------------------------------------------------------------------- + 7. BUTTONS + -------------------------------------------------------------------------- */ +.kr-btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: var(--kr-space-xs); + padding: 0.5rem 1.25rem; + font-family: var(--kr-font-heading); + font-size: 0.875rem; + font-weight: 600; + letter-spacing: 0.05em; + text-transform: uppercase; + text-decoration: none !important; + border: 1px solid transparent; + border-radius: var(--kr-radius-md); + cursor: pointer; + transition: all var(--kr-ease); + position: relative; + overflow: hidden; +} +.kr-btn:focus-visible { + outline: 2px solid var(--kr-gold); + outline-offset: 2px; +} + +/* Primary — fire */ +.kr-btn--primary { + background: linear-gradient(135deg, var(--kr-red) 0%, var(--kr-red-light) 50%, var(--kr-orange) 100%); + color: var(--kr-white) !important; + box-shadow: var(--kr-shadow-md), inset 0 1px 0 rgba(255,255,255,0.15); + text-shadow: 0 1px 2px rgba(0,0,0,0.3); +} +.kr-btn--primary:hover { + box-shadow: var(--kr-glow-red), var(--kr-shadow-lg); + transform: translateY(-2px); + color: var(--kr-white) !important; + filter: brightness(1.1); +} +.kr-btn--primary:active { transform: translateY(0); } + +/* Secondary — gold outline */ +.kr-btn--secondary { + background: transparent; + color: var(--kr-gold) !important; + border-color: var(--kr-gold); + box-shadow: inset 0 0 0 0 rgba(201, 164, 92, 0.1); +} +.kr-btn--secondary:hover { + background: rgba(201, 164, 92, 0.1); + box-shadow: var(--kr-glow-gold), inset 0 0 20px rgba(201, 164, 92, 0.05); + color: var(--kr-gold-light) !important; + transform: translateY(-2px); +} + +/* Ghost */ +.kr-btn--ghost { + background: rgba(237, 230, 214, 0.04); + color: var(--kr-text-secondary) !important; + border-color: rgba(237, 230, 214, 0.12); +} +.kr-btn--ghost:hover { + background: rgba(237, 230, 214, 0.08); + color: var(--kr-cream) !important; + border-color: rgba(237, 230, 214, 0.25); + transform: translateY(-1px); +} + +/* Discord */ +.kr-btn--discord { + background: rgba(88, 101, 242, 0.12); + color: #8B9EFF !important; + border-color: rgba(88, 101, 242, 0.35); +} +.kr-btn--discord:hover { + background: rgba(88, 101, 242, 0.2); + color: #A8B6FF !important; + border-color: rgba(88, 101, 242, 0.5); + box-shadow: 0 0 20px rgba(88, 101, 242, 0.2); + transform: translateY(-2px); +} +.kr-btn__icon { + display: inline-block; + vertical-align: middle; + flex-shrink: 0; +} + +/* Sizes */ +.kr-btn--sm { padding: 0.3rem 0.75rem; font-size: 0.75rem; } +.kr-btn--lg { padding: 0.75rem 2rem; font-size: 0.9375rem; } +.kr-btn--xl { padding: 0.875rem 2.5rem; font-size: 1.0625rem; letter-spacing: 0.08em; } + +/* Glow pulse */ +.kr-btn--glow::before { + content: ''; + position: absolute; + inset: -3px; + border-radius: inherit; + background: linear-gradient(135deg, var(--kr-red), var(--kr-orange)); + z-index: -1; + opacity: 0.4; + filter: blur(16px); + animation: kr-btn-pulse 2s ease-in-out infinite alternate; +} +@keyframes kr-btn-pulse { + 0% { opacity: 0.3; filter: blur(14px); } + 100% { opacity: 0.6; filter: blur(20px); } +} + +/* -------------------------------------------------------------------------- + 8. BADGES + -------------------------------------------------------------------------- */ +.kr-badge { + display: inline-flex; + align-items: center; + padding: 0.3rem 1rem; + font-family: var(--kr-font-heading); + font-size: 0.75rem; + font-weight: 600; + letter-spacing: 0.1em; + text-transform: uppercase; + border-radius: var(--kr-radius-full); + border: 1px solid; + backdrop-filter: blur(4px); +} +.kr-badge--fire { + color: var(--kr-orange); + border-color: rgba(255, 122, 26, 0.5); + background: rgba(255, 122, 26, 0.1); + text-shadow: 0 0 8px rgba(255, 122, 26, 0.4); + box-shadow: 0 0 12px rgba(255, 122, 26, 0.1); +} +.kr-badge--gold { + color: var(--kr-gold-light); + border-color: rgba(201, 164, 92, 0.5); + background: rgba(201, 164, 92, 0.1); + box-shadow: 0 0 12px rgba(201, 164, 92, 0.1); +} +.kr-badge--steel { + color: var(--kr-cream); + border-color: rgba(237, 230, 214, 0.3); + background: rgba(237, 230, 214, 0.06); +} +.kr-badge--red { + color: var(--kr-red-light); + border-color: rgba(217, 72, 43, 0.5); + background: rgba(217, 72, 43, 0.12); +} + +/* -------------------------------------------------------------------------- + 9. HERO — AAA Level + -------------------------------------------------------------------------- */ +.kr-hero { + position: relative; + min-height: 600px; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; +} + +/* === Hero background system — 8 layers === */ +.kr-hero__bg { + position: absolute; + inset: 0; + z-index: 0; +} + +/* Layer 1: Deep dark base with warm undertone */ +.kr-hero__bg-deep { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 120% 80% at 50% -10%, rgba(26, 13, 18, 0.6) 0%, transparent 50%), + var(--kr-bg-body); +} + +/* Layer 2: Fire — bottom eruption (stronger) */ +.kr-hero__bg-fire { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 100% 50% at 50% 110%, rgba(217, 72, 43, 0.35) 0%, rgba(217, 72, 43, 0.12) 30%, transparent 55%), + radial-gradient(ellipse 60% 35% at 25% 105%, rgba(255, 122, 26, 0.25) 0%, transparent 50%), + radial-gradient(ellipse 60% 35% at 75% 105%, rgba(217, 72, 43, 0.25) 0%, transparent 50%), + radial-gradient(ellipse 30% 20% at 50% 95%, rgba(255, 147, 68, 0.15) 0%, transparent 50%); + animation: kr-fire-flicker 3s ease-in-out infinite alternate; +} + +/* Layer 3: Energy — wider ambient glow */ +.kr-hero__bg-energy { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 55% 45% at 50% 55%, rgba(217, 72, 43, 0.10) 0%, transparent 65%), + radial-gradient(ellipse 80% 60% at 50% 80%, rgba(255, 122, 26, 0.05) 0%, transparent 60%); + animation: kr-energy-pulse 5s ease-in-out infinite alternate; +} + +/* Layer 4: Smoke — drifting fog */ +.kr-hero__bg-smoke { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 50% 35% at 25% 75%, rgba(26, 13, 18, 0.7) 0%, transparent 70%), + radial-gradient(ellipse 50% 35% at 75% 65%, rgba(15, 17, 24, 0.6) 0%, transparent 70%), + radial-gradient(ellipse 80% 40% at 50% 90%, rgba(10, 10, 15, 0.5) 0%, transparent 60%); + animation: kr-smoke-drift 10s ease-in-out infinite alternate; +} + +/* Layer 5: Sparks / embers — particle dots */ +.kr-hero__bg-sparks { + position: absolute; + inset: 0; + background-image: + radial-gradient(1.5px 1.5px at 15% 55%, rgba(255, 147, 68, 0.8) 0%, transparent 100%), + radial-gradient(1px 1px at 25% 70%, rgba(217, 72, 43, 0.7) 0%, transparent 100%), + radial-gradient(2px 2px at 35% 45%, rgba(255, 122, 26, 0.6) 0%, transparent 100%), + radial-gradient(1px 1px at 55% 65%, rgba(201, 164, 92, 0.5) 0%, transparent 100%), + radial-gradient(1.5px 1.5px at 65% 35%, rgba(255, 122, 26, 0.5) 0%, transparent 100%), + radial-gradient(1px 1px at 75% 55%, rgba(217, 72, 43, 0.6) 0%, transparent 100%), + radial-gradient(2px 2px at 85% 75%, rgba(255, 147, 68, 0.5) 0%, transparent 100%), + radial-gradient(1px 1px at 45% 30%, rgba(201, 164, 92, 0.4) 0%, transparent 100%), + radial-gradient(1.5px 1.5px at 10% 80%, rgba(255, 122, 26, 0.7) 0%, transparent 100%), + radial-gradient(1px 1px at 90% 20%, rgba(217, 72, 43, 0.4) 0%, transparent 100%); + animation: kr-sparks-float 7s ease-in-out infinite alternate; +} + +/* Layer 6: Radial light — central focus (stronger) */ +.kr-hero__bg-radial { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 50% 40% at 50% 45%, rgba(217, 72, 43, 0.09) 0%, transparent 65%), + radial-gradient(ellipse 100% 70% at 50% 100%, rgba(26, 13, 18, 0.4) 0%, transparent 50%); +} + +/* Layer 7: Scanlines + grain texture */ +.kr-hero__bg-scanlines { + position: absolute; + inset: 0; + background: + repeating-linear-gradient( + 0deg, + transparent, + transparent 2px, + rgba(0, 0, 0, 0.035) 2px, + rgba(0, 0, 0, 0.035) 4px + ); + pointer-events: none; +} +.kr-hero__bg-scanlines::after { + content: ''; + position: absolute; + inset: 0; + opacity: 0.035; + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); + background-size: 200px 200px; + pointer-events: none; +} + +/* Layer 8: Vignette — stronger edges */ +.kr-hero__bg-vignette { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 60% 50% at 50% 45%, transparent 15%, rgba(7, 7, 11, 0.75) 100%), + linear-gradient(to bottom, rgba(7, 7, 11, 0.3) 0%, transparent 15%); +} + +/* Hero bottom fade */ +.kr-hero__fade { + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 120px; + background: linear-gradient(to bottom, transparent, var(--kr-bg-body)); + z-index: 1; +} + +/* Hero content */ +.kr-hero__content { + position: relative; + z-index: 2; + text-align: center; + padding: var(--kr-space-5xl) var(--kr-space-xl) var(--kr-space-4xl); + max-width: 760px; +} + +/* Badges row */ +.kr-hero__badges { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: var(--kr-space-sm); + margin-bottom: var(--kr-space-2xl); +} + +/* Title */ +.kr-hero__title { + font-family: var(--kr-font-display); + font-size: clamp(3.5rem, 10vw, 6rem); + font-weight: 900; + letter-spacing: 0.08em; + line-height: 1; + margin: 0 0 var(--kr-space-lg); +} +.kr-hero__title-kunai { + color: var(--kr-cream); + text-shadow: + 0 0 60px rgba(237, 230, 214, 0.15), + 0 4px 8px rgba(0, 0, 0, 0.5); +} +.kr-hero__title-ro { + color: var(--kr-red); + text-shadow: var(--kr-glow-red-text); + animation: kr-title-glow 3s ease-in-out infinite alternate; +} + +/* Tagline */ +.kr-hero__tagline { + font-family: var(--kr-font-heading); + font-size: clamp(1.2rem, 3.5vw, 1.75rem); + font-weight: 500; + letter-spacing: 0.2em; + text-transform: uppercase; + color: var(--kr-gold); + text-shadow: var(--kr-glow-gold-text); + margin: 0 0 var(--kr-space-xl); +} + +/* Decorative divider — angular wings */ +.kr-hero__divider { + display: flex; + align-items: center; + justify-content: center; + gap: var(--kr-space-sm); + margin-bottom: var(--kr-space-xl); +} +.kr-hero__divider-wing { + display: block; + width: 80px; + height: 1px; +} +.kr-hero__divider-wing--left { + background: linear-gradient(90deg, transparent, var(--kr-gold)); +} +.kr-hero__divider-wing--right { + background: linear-gradient(90deg, var(--kr-gold), transparent); +} +.kr-hero__divider-diamond { + display: block; + width: 10px; + height: 10px; + background: var(--kr-gold); + transform: rotate(45deg); + box-shadow: 0 0 12px rgba(201, 164, 92, 0.6), 0 0 24px rgba(201, 164, 92, 0.2); +} + +/* Description */ +.kr-hero__description { + font-size: 1.0625rem; + color: var(--kr-text-secondary); + line-height: 1.8; + margin: 0 auto var(--kr-space-2xl); + max-width: 520px; +} + +/* CTA buttons */ +.kr-hero__actions { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: var(--kr-space-md); +} + +/* -------------------------------------------------------------------------- + 10. SECTIONS — Differentiated backgrounds + -------------------------------------------------------------------------- */ +.kr-section { + position: relative; +} + +.kr-section--news { + background: var(--kr-bg-secondary); + padding: var(--kr-space-4xl) 0; + border-top: 1px solid var(--kr-border-subtle); + border-bottom: 1px solid var(--kr-border-subtle); +} +/* Subtle top glow on news section */ +.kr-section--news::before { + content: ''; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 80%; + max-width: 400px; + height: 1px; + background: linear-gradient(90deg, transparent, var(--kr-red), transparent); + box-shadow: 0 0 30px rgba(217, 72, 43, 0.2); +} + +/* Section heading */ +.kr-section__heading { + font-family: var(--kr-font-heading); + font-size: 1.5rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--kr-cream); + margin-bottom: var(--kr-space-2xl); + text-align: center; +} +.kr-section__heading-icon { + display: inline-block; + color: var(--kr-red); + margin-right: var(--kr-space-sm); + font-size: 1.3em; + text-shadow: var(--kr-glow-red); +} + +/* -------------------------------------------------------------------------- + 11. CARDS — with depth + -------------------------------------------------------------------------- */ +.kr-card { + background: var(--kr-bg-elevated); + border: 1px solid var(--kr-border-subtle); + border-radius: var(--kr-radius-lg); + overflow: hidden; + transition: all var(--kr-ease); + box-shadow: var(--kr-shadow-card); + position: relative; +} +.kr-card:hover { + border-color: var(--kr-border-default); + box-shadow: var(--kr-shadow-lg), 0 0 0 1px rgba(201, 164, 92, 0.1); + transform: translateY(-3px); +} + +/* Accent bar on left */ +.kr-card__accent { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 3px; + background: linear-gradient(180deg, var(--kr-red), var(--kr-orange)); + opacity: 0.6; + transition: opacity var(--kr-ease); +} +.kr-card:hover .kr-card__accent { opacity: 1; } + +.kr-card__inner { + padding-left: 3px; /* offset for accent bar */ +} + +.kr-card__header { + padding: var(--kr-space-lg) var(--kr-space-xl); + border-bottom: 1px solid var(--kr-border-subtle); +} + +.kr-card__title { + font-family: var(--kr-font-heading); + font-size: 1.15rem; + font-weight: 600; + color: var(--kr-cream); + margin: 0 0 var(--kr-space-xs); +} + +.kr-card__meta { + font-size: 0.75rem; + color: var(--kr-text-muted); + font-weight: 500; +} + +.kr-card__body { + padding: var(--kr-space-lg) var(--kr-space-xl); + color: var(--kr-text-secondary); + font-size: 0.875rem; + line-height: 1.7; +} + +.kr-card__footer { + padding: var(--kr-space-sm) var(--kr-space-xl); + border-top: 1px solid var(--kr-border-subtle); + color: var(--kr-text-muted); +} + +.kr-card__link { + display: block; + padding: var(--kr-space-sm) var(--kr-space-xl); + border-top: 1px solid var(--kr-border-subtle); + font-family: var(--kr-font-heading); + font-size: 0.8125rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--kr-red) !important; + transition: all var(--kr-ease-fast); +} +.kr-card__link:hover { + color: var(--kr-orange) !important; + background: rgba(217, 72, 43, 0.04); + padding-left: calc(var(--kr-space-xl) + 4px); +} + +/* Featured card */ +.kr-card--featured { + border-color: var(--kr-border-red); + box-shadow: var(--kr-shadow-card), 0 0 20px rgba(217, 72, 43, 0.08); +} +.kr-card--featured .kr-card__accent { + opacity: 1; + width: 4px; + box-shadow: 0 0 8px rgba(217, 72, 43, 0.4); +} +.kr-card--featured .kr-card__inner { padding-left: 4px; } + +/* News grid */ +.kr-news-grid { + display: grid; + gap: var(--kr-space-lg); +} + +/* -------------------------------------------------------------------------- + 12. ALERTS + -------------------------------------------------------------------------- */ +.kr-alert { + padding: var(--kr-space-md) var(--kr-space-xl); + border-radius: var(--kr-radius-md); + font-size: 0.875rem; + margin-bottom: var(--kr-space-lg); + border: 1px solid; + box-shadow: var(--kr-shadow-sm); +} +.kr-alert--info { + background: rgba(201, 164, 92, 0.06); + border-color: rgba(201, 164, 92, 0.2); + color: var(--kr-gold); +} +.kr-alert--warning { + background: rgba(255, 122, 26, 0.06); + border-color: rgba(255, 122, 26, 0.2); + color: var(--kr-orange); +} + +/* -------------------------------------------------------------------------- + 13. SUBMENUS & PAGEMENUS + -------------------------------------------------------------------------- */ +.kr-submenu { + display: flex; + flex-wrap: wrap; + gap: var(--kr-space-xs); + margin-bottom: var(--kr-space-lg); + padding: var(--kr-space-sm); + background: var(--kr-bg-secondary); + border-radius: var(--kr-radius-md); + border: 1px solid var(--kr-border-subtle); +} +.kr-submenu__item { + padding: var(--kr-space-xs) var(--kr-space-md); + font-size: 0.8125rem; + font-weight: 500; + color: var(--kr-text-secondary) !important; + border-radius: var(--kr-radius-sm); + transition: all var(--kr-ease-fast); +} +.kr-submenu__item:hover { + background: rgba(201, 164, 92, 0.08); + color: var(--kr-cream) !important; +} +.kr-submenu__item--active { + background: rgba(217, 72, 43, 0.12) !important; + color: var(--kr-red) !important; + font-weight: 600; +} + +.kr-pagemenu { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--kr-space-sm); + margin-bottom: var(--kr-space-lg); + font-size: 0.8125rem; +} +.kr-pagemenu__label { + color: var(--kr-text-muted); + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + font-size: 0.75rem; +} +.kr-pagemenu__item { color: var(--kr-gold) !important; } + +/* -------------------------------------------------------------------------- + 14. BALANCE + -------------------------------------------------------------------------- */ +.kr-balance { + display: inline-flex; + align-items: center; + gap: var(--kr-space-sm); + padding: var(--kr-space-sm) var(--kr-space-lg); + background: rgba(201, 164, 92, 0.04); + border: 1px solid var(--kr-border-default); + border-radius: var(--kr-radius-md); + margin-bottom: var(--kr-space-lg); +} +.kr-balance__label { + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--kr-text-muted); + font-weight: 600; +} +.kr-balance__amount { + font-family: var(--kr-font-heading); + font-size: 1.125rem; + font-weight: 700; + color: var(--kr-gold); + text-shadow: var(--kr-glow-gold-text); +} + +/* -------------------------------------------------------------------------- + 15. CUSTOM SELECTS (theme-specific) + -------------------------------------------------------------------------- */ +.kr-select { + background: var(--kr-bg-elevated); + color: var(--kr-text-primary); + border: 1px solid var(--kr-border-default); + border-radius: var(--kr-radius-sm); + padding: 0.3rem 0.5rem; + font-family: var(--kr-font-body); + font-size: 0.8125rem; + cursor: pointer; + transition: border-color var(--kr-ease-fast); +} +.kr-select:hover { border-color: var(--kr-border-strong); } +.kr-select:focus { outline: none; border-color: var(--kr-gold); box-shadow: 0 0 0 2px rgba(201, 164, 92, 0.12); } +.kr-select--sm { font-size: 0.75rem; padding: 0.2rem 0.4rem; } +.kr-select--inline { margin-left: var(--kr-space-xs); } + +/* -------------------------------------------------------------------------- + 16. TABLES (inherited module views) + -------------------------------------------------------------------------- */ + +body.kr-body .kr-main--with-sidebar table, +body.kr-body .kr-main--full table:not(.kr-hero table) { + width: 100%; + border-collapse: collapse; + background: var(--kr-bg-elevated); + border: 1px solid var(--kr-border-subtle); + border-radius: var(--kr-radius-md); + overflow: hidden; + font-size: 0.875rem; + box-shadow: var(--kr-shadow-sm); +} +body.kr-body .kr-main--with-sidebar th, +body.kr-body .kr-main--full th { + background: var(--kr-dark-warm); + color: var(--kr-gold); + font-family: var(--kr-font-heading); + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + font-size: 0.75rem; + padding: 0.75rem 1rem; + text-align: left; + border-bottom: 2px solid var(--kr-border-red); +} +body.kr-body .kr-main--with-sidebar td, +body.kr-body .kr-main--full td { + padding: 0.625rem 1rem; + border-bottom: 1px solid var(--kr-border-subtle); + color: var(--kr-text-secondary); +} +body.kr-body .kr-main--with-sidebar tr:hover td, +body.kr-body .kr-main--full tr:hover td { + background: rgba(217, 72, 43, 0.03); +} + + +/* -------------------------------------------------------------------------- + 17. FOOTER — Premium multi-column + -------------------------------------------------------------------------- */ +.kr-footer { + position: relative; + background: var(--kr-bg-primary); + margin-top: auto; + border-top: 1px solid var(--kr-border-subtle); +} + +/* Top decorative border — stronger */ +.kr-footer__border { + height: 3px; + background: linear-gradient(90deg, transparent 2%, var(--kr-red-dark), var(--kr-red), var(--kr-orange), var(--kr-red), var(--kr-red-dark), transparent 98%); + box-shadow: 0 0 20px rgba(217, 72, 43, 0.15), 0 0 40px rgba(217, 72, 43, 0.05); +} + +/* Background — stronger glow */ +.kr-footer__bg { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 70% 50% at 50% 0%, rgba(217, 72, 43, 0.06) 0%, transparent 60%), + radial-gradient(ellipse 40% 30% at 20% 10%, rgba(26, 13, 18, 0.3) 0%, transparent 60%), + radial-gradient(ellipse 40% 30% at 80% 10%, rgba(26, 13, 18, 0.3) 0%, transparent 60%); + pointer-events: none; +} + +.kr-footer__inner { + position: relative; + max-width: 1200px; + margin: 0 auto; + padding: var(--kr-space-3xl) var(--kr-space-xl) var(--kr-space-2xl); + display: grid; + grid-template-columns: 1.5fr 1fr 1fr 1fr; + gap: var(--kr-space-2xl); +} + +.kr-footer__col-title { + font-family: var(--kr-font-heading); + font-size: 0.6875rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.12em; + color: var(--kr-gold); + margin-bottom: var(--kr-space-md); + padding-bottom: var(--kr-space-sm); + border-bottom: 1px solid var(--kr-border-subtle); +} + +.kr-footer__nav { + display: flex; + flex-direction: column; + gap: var(--kr-space-sm); +} +.kr-footer__nav a { + color: var(--kr-text-secondary) !important; + font-size: 0.8125rem; + transition: color var(--kr-ease-fast), padding-left var(--kr-ease-fast); +} +.kr-footer__nav a:hover { + color: var(--kr-cream) !important; + padding-left: 4px; +} + +/* Brand column */ +.kr-footer__col--brand { + display: flex; + flex-direction: column; +} +.kr-footer__logo-wrap { margin-bottom: var(--kr-space-sm); } +.kr-footer__logo { + font-family: var(--kr-font-display); + font-size: 1.75rem; + font-weight: 700; + color: var(--kr-cream); + letter-spacing: 0.05em; +} +.kr-footer__logo-accent { + color: var(--kr-red); + text-shadow: 0 0 15px rgba(217, 72, 43, 0.4); +} +.kr-footer__tagline { + font-family: var(--kr-font-heading); + font-size: 0.8125rem; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--kr-text-muted); +} + +.kr-footer__selectors { + display: flex; + flex-direction: column; + gap: var(--kr-space-md); +} +.kr-footer__selector { + display: flex; + flex-direction: column; + gap: var(--kr-space-xs); +} +.kr-footer__selector label { + font-family: var(--kr-font-heading); + font-size: 0.6875rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--kr-text-muted); +} + +/* Bottom bar */ +.kr-footer__bottom { + border-top: 1px solid var(--kr-border-subtle); + background: rgba(0, 0, 0, 0.2); +} +.kr-footer__bottom-inner { + max-width: 1200px; + margin: 0 auto; + padding: var(--kr-space-md) var(--kr-space-xl); + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + gap: var(--kr-space-sm); +} +.kr-footer__copyright { + font-size: 0.75rem; + color: var(--kr-text-muted); +} +.kr-footer__copyright a { + color: var(--kr-text-secondary) !important; +} +.kr-footer__copyright a:hover { color: var(--kr-gold) !important; } +.kr-footer__meta { + font-size: 0.6875rem; + color: var(--kr-text-muted); +} + +/* -------------------------------------------------------------------------- + 18. STATS BAR + -------------------------------------------------------------------------- */ +.kr-stats { + position: relative; + background: var(--kr-bg-primary); + padding: var(--kr-space-3xl) 0; + border-bottom: 1px solid var(--kr-border-subtle); + margin-top: -1px; +} +.kr-stats::before { + content: ''; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 80%; + max-width: 600px; + height: 1px; + background: linear-gradient(90deg, transparent, rgba(201, 164, 92, 0.2), transparent); +} + +.kr-stats__grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--kr-space-lg); +} + +.kr-stats__item { + display: flex; + align-items: center; + gap: var(--kr-space-md); + padding: var(--kr-space-lg) var(--kr-space-xl); + background: var(--kr-bg-secondary); + border: 1px solid var(--kr-border-subtle); + border-radius: var(--kr-radius-lg); + transition: all var(--kr-ease); + box-shadow: var(--kr-shadow-sm); +} +.kr-stats__item:hover { + border-color: var(--kr-border-default); + box-shadow: var(--kr-shadow-md), 0 0 20px rgba(201, 164, 92, 0.06); + transform: translateY(-3px); +} +.kr-stats__item:hover .kr-stats__icon { + transform: scale(1.15); +} + +.kr-stats__icon { + font-size: 1.75rem; + color: var(--kr-gold); + text-shadow: var(--kr-glow-gold-text); + line-height: 1; + flex-shrink: 0; + width: 44px; + height: 44px; + display: flex; + align-items: center; + justify-content: center; + background: rgba(201, 164, 92, 0.06); + border-radius: var(--kr-radius-md); + border: 1px solid rgba(201, 164, 92, 0.1); + transition: transform var(--kr-ease); +} +.kr-stats__item--woe .kr-stats__icon { + color: var(--kr-red); + text-shadow: 0 0 12px rgba(217, 72, 43, 0.5); + background: rgba(217, 72, 43, 0.06); + border-color: rgba(217, 72, 43, 0.15); +} + +.kr-stats__data { + display: flex; + flex-direction: column; + gap: 2px; +} + +.kr-stats__value { + font-family: var(--kr-font-heading); + font-size: 1.25rem; + font-weight: 700; + color: var(--kr-cream); + letter-spacing: 0.02em; +} + +.kr-stats__label { + font-size: 0.6875rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--kr-text-muted); +} + +/* -------------------------------------------------------------------------- + 19. WHY KUNAIRO SECTION + -------------------------------------------------------------------------- */ +.kr-section--why { + background: var(--kr-bg-body); + padding: var(--kr-space-4xl) 0; + position: relative; +} +.kr-section--why::before { + content: ''; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: 60%; + max-width: 300px; + height: 1px; + background: linear-gradient(90deg, transparent, var(--kr-gold), transparent); + box-shadow: 0 0 20px rgba(201, 164, 92, 0.15); +} + +.kr-why__grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--kr-space-xl); +} + +.kr-why__card { + text-align: center; + padding: var(--kr-space-2xl) var(--kr-space-lg); + background: var(--kr-bg-secondary); + border: 1px solid var(--kr-border-subtle); + border-radius: var(--kr-radius-lg); + transition: all var(--kr-ease); + box-shadow: var(--kr-shadow-sm); + position: relative; + overflow: hidden; +} +.kr-why__card::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 2px; + background: linear-gradient(90deg, transparent, var(--kr-gold), transparent); + opacity: 0; + transition: opacity var(--kr-ease); +} +.kr-why__card:hover { + border-color: var(--kr-border-strong); + box-shadow: var(--kr-shadow-lg), 0 0 30px rgba(201, 164, 92, 0.06), 0 0 0 1px rgba(201, 164, 92, 0.08); + transform: translateY(-6px); + background: var(--kr-bg-elevated); +} +.kr-why__card:hover::after { opacity: 1; } +.kr-why__card:hover .kr-why__icon-wrap { + transform: scale(1.1); + box-shadow: 0 0 16px rgba(201, 164, 92, 0.15); +} +.kr-why__card:hover .kr-why__icon-wrap--red { + box-shadow: 0 0 16px rgba(217, 72, 43, 0.2); +} +.kr-why__card:hover .kr-why__icon-wrap--orange { + box-shadow: 0 0 16px rgba(255, 122, 26, 0.2); +} +.kr-why__card:hover .kr-why__icon-wrap--fire { + box-shadow: 0 0 20px rgba(217, 72, 43, 0.3); +} + +.kr-why__icon-wrap { + display: inline-flex; + align-items: center; + justify-content: center; + width: 56px; + height: 56px; + transition: transform var(--kr-ease), box-shadow var(--kr-ease); + border-radius: var(--kr-radius-lg); + background: rgba(201, 164, 92, 0.08); + border: 1px solid rgba(201, 164, 92, 0.2); + margin-bottom: var(--kr-space-lg); +} +.kr-why__icon-wrap--red { + background: rgba(217, 72, 43, 0.08); + border-color: rgba(217, 72, 43, 0.25); +} +.kr-why__icon-wrap--orange { + background: rgba(255, 122, 26, 0.08); + border-color: rgba(255, 122, 26, 0.25); +} +.kr-why__icon-wrap--fire { + background: rgba(217, 72, 43, 0.1); + border-color: rgba(217, 72, 43, 0.3); + box-shadow: 0 0 15px rgba(217, 72, 43, 0.1); +} + +.kr-why__icon { + font-size: 1.5rem; + color: var(--kr-gold); + line-height: 1; +} +.kr-why__icon-wrap--red .kr-why__icon { color: var(--kr-red); } +.kr-why__icon-wrap--orange .kr-why__icon { color: var(--kr-orange); } +.kr-why__icon-wrap--fire .kr-why__icon { color: var(--kr-red-light); text-shadow: 0 0 8px rgba(217, 72, 43, 0.4); } + +.kr-why__title { + font-family: var(--kr-font-heading); + font-size: 1.0625rem; + font-weight: 700; + color: var(--kr-cream); + margin-bottom: var(--kr-space-sm); + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.kr-why__desc { + font-size: 0.8125rem; + color: var(--kr-text-secondary); + line-height: 1.7; + margin: 0; +} + +/* -------------------------------------------------------------------------- + 20. FEATURED NEWS CARD + -------------------------------------------------------------------------- */ +.kr-featured { + position: relative; + background: var(--kr-bg-elevated); + border: 1px solid var(--kr-border-red); + border-radius: var(--kr-radius-lg); + overflow: hidden; + margin-bottom: var(--kr-space-xl); + box-shadow: var(--kr-shadow-lg), 0 0 30px rgba(217, 72, 43, 0.06); + transition: all var(--kr-ease); +} +.kr-featured:hover { + box-shadow: var(--kr-shadow-xl), 0 0 40px rgba(217, 72, 43, 0.1); + transform: translateY(-2px); +} + +.kr-featured__accent { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 4px; + background: linear-gradient(180deg, var(--kr-red), var(--kr-orange), var(--kr-red)); + box-shadow: 0 0 12px rgba(217, 72, 43, 0.4); +} + +.kr-featured__inner { + padding: var(--kr-space-2xl) var(--kr-space-2xl) var(--kr-space-2xl) calc(var(--kr-space-2xl) + 4px); +} + +.kr-featured__badge { + display: inline-block; + padding: 0.2rem 0.75rem; + font-family: var(--kr-font-heading); + font-size: 0.6875rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--kr-red); + background: rgba(217, 72, 43, 0.1); + border: 1px solid rgba(217, 72, 43, 0.3); + border-radius: var(--kr-radius-full); + margin-bottom: var(--kr-space-md); +} + +.kr-featured__title { + font-family: var(--kr-font-heading); + font-size: 1.5rem; + font-weight: 700; + color: var(--kr-cream); + margin: 0 0 var(--kr-space-sm); + line-height: 1.3; +} + +.kr-featured__meta { + display: block; + font-size: 0.75rem; + color: var(--kr-text-muted); + font-weight: 500; + margin-bottom: var(--kr-space-lg); +} + +.kr-featured__body { + color: var(--kr-text-secondary); + font-size: 0.9375rem; + line-height: 1.8; + margin-bottom: var(--kr-space-lg); +} + +/* -------------------------------------------------------------------------- + 21. SECTION SEPARATORS — improved + -------------------------------------------------------------------------- */ +.kr-section--news { + border-top: none; +} +.kr-section--news::before { + width: 80%; + max-width: 500px; +} + +/* -------------------------------------------------------------------------- + 22. EMPTY STATE + -------------------------------------------------------------------------- */ +.kr-empty { + text-align: center; + padding: var(--kr-space-3xl) var(--kr-space-xl); + background: var(--kr-bg-elevated); + border: 1px dashed var(--kr-border-default); + border-radius: var(--kr-radius-lg); +} +.kr-empty__icon { + display: block; + font-size: 2.5rem; + color: var(--kr-text-muted); + margin-bottom: var(--kr-space-md); + opacity: 0.5; +} +.kr-empty__text { + font-size: 0.9375rem; + color: var(--kr-text-muted); + margin: 0; + font-style: italic; +} + +/* -------------------------------------------------------------------------- + 23. FORMS — Table alignment fix + premium styling + -------------------------------------------------------------------------- */ + +/* --- Form container --- */ +body.kr-body .generic-form, +body.kr-body .generic-form-div { + max-width: 600px; +} + +/* --- Table structure --- */ +body.kr-body .generic-form-table { + width: 100% !important; + border-collapse: separate !important; + border-spacing: 0 !important; + background: var(--kr-bg-secondary) !important; + border: 1px solid var(--kr-border-subtle) !important; + border-radius: var(--kr-radius-lg) !important; + overflow: hidden; + box-shadow: var(--kr-shadow-md) !important; +} + +body.kr-body .generic-form-table tr { + display: table-row !important; +} + +/* --- Label column (th) --- */ +body.kr-body .generic-form-table th { + width: 180px !important; + min-width: 180px !important; + text-align: right !important; + vertical-align: middle !important; + background: transparent !important; + border: none !important; + border-bottom: 1px solid var(--kr-border-subtle) !important; + color: var(--kr-text-secondary) !important; + font-family: var(--kr-font-heading) !important; + font-size: 0.75rem !important; + font-weight: 600 !important; + text-transform: uppercase; + letter-spacing: 0.06em; + padding: 0.75rem 1rem 0.75rem 1.25rem !important; + white-space: nowrap; +} + +/* --- Input column (td) --- */ +body.kr-body .generic-form-table td { + width: 100% !important; + background: transparent !important; + border: none !important; + border-bottom: 1px solid var(--kr-border-subtle) !important; + padding: 0.75rem 1.25rem 0.75rem 0.75rem !important; + vertical-align: middle !important; +} + +/* Last row — no border */ +body.kr-body .generic-form-table tr:last-child th, +body.kr-body .generic-form-table tr:last-child td { + border-bottom: none !important; +} + +/* --- Force input consistency --- */ +body.kr-body .generic-form-table input[type="text"], +body.kr-body .generic-form-table input[type="password"], +body.kr-body .generic-form-table input[type="email"], +body.kr-body .generic-form-table input[type="number"], +body.kr-body .generic-form-table textarea { + width: 100% !important; + max-width: 100% !important; + box-sizing: border-box !important; + display: block !important; +} + +body.kr-body .generic-form-table select { + width: 100% !important; + max-width: 100% !important; + box-sizing: border-box !important; + display: block !important; +} + +/* --- Multi-field rows (date selects, inline fields) --- */ +body.kr-body .generic-form-table td > select + select, +body.kr-body .generic-form-table td .datefields select { + display: inline-block !important; + width: auto !important; + min-width: 70px !important; + margin-right: 4px; +} + +/* Radio buttons inline */ +body.kr-body .generic-form-table td p:has(input[type="radio"]), +body.kr-body .generic-form-table td label:has(input[type="radio"]) { + display: inline-flex; + align-items: center; + gap: 4px; + margin-right: var(--kr-space-md); +} +body.kr-body .generic-form-table input[type="radio"] { + width: auto !important; + display: inline-block !important; + accent-color: var(--kr-red); +} + +/* --- Button alignment --- */ +body.kr-body .generic-form-table td input[type="submit"], +body.kr-body .generic-form-table td button { + display: inline-block !important; + width: auto !important; + margin-top: 4px; +} + +/* --- Fix dark theme text colors (override flux.css defaults) --- */ +body.kr-body .generic-form-table td p { + color: var(--kr-text-secondary) !important; + margin: 4px 0 !important; +} +body.kr-body .generic-form-table td div { + color: var(--kr-text-secondary) !important; +} +body.kr-body #content { + color: var(--kr-text-primary) !important; +} +body.kr-body p { + color: var(--kr-text-secondary); +} +body.kr-body h2 { + color: var(--kr-cream) !important; +} +body.kr-body label { + color: var(--kr-text-secondary); +} +body.kr-body strong { + color: var(--kr-text-primary); +} +body.kr-body .action a { + color: var(--kr-gold) !important; + font-size: 0.8125rem; +} + +/* --- Security code / captcha --- */ +body.kr-body .generic-form-table .security-code { + background: var(--kr-bg-elevated); + border: 1px solid var(--kr-border-default); + border-radius: var(--kr-radius-md); + padding: var(--kr-space-sm); + display: inline-block; + margin-bottom: var(--kr-space-sm); +} +body.kr-body .generic-form-table .security-code img { + display: block; + border-radius: var(--kr-radius-sm); +} + +/* --- Search forms --- */ +body.kr-body .search-form, +body.kr-body .search-form2 { + background: var(--kr-bg-secondary); + border: 1px solid var(--kr-border-subtle); + border-radius: var(--kr-radius-lg); + padding: var(--kr-space-lg) var(--kr-space-xl); + box-shadow: var(--kr-shadow-sm); + margin-bottom: var(--kr-space-lg); +} + +body.kr-body .search-form p, +body.kr-body .search-form2 p { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: 10px; + align-items: end; + margin: 0 0 var(--kr-space-md); +} + +body.kr-body .search-form label, +body.kr-body .search-form2 label { + font-family: var(--kr-font-heading); + font-size: 0.6875rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--kr-text-secondary); + display: block; + margin-bottom: 4px; +} + +body.kr-body .search-form input[type="text"], +body.kr-body .search-form2 input[type="text"], +body.kr-body .search-form select, +body.kr-body .search-form2 select { + width: 100% !important; + box-sizing: border-box !important; +} + +body.kr-body .search-form input[type="submit"], +body.kr-body .search-form input[type="button"], +body.kr-body .search-form input[type="reset"], +body.kr-body .search-form2 input[type="submit"], +body.kr-body .search-form2 input[type="button"], +body.kr-body .search-form2 input[type="reset"] { + width: auto !important; +} + +body.kr-body .search-form input[type="checkbox"], +body.kr-body .search-form2 input[type="checkbox"] { + width: auto !important; + display: inline-block !important; + accent-color: var(--kr-red); +} + +/* Content headings for internal pages */ +body.kr-body .kr-main--with-sidebar h2 { + font-family: var(--kr-font-heading); + font-size: 1.375rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--kr-cream); + padding-bottom: var(--kr-space-sm); + margin-bottom: var(--kr-space-lg); + border-bottom: 2px solid var(--kr-border-subtle); + position: relative; +} +body.kr-body .kr-main--with-sidebar h2::after { + content: ''; + position: absolute; + bottom: -2px; + left: 0; + width: 40px; + height: 2px; + background: linear-gradient(90deg, var(--kr-red), var(--kr-orange)); +} + +/* FluxCP legacy class overrides */ +body.kr-body .red { + color: var(--kr-red-light) !important; + background: rgba(217, 72, 43, 0.08); + padding: var(--kr-space-sm) var(--kr-space-md); + border-radius: var(--kr-radius-sm); + border-left: 3px solid var(--kr-red); +} +body.kr-body .green { + color: #5cb85c !important; + background: rgba(92, 184, 92, 0.08); + padding: var(--kr-space-sm) var(--kr-space-md); + border-radius: var(--kr-radius-sm); + border-left: 3px solid #5cb85c; +} +body.kr-body .important { + color: var(--kr-orange) !important; +} +body.kr-body .message { + background: rgba(201, 164, 92, 0.08); + border: 1px solid rgba(201, 164, 92, 0.2); + color: var(--kr-gold); + padding: var(--kr-space-md) var(--kr-space-lg); + border-radius: var(--kr-radius-md); + margin-bottom: var(--kr-space-lg); +} +body.kr-body .notice { + background: rgba(255, 122, 26, 0.06); + border: 1px solid rgba(255, 122, 26, 0.2); + color: var(--kr-orange); + padding: var(--kr-space-md) var(--kr-space-lg); + border-radius: var(--kr-radius-md); + margin-bottom: var(--kr-space-lg); +} + +/* Horizontal/vertical tables (rankings, item DB, etc.) */ +body.kr-body .horizontal-table, +body.kr-body .vertical-table { + background: var(--kr-bg-secondary) !important; + border: 1px solid var(--kr-border-subtle) !important; + border-radius: var(--kr-radius-md) !important; + overflow: hidden; + box-shadow: var(--kr-shadow-sm); +} +body.kr-body .horizontal-table th, +body.kr-body .vertical-table th { + background: var(--kr-dark-warm) !important; + color: var(--kr-gold) !important; + font-family: var(--kr-font-heading) !important; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + font-size: 0.75rem !important; + padding: 0.75rem 1rem !important; + border-bottom: 2px solid var(--kr-border-red) !important; + border-right: none !important; +} +body.kr-body .horizontal-table td, +body.kr-body .vertical-table td { + padding: 0.625rem 1rem !important; + border-bottom: 1px solid var(--kr-border-subtle) !important; + border-right: none !important; + color: var(--kr-text-secondary) !important; +} +body.kr-body .horizontal-table tr:hover td, +body.kr-body .vertical-table tr:hover td { + background: rgba(201, 164, 92, 0.03) !important; +} + +/* -------------------------------------------------------------------------- + 24. ENHANCED INPUTS + -------------------------------------------------------------------------- */ +body.kr-body input[type="text"], +body.kr-body input[type="password"], +body.kr-body input[type="email"], +body.kr-body input[type="number"], +body.kr-body input[type="file"], +body.kr-body textarea, +body.kr-body select { + background: var(--kr-bg-elevated); + color: var(--kr-text-primary); + border: 1px solid var(--kr-border-default); + border-radius: var(--kr-radius-md); + padding: 0.625rem 0.875rem; + font-family: var(--kr-font-body); + font-size: 0.875rem; + transition: all var(--kr-ease); + outline: none; +} +body.kr-body input[type="text"]:hover, +body.kr-body input[type="password"]:hover, +body.kr-body input[type="email"]:hover, +body.kr-body select:hover, +body.kr-body textarea:hover { + border-color: var(--kr-border-strong); +} +body.kr-body input:focus, +body.kr-body textarea:focus, +body.kr-body select:focus, +body.kr-body .kr-input--focused { + border-color: var(--kr-gold) !important; + box-shadow: 0 0 0 3px rgba(201, 164, 92, 0.1), 0 0 16px rgba(201, 164, 92, 0.06) !important; + background-color: var(--kr-bg-surface) !important; + color: var(--kr-cream) !important; +} + +body.kr-body input[type="submit"], +body.kr-body input[type="button"], +body.kr-body button:not(.kr-nav-toggle):not(.kr-sidebar-toggle) { + background: linear-gradient(135deg, var(--kr-red), var(--kr-orange)); + color: var(--kr-white); + border: none; + border-radius: var(--kr-radius-md); + padding: 0.625rem 1.5rem; + font-family: var(--kr-font-heading); + font-size: 0.875rem; + font-weight: 600; + letter-spacing: 0.05em; + text-transform: uppercase; + cursor: pointer; + transition: all var(--kr-ease); + box-shadow: var(--kr-shadow-sm), inset 0 1px 0 rgba(255,255,255,0.1); + position: relative; + overflow: hidden; +} +body.kr-body input[type="submit"]:hover, +body.kr-body input[type="button"]:hover, +body.kr-body button:not(.kr-nav-toggle):not(.kr-sidebar-toggle):hover { + box-shadow: var(--kr-glow-red), var(--kr-shadow-md); + transform: translateY(-2px); + filter: brightness(1.05); +} +body.kr-body input[type="submit"]:active, +body.kr-body input[type="button"]:active, +body.kr-body button:not(.kr-nav-toggle):not(.kr-sidebar-toggle):active { + transform: translateY(0); + filter: brightness(0.95); +} + +/* -------------------------------------------------------------------------- + 25. GAMING IDENTITY DETAILS + -------------------------------------------------------------------------- */ + +/* Section divider glow lines */ +.kr-section--why::after { + content: ''; + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%); + width: 200px; + height: 1px; + background: linear-gradient(90deg, transparent, rgba(217, 72, 43, 0.3), transparent); +} + +/* Decorative corner accents on featured card */ +.kr-featured::before { + content: ''; + position: absolute; + top: 0; + right: 0; + width: 60px; + height: 60px; + background: linear-gradient(135deg, transparent 50%, rgba(217, 72, 43, 0.04) 50%); + pointer-events: none; +} + +/* Gaming-style glow on section headings */ +.kr-section__heading-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + background: rgba(217, 72, 43, 0.08); + border: 1px solid rgba(217, 72, 43, 0.2); + border-radius: var(--kr-radius-sm); + margin-right: var(--kr-space-sm); + font-size: 1rem; + color: var(--kr-red); + text-shadow: 0 0 8px rgba(217, 72, 43, 0.4); + vertical-align: middle; +} + +/* Pulsing dot for stats (alive indicator) */ +.kr-stats__item--woe .kr-stats__value::before { + content: ''; + display: inline-block; + width: 8px; + height: 8px; + background: var(--kr-red); + border-radius: 50%; + margin-right: var(--kr-space-sm); + box-shadow: 0 0 8px rgba(217, 72, 43, 0.6); + animation: kr-pulse-dot 2s ease-in-out infinite; + vertical-align: middle; +} + +@keyframes kr-pulse-dot { + 0%, 100% { opacity: 1; box-shadow: 0 0 8px rgba(217, 72, 43, 0.6); } + 50% { opacity: 0.5; box-shadow: 0 0 4px rgba(217, 72, 43, 0.3); } +} + +/* Subtle glow behind why cards on hover */ +.kr-why__card::before { + content: ''; + position: absolute; + inset: -1px; + border-radius: inherit; + background: linear-gradient(135deg, rgba(201, 164, 92, 0.08), transparent, rgba(217, 72, 43, 0.06)); + opacity: 0; + transition: opacity var(--kr-ease); + z-index: -1; +} +.kr-why__card:hover::before { opacity: 1; } + +/* Internal page content links */ +body.kr-body .kr-main--with-sidebar a:not(.kr-btn):not(.kr-submenu__item):not(.kr-pagemenu__item) { + transition: color var(--kr-ease-fast), text-shadow var(--kr-ease-fast); +} +body.kr-body .kr-main--with-sidebar a:not(.kr-btn):not(.kr-submenu__item):not(.kr-pagemenu__item):hover { + text-shadow: 0 0 8px rgba(201, 164, 92, 0.2); +} + +/* Smooth page transitions */ +.kr-main--with-sidebar, +.kr-main--full { + animation: kr-fade-in 0.3s ease; +} +@keyframes kr-fade-in { + from { opacity: 0; transform: translateY(6px); } + to { opacity: 1; transform: translateY(0); } +} + +/* -------------------------------------------------------------------------- + 26. FORM CARD SYSTEM (modern account pages) + -------------------------------------------------------------------------- */ +.kr-form-card { + max-width: 560px; + margin: 0 auto; + background: var(--kr-bg-secondary); + border: 1px solid var(--kr-border-subtle); + border-radius: var(--kr-radius-xl); + overflow: hidden; + box-shadow: var(--kr-shadow-lg); + position: relative; +} +.kr-form-card::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: linear-gradient(90deg, var(--kr-red), var(--kr-orange), var(--kr-red)); +} + +.kr-form-card__header { + padding: var(--kr-space-2xl) var(--kr-space-2xl) var(--kr-space-lg); + text-align: center; + border-bottom: 1px solid var(--kr-border-subtle); + background: linear-gradient(180deg, rgba(26, 13, 18, 0.3), transparent); +} + +.kr-form-card__title { + font-family: var(--kr-font-heading); + font-size: 1.5rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--kr-cream); + margin: 0 0 var(--kr-space-sm); +} + +.kr-form-card__subtitle { + font-size: 0.8125rem; + color: var(--kr-text-secondary); + margin: 0; + line-height: 1.6; +} +.kr-form-card__subtitle a { + color: var(--kr-gold); +} + +.kr-form-card__error { + background: rgba(217, 72, 43, 0.08); + border: 1px solid rgba(217, 72, 43, 0.25); + color: var(--kr-red-light); + padding: var(--kr-space-md) var(--kr-space-2xl); + font-size: 0.875rem; + font-weight: 500; +} + +.kr-form-card__notices { + padding: var(--kr-space-md) var(--kr-space-2xl); + border-bottom: 1px solid var(--kr-border-subtle); + background: rgba(201, 164, 92, 0.02); +} + +.kr-form-notice { + font-size: 0.75rem; + color: var(--kr-text-muted); + padding: 2px 0; + padding-left: var(--kr-space-md); + position: relative; +} +.kr-form-notice::before { + content: '\2022'; + position: absolute; + left: 0; + color: var(--kr-gold); +} + +.kr-form-card__body { + padding: var(--kr-space-xl) var(--kr-space-2xl); +} + +.kr-form-card__footer { + padding: var(--kr-space-lg) var(--kr-space-2xl) var(--kr-space-2xl); + border-top: 1px solid var(--kr-border-subtle); + background: rgba(0, 0, 0, 0.15); +} + +.kr-form-card__terms { + font-size: 0.75rem; + color: var(--kr-text-muted); + margin: 0 0 var(--kr-space-md); + text-align: center; +} +.kr-form-card__terms a { + color: var(--kr-gold); +} + +/* Form group */ +.kr-form-group { + margin-bottom: var(--kr-space-lg); + flex: 1; + min-width: 0; +} +.kr-form-group:last-child { + margin-bottom: 0; +} + +.kr-form-label { + display: block; + font-family: var(--kr-font-heading); + font-size: 0.6875rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--kr-text-secondary); + margin-bottom: var(--kr-space-xs); +} + +.kr-form-input { + display: block; + width: 100%; + background: var(--kr-bg-elevated) !important; + color: var(--kr-text-primary) !important; + border: 1px solid var(--kr-border-default) !important; + border-radius: var(--kr-radius-md) !important; + padding: 0.625rem 0.875rem !important; + font-family: var(--kr-font-body) !important; + font-size: 0.875rem !important; + transition: all var(--kr-ease) !important; + outline: none !important; +} +.kr-form-input:hover { + border-color: var(--kr-border-strong) !important; +} +.kr-form-input:focus { + border-color: var(--kr-gold) !important; + box-shadow: 0 0 0 3px rgba(201, 164, 92, 0.1), 0 0 16px rgba(201, 164, 92, 0.06) !important; + background-color: var(--kr-bg-surface) !important; +} + +/* Two-column row */ +.kr-form-row { + display: flex; + gap: var(--kr-space-lg); +} + +/* Radio group */ +.kr-form-radio-group { + display: flex; + gap: var(--kr-space-md); + padding-top: var(--kr-space-xs); +} +.kr-form-radio { + display: inline-flex; + align-items: center; + gap: var(--kr-space-xs); + cursor: pointer; + font-size: 0.875rem; + color: var(--kr-text-secondary); + padding: var(--kr-space-xs) var(--kr-space-md); + border: 1px solid var(--kr-border-subtle); + border-radius: var(--kr-radius-md); + transition: all var(--kr-ease-fast); +} +.kr-form-radio:hover { + border-color: var(--kr-border-default); + background: rgba(201, 164, 92, 0.04); +} +.kr-form-radio input[type="radio"] { + accent-color: var(--kr-red); +} +.kr-form-radio input[type="radio"]:checked + span { + color: var(--kr-cream); +} + +/* Date field (inherits FluxCP dateField output) */ +.kr-form-date select { + margin-right: var(--kr-space-xs); +} + +/* Captcha */ +.kr-captcha { + display: flex; + flex-direction: column; + gap: var(--kr-space-sm); +} +.kr-captcha__image { + background: var(--kr-bg-elevated); + border: 1px solid var(--kr-border-default); + border-radius: var(--kr-radius-md); + padding: var(--kr-space-sm); + display: inline-block; +} +.kr-captcha__image img { + display: block; + border-radius: var(--kr-radius-sm); +} +.kr-captcha__refresh { + font-size: 0.75rem; + font-weight: 600; + color: var(--kr-gold) !important; +} + +/* Block button */ +.kr-btn--block { + display: block; + width: 100%; + text-align: center; +} + +/* -------------------------------------------------------------------------- + 27. UTILITIES + -------------------------------------------------------------------------- */ +.kr-text-muted { color: var(--kr-text-muted); } +.kr-text-gold { color: var(--kr-gold); } +.kr-text-red { color: var(--kr-red); } + +/* -------------------------------------------------------------------------- + 19. ANIMATIONS + -------------------------------------------------------------------------- */ +@keyframes kr-fire-flicker { + 0% { opacity: 0.7; transform: scaleY(1); } + 50% { opacity: 1; } + 100% { opacity: 0.85; transform: scaleY(1.03); } +} + +@keyframes kr-energy-pulse { + 0% { opacity: 0.3; transform: scale(1); } + 100% { opacity: 0.8; transform: scale(1.1); } +} + +@keyframes kr-smoke-drift { + 0% { opacity: 0.5; transform: translateX(-8px) translateY(0); } + 100% { opacity: 0.8; transform: translateX(8px) translateY(-4px); } +} + +@keyframes kr-sparks-float { + 0% { opacity: 0.3; transform: translateY(0) scale(1); } + 100% { opacity: 0.9; transform: translateY(-15px) scale(1.1); } +} + +@keyframes kr-title-glow { + 0% { text-shadow: 0 0 30px rgba(217, 72, 43, 0.4), 0 0 60px rgba(217, 72, 43, 0.2); } + 100% { text-shadow: 0 0 50px rgba(217, 72, 43, 0.7), 0 0 100px rgba(217, 72, 43, 0.3), 0 0 150px rgba(217, 72, 43, 0.1); } +} + +/* -------------------------------------------------------------------------- + 20. RESPONSIVE + -------------------------------------------------------------------------- */ +@media (max-width: 1024px) { + .kr-stats__grid { grid-template-columns: repeat(2, 1fr); } + .kr-why__grid { grid-template-columns: repeat(2, 1fr); } + .kr-footer__inner { grid-template-columns: 1fr 1fr; } +} + +@media (max-width: 768px) { + /* Navbar mobile */ + .kr-nav-toggle { display: flex; } + + .kr-navbar__nav { + display: none; + position: absolute; + top: 64px; + left: 0; + right: 0; + flex-direction: column; + background: rgba(7, 7, 11, 0.97); + backdrop-filter: blur(20px); + border-bottom: 1px solid var(--kr-border-subtle); + padding: var(--kr-space-md); + gap: 0; + } + .kr-navbar__nav--open { display: flex; } + .kr-navbar__link { + padding: var(--kr-space-sm) var(--kr-space-md); + font-size: 0.875rem; + border-bottom: 1px solid var(--kr-border-subtle); + } + .kr-navbar__link:last-child { border-bottom: none; } + + /* Hero */ + .kr-hero { + min-height: 480px; + } + .kr-hero__content { + padding: var(--kr-space-3xl) var(--kr-space-md) var(--kr-space-2xl); + } + .kr-hero__actions { + flex-direction: column; + align-items: center; + } + .kr-hero__actions .kr-btn { + width: 100%; + max-width: 280px; + } + + /* Stats & Why mobile */ + .kr-stats__grid { grid-template-columns: 1fr 1fr; } + .kr-why__grid { grid-template-columns: 1fr; } + .kr-why__card { text-align: left; display: flex; gap: var(--kr-space-lg); align-items: flex-start; padding: var(--kr-space-lg); } + .kr-why__icon-wrap { margin-bottom: 0; flex-shrink: 0; } + + /* Form cards mobile */ + .kr-form-row { flex-direction: column; gap: 0; } + .kr-form-card__header, + .kr-form-card__body, + .kr-form-card__footer, + .kr-form-card__notices { padding-left: var(--kr-space-lg); padding-right: var(--kr-space-lg); } + + /* Form tables — stack label above input on mobile */ + body.kr-body .generic-form-table th { + min-width: 0 !important; + width: auto !important; + display: block !important; + text-align: left !important; + padding: 0.5rem 1rem 0.2rem !important; + } + body.kr-body .generic-form-table td { + display: block !important; + padding: 0.2rem 1rem 0.75rem !important; + } + body.kr-body .generic-form { max-width: 100%; } + + /* Containers — reduce horizontal padding */ + .kr-container { padding: 0 var(--kr-space-md); } + .kr-stats { padding: var(--kr-space-xl) 0; } + .kr-section--why { padding: var(--kr-space-2xl) 0; } + .kr-section--news { padding: var(--kr-space-2xl) 0; } + + /* Sidebar mobile */ + .kr-page--internal > .kr-sidebar-toggle { display: flex; } + .kr-sidebar { + position: fixed; + top: 64px; + left: 0; + bottom: 0; + width: 280px; + background: var(--kr-bg-secondary); + border-right: 1px solid var(--kr-border-subtle); + z-index: 999; + overflow-y: auto; + transform: translateX(-100%); + transition: transform var(--kr-ease); + padding: var(--kr-space-lg); + } + .kr-sidebar--open { + transform: translateX(0); + box-shadow: var(--kr-shadow-xl); + } + + /* Internal layout */ + .kr-page--internal { + flex-direction: column; + padding: var(--kr-space-lg); + } + + /* Footer */ + .kr-footer__inner { + grid-template-columns: 1fr; + gap: var(--kr-space-xl); + padding: var(--kr-space-2xl) var(--kr-space-lg) var(--kr-space-xl); + } + .kr-footer__bottom-inner { + flex-direction: column; + text-align: center; + } + + /* Userbar */ + .kr-userbar__inner { + flex-direction: column; + align-items: flex-start; + } +} + +@media (max-width: 480px) { + .kr-navbar { height: 56px; } + .kr-navbar__nav { top: 56px; } + .kr-sidebar { top: 56px; } + .kr-navbar__brand { font-size: 1.25rem; } + + .kr-hero { min-height: 400px; } + .kr-hero__title { font-size: clamp(2.5rem, 12vw, 3.5rem); } + .kr-hero__tagline { letter-spacing: 0.12em; } + + .kr-badge { font-size: 0.6875rem; padding: 0.2rem 0.75rem; } + .kr-btn--lg { padding: 0.625rem 1.5rem; font-size: 0.875rem; } + .kr-btn--xl { padding: 0.75rem 1.75rem; font-size: 0.9375rem; } + + .kr-stats__grid { grid-template-columns: 1fr; } + .kr-stats__item { padding: var(--kr-space-md) var(--kr-space-lg); } + + .kr-featured__inner { padding: var(--kr-space-md) var(--kr-space-md) var(--kr-space-md) calc(var(--kr-space-md) + 4px); } + .kr-featured__title { font-size: 1.125rem; } + + /* Kill any remaining overflow sources */ + .kr-container { padding: 0 var(--kr-space-sm); } + .kr-hero__content { padding: var(--kr-space-2xl) var(--kr-space-sm) var(--kr-space-xl); } + .kr-hero__actions .kr-btn { max-width: 100%; } + .kr-footer__inner { padding: var(--kr-space-xl) var(--kr-space-md) var(--kr-space-md); } + .kr-page--internal { padding: var(--kr-space-md); } + .kr-navbar { padding: 0 var(--kr-space-sm); } + .kr-navbar__inner { padding: 0 var(--kr-space-sm); } +} diff --git a/themes/kunairo/docs/download-page-content.html b/themes/kunairo/docs/download-page-content.html new file mode 100644 index 000000000..7b0de376f --- /dev/null +++ b/themes/kunairo/docs/download-page-content.html @@ -0,0 +1,73 @@ + + +
+ + +

+Todo lo que necesitas para unirte a KunaiRO. Descarga el cliente completo e instala el launcher para mantener tu juego actualizado. +

+ + +
+
+
+

⚔ Cliente Completo

+

Incluye kRO + archivos base del servidor. Requerido para jugar.

+

+ Tamaño: ~2.5 GB  ·  + Formato: ZIP +

+
+ Descargar Cliente +
+
+ + +
+
+
+

⬇ KunaiRO Launcher

+

Actualizador automático. Colócalo en la carpeta del cliente.

+

+ Tamaño: ~75 MB  ·  + Formato: EXE (Portable) +

+
+ Descargar Launcher +
+
+ + +
+

⚙ Instrucciones de instalación

+
    +
  1. Descarga el Cliente Completo y descomprímelo en una carpeta
  2. +
  3. Descarga el KunaiRO Launcher y colócalo dentro de la misma carpeta
  4. +
  5. Ejecuta KunaiRO-Launcher-Portable.exe
  6. +
  7. El launcher descargará las actualizaciones automáticamente
  8. +
  9. Haz click en JUGAR AHORA cuando esté listo
  10. +
+
+ + +
+

Requisitos del sistema

+ + + + + + +
Sistema OperativoWindows 7 / 8 / 10 / 11
ProcesadorPentium 4 o superior
Memoria RAM512 MB mínimo
Espacio en disco4 GB disponibles
ConexiónInternet (para actualizaciones)
+
+ +
diff --git a/themes/kunairo/docs/rules-page-content.html b/themes/kunairo/docs/rules-page-content.html new file mode 100644 index 000000000..2cf551442 --- /dev/null +++ b/themes/kunairo/docs/rules-page-content.html @@ -0,0 +1,147 @@ + + +
+ +

+Al jugar en KunaiRO aceptas cumplir con las siguientes reglas. El incumplimiento puede resultar en sanciones temporales o permanentes. +

+

+El equipo de administración se reserva el derecho de modificar estas reglas en cualquier momento. +

+ + +
+
+ +

Conducta General

+
+
    +
  1. Trata a todos los jugadores y miembros del staff con respeto.
  2. +
  3. Está prohibido el acoso, discriminación, amenazas o cualquier forma de hostigamiento.
  4. +
  5. No se permite contenido NSFW, político o religioso en canales públicos.
  6. +
  7. No hagas spam en el chat público ni por PM.
  8. +
  9. Está prohibido hacerse pasar por un GM o miembro del staff.
  10. +
  11. Las decisiones de los GMs son finales. No discutas sanciones en público — usa el sistema de tickets.
  12. +
+
+ + +
+
+ 🚫 +

Trampas y Software Ilegal

+
+
    +
  1. Está estrictamente prohibido usar bots, macros, auto-clickers o cualquier automatización.
  2. +
  3. No se permiten speed hacks, fly hacks, zoom hacks ni ningún tipo de hack.
  4. +
  5. Está prohibido usar clientes modificados que alteren la jugabilidad.
  6. +
  7. No se permite el uso de packet editors o herramientas de inyección.
  8. +
  9. Sanción: Ban permanente sin previo aviso.
  10. +
+
+ + +
+
+ 💰 +

Comercio y Economía

+
+
    +
  1. Está prohibido el RMT (Real Money Trading) — comprar o vender items/zeny/cuentas por dinero real.
  2. +
  3. No se permiten estafas de ningún tipo. Los trades son responsabilidad de cada jugador.
  4. +
  5. Está prohibido duplicar items o explotar bugs de la economía.
  6. +
  7. No se permite la manipulación de mercado mediante cuentas múltiples.
  8. +
  9. Sanción: Ban permanente de todas las cuentas involucradas.
  10. +
+
+ + +
+
+ +

War of Emperium (WoE)

+
+
    +
  1. Máximo 1 cliente por persona durante WoE (sin multiclient).
  2. +
  3. Está prohibido usar alianzas no declaradas entre guilds enemigas.
  4. +
  5. No se permite sabotear tu propia guild (spy/infiltración maliciosa).
  6. +
  7. Los AFK characters dentro del castillo durante WoE serán removidos.
  8. +
  9. Usar bugs o exploits durante WoE resulta en descalificación y ban temporal.
  10. +
+
+ + +
+
+ 👥 +

Multiclient

+
+
    +
  1. Se permiten hasta 2 clientes simultáneos fuera de WoE.
  2. +
  3. Durante WoE solo se permite 1 cliente.
  4. +
  5. Está prohibido usar multiclient para farmear MVPs (holdear/tanquear con alts).
  6. +
  7. No se permite usar alts para buff slave en PvP/BG.
  8. +
+
+ + +
+
+ 🐛 +

Bug Abuse

+
+
    +
  1. Si encuentras un bug, repórtalo inmediatamente al staff via ticket o Discord.
  2. +
  3. Explotar bugs intencionalmente resulta en ban permanente.
  4. +
  5. Reportar bugs de forma responsable puede ser recompensado.
  6. +
  7. No publiques bugs en canales públicos — usa el sistema privado de reportes.
  8. +
+
+ + +
+

⚠ Tabla de Sanciones

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Falta de respeto / spamMute 1-24h
Acoso / discriminaciónBan 3-7 días
Multiclient en WoEBan 7 días + pérdida de castillo
Bug abuseBan permanente
Bots / hacks / cheatsBan permanente
RMT / venta de cuentasBan permanente (todas las cuentas)
+
+ + +
+

+ ¿Tienes dudas sobre las reglas? Contáctanos en Discord o abre un ticket de soporte en el panel. +

+
+ +
diff --git a/themes/kunairo/donate/complete.php b/themes/kunairo/donate/complete.php new file mode 100644 index 000000000..8119e720e --- /dev/null +++ b/themes/kunairo/donate/complete.php @@ -0,0 +1,17 @@ + +

Donación completada

+

Tu transacción ha sido procesada y deberías recibir tus créditos en breve.

+ + +

+ Nota: Existe un sistema de retención de cuentas activo. Si es tu primera vez donando con la cuenta + y email de PayPal seleccionados, no recibirás tus créditos por horas. +

+ +

Además, se te ha enviado un email con los detalles de tu transacción.

+

También puedes revisar el historial desde tu cuenta de PayPal.

+ +
+
+

¡Gracias por tu generosa donación!

+

loginAthenaGroup->serverName) ?>

diff --git a/themes/kunairo/donate/history.php b/themes/kunairo/donate/history.php new file mode 100644 index 000000000..a3d7388ff --- /dev/null +++ b/themes/kunairo/donate/history.php @@ -0,0 +1,88 @@ + +

Historial de donaciones

+

Transacciones: Completadas

+ +

Tienes transacción(es) completada(s).

+ + + + + + + + + + + + + + + + + + + +
TransacciónFecha de pagoEmailMontoMonedaCréditos
txn_id) ?>formatDateTime($txn->payment_date) ?>payer_email) ?>mc_gross) ?>mc_currency) ?>credits) ?>
+ +

No tienes transacciones completadas.

+ + +

Transacciones: Retenidas

+ +

Tienes transacción(es) retenida(s).

+ + + + + + + + + + + + + + + + + + + + + + +
TransacciónFecha de pagoEmailMontoMonedaCréditos
txn_id) ?>formatDateTime($txn->payment_date) ?>payer_email) ?>mc_gross) ?>mc_currency) ?>credits) ?>
+ ↳ Retenida hasta: + formatDateTime($txn->hold_until) ?> +
+ +

No tienes transacciones retenidas.

+ + +

Transacciones: Fallidas

+ +

Tienes transacción(es) fallida(s).

+ + + + + + + + + + + + + + + + + + + +
TransacciónFecha de pagoEmailMontoMonedaCréditos
txn_id) ?>formatDateTime($txn->payment_date) ?>payer_email) ?>mc_gross) ?>mc_currency) ?>credits) ?>
+ +

No tienes transacciones fallidas.

+ diff --git a/themes/kunairo/donate/index.php b/themes/kunairo/donate/index.php new file mode 100644 index 000000000..35b18ed6f --- /dev/null +++ b/themes/kunairo/donate/index.php @@ -0,0 +1,91 @@ + +

Donar

+ + +

+ + +

Al donar, estás apoyando los costos de mantener este servidor y operarlo. A cambio, recibirás créditos de donación que puedes usar para comprar items en nuestra tienda.

+

¿Listo para donar?

+

Todas las donaciones se reciben a través de PayPal. Si no tienes cuenta de PayPal, puedes usar tu tarjeta de crédito igualmente.

+ + + + +

Para prevenir pagos fraudulentos, el servidor retiene los créditos por + horas + después de la donación.

+

Esta retención se aplica solo una vez por email de PayPal y cuenta RO.

+ + +
+ + + + + + + + + +

formatCurrency($dollarAmount) ?> + = crédito(s).

formatCurrency(Flux::config('MinDonationAmount')) ?>

+
+ + +
+ moduleActionFormInputs($params->get('module')) ?> + +

+ + o + +

+ +
+ +

Cuando estés listo para donar, haz click en el botón "Donar" para proceder con tu transacción. + (Puedes donar desde tu saldo de PayPal o usar tu tarjeta de crédito).

+ +

+ — + créditos + — +

+ +

Monto: + + formatCurrency($donationAmount) ?> + + +

+

+ (Restablecer monto) +

+

donateButton($donationAmount) ?>

+ + +

+ diff --git a/themes/kunairo/donate/trusted.php b/themes/kunairo/donate/trusted.php new file mode 100644 index 000000000..6925ba8f0 --- /dev/null +++ b/themes/kunairo/donate/trusted.php @@ -0,0 +1,23 @@ + +

Emails de PayPal confiables

+ +

A continuación se muestra la lista de tus emails de PayPal confiables.

+

Los emails confiables no pasan por el proceso de retención, por lo que las donaciones realizadas desde ellos te otorgan créditos instantáneamente.

+ + + + + + + + + + + +
EmailFecha de registro
email) ?>formatDateTime($email->create_date) ?>
+ +

No tienes emails de PayPal confiables registrados.

+ +

Esto se debe a que el sistema de retención de créditos no está activo, lo que significa que las donaciones desde cualquier email se acreditan inmediatamente.

+ + diff --git a/themes/kunairo/footer.php b/themes/kunairo/footer.php new file mode 100644 index 000000000..d6d948c90 --- /dev/null +++ b/themes/kunairo/footer.php @@ -0,0 +1,89 @@ + + + + + + + + + diff --git a/themes/kunairo/header.php b/themes/kunairo/header.php new file mode 100644 index 000000000..765451c85 --- /dev/null +++ b/themes/kunairo/header.php @@ -0,0 +1,274 @@ + +getAdminMenuItems(); +$menuItems = $this->getMenuItems(); +$_krModule = $params->get('module'); +$_krAction = $params->get('action'); +$isHomepage = ($_krModule == 'main' && (!$_krAction || $_krAction == 'index')); +?> + + + + + + + + + <?php echo Flux::config('SiteTitle'); if (isset($title)) echo ": $title" ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + isLoggedIn()): ?> +
+
+ + account->userid) ?> — serverName) ?> + getAthenaServerNames(); if (is_array($athenaServerNames) && count($athenaServerNames) > 1): ?> + + + + + + %s', $menuItem['url'], htmlspecialchars(Flux::message($menuItem['name']))); echo implode(' ', $mItems) ?> + + +
+ +
+
+
+ + + + +
+
+ getMessage()): ?> +
+ + + +
+ + + + +
+ +
Please change your ServerAddress directive in your application config to your server's real address.
+ + + getMessage()): ?> +
+ + + getSubMenuItems(); + // Map config submenu names to translatable keys + $_krSubMap = array( + // Account + 'Login' => 'KunaiROSubLogin', + 'Register' => 'KunaiROSubRegister', + 'Reset Password' => 'KunaiROSubResetPass', + 'Resend E-mail Confirmation' => 'KunaiROSubResend', + 'Change Password' => 'KunaiROSubChangePass', + 'Change E-mail' => 'KunaiROSubChangeMail', + 'Change Gender' => 'KunaiROSubChangeGender', + 'View Account' => 'KunaiROSubViewAccount', + 'Transfer Credits' => 'KunaiROSubTransfer', + 'Credit Transfer History' => 'KunaiROSubXferLog', + 'Go to Shopping Cart' => 'KunaiROSubCart', + 'List Accounts' => 'KunaiROSubListAccounts', + // Purchase + 'Shop' => 'KunaiROSubShop', + 'Go to Cart' => 'KunaiROSubGoToCart', + 'Checkout' => 'KunaiROSubCheckout', + 'Empty Cart' => 'KunaiROSubEmptyCart', + 'Pending Redemption' => 'KunaiROSubPending', + // Donate + 'Make a Donation' => 'KunaiROSubDonate', + 'Donation History' => 'KunaiROSubDonateHistory', + 'Trusted PayPal E-mails' => 'KunaiROSubTrustedPaypal', + ); + ?> + + + + + + + + + get('module'), array('donate', 'purchase'))): ?> +
+ Donation Credits + account->balance) ?> +
+ + diff --git a/themes/kunairo/item/index.php b/themes/kunairo/item/index.php new file mode 100644 index 000000000..f993863a3 --- /dev/null +++ b/themes/kunairo/item/index.php @@ -0,0 +1,77 @@ + +

Items

+

Search...

+
+ moduleActionFormInputs($params->get('module')) ?> +

+ + + ... + + + ... + + + ... + + +

+
+ +infoText() ?> + + + + + + + + + + + + + + + iconImage($item->item_id)): ?> + + + + + + + + + + + + + +
sortableColumn('item_id', 'ID') ?>sortableColumn('name', 'Name') ?>sortableColumn('type', 'Type') ?>sortableColumn('price_buy', 'Buy') ?>sortableColumn('weight', 'Weight') ?>sortableColumn('attack', 'ATK') ?>sortableColumn('defense', 'DEF') ?>sortableColumn('slots', 'Slots') ?>
+ actionAllowed('item', 'view')): ?> + linkToItem($item->item_id, $item->item_id) ?> + + item_id) ?> + + name ?: '') ?>name ?: '') ?> + itemTypeText($item->type)): ?> + + + + + price_buy) ?>weight ?: 0, 1) ?>attack) ?>defense) ?>slots) ?>
+getHTML() ?> + +

No items found. Go back.

+ diff --git a/themes/kunairo/main/balance.php b/themes/kunairo/main/balance.php new file mode 100644 index 000000000..7a643b355 --- /dev/null +++ b/themes/kunairo/main/balance.php @@ -0,0 +1,5 @@ + +
+ Créditos de donación + account->balance) ?> +
diff --git a/themes/kunairo/main/index.php b/themes/kunairo/main/index.php new file mode 100644 index 000000000..2591f2b9b --- /dev/null +++ b/themes/kunairo/main/index.php @@ -0,0 +1,245 @@ + + + +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ + + +
+ +

+ KunaiRO +

+ +

+ +
+ + + +
+ +

+ + +
+ +
+
+ + +loginServer->isUp(); + foreach ($_g->athenaServers as $_a) { + $_s = $_g->connection->getStatement("SELECT COUNT(char_id) AS c FROM {$_a->charMapDatabase}.`char` WHERE `online`>'0'"); + $_s->execute(); + $_r = $_s->fetch(); + if ($_r) $_krPlayers += intval($_r->c); + if ($_a->isWoe()) $_krIsWoe = true; + } + } +} catch (Exception $e) {} +?> +
+
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+ + +
+
+

+ + +

+
+
+
+

+

+
+
+
+

+

+
+
+
+

+

+
+
+
+

+

+
+
+
+
+ + +
+
+ +

+ + +

+ + + + + + + + +
+
+
+
+
+

title ?>

+ + author ?> · created))?> + +
+
body ?>
+ link): ?> + + +
+
+ + + 1): ?>
+ +
+ +

+
+ + + + channel)): ?> + channel->item as $rssItem): ?> + + + + +
+
+
+
+
+

title ?>

+ pubDate))?> +
+
description ?>
+ +
+
+ + + + 1): ?>
+ +
+ +

+
+ + + + +

+

+

+
    +
  1. +
  2. +
+ +
+
diff --git a/themes/kunairo/manifest.php b/themes/kunairo/manifest.php new file mode 100644 index 000000000..e472363ce --- /dev/null +++ b/themes/kunairo/manifest.php @@ -0,0 +1,13 @@ + 'default', + + 'author' => 'KunaiRO Team', + 'version' => '1.0', + 'description' => 'KunaiRO — Dark premium theme for competitive Ragnarok Online', + 'website' => '' +); +?> diff --git a/themes/kunairo/monster/index.php b/themes/kunairo/monster/index.php new file mode 100644 index 000000000..4a1577eb6 --- /dev/null +++ b/themes/kunairo/monster/index.php @@ -0,0 +1,78 @@ + +

Monsters

+

Search...

+
+ moduleActionFormInputs($params->get('module')) ?> +

+ + + ... + + + ... + + + ... + + +

+
+ +infoText() ?> + + + + + + + + + + + + + + + + + + + + + + + + + +
sortableColumn('monster_id', 'ID') ?>sortableColumn('name_english', 'Name') ?>sortableColumn('level', 'Lv') ?>sortableColumn('hp', 'HP') ?>sortableColumn('size', 'Size') ?>sortableColumn('race', 'Race') ?>ElementsortableColumn('base_exp', 'Base EXP') ?>sortableColumn('job_exp', 'Job EXP') ?>
+ actionAllowed('monster', 'view')): ?> + linkToMonster($monster->monster_id, $monster->monster_id) ?> + + monster_id) ?> + + + mvp_exp): ?> + MVP + + name_english) ?> + level) ?>hp) ?> + size)): ?> + + + + + + race)): ?> + + + + + element) ?> (Lv element_level) ?>)base_exp * $server->expRates['Base'] / 100) ?>job_exp * $server->expRates['Job'] / 100) ?>
+getHTML() ?> + +

No monsters found. Go back.

+ diff --git a/themes/kunairo/preview.html b/themes/kunairo/preview.html new file mode 100644 index 000000000..b6f30f08a --- /dev/null +++ b/themes/kunairo/preview.html @@ -0,0 +1,266 @@ + + + + + + KunaiRO Theme Preview + + + + + + + + + + + +
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+ Pre-Renewal + 250x / 250x / 50x + Sin Pay-to-Win +
+

+ KunaiRO +

+

Donde la guerra sí importa

+
+ + + +
+

Servidor Pre-Renewal competitivo con economía viva y progreso real.

+ +
+
+
+ + +
+
+
+
+ +
+ 247 + Jugadores activos +
+
+
+ +
+ Activo + Estado WoE +
+
+
+ +
+ 99.9% + Uptime +
+
+
+ +
+ 250x / 250x / 50x + Rates +
+
+
+
+
+ + +
+
+

+ + Por qué KunaiRO +

+
+
+
+

Pre-Renewal balanceado

+

Clases ajustadas para PvP y WoE competitivo. Sin builds rotos ni exploits.

+
+
+
+

Sin Pay-to-Win

+

Cada ventaja se gana jugando. Sin atajos de cash shop.

+
+
+
+

Economía viva

+

Mercado impulsado por jugadores con oferta y demanda real.

+
+
+
+

Competencia real

+

WoE semanal, PvP rankeado y rivalidades de guild que definen el servidor.

+
+
+
+
+ + +
+
+

+ + Últimas noticias +

+ + + + + +
+
+
+
+
+

Patch 2.4 — Balance de clases

+ Dev Team · 2026-03-15 +
+
Ajustes en Assassin Cross, Lord Knight y High Wizard.
+ Leer más → +
+
+
+
+
+
+

Evento de primavera: Sakura Festival

+ GM Team · 2026-03-10 +
+
Items exclusivos, quests temporales y drops especiales.
+ Leer más → +
+
+
+
+
+ +
+
+ + + + + + + diff --git a/themes/kunairo/purchase/cart.php b/themes/kunairo/purchase/cart.php new file mode 100644 index 000000000..8c645a592 --- /dev/null +++ b/themes/kunairo/purchase/cart.php @@ -0,0 +1,47 @@ + +

Ver Carrito

+

Tienes item(s) en tu carrito.

+

Tu subtotal actual es cart->getTotal()) ?> crédito(s).

+
+

Ir a pagar

+
+ + $item): ?> + + + + + +
+ shop_item_use_existing && ($image=$this->itemImage($item->shop_item_nameid))) || ($image=$this->shopItemImage($item->shop_item_id))): ?> + + + +

+ +

+ shop_item_qty > 1): ?> +

Cantidad: shop_item_qty) ?>

+ +

shop_item_cost) ?> créditos

+

+ actionAllowed('item', 'view')): ?> + linkToItem($item->shop_item_nameid, 'Ver item') ?> / + + Quitar del carrito / + Agregar otro +

+

shop_item_info)) ?>

+
+

+ +

+
+
+

+ +

+
diff --git a/themes/kunairo/purchase/checkout.php b/themes/kunairo/purchase/checkout.php new file mode 100644 index 000000000..87df436c1 --- /dev/null +++ b/themes/kunairo/purchase/checkout.php @@ -0,0 +1,41 @@ + +

Pagar

+

El proceso de compra es simple. Cuando termines, podrás canjear tus items en el juego a través del NPC de Canjeo.

+ +

Información de compra

+

Tu subtotal actual es cart->getTotal()) ?> crédito(s).

+

Tu saldo restante después de esta compra será account->balance - $total) ?> crédito(s).

+

Revisa la información de los items y haz click en "Comprar items" para confirmar.

+

Nota: Estos items son para canjear en el servidor serverName) ?> SOLAMENTE.

+

+

+ moduleActionFormInputs($params->get('module'), 'checkout') ?> + + +
+

+ +

Items en tu carrito:

+

Tienes item(s) en tu carrito.

+ + + + + + +
+

+ actionAllowed('item', 'view')): ?> + linkToItem($item->shop_item_nameid, $item->shop_item_name) ?> + + shop_item_nameid) ?> + +

+ shop_item_qty > 1): ?> +

Cantidad: shop_item_qty) ?>

+ +

shop_item_cost) ?> créditos

+

shop_item_info)) ?>

+
diff --git a/themes/kunairo/purchase/index.php b/themes/kunairo/purchase/index.php new file mode 100644 index 000000000..51da30941 --- /dev/null +++ b/themes/kunairo/purchase/index.php @@ -0,0 +1,69 @@ + +

Tienda

+

Los items de esta tienda se compran con créditos de donación, no con dinero real. Los créditos se obtienen al hacer una donación, ayudando a cubrir los costos del servidor.

+

serverName) ?> — Tienda de Items

+

+ > + () + + $catName): ?> + / + > + () + + +

+ +

Categoría:

+ + +isLoggedIn()): ?> + cart->getCartItemNames()): ?>

Items en tu carrito: , ', array_map('htmlspecialchars', $cartItems)) ?>.

+

Tienes item(s) en tu carrito.

+

Tu subtotal actual es cart->getTotal()) ?> crédito(s).

+ +infoText() ?> + + + + + + + + +
+ shop_item_use_existing && ($image=$this->itemImage($item->shop_item_nameid))) || ($image=$this->shopItemImage($item->shop_item_id))): ?> + + + +

+ shop_item_qty > 1): ?> + shop_item_qty) ?>x + + linkToItem($item->shop_item_nameid, $item->shop_item_name) ?> +

+

shop_item_info ?>

+

+ actionAllowed('item', 'view')): ?> + linkToItem($item->shop_item_nameid, 'Ver item') ?> + + allowedToEditShopItem): ?> + / Modificar + + allowedToDeleteShopItem): ?> + / Eliminar + +

+
+

shop_item_cost) ?> créditos

+

+ actionAllowed('purchase', 'add')): ?> + Agregar al carrito + +

+
+getHTML() ?> + +

No hay items a la venta actualmente.

+ diff --git a/themes/kunairo/purchase/pending.php b/themes/kunairo/purchase/pending.php new file mode 100644 index 000000000..a4fc44d2b --- /dev/null +++ b/themes/kunairo/purchase/pending.php @@ -0,0 +1,38 @@ + +

Pendientes de canjear

+ +

Tienes item(s) pendientes de canjear.

+ + + + + + + + + + + + + + + + + + + +
ItemCantidadCostoSaldo (antes)Saldo (después)Fecha de compra
+ item_name): ?> + actionAllowed('item', 'view')): ?> + linkToItem($item->nameid, $item->item_name) ?> + + nameid) ?> + + + Desconocido + + quantity) ?>cost) ?>credits_before) ?>credits_after) ?>formatDateTime($item->purchase_date) ?>
+ +

No tienes items pendientes de canjear. + Si deseas hacer una compra, visita la tienda.

+ diff --git a/themes/kunairo/service/tos.php b/themes/kunairo/service/tos.php new file mode 100644 index 000000000..c32b76339 --- /dev/null +++ b/themes/kunairo/service/tos.php @@ -0,0 +1,81 @@ + +

+ +
+ +

+ +

+ + +
+

1. Aceptación de los Términos

+

+ Al crear una cuenta y/o acceder al servidor KunaiRO, aceptas estos Términos de Servicio en su totalidad. Si no estás de acuerdo, no utilices nuestros servicios. KunaiRO se reserva el derecho de modificar estos términos en cualquier momento sin previo aviso. +

+
+ + +
+

2. Cuentas de Usuario

+

+ Eres responsable de mantener la seguridad de tu cuenta. No compartas tus credenciales con terceros. KunaiRO no se hace responsable por pérdidas derivadas del uso no autorizado de tu cuenta. Cada persona puede tener múltiples cuentas, sujeto a las restricciones de multiclient establecidas en las reglas del servidor. +

+
+ + +
+

3. Conducta del Usuario

+

+ Los usuarios deben respetar las reglas del servidor en todo momento. Queda prohibido el uso de software de terceros que altere la jugabilidad (bots, hacks, macros), el comercio con dinero real (RMT), la explotación de bugs, y cualquier acción que perjudique la experiencia de otros jugadores. +

+
+ + +
+

4. Propiedad Virtual

+

+ Todos los items, personajes, zeny y demás activos virtuales dentro del juego son propiedad de KunaiRO. Los usuarios tienen una licencia de uso que puede ser revocada en caso de violación de estos términos. Los items virtuales no tienen valor monetario real. +

+
+ + +
+

5. Sanciones

+

+ El equipo de administración puede aplicar sanciones que incluyen pero no se limitan a: mute, jail, ban temporal o ban permanente. Las sanciones son a criterio del staff y sus decisiones son finales. Las apelaciones deben realizarse a través del sistema de tickets o Discord. +

+
+ + +
+

6. Disponibilidad del Servicio

+

+ KunaiRO es un servidor privado gratuito ofrecido "tal cual". No garantizamos disponibilidad ininterrumpida del servicio. Pueden ocurrir mantenimientos, actualizaciones o interrupciones sin previo aviso. No nos hacemos responsables por pérdida de datos derivada de problemas técnicos. +

+
+ + +
+

7. Donaciones

+

+ Las donaciones son voluntarias y no reembolsables. Se destinan al mantenimiento del servidor y la infraestructura. Las recompensas por donación son cosméticas y no otorgan ventaja competitiva (Sin Pay-to-Win). +

+
+ + +
+

8. Privacidad

+

+ Recopilamos información mínima necesaria para el funcionamiento del servicio (email, IP de conexión). No vendemos ni compartimos datos personales con terceros. Los logs del servidor se utilizan únicamente para moderación y soporte técnico. +

+
+ + +
+

+ © Xponzy Network — KunaiRO. Estos términos fueron actualizados por última vez el . +

+
+ +
diff --git a/themes/kunairo/woe/index.php b/themes/kunairo/woe/index.php new file mode 100644 index 000000000..e4e1b1a82 --- /dev/null +++ b/themes/kunairo/woe/index.php @@ -0,0 +1,47 @@ + + Flux::message('KunaiRODaySunday'), + 'Monday' => Flux::message('KunaiRODayMonday'), + 'Tuesday' => Flux::message('KunaiRODayTuesday'), + 'Wednesday' => Flux::message('KunaiRODayWednesday'), + 'Thursday' => Flux::message('KunaiRODayThursday'), + 'Friday' => Flux::message('KunaiRODayFriday'), + 'Saturday' => Flux::message('KunaiRODaySaturday'), +); +$_krServerDay = $server->getServerTime('l'); +$_krServerDayTranslated = isset($_krDayMap[$_krServerDay]) ? $_krDayMap[$_krServerDay] : $_krServerDay; +?> +

+ +

loginAthenaGroup->serverName)) ?>

+

getServerTime('Y-m-d H:i:s') ?> ().

+ + + + + + $times): ?> + + + + + + + + + + + +
+ +
+ + @ + ~ + + @ +
+ +

+