commit 894845d3d3420e5159b26e6fc3f20c251144033a Author: Benjamin Date: Sun May 24 11:49:38 2026 +0200 First commit diff --git a/assets.json b/assets.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/assets.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/style_properties.less b/style_properties.less new file mode 100644 index 0000000..469a400 --- /dev/null +++ b/style_properties.less @@ -0,0 +1,59 @@ +// ################## THIS IS A GENERATED FILE ################## +// DO NOT EDIT DIRECTLY. EDIT THE STYLE PROPERTIES IN THE CONTROL PANEL. + +@xf-blockTabHeaderBg: @xf-paletteColor2; +@xf-blockTabHeaderTextColor: @xf-paletteNeutral1; +@xf-borderColor: @xf-paletteColor5; +@xf-borderColorAccentContent: @xf-paletteAccent2; +@xf-borderColorFaint: @xf-paletteColor5; +@xf-borderColorFeature: @xf-paletteAccent3; +@xf-borderColorHeavy: @xf-paletteColor5; +@xf-borderColorHighlight: @xf-paletteAccent3; +@xf-borderColorLight: @xf-paletteColor5; +@xf-borderRadiusLarge: 0px; +@xf-borderRadiusMedium: 0px; +@xf-borderRadiusSmall: 0px; +@xf-buttonBg: @xf-paletteColor3; +@xf-buttonPrimaryBg: @xf-paletteAccent3; +@xf-buttonTextColor: @xf-paletteNeutral1; +@xf-chromeBg: @xf-paletteColor1; +@xf-chromeTextColor: @xf-paletteNeutral1; +@xf-contentAltBg: @xf-paletteColor3; +@xf-contentBg: @xf-paletteColor2; +@xf-contentHighlightBg: @xf-paletteColor3; +@xf-errorBg: #e57373; +@xf-errorColor: @xf-paletteNeutral1; +@xf-fontFamilyBody: 'Segoe UI', 'San Francisco', 'Helvetica Neue', sans-serif; +@xf-fontFamilyUi: 'Segoe UI', 'San Francisco', 'Helvetica Neue', sans-serif; +@xf-linkColor: @xf-paletteAccent3; +@xf-linkHoverColor: @xf-paletteAccent2; +@xf-linkUgcColor: @xf-paletteAccent3; +@xf-linkUgcHoverColor: @xf-paletteAccent2; +@xf-pageBg: @xf-paletteColor1; +@xf-paletteAccent2: #e56700; +@xf-paletteAccent3: #ff7300; +@xf-paletteColor1: #1e1e1e; +@xf-paletteColor2: #252526; +@xf-paletteColor3: #2d2d30; +@xf-paletteColor4: #3e3e42; +@xf-paletteColor5: #3f3f46; +@xf-paletteNeutral1: #f1f1f1; +@xf-paletteNeutral2: #a1a1aa; +@xf-paletteNeutral3: #111111; +@xf-styleType: dark; +@xf-subNavBg: @xf-paletteColor2; +@xf-successBg: #81c784; +@xf-successColor: @xf-paletteNeutral1; +@xf-successFeatureColor: #388e3c; +@xf-textColor: @xf-paletteNeutral1; +@xf-textColorEmphasized: @xf-paletteAccent3; +@xf-textColorFeature: @xf-paletteNeutral1; + +.xf-blockTabHeaderSelected() +{ + color: @xf-linkColor; + border-color: @xf-paletteColor2; +} + +@xf-blockTabHeaderSelected--color: @xf-linkColor; +@xf-blockTabHeaderSelected--border-color: @xf-paletteColor2; diff --git a/style_properties/_metadata.json b/style_properties/_metadata.json new file mode 100644 index 0000000..6e41c50 --- /dev/null +++ b/style_properties/_metadata.json @@ -0,0 +1,146 @@ +{ + "blockTabHeaderBg.json": { + "hash": "5207750cec31f74935a0c209f2bb7d5d" + }, + "blockTabHeaderSelected.json": { + "hash": "47eac3b302ad0fe474a0d0960d01e059" + }, + "blockTabHeaderTextColor.json": { + "hash": "d2d647878d3725763debf391d47486db" + }, + "borderColor.json": { + "hash": "d336471427f3a4028996bddb971f2afa" + }, + "borderColorAccentContent.json": { + "hash": "f2aff3c91a3241c9203b07e0c574828c" + }, + "borderColorFaint.json": { + "hash": "be6f17463760417b337cebbd89773430" + }, + "borderColorFeature.json": { + "hash": "2d8206ba58e695a661d20712db761817" + }, + "borderColorHeavy.json": { + "hash": "ad04822f5a3a42927dd967c341e45d63" + }, + "borderColorHighlight.json": { + "hash": "2ab3fdc69004f2f6a50af84ad45cc7c2" + }, + "borderColorLight.json": { + "hash": "aff3cdcedc1516d511dd6aca180a8236" + }, + "borderRadiusLarge.json": { + "hash": "6c8e75e1fcedd0b096d7bf911230a1c4" + }, + "borderRadiusMedium.json": { + "hash": "92a2a35fde5de0e90243768ad8e236ab" + }, + "borderRadiusSmall.json": { + "hash": "03a46b0de545083de0e402a483ca6f1e" + }, + "buttonBg.json": { + "hash": "a8535a0dff9ac6ed83955c83d73253a0" + }, + "buttonPrimaryBg.json": { + "hash": "9d6e7069664536ec94ec4a9cb00ae102" + }, + "buttonTextColor.json": { + "hash": "474dfe468f35e3a7f7f7744620b9aafa" + }, + "chromeBg.json": { + "hash": "7fbcf3a7cfd4a1a7cf052382201f61c5" + }, + "chromeTextColor.json": { + "hash": "7d59fddb50e545f6dc4ee746d57300f9" + }, + "contentAltBg.json": { + "hash": "475dbbcaf0266619fc0013038f6e1e9e" + }, + "contentBg.json": { + "hash": "d5e9973a4e83961dc45fdaaf6e81c83b" + }, + "contentHighlightBg.json": { + "hash": "7ee9346c8d25ea473dacd9a9e21206e7" + }, + "errorBg.json": { + "hash": "5b0fa167f49f5c9955d7946d5e102f4c" + }, + "errorColor.json": { + "hash": "e4469cb3a0e2c9cdc3840008700d8742" + }, + "fontFamilyBody.json": { + "hash": "b35da057353bb1469829ed98a90715fd" + }, + "fontFamilyUi.json": { + "hash": "45a85d0b24fa4ea774734402210aaf2e" + }, + "linkColor.json": { + "hash": "7ca02736780e9e4b47bf7d6d960bcffe" + }, + "linkHoverColor.json": { + "hash": "24233df430149979043c3864a9e94d4d" + }, + "linkUgcColor.json": { + "hash": "a092f48a4f951cf3e92ed461659ae894" + }, + "linkUgcHoverColor.json": { + "hash": "2e1385c3bfe51e1874c0ec8805217d8d" + }, + "pageBg.json": { + "hash": "3975020da986bf3e13a65be134449908" + }, + "paletteAccent2.json": { + "hash": "00cb79f56e2ae668475327758cdd4ce2" + }, + "paletteAccent3.json": { + "hash": "e9322fb2aa0043a573713fc3f96ca79a" + }, + "paletteColor1.json": { + "hash": "976763c8be910c28f4c0008c9a277448" + }, + "paletteColor2.json": { + "hash": "eecdd3bf62255ec43dfc912fb56ab08c" + }, + "paletteColor3.json": { + "hash": "e1603121b3eee6f5c4518966d685ef69" + }, + "paletteColor4.json": { + "hash": "c645a133d49ed59c98e33fe3cc17b5c4" + }, + "paletteColor5.json": { + "hash": "23dedee0b4f9b9b88f3e99a5135dbfca" + }, + "paletteNeutral1.json": { + "hash": "2a6c79989236ec6cbc8bf81344b52496" + }, + "paletteNeutral2.json": { + "hash": "e6d5fa3553c3542a42c954eed332dc47" + }, + "paletteNeutral3.json": { + "hash": "e08775923d2c98300549be6ed17147d8" + }, + "styleType.json": { + "hash": "a06efd294967581901bd111dfe7511c2" + }, + "subNavBg.json": { + "hash": "b61b38b236ab81ab58134cac3fa4963b" + }, + "successBg.json": { + "hash": "1c9a192fe62a1bdbaf49d0d776919de8" + }, + "successColor.json": { + "hash": "c17c8090edddc7a86df397787808c105" + }, + "successFeatureColor.json": { + "hash": "25ab19e3c11c371f8b53ad56af94a5a0" + }, + "textColor.json": { + "hash": "df26881141502f16be13b75b9903f48f" + }, + "textColorEmphasized.json": { + "hash": "7069705f62fdf89df20fcc7eab85959e" + }, + "textColorFeature.json": { + "hash": "f149f8945b9e6497264151339755a294" + } +} \ No newline at end of file diff --git a/style_properties/blockTabHeaderBg.json b/style_properties/blockTabHeaderBg.json new file mode 100644 index 0000000..89446ab --- /dev/null +++ b/style_properties/blockTabHeaderBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Block tab header background color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "blockTabHeader", + "property_value": { + "default": "@xf-paletteColor2", + "alternate": "@xf-paletteColor4" + }, + "display_order": 6500 +} \ No newline at end of file diff --git a/style_properties/blockTabHeaderSelected.json b/style_properties/blockTabHeaderSelected.json new file mode 100644 index 0000000..537ab89 --- /dev/null +++ b/style_properties/blockTabHeaderSelected.json @@ -0,0 +1,22 @@ +{ + "group_name": "block", + "title": "Block tab header - selected tab", + "description": "The selected tab in multi-part headers takes additional styling from here", + "property_type": "css", + "css_components": [ + "text", + "background", + "border_color_simple", + "extra" + ], + "value_type": "", + "value_parameters": "", + "has_variations": false, + "depends_on": "", + "value_group": "", + "property_value": { + "color": "@xf-linkColor", + "border-color": "@xf-paletteColor2" + }, + "display_order": 20300 +} \ No newline at end of file diff --git a/style_properties/blockTabHeaderTextColor.json b/style_properties/blockTabHeaderTextColor.json new file mode 100644 index 0000000..c269b49 --- /dev/null +++ b/style_properties/blockTabHeaderTextColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Block tab header text color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "blockTabHeader", + "property_value": { + "default": "@xf-paletteNeutral1", + "alternate": "@xf-paletteColor2" + }, + "display_order": 6600 +} \ No newline at end of file diff --git a/style_properties/borderColor.json b/style_properties/borderColor.json new file mode 100644 index 0000000..4870869 --- /dev/null +++ b/style_properties/borderColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Border color", + "description": "Structural borders around blocks of content generally use this color", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "borderBasic", + "property_value": { + "default": "@xf-paletteColor5", + "alternate": "xf-intensify(@xf-contentBg, 10%)" + }, + "display_order": 4000 +} \ No newline at end of file diff --git a/style_properties/borderColorAccentContent.json b/style_properties/borderColorAccentContent.json new file mode 100644 index 0000000..2a38a3e --- /dev/null +++ b/style_properties/borderColorAccentContent.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Accent content border color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "borderOther", + "property_value": { + "default": "@xf-paletteAccent2", + "alternate": "mix(@xf-paletteAccent3, @xf-paletteAccent2)" + }, + "display_order": 5200 +} \ No newline at end of file diff --git a/style_properties/borderColorFaint.json b/style_properties/borderColorFaint.json new file mode 100644 index 0000000..57ead2f --- /dev/null +++ b/style_properties/borderColorFaint.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Faint border color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "borderBasic", + "property_value": { + "default": "@xf-paletteColor5", + "alternate": "xf-diminish(@xf-borderColor, 6%)" + }, + "display_order": 4100 +} \ No newline at end of file diff --git a/style_properties/borderColorFeature.json b/style_properties/borderColorFeature.json new file mode 100644 index 0000000..63e24d4 --- /dev/null +++ b/style_properties/borderColorFeature.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Feature border color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "borderOther", + "property_value": { + "default": "@xf-paletteAccent3", + "alternate": "@xf-paletteColor3" + }, + "display_order": 5100 +} \ No newline at end of file diff --git a/style_properties/borderColorHeavy.json b/style_properties/borderColorHeavy.json new file mode 100644 index 0000000..22d1f80 --- /dev/null +++ b/style_properties/borderColorHeavy.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Heavy border color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "borderBasic", + "property_value": { + "default": "@xf-paletteColor5", + "alternate": "xf-intensify(@xf-borderColor, 4%)" + }, + "display_order": 4300 +} \ No newline at end of file diff --git a/style_properties/borderColorHighlight.json b/style_properties/borderColorHighlight.json new file mode 100644 index 0000000..ec01cfe --- /dev/null +++ b/style_properties/borderColorHighlight.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Highlight border color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "borderOther", + "property_value": { + "default": "@xf-paletteAccent3", + "alternate": "@xf-paletteColor4" + }, + "display_order": 5000 +} \ No newline at end of file diff --git a/style_properties/borderColorLight.json b/style_properties/borderColorLight.json new file mode 100644 index 0000000..0b80de8 --- /dev/null +++ b/style_properties/borderColorLight.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Light border color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "borderBasic", + "property_value": { + "default": "@xf-paletteColor5", + "alternate": "xf-diminish(@xf-borderColor, 4%)" + }, + "display_order": 4200 +} \ No newline at end of file diff --git a/style_properties/borderRadiusLarge.json b/style_properties/borderRadiusLarge.json new file mode 100644 index 0000000..2f8e8dd --- /dev/null +++ b/style_properties/borderRadiusLarge.json @@ -0,0 +1,14 @@ +{ + "group_name": "borderSpacing", + "title": "Large border radius", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "unit", + "value_parameters": "", + "has_variations": false, + "depends_on": "", + "value_group": "borderRadius", + "property_value": "0px", + "display_order": 1200 +} \ No newline at end of file diff --git a/style_properties/borderRadiusMedium.json b/style_properties/borderRadiusMedium.json new file mode 100644 index 0000000..a6727ed --- /dev/null +++ b/style_properties/borderRadiusMedium.json @@ -0,0 +1,14 @@ +{ + "group_name": "borderSpacing", + "title": "Medium border radius", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "unit", + "value_parameters": "", + "has_variations": false, + "depends_on": "", + "value_group": "borderRadius", + "property_value": "0px", + "display_order": 1100 +} \ No newline at end of file diff --git a/style_properties/borderRadiusSmall.json b/style_properties/borderRadiusSmall.json new file mode 100644 index 0000000..649e950 --- /dev/null +++ b/style_properties/borderRadiusSmall.json @@ -0,0 +1,14 @@ +{ + "group_name": "borderSpacing", + "title": "Small border radius", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "unit", + "value_parameters": "", + "has_variations": false, + "depends_on": "", + "value_group": "borderRadius", + "property_value": "0px", + "display_order": 1000 +} \ No newline at end of file diff --git a/style_properties/buttonBg.json b/style_properties/buttonBg.json new file mode 100644 index 0000000..fa00e2b --- /dev/null +++ b/style_properties/buttonBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Default button background color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "buttons", + "property_value": { + "default": "@xf-paletteColor3", + "alternate": "@xf-paletteColor4" + }, + "display_order": 8200 +} \ No newline at end of file diff --git a/style_properties/buttonPrimaryBg.json b/style_properties/buttonPrimaryBg.json new file mode 100644 index 0000000..386ebab --- /dev/null +++ b/style_properties/buttonPrimaryBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Primary button background color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "buttons", + "property_value": { + "default": "@xf-paletteAccent3", + "alternate": "@xf-paletteColor3" + }, + "display_order": 8300 +} \ No newline at end of file diff --git a/style_properties/buttonTextColor.json b/style_properties/buttonTextColor.json new file mode 100644 index 0000000..3f88e3a --- /dev/null +++ b/style_properties/buttonTextColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Default button text color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "buttons", + "property_value": { + "default": "@xf-paletteNeutral1", + "alternate": "@xf-paletteColor1" + }, + "display_order": 8100 +} \ No newline at end of file diff --git a/style_properties/chromeBg.json b/style_properties/chromeBg.json new file mode 100644 index 0000000..70e222d --- /dev/null +++ b/style_properties/chromeBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Page chrome background color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "chrome", + "property_value": { + "default": "@xf-paletteColor1", + "alternate": "@xf-paletteColor5" + }, + "display_order": 6000 +} \ No newline at end of file diff --git a/style_properties/chromeTextColor.json b/style_properties/chromeTextColor.json new file mode 100644 index 0000000..ceef495 --- /dev/null +++ b/style_properties/chromeTextColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Page chrome text color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "chrome", + "property_value": { + "default": "@xf-paletteNeutral1", + "alternate": "@xf-paletteColor2" + }, + "display_order": 6050 +} \ No newline at end of file diff --git a/style_properties/contentAltBg.json b/style_properties/contentAltBg.json new file mode 100644 index 0000000..a0d48cd --- /dev/null +++ b/style_properties/contentAltBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Alternate content background color", + "description": "In order to differentiate it, some content will be presented on this alternate background", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "contentBackground", + "property_value": { + "default": "@xf-paletteColor3", + "alternate": "darken(@xf-contentBg, 4%)" + }, + "display_order": 2200 +} \ No newline at end of file diff --git a/style_properties/contentBg.json b/style_properties/contentBg.json new file mode 100644 index 0000000..728a4f7 --- /dev/null +++ b/style_properties/contentBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Content background color", + "description": "Most normal content will sit on this background", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "contentBackground", + "property_value": { + "default": "@xf-paletteColor2", + "alternate": "@xf-paletteNeutral3" + }, + "display_order": 2000 +} \ No newline at end of file diff --git a/style_properties/contentHighlightBg.json b/style_properties/contentHighlightBg.json new file mode 100644 index 0000000..ce991ac --- /dev/null +++ b/style_properties/contentHighlightBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Highlighted content background color", + "description": "When the standard background color is highlighted or selected, it will use this color", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "contentBackground", + "property_value": { + "default": "@xf-paletteColor3", + "alternate": "@xf-paletteColor5" + }, + "display_order": 2300 +} \ No newline at end of file diff --git a/style_properties/errorBg.json b/style_properties/errorBg.json new file mode 100644 index 0000000..918675a --- /dev/null +++ b/style_properties/errorBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Error message background", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "errorMessage", + "property_value": { + "default": "#e57373", + "alternate": "hsl(358, 70%, 20%)" + }, + "display_order": 10410 +} \ No newline at end of file diff --git a/style_properties/errorColor.json b/style_properties/errorColor.json new file mode 100644 index 0000000..c75bebf --- /dev/null +++ b/style_properties/errorColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Error message text color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "errorMessage", + "property_value": { + "default": "@xf-paletteNeutral1", + "alternate": "hsl(358, 70%, 85%)" + }, + "display_order": 10420 +} \ No newline at end of file diff --git a/style_properties/fontFamilyBody.json b/style_properties/fontFamilyBody.json new file mode 100644 index 0000000..f83625e --- /dev/null +++ b/style_properties/fontFamilyBody.json @@ -0,0 +1,14 @@ +{ + "group_name": "fonts", + "title": "Body Text Font", + "description": "This font is used for the text of messages etc.", + "property_type": "value", + "css_components": [], + "value_type": "string", + "value_parameters": "", + "has_variations": false, + "depends_on": "", + "value_group": "font", + "property_value": "'Segoe UI', 'San Francisco', 'Helvetica Neue', sans-serif", + "display_order": 200 +} \ No newline at end of file diff --git a/style_properties/fontFamilyUi.json b/style_properties/fontFamilyUi.json new file mode 100644 index 0000000..8bc931f --- /dev/null +++ b/style_properties/fontFamilyUi.json @@ -0,0 +1,14 @@ +{ + "group_name": "fonts", + "title": "User Interface Font", + "description": "The font list for your main text", + "property_type": "value", + "css_components": [], + "value_type": "string", + "value_parameters": "", + "has_variations": false, + "depends_on": "", + "value_group": "font", + "property_value": "'Segoe UI', 'San Francisco', 'Helvetica Neue', sans-serif", + "display_order": 100 +} \ No newline at end of file diff --git a/style_properties/linkColor.json b/style_properties/linkColor.json new file mode 100644 index 0000000..7aacc89 --- /dev/null +++ b/style_properties/linkColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Link color", + "description": "Basic hyperlinks on standard background colors will use this style", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "links", + "property_value": { + "default": "@xf-paletteAccent3", + "alternate": "@xf-paletteColor2" + }, + "display_order": 1000 +} \ No newline at end of file diff --git a/style_properties/linkHoverColor.json b/style_properties/linkHoverColor.json new file mode 100644 index 0000000..e64a4c1 --- /dev/null +++ b/style_properties/linkHoverColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Link hover color", + "description": "Basic hyperlinks will turn this color when hovered", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "links", + "property_value": { + "default": "@xf-paletteAccent2", + "alternate": "@xf-paletteColor1" + }, + "display_order": 1100 +} \ No newline at end of file diff --git a/style_properties/linkUgcColor.json b/style_properties/linkUgcColor.json new file mode 100644 index 0000000..cbe2ff6 --- /dev/null +++ b/style_properties/linkUgcColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "User-generated content link color", + "description": "Used to color links posted by users within posts etc.", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "links", + "property_value": { + "default": "@xf-paletteAccent3", + "alternate": "@xf-paletteColor2" + }, + "display_order": 1200 +} \ No newline at end of file diff --git a/style_properties/linkUgcHoverColor.json b/style_properties/linkUgcHoverColor.json new file mode 100644 index 0000000..8063951 --- /dev/null +++ b/style_properties/linkUgcHoverColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "User-generated link hover color", + "description": "Hover state for links in UGC", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "links", + "property_value": { + "default": "@xf-paletteAccent2", + "alternate": "@xf-paletteColor1" + }, + "display_order": 1300 +} \ No newline at end of file diff --git a/style_properties/pageBg.json b/style_properties/pageBg.json new file mode 100644 index 0000000..f980609 --- /dev/null +++ b/style_properties/pageBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Page background color", + "description": "The background of the page itself, on which all other content rests", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "contentBackground", + "property_value": { + "default": "@xf-paletteColor1", + "alternate": "darken(@xf-contentBg, 8%)" + }, + "display_order": 2100 +} \ No newline at end of file diff --git a/style_properties/paletteAccent2.json b/style_properties/paletteAccent2.json new file mode 100644 index 0000000..7457302 --- /dev/null +++ b/style_properties/paletteAccent2.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Accent 2", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "hidePalette=true", + "has_variations": true, + "depends_on": "", + "value_group": "accent", + "property_value": { + "default": "#e56700", + "alternate": "hsl(35, 85%, 45%)" + }, + "display_order": 2100 +} \ No newline at end of file diff --git a/style_properties/paletteAccent3.json b/style_properties/paletteAccent3.json new file mode 100644 index 0000000..1c3f070 --- /dev/null +++ b/style_properties/paletteAccent3.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Accent 3", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "hidePalette=true", + "has_variations": true, + "depends_on": "", + "value_group": "accent", + "property_value": { + "default": "#ff7300", + "alternate": "hsl(35, 85%, 15%)" + }, + "display_order": 2200 +} \ No newline at end of file diff --git a/style_properties/paletteColor1.json b/style_properties/paletteColor1.json new file mode 100644 index 0000000..2a416ca --- /dev/null +++ b/style_properties/paletteColor1.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Color 1", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "hidePalette=true", + "has_variations": true, + "depends_on": "", + "value_group": "primary", + "property_value": { + "default": "#1e1e1e", + "alternate": "hsl(206, 60%, 75%)" + }, + "display_order": 1000 +} \ No newline at end of file diff --git a/style_properties/paletteColor2.json b/style_properties/paletteColor2.json new file mode 100644 index 0000000..d5e833c --- /dev/null +++ b/style_properties/paletteColor2.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Color 2", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "hidePalette=true", + "has_variations": true, + "depends_on": "", + "value_group": "primary", + "property_value": { + "default": "#252526", + "alternate": "hsl(204, 60%, 60%)" + }, + "display_order": 1100 +} \ No newline at end of file diff --git a/style_properties/paletteColor3.json b/style_properties/paletteColor3.json new file mode 100644 index 0000000..0c802f0 --- /dev/null +++ b/style_properties/paletteColor3.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Color 3", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "hidePalette=true", + "has_variations": true, + "depends_on": "", + "value_group": "primary", + "property_value": { + "default": "#2d2d30", + "alternate": "hsl(205, 60%, 40%)" + }, + "display_order": 1200 +} \ No newline at end of file diff --git a/style_properties/paletteColor4.json b/style_properties/paletteColor4.json new file mode 100644 index 0000000..41ec12c --- /dev/null +++ b/style_properties/paletteColor4.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Color 4", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "hidePalette=true", + "has_variations": true, + "depends_on": "", + "value_group": "primary", + "property_value": { + "default": "#3e3e42", + "alternate": "hsl(205, 60%, 20%)" + }, + "display_order": 1300 +} \ No newline at end of file diff --git a/style_properties/paletteColor5.json b/style_properties/paletteColor5.json new file mode 100644 index 0000000..a6f047c --- /dev/null +++ b/style_properties/paletteColor5.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Color 5", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "hidePalette=true", + "has_variations": true, + "depends_on": "", + "value_group": "primary", + "property_value": { + "default": "#3f3f46", + "alternate": "hsl(205, 60%, 10%)" + }, + "display_order": 1400 +} \ No newline at end of file diff --git a/style_properties/paletteNeutral1.json b/style_properties/paletteNeutral1.json new file mode 100644 index 0000000..25b4e6b --- /dev/null +++ b/style_properties/paletteNeutral1.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Neutral 1", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "hidePalette=true", + "has_variations": true, + "depends_on": "", + "value_group": "neutral", + "property_value": { + "default": "#f1f1f1", + "alternate": "hsl(0, 0%, 100%)" + }, + "display_order": 3000 +} \ No newline at end of file diff --git a/style_properties/paletteNeutral2.json b/style_properties/paletteNeutral2.json new file mode 100644 index 0000000..e49e32f --- /dev/null +++ b/style_properties/paletteNeutral2.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Neutral 2", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "hidePalette=true", + "has_variations": true, + "depends_on": "", + "value_group": "neutral", + "property_value": { + "default": "#a1a1aa", + "alternate": "hsl(0, 0%, 54%)" + }, + "display_order": 3100 +} \ No newline at end of file diff --git a/style_properties/paletteNeutral3.json b/style_properties/paletteNeutral3.json new file mode 100644 index 0000000..3aa00bf --- /dev/null +++ b/style_properties/paletteNeutral3.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Neutral 3", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "hidePalette=true", + "has_variations": true, + "depends_on": "", + "value_group": "neutral", + "property_value": { + "default": "#111111", + "alternate": "hsl(0, 0%, 8%)" + }, + "display_order": 3200 +} \ No newline at end of file diff --git a/style_properties/styleType.json b/style_properties/styleType.json new file mode 100644 index 0000000..21fae10 --- /dev/null +++ b/style_properties/styleType.json @@ -0,0 +1,17 @@ +{ + "group_name": "palette", + "title": "Style type", + "description": "This defines the general type of style in use based on whether the content is placed on a light or dark background. This may change how colors are selected in certain scenarios.", + "property_type": "value", + "css_components": [], + "value_type": "radio", + "value_parameters": "light={{ phrase('light') }}\ndark={{ phrase('dark') }}", + "has_variations": true, + "depends_on": "", + "value_group": "setup", + "property_value": { + "default": "dark", + "alternate": "light" + }, + "display_order": 100 +} \ No newline at end of file diff --git a/style_properties/subNavBg.json b/style_properties/subNavBg.json new file mode 100644 index 0000000..a2048ba --- /dev/null +++ b/style_properties/subNavBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Page sub-navigation background", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "chrome", + "property_value": { + "default": "@xf-paletteColor2", + "alternate": "@xf-contentAltBg" + }, + "display_order": 6080 +} \ No newline at end of file diff --git a/style_properties/successBg.json b/style_properties/successBg.json new file mode 100644 index 0000000..48b52dc --- /dev/null +++ b/style_properties/successBg.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Success message background", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "successMessage", + "property_value": { + "default": "#81c784", + "alternate": "hsl(122, 70%, 20%)" + }, + "display_order": 10210 +} \ No newline at end of file diff --git a/style_properties/successColor.json b/style_properties/successColor.json new file mode 100644 index 0000000..419cd77 --- /dev/null +++ b/style_properties/successColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Success message text color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "successMessage", + "property_value": { + "default": "@xf-paletteNeutral1", + "alternate": "hsl(116, 70%, 85%)" + }, + "display_order": 10220 +} \ No newline at end of file diff --git a/style_properties/successFeatureColor.json b/style_properties/successFeatureColor.json new file mode 100644 index 0000000..c443f22 --- /dev/null +++ b/style_properties/successFeatureColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Success message feature color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "successMessage", + "property_value": { + "default": "#388e3c", + "alternate": "hsl(122, 70%, 50%)" + }, + "display_order": 10230 +} \ No newline at end of file diff --git a/style_properties/textColor.json b/style_properties/textColor.json new file mode 100644 index 0000000..d843f47 --- /dev/null +++ b/style_properties/textColor.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Text color", + "description": "Unless otherwise specified, text will be this color", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "textBasic", + "property_value": { + "default": "@xf-paletteNeutral1", + "alternate": "darken(@xf-paletteNeutral1, 12%)" + }, + "display_order": 100 +} \ No newline at end of file diff --git a/style_properties/textColorEmphasized.json b/style_properties/textColorEmphasized.json new file mode 100644 index 0000000..1bdce16 --- /dev/null +++ b/style_properties/textColorEmphasized.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Emphasized text color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "textOther", + "property_value": { + "default": "@xf-paletteAccent3", + "alternate": "@xf-paletteColor1" + }, + "display_order": 3100 +} \ No newline at end of file diff --git a/style_properties/textColorFeature.json b/style_properties/textColorFeature.json new file mode 100644 index 0000000..478d716 --- /dev/null +++ b/style_properties/textColorFeature.json @@ -0,0 +1,17 @@ +{ + "group_name": "color", + "title": "Feature text color", + "description": "", + "property_type": "value", + "css_components": [], + "value_type": "color", + "value_parameters": "", + "has_variations": true, + "depends_on": "", + "value_group": "textOther", + "property_value": { + "default": "@xf-paletteNeutral1", + "alternate": "@xf-paletteColor2" + }, + "display_order": 3000 +} \ No newline at end of file diff --git a/templates/_metadata.json b/templates/_metadata.json new file mode 100644 index 0000000..07ba864 --- /dev/null +++ b/templates/_metadata.json @@ -0,0 +1,56 @@ +{ + "public/PAGE_CONTAINER.html": { + "addon_id": "XF", + "version_id": 2031070, + "version_string": "2.3.10", + "hash": "92f8334dbbaac2af86e9e9de3b22fc45" + }, + "public/account_alerts_popup.html": { + "addon_id": "XF", + "version_id": 2031070, + "version_string": "2.3.10", + "hash": "625739bb3c29b990a3dfc58e44fd24e8" + }, + "public/alert_macros.html": { + "addon_id": "XF", + "version_id": 2031070, + "version_string": "2.3.10", + "hash": "0cb82ae0d5544911ac92db38a01cb211" + }, + "public/extra.less": { + "addon_id": "XF", + "version_id": 2031070, + "version_string": "2.3.10", + "hash": "24d94c7353b843acb056656d00ea35d2" + }, + "public/member_tooltip.html": { + "addon_id": "XF", + "version_id": 2031070, + "version_string": "2.3.10", + "hash": "37cecc7a45e8d605a28cc4cab18fd194" + }, + "public/member_tooltip.less": { + "addon_id": "XF", + "version_id": 2031070, + "version_string": "2.3.10", + "hash": "5a95069e23fb2a8c740d3d380a0feb34" + }, + "public/romhackplaza_css.html": { + "addon_id": "", + "version_id": 0, + "version_string": "", + "hash": "96718ec22da14ac5d4615109068a2dc2" + }, + "public/romhackplaza_js.html": { + "addon_id": "", + "version_id": 0, + "version_string": "", + "hash": "30324ecf51ac365509fce5ef1db2ecd1" + }, + "public/topbar_actions.html": { + "addon_id": "RomhackPlaza/Master", + "version_id": 1000000, + "version_string": "1.0.0", + "hash": "b4d757a96108efbca01fb7e6b68f11b5" + } +} \ No newline at end of file diff --git a/templates/public/PAGE_CONTAINER.html b/templates/public/PAGE_CONTAINER.html new file mode 100644 index 0000000..d7299e6 --- /dev/null +++ b/templates/public/PAGE_CONTAINER.html @@ -0,0 +1,968 @@ + + + + + + + + + <xf:title formatter="%s | %s" fallback="{$xf.options.boardTitle}" page="{$pageNumber}" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {$headTag} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ {$navHtml|raw} +
+ {$subNavHtml|raw} + +
+ {$navHtml|raw} + {$subNavHtml|raw} +
+ + {$navHtml|raw} + {$subNavHtml|raw} +
+ +
+ + + + + + + + +
+
+ + +
+ + Search +
+ + +
+
+ + + + + + + + + + + + + + + + + + +
+ {$headerHtml|raw} +
+ +
+ + +
+ + +

{$h1}

+
+ +
+
+
+
+
+ + +
{$description}
+
+
+
+
+ +
+ +
+
+
+ +
+
+ + +
+
+ + {{ $sideNavTitle ?: phrase('navigation') }} + +
+
+
+
+
+ + + {$sideNavHtml} + + +
+
+
+
+
+ +
+ +
{$content|raw}
+ +
+ + +
+ + + {$sidebarHtml} + + +
+
+
+ + + + +
+
+ + + + + + +
+ + + + + + +
+ +
+ {{ phrase('back') }} +
+ + +
+ {{ phrase('top') }} + + {{ phrase('bottom') }} + +
+
+ + + + + + + +{$ldJsonHtml|raw} + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + <{$tag} {{ $nav.href ? 'href="' . $nav.href . '"' : '' }} + class="{{ trim($class) }} {$nav.attributes.class}" + {{ attributes($nav.attributes, ['class']) }} + {{ $shortcut !== false ? 'data-xf-key="' . $shortcut . '"' : '' }} + data-nav-id="{$navId}"> {{ $titleHtml ? $titleHtml|raw : $nav.title }} {$nav.counter|number} + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
  • + + {$value} + + +
  • +
    \ No newline at end of file diff --git a/templates/public/account_alerts_popup.html b/templates/public/account_alerts_popup.html new file mode 100644 index 0000000..35cae9f --- /dev/null +++ b/templates/public/account_alerts_popup.html @@ -0,0 +1,10 @@ + + + + + +
    + + No new notifications. +
    +
    \ No newline at end of file diff --git a/templates/public/alert_macros.html b/templates/public/alert_macros.html new file mode 100644 index 0000000..6018659 --- /dev/null +++ b/templates/public/alert_macros.html @@ -0,0 +1,37 @@ + +
    +
    + +
    +
    + {$alert.render()|raw} +
    + + + + + + +
    +
    +
    +
    + + +
    +
    + +
    +
    + {$alert.render()|raw} + +
    + + +
    +
    +
    +
    \ No newline at end of file diff --git a/templates/public/extra.less b/templates/public/extra.less new file mode 100644 index 0000000..cf5ceaf --- /dev/null +++ b/templates/public/extra.less @@ -0,0 +1,2083 @@ +/* File: resources/css/base/reset.css */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: var(--typography); + background-color: var(--bg); + color: var(--text); + display: flex; + height: 100vh; + overflow: hidden; +} + +a { + color: var(--rhpz-orange); + text-decoration: none; + transition: color 0.2s; +} + +a:hover { + color: var(--rhpz-orange-hover); + text-decoration: underline; +} + +#app { + display: flex; + width: 100%; + height: 100%; +} + +ul { + margin-left: 20px; + margin-bottom: 20px; + list-style-type: square; +} + + +/* File: resources/css/base/variables.css */ +:root { + + /* RHPZ color */ + --rhpz-orange: #ff7300; + --rhpz-orange-hover: #e56700; + + /* Background colors */ + --bg: #1e1e1e; + --bg2: #252526; + --bg3: #2d2d30; + --bg4: #3e3e42; + + /* Text */ + --text: #f1f1f1; + --text2: #a1a1aa; + --text3: #111111; + + /* Elements */ + --border: #3f3f46; + --error: #e57373; + --info: #1976d2; + --success: #81c784; + --success2: #388e3c; + + /* Typo */ + --typography: 'Segoe UI', 'San Francisco', 'Helvetica Neue', sans-serif; + + /* Menu settings */ + --menu-size: 260px; + --menu-user-avatar-bg: #555; +} + + +/* File: resources/css/components/cards.css */ +/* STAT CARDS */ + +.\$stats-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 20px; + margin-bottom: 30px; +} + +.\$stat-card { + background-color: var(--bg2); + border: 1px solid var(--border); + padding: 20px; + display: flex; + align-items: center; + gap: 15px; + border-left: 3px solid var(--rhpz-orange); +} + +.\$stat-card i { + color: var(--rhpz-orange); + width: 32px; + height: 32px; +} + +/* ENTRY CARDS */ + +.\$entry-card { + background-color: var(--bg2); + border: 1px solid var(--border); + display: flex; + flex-direction: column; + transition: transform 0.2s, border-color 0.2s; + cursor: pointer; + + &:hover { + transform: translateY(-3px); + border-color: var(--rhpz-orange); + } + + .\$entry-cover-wrapper { + position: relative; + aspect-ratio: 4/3; + background-color: var(--bg); + border-bottom: 1px solid var(--border); + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + } + + .\$entry-cover-wrapper img { + width: 100%; + height: 100%; + object-fit: cover; + } + + .\$entry-badge { + position: absolute; + top: 10px; + right: 10px; + background-color: rgba(0,0,0,0.7); + backdrop-filter: blur(4px); + border: 1px solid var(--border); + padding: 4px 8px; + font-size: 0.75rem; + color: var(--text); + } + + .\$entry-card-info { + padding: 15px; + flex-grow: 1; + display: flex; + flex-direction: column; + } + + .\$entry-card-title { + font-weight: 600; + color: var(--text); + font-size: 1.1rem; + margin-bottom: 5px; + line-height: 1.3; + } + + .\$entry-card-author { + color: var(--rhpz-orange); + font-size: 0.85rem; + margin-bottom: 10px; + } + + .\$entry-card-meta { + margin-top: auto; + font-size: 0.8rem; + color: var(--text2); + display: flex; + justify-content: space-between; + align-items: center; + } +} + + +/* File: resources/css/components/common.css */ +/* BUTTONS */ + +.\$btn { + background-color: var(--bg3); + border: 1px solid var(--border); + color: var(--text); + padding: 8px 16px; + font-size: 0.9rem; + cursor: pointer; + display: inline-flex; + align-items: center; + gap: 8px; + transition: all 0.1s; +} +.\$btn:hover { + background-color: var(--bg4); + border-color: var(--menu-user-avatar-bg); +} +.\$btn.primary { + background-color: var(--rhpz-orange); + color: var(--text3); + border-color: var(--rhpz-orange); + font-weight: 600; +} +.\$btn.primary:hover { + background-color: var(--rhpz-orange-hover); + border-color: var(--rhpz-orange-hover); +} +.\$btn.danger { + background-color: transparent; + color: var(--error); + border-color: var(--error); +} +.\$btn.danger:hover { + background-color: rgba(229, 115, 115, 0.1); +} +.\$btn.success { + background-color: transparent; + color: var(--success); + border-color: var(--success); +} +.\$btn.success:hover { + background-color: rgba(129, 199, 132, 0.1); +} + +/* BLOCK */ + +.\$block { + background-color: var(--bg2); + border: 1px solid var(--border); + padding: 20px; + margin-bottom: 20px; +} +.\$block.featured { + border-left: 3px solid var(--rhpz-orange); +} +.\$block-header { + font-size: 1.2rem; + color: var(--text); + margin-bottom: 15px; + display: flex; + align-items: center; + gap: 10px; + border-bottom: 1px solid var(--border); + padding-bottom: 10px; +} +.\$block-error { + background-color: var(--error); + border: 1px solid var(--error); + color: var(--text); + padding: 20px; + margin-bottom: 20px; +} + +/* BADGES */ +.\$badge { + display: inline-block; + padding: 2px 8px; + font-size: 0.75rem; + font-weight: bold; + border-radius: 2px; + background-color: var(--bg3); + border: 1px solid var(--border); +} +.\$badge.orange { + background-color: var(--rhpz-orange); + color: var(--text3); + border-color: var(--rhpz-orange); +} +.\$badge.blue, .\$badge.translations { + background-color: var(--info); + color: var(--text); + border-color: var(--info); +} +.\$badge.green, .\$badge.romhacks { + background-color: var(--success2); + color: var(--text); + border-color: var(--success2); +} + +.\$topbar-badge { + position: absolute; + top: 0; + right: 0; + min-width: 18px; + height: 18px; + padding: 0 4px; + border-radius: 9px; + background-color: var(--rhpz-orange); + color: #111; + font-size: 0.65rem; + font-weight: 700; + display: flex; + align-items: center; + justify-content: center; + line-height: 1; + border: 2px solid var(--bg); + animation: badge-pop 0.2s ease; +} + +.\$topbar-badge--overflow { + border-radius: 9px; + padding: 0 5px; + font-size: 0.6rem; +} + +@keyframes badge-pop { + 0% { transform: scale(0.5); opacity: 0; } + 0% { transform: scale(0.5); opacity: 0; } + 70% { transform: scale(1.2); } + 100% { transform: scale(1); opacity: 1; } +} + +/* BREADCRUMB */ + +.\$breadcrumb { + margin-bottom: 15px; +} + +/* PAGE */ + +.\$page-title { + font-size: 1.8rem; + font-weight: 300; + margin-bottom: 20px; + color: var(--text); +} + +/* TEXTS */ + +.\$whisper { + color: var(--text2); + margin-bottom: 15px; +} + +.\$content-title { + color: var(--text); + margin: 30px 0 15px 0; + border-left: 3px solid var(--rhpz-orange); + padding-left: 10px; +} + +.\$quote { + background-color: var(--bg); + border-left: 4px solid #1976d2; + padding: 15px; + margin-top: 30px; + font-style: italic; +} + +/* ANIMATIONS */ +@keyframes spin { + from { transform: rotate(0deg); } + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} +.\$spin { + animation: spin 1s infinite linear; +} + + +/* File: resources/css/components/database.css */ +.\$filter-bar { + display: flex; + gap: 15px; + background-color: var(--bg2); + padding: 15px; + border: 1px solid var(--border); + margin-bottom: 20px; + flex-wrap: wrap; + align-items: center; + + .\$filter-bar-search { + flex: 1; + max-width: 400px; + background-color: var(--bg); + border: 1px solid var(--border); + display: flex; + align-items: center; + padding: 8px 12px; + gap: 8px; + + } +} + +.\$database-wrapper { + display: flex; + gap: 20px; + align-items: flex-start; + + .\$database-filters { + width: 300px; + flex-shrink: 0; + display: flex; + flex-direction: column; + gap: 2px; + background-color: var(--bg2); + border: 1px solid var(--border); + + .\$filter-group { + border-bottom: 1px solid var(--border); + overflow: hidden; + &:last-child { + border-bottom: none; + } + } + + .\$filter-title-row { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 14px; + background-color: var(--bg3); + cursor: pointer; + user-select: none; + + .\$filter-title { + font-size: 0.8rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.8px; + color: var(--text2); + margin: 0; + } + + } + + .\$filter-mode { + display: flex; + gap: 4px; + } + + .\$filter-btn-mode { + background: none; + border: 1px solid var(--border); + color: var(--text2); + font-size: 0.7rem; + font-weight: 600; + padding: 2px 7px; + cursor: pointer; + font-family: var(--typography); + transition: all 0.15s; + letter-spacing: 0.5px; + &:hover { + border-color: var(--rhpz-orange); + color: var(--rhpz-orange); + } + &.\$active { + background-color: var(--rhpz-orange); + border-color: var(--rhpz-orange); + color: var(--text3); + } + } + + .\$filter-options { + padding: 6px 0; + max-height: 180px; + overflow-y: auto; + &::-webkit-scrollbar { + width: 6px; + } + &::-webkit-scrollbar-track { + background: var(--bg2); + } + &::-webkit-scrollbar-thumb { + background: var(--border); + } + } + + .\$filter-option { + display: flex; + align-items: center; + gap: 9px; + padding: 6px 14px; + font-size: 0.88rem; + color: var(--text); + cursor: pointer; + transition: background-color 0.1s; + &:hover { + background-color: var(--bg4); + } + } + + .\$filter-option input[type="checkbox"] { + accent-color: var(--rhpz-orange); + width: 14px; + height: 14px; + cursor: pointer; + flex-shrink: 0; + } + + } + + .\$database-results { + flex: 1; + min-width: 0; + + .\$database-sort { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 15px; + padding-bottom: 15px; + border-bottom: 1px solid var(--border); + flex-wrap: wrap; + + .\$btn { + font-size: 0.85rem; + padding: 6px 12px; + &.\$active { + border-color: var(--rhpz-orange); + color: var(--rhpz-orange); + } + } + + } + + .\$database-results-count { + margin-left: auto; + font-size: 0.85rem; + color: var(--text2); + } + + .\$database-active-filters { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin-bottom: 15px; + } + + .\$database-active-filter-tag { + display: inline-flex; + align-items: center; + gap: 6px; + background-color: var(--bg3); + border: 1px solid var(--border); + padding: 3px 10px; + font-size: 0.8rem; + color: var(--text); + .\$tag-type { + color: var(--rhpz-orange); + font-weight: 600; + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.5px; + } + button { + background: none; + border: none; + color: var(--text2); + cursor: pointer; + padding: 0; + display: flex; + align-items: center; + transition: color 0.15s; + &:hover { + color: var(--text); + } + } + } + + .\$database-empty { + grid-column: 1 / -1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 60px 20px; + color: var(--text2); + background-color: var(--bg2); + border: 1px solid var(--border); + gap: 15px; + text-align: center; + + i { + color: var(--border); + } + + p { + font-size: 0.95rem; + } + } + + } + +} + +.\$database-pagination { + display: flex; + justify-content: center; + align-items: center; + gap: 4px; + margin-top: 20px; + + .\$btn { + min-width: 36px; + padding: 6px 10px; + font-size: 0.85rem; + display: flex; + align-items: center; + justify-content: center; + } + + .\$active { + background-color: var(--rhpz-orange); + border-color: var(--rhpz-orange); + color: #111; + font-weight: 600; + } +} + +.\$database-search { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 20px; +} + +@media (max-width: 900px) { + .\$database-layout { + flex-direction: column; + } + + .\$database-filters { + width: 100%; + display: grid; + grid-template-columns: repeat(2,1fr); + } + + .\$database-filter-group:last-child { + border-bottom: 1px solid var(--border); + } + + .\$database-results-count { + margin-left: 0; + width: 100%; + } +} + +@media (max-width: 600px) { + .\$database-filters { + grid-template-columns: 1fr; + } + + .\$grid-entries { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (max-width: 420px) { + .\$grid-entries { + grid-template-columns: 1fr; + } +} + +.\$filter-chevron { + transition: transform 0.2s ease; + color: var(--text2); + flex-shrink: 0; +} + +.\$filter-chevron.rotated { + transform: rotate(-90deg); +} + +.\$internal-filter-search { + display: flex; + align-items: center; + gap: 7px; + padding: 7px 14px; + border-bottom: 1px solid var(--border); + background-color: var(--bg); + + i { + color: var(--text2); + flex-shrink: 0; + } + + input { + background: none; + border: none; + outline: none; + color: var(--text); + font-family: var(--typography); + font-size: 0.85rem; + width: 100%; + + &::placeholder { + color: var(--text2); + } + } +} + +.\$filter-title-left { + display: flex; + align-items: center; + gap: 7px; +} + +.\$filter-title-right { + display: flex; + align-items: center; + gap: 6px; +} + +.\$internal-filter-count { + display: inline-flex; + align-items: center; + justify-content: center; + background-color: var(--rhpz-orange); + color: #111; + font-size: 0.7rem; + font-weight: 700; + min-width: 18px; + height: 18px; + padding: 0 5px; + line-height: 1; +} + +.\$internal-filter-clear { + background: none; + border: 1px solid var(--border); + color: var(--text2); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + padding: 0; + transition: all 0.15s; + + &:hover { + border-color: var(--error); + color: var(--error); + } +} + +.\$filter-search-clear { + background: none; + border: none; + color: var(--text2); + cursor: pointer; + display: flex; + align-items: center; + padding: 0; + flex-shrink: 0; + transition: color 0.15s; + &:hover { + color: var(--text); + } +} + + + +/* File: resources/css/components/easymde.css */ +.\$EasyMDEContainer { + display: flex; + flex-direction: column; + + .\$editor-toolbar { + background-color: var(--bg3); + border:1px solid var(--border); + border-bottom: none; + border-radius: var(--radius-md) var(--radius-md) 0 0; + padding: 4px 8px; + opacity: 1; + + button { + color: var(--text2); + border: none; + + &:hover { + background-color: var(--bg2); + color: var(--text) + } + .\$active { + background-color: var(--bg2); + color: var(--text); + } + } + + i.separator { + border-left: 1px solid var(--border); + margin: 0 4px; + } + } + + .\$CodeMirror { + background-color: var(--bg2); + color: var(--text); + border: 1px solid var(--border) !important; + + &:focus-within { + border-color: var(--rhpz-orange); + outline: none; + } + } + + .\$CodeMirror-cursor { + border-left: 2px solid var(--text2); + } + + .\$CodeMirror-selected { + background: color-mix(in srgb, var(--rhpz-orange-hover) 25%, transparent); + } + + .\$cm-header { + color: var(--rhpz-orange-hover); + font-weight: 700; + } + + .\$cm-strong { + color: var(--text); + font-weight: 700; + } + + .\$cm-em { + color: var(--text2); + font-style: italic; + } + + &.\$cm-link, &.\$cm-url { + color: var(--rhpz-orange); + } + + .\$cm-strikethrough, .\$cm-comment { + color: var(--text2); + } + + .\$editor-preview, .\$editor-preview-side { + background: var(--bg2); + color: var(--text); + } + +} + + +/* File: resources/css/components/files.css */ +.\$file-list { + display: flex; + flex-direction: column; + gap: 10px; +} + +.\$file-item { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 15px; + background-color: var(--bg); + border: 1px solid var(--border); + transition: border-color 0.2s; + + &:hover { + border-color: var(--rhpz-orange); + } + + .\$file-info { + display: flex; + flex-direction: column; + + .\$file-name { + font-weight: 600; + color: var(--text); + margin-bottom: 4px; + } + + .\$file-meta { + font-size: 0.8rem; + color: var(--text2); + } + } +} + + +/* File: resources/css/components/forms.css */ +.\$form-group { + margin-bottom: 20px; +} +.\$form-group.level { + background-color: var(--bg3); + padding: 25px; + border: 1px dashed var(--border); + margin-bottom: 35px; + border-radius: 4px; +} + +.\$form-group-title { + color: var(--text); + margin-bottom: 20px; + border-bottom: 1px solid var(--border); + font-size: 1.15rem; + display: flex; + align-items: center; + gap: 10px; + padding-bottom: 10px; +} + +.\$form-group label, .\$form-label { + display: block; + margin-bottom: 8px; + font-weight: 600; + color: var(--text); + font-size: 0.95rem; +} + +.\$form-group label span, .\$form-label span { + color: var(--text2); + font-weight: normal; + font-size: 0.8rem; + margin-left: 5px; +} + +.\$form-error-text { + margin-top: 10px; + font-size: 0.85rem; + color: var(--error); + display: flex; + align-items: center; + gap: 5px; +} + +.\$form-input, .\$form-select, .\$form-textarea, .\$form-field { + width: 100%; + background-color: var(--bg2); + border: 1px solid var(--border); + color: var(--text); + padding: 10px 12px; + font-family: var(--typography); + font-size: 0.95rem; + transition: border-color 0.2s; + outline: none; + + &:focus { + border-color: var(--rhpz-orange); + } + &:disabled { + background-color: var(--bg3); + color: var(--text); + } +} + +.\$form-textarea { + resize: vertical; + min-height: 120px; +} + +.\$form-checkbox, .\$form-radio { + accent-color: var(--rhpz-orange); + background-color: var(--bg2); + border: 1px solid var(--border); +} + +.\$game-selector { + position: relative; + width: 100%; +} + +.\$game-selector-level2 { + position: relative; + z-index: 1; +} + +.\$game-selector-dropdown { + position: absolute !important; + width: 100%; + min-width: 100%; + top: calc(100% + 0.35rem); + left: 0; + margin: 0; + padding: 0.35rem 0; + z-index: 9999; + max-height: 260px; + overflow-y: auto; + overflow-x: hidden; + background-color: var(--bg2); + border: 1px solid var(--border); + box-shadow: 0 18px 35px rgba(0, 0, 0, 0.08); + list-style: none; + will-change: transform, opacity; +} + +.\$game-selector-dropdown::-webkit-scrollbar { + width: 8px; +} + +.\$game-selector-dropdown::-webkit-scrollbar-thumb { + background-color: rgba(255, 255, 255, 0.15); + border-radius: 999px; +} + +.\$game-selector-dropdown li { + margin: 0; +} + +.\$dropdown-item { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.75rem; + padding: 0.85rem 1rem; + background: transparent; + border: none; + color: var(--text); + text-align: left; + cursor: pointer; + transition: background-color 0.18s ease, color 0.18s ease; +} + +.dropdown-item:hover, +.\$dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.08); + color: var(--text); + outline: none; +} + +.dropdown-item[selected], +.dropdown-item.selected, +.\$dropdown-item.is-selected { + background-color: rgba(255, 115, 0, 0.15); +} + +.\$dropdown-item-name { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.\$dropdown-empty { + padding: 0.85rem 1rem; + color: var(--text2); +} + +.\$form-upload { + position: relative; + display: flex; + align-items: center; + .\$disabled { + opacity: 0.5; + pointer-events: none; + } + input[type="file"] { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0; + cursor: pointer; + } +} + +.\$form-upload-placeholder { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + background-color: var(--bg2); + border: 1px dashed var(--border); + padding: 12px; + color: var(--text); + transition: border-color 0.2s, background-color 0.2s; +} +.\$form-upload-placeholder.level { + padding: 30px; + text-align: center; + display: block; + background-color: var(--bg); +} + +.\$form-upload:hover .\$form-upload-placeholder { + border-color: var(--rhpz-orange); + background-color: rgba(255, 115, 0, 0.05); +} + +.\$form-type-of-checkboxes { + display: grid; + grid-template-columns: repeat(7, 1fr); + gap: 1rem; + + label { + box-sizing: border-box; + margin: 0; + } + + input[type="checkbox"] { + transform: scale(1.5); + margin-right: 1.33rem; + } +} + +.\$form-status-radio { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1rem; + + label { + box-sizing: border-box; + margin: 0; + } + + input[type="radio"] { + transform: scale(1.5); + margin-right: 1.33rem; + } +} + +.\$languages-selector { + display: flex; + flex-direction: column; + gap: 1rem; +} +.\$language-search { + display: flex; + align-items: center; + gap: 15px; + background-color: var(--bg3); + border: 1px solid var(--border); + padding: 0 10px; + height: 36px; +} +.\$language-search input { + flex: 1; + height: 100%; + background: transparent; + border: none; + outline: none; + color: var(--text); +} +.\$language-search [data-lucide] { + color: var(--text2); + flex-shrink: 0; +} +.\$language-search .\$btn { + padding: 0; + background: transparent; + border: none; + display: flex; + align-items: center; + flex-shrink: 0; +} +.\$language-list { + display: flex; + flex-direction: column; + gap: 2px; + max-height: 260px; + overflow-y: auto; + background: var(--bg3); + border: 1px solid var(--border); + scrollbar-width: thin; + scrollbar-color: var(--rhpz-orange); + padding: 2%; +} +.\$language-item { + display: flex; + align-items: center; + gap: 15px; + accent-color: var(--rhpz-orange); +} +.\$main-image-grid { + display: flex; + flex-direction: row; + gap: 1rem; +} +.\$form-image-placeholder { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 15px; + height: 100%; + min-height: 120px; + background-color: var(--bg); + border: 1px solid var(--border); + color: var(--text2); +} +.\$form-image-preview { + display: flex; + flex-direction: column; + gap: 15px; +} +.\$form-image-preview-wrap { + position: relative; + overflow: hidden; + border: 1px solid var(--border); + aspect-ratio: 16/9; + + img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + } + +} +.\$form-image-remove { + position: absolute; + top: 6px; + right: 6px; + width: 24px; + height: 24px; + background-color: var(--bg2); + border: none; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + color: var(--text); + transition: background-color 0.15s; + + &:hover { + background-color: var(--bg3); + } +} +.\$form-gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: 15px; +} +.\$gallery-item { + display: flex; + flex-direction: column; + gap: 5px; +} +.\$authors-list { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 15px; + button { + padding: 5px; + } +} +.\$submit { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 15px; +} +.\$submit-level { + display: flex; + align-items: center; + gap: 15px; +} +.\$nsfw-label { + display: flex; + align-items: center; + gap: 8px; + cursor: pointer; + white-space: nowrap; +} +.\$upload-list { + display: flex; + flex-direction: column; + gap: 5px; + margin-top: 12px; +} + +.\$upload-item { + display: flex; + align-items: center; + gap: 15px; + padding: 10px 14px; + border-radius: 6px; + border: 1px solid var(--border); + background-color: var(--bg2); + transition: background-color 0.15s, border-color 0.15s; + + & > [data-lucide] { + flex-shrink: 0; + width: 20px; + height: 20px; + } + +} +.\$upload-item-uploading { + border-color: var(--border); + background-color: var(--bg2); + + & > [data-lucide] { + color: var(--text2); + } +} +.\$upload-item-done { + border-color: color-mix(in srgb, var(--rhpz-orange) 40%, transparent); + background-color: color-mix(in srgb, var(--rhpz-orange) 6%, transparent); + + & > [data-lucide] { + color: var(--rhpz-orange); + } +} +.\$upload-item-error { + border-color: color-mix(in srgb, var(--error) 40%, transparent); + background: color-mix(in srgb, var(--error) 6%, transparent); + + & > [data-lucide] { + color: var(--error); + } +} +.\$upload-item-info { + display: flex; + flex-direction: column; + gap: 5px; + flex: 1; + min-width: 0; +} +.\$upload-item-name { + color: var(--text); + font-weight: 500; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.\$progress { + height: 6px; + background-color: var(--bg3); + border-radius: 99px; + overflow: hidden; + position: relative; +} +.\$progress-bar { + height: 100%; + background-color: var(--rhpz-orange); + border-radius: 99px; + transition: width 0.2s ease; + min-width: 4px; +} +.\$progress-bar-label { + position: absolute; + top: -18px; + right: 0; + font-size: 11px; + color: var(--text2); + white-space: nowrap; +} + + +/* File: resources/css/components/grid.css */ +.\$grid-c2 { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 20px; +} + +.\$grid-c3 { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 20px; +} + +@media (max-width: 1100px) { + .grid-c3 { grid-template-columns: 1fr 1fr; } +} +@media (max-width: 768px) { + .grid-c2, .grid-c3 { grid-template-columns: 1fr; } +} + +.\$grid-hashes { + display: grid; + grid-template-columns: repeat(4,0.5fr) 0.25fr; + gap: 20px; +} +.\$grid-credits { + display: grid; + grid-template-columns: 0.5fr 1fr 0.25fr; + gap: 20px; +} + +.\$grid-entries { + display: grid; + grid-template-columns: repeat(6,1fr); + gap: 20px; + margin-bottom: 20px; +} + + + +/* File: resources/css/components/hovercard.css */ +.\$hovercard-overlay { + position: absolute; + z-index: 2000; + background-color: var(--bg2); + border: 1px solid var(--border); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5); +} + +.\$hovercard-overlay-loading { + display: flex; + align-items: center; + justify-content: center; + padding: 30px; + color: var(--text2); +} + +.\$hovercard-overlay-error { + padding: 20px; + text-align: center; + color: var(--text2); + font-size: 0.85rem; +} + +.\$hovercard { + width: 280px; +} + +.\$hovercard-header { + height: 70px; + background-color: var(--bg3); + border-bottom: 1px solid var(--border); + position: relative; +} + +.\$hovercard-avatar { + position: absolute; + bottom: -26px; + left: 16px; + width: 52px; + height: 52px; + border-radius: 50%; + border: 3px solid var(--bg2); + overflow: hidden; + background-color: var(--bg4); + display: flex; + align-items: center; + justify-content: center; + font-weight: 600; + font-size: 1.2rem; + color: var(--text); + + img { + width: 100%; + height: 100%; + object-fit: cover; + } +} + +.\$hovercard-body { + padding: 34px 16px 16px; +} + +.\$hovercard-username { + font-weight: 600; + font-size: 1rem; + color: var(--text); + margin-bottom: 2px; +} + +.\$hovercard-title { + font-size: 0.8rem; + color: var(--rhpz-orange); + margin-bottom: 14px; + min-height: 14px; +} + +.\$hovercard-stats { + display: flex; + border: 1px solid var(--border); + margin-bottom: 14px; +} + +.\$hovercard-stat { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + padding: 8px 4px; + border-right: 1px solid var(--border); + + &:last-child { + border-right: none; + } + + .\$stat-value { + font-size: 0.95rem; + font-weight: 600; + color: var(--text); + } + + .\$stat-label { + font-size: 0.68rem; + color: var(--text2); + text-transform: uppercase; + letter-spacing: 0.5px; + margin-top: 2px; + } +} + +.\$hovercard-actions { + display: flex; + gap: 8px; +} + +.\$hovercard-actions .\$btn { + flex: 1; + justify-content: center; + font-size: 0.82rem; +} + + +/* File: resources/css/components/modal.css */ +.\$modal-overlay { + display: flex; + position: fixed; + top: 0; left: 0; right: 0; bottom: 0; + background-color: rgba(0, 0, 0, 0.7); + z-index: 1000; + align-items: center; + justify-content: center; + backdrop-filter: blur(3px); + animation: fadeIn 0.2s ease; +} + +.\$modal-window { + background-color: var(--bg2); + border: 1px solid var(--border); + width: 100%; + max-width: 500px; + box-shadow: 0 10px 30px rgba(0,0,0,0.5); + display: flex; + flex-direction: column; +} + +.\$modal-header { + padding: 15px 20px; + border-bottom: 1px solid var(--border); + display: flex; + justify-content: space-between; + align-items: center; + background-color: var(--bg3); + + .\$modal-title { + font-weight: 600; + font-size: 1.1rem; + color: var(--text); + } + + .\$modal-close { + background: none; + border: none; + color: var(--text2); + cursor: pointer; + transition: color 0.2s; + + &:hover { + color: var(--text); + } + } + +} + +.\$modal-content { + padding: 20px; +} + + +/* File: resources/css/components/notifications.css */ +.\$notifications { + position: absolute; + top: calc(100% + 8px); + right: 0; + width: 340px; + max-height: 480px; + overflow-y: auto; + background-color: var(--bg2); + border: 1px solid var(--border); + box-shadow: 0 8px 24px rgba(0,0,0,0.5); + z-index: 2000; + + &::-webkit-scrollbar { + width: 8px; + } + &::-webkit-scrollbar-thumb { + background-color: var(--border); + } + &::-webkit-scrollbar-track { + background-color: var(--bg2); + } +} + +@keyframes dropdown-enter { + from { opacity: 0; transform: translateY(-6px); } + from { opacity: 0; transform: translateY(-6px); } + to { opacity: 1; transform: translateY(0); } +} + +.\$dropdown-enter { + animation: dropdown-enter 0.15s ease; +} + +.\$notifications-header { + + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 16px; + border-bottom: 1px solid var(--border); + position: sticky; + top: 0; + background-color: var(--bg3); + z-index: 1; + + .\$notifications-header-title { + font-weight: 600; + font-size: 0.9rem; + color: var(--text); + } + + .\$notifications-header-actions { + display: flex; + gap: 6px; + } +} + +.\$notifications-loading, .\$notifications-empty { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 10px; + padding: 40px 20px; + color: var(--text2); + font-size: 0.85rem; +} + +.\$notifications-item { + display: flex; + align-items: flex-start; + gap: 12px; + padding: 12px 16px; + border-bottom: 1px solid var(--border); + text-decoration: none; + color: var(--text); + transition: background-color 0.1s; + position: relative; + + &:last-child { + border-bottom: none; + } + &:hover { + background-color: var(--bg3); + } + .\$unread { + border-left: 2px solid var(--rhpz-orange); + background-color: var(--bg3); + } +} + +.\$notifications-avatar { + width: 36px; + height: 36px; + border-radius: 50%; + overflow: hidden; + flex-shrink: 0; + background-color: var(--bg4); + display: flex; + align-items: center; + justify-content: center; + font-weight: 600; + font-size: 0.9rem; + color: var(--text); + + img { + width: 100%; + height: 100%; + object-fit: cover; + } +} + +.\$notifications-content { + display: flex; + flex-direction: column; + gap: 4px; + flex: 1; + min-width: 0; + + .\$notifications-text { + font-size: 0.88rem; + color: var(--text); + line-height: 1.4; + } + + .\$notifications-date { + font-size: 0.75rem; + color: var(--text2); + } +} + +.\$notifications-unread-dot { + width: 8px; + height: 8px; + border-radius: 50%; + background-color: var(--rhpz-orange); + flex-shrink: 0; + margin-top: 4px; +} + + +/* File: resources/css/layout/content.css */ +#main-wrapper { + flex-grow: 1; + display: flex; + flex-direction: column; + overflow: hidden; +} + +#topbar { + + height: 60px; + background-color: var(--bg2); + border-bottom: 1px solid var(--border); + display: flex; + align-items: center; + padding: 0 20px; + justify-content: space-between; + + .\$mobile-toggle { + display: none; + background: none; + border: none; + color: var(--text); + cursor: pointer; + } + + .\$search-bar { + display: flex; + align-items: center; + background-color: var(--bg); + border: 1px solid var(--border); + border-radius: 2px; + padding: 5px 10px; + width: 300px; + input { + background: none; + border: none; + color: var(--text); + outline: none; + margin-left: 8px; + width: 100%; + } + } + + .\$topbar-actions { + display: flex; + gap: 8px; + } + + .\$vertical-separator { + align-items: center; + border-left: 1px solid var(--border); + } + +} + +#content { + flex-grow: 1; + padding: 30px; + overflow-y: auto; + position: relative; +} + + + +/* File: resources/css/layout/entry.css */ +#entry-container { + background-color: var(--bg2); + border: 1px solid var(--border); + display: flex; + flex-direction: column; +} + +.\$entry-header { + + display: flex; + padding: 30px; + border-bottom: 1px solid var(--border); + background: linear-gradient(to right, rgba(255,115,0,0.05), transparent); + gap: 30px; + + .\$entry-cover { + width: 200px; + height: 280px; + background-color: var(--bg); + border: 1px solid var(--border); + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + box-shadow: 0 4px 15px rgba(0,0,0,0.3); + position: relative; + overflow: hidden; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + } + + .\$entry-info { + + flex-grow: 1; + display: flex; + flex-direction: column; + + .\$entry-title { + font-size: 2.2rem; + font-weight: 600; + margin-bottom: 5px; + color: var(--text); + } + + .\$entry-authors { + color: var(--rhpz-orange); + font-size: 1.1rem; + margin-bottom: 20px; + } + + .\$entry-meta-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 15px; + margin-bottom: 25px; + background-color: var(--bg); + padding: 15px; + border: 1px solid var(--border); + } + + .\$entry-meta-item { + display: flex; + flex-direction: column; + } + + .\$entry-meta-label { + font-size: 0.75rem; + color: var(--text2); + text-transform: uppercase; + } + + .\$entry-actions { + margin-top: auto; + display: flex; + gap: 15px; + } + + } +} + +.\$entry-content { + padding: 30px; + + .\$entry-section-title { + font-size: 1.2rem; + border-bottom: 1px solid var(--border); + padding-bottom: 10px; + margin-bottom: 20px; + color: var(--text); + display: flex; + align-items: center; + gap: 10px; + } + + .\$entry-description { + line-height: 1.6; + color: var(--text); + margin-bottom: 30px; + } + + .\$entry-gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + gap: 15px; + } + + .\$entry-gallery-item { + aspect-ratio: 4/3; + background-color: var(--bg); + border: 1px solid var(--border); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: border-color 0.2s; + + &:hover { + border-color: var(--rhpz-orange); + } + } +} + +.\$entry-cover-placeholder { + text-align: center; + color: var( --text2 ); +} + + +/* File: resources/css/layout/menu.css */ +#menu { + width: var(--menu-size); + background-color: var(--bg2); + border-right: 1px solid var(--border); + display: flex; + flex-direction: column; + flex-shrink: 0; + transition: transform 0.3s ease; + z-index: 100; + + .\$menu-header { + padding: 20px; + display: flex; + align-items: center; + gap: 12px; + border-bottom: 1px solid var(--border); + + .\$menu-logo { + width: 32px; + height: 32px; + background-color: var(--rhpz-orange); + color: var(--text3); + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + font-weight: bold; + font-size: 18px; + } + + .\$menu-title { + font-size: 1.2rem; + font-weight: 600; + letter-spacing: 0.5px; + color: #fff; /* TODO Change */ + } + + } + + .\$menu-navigation { + flex-grow: 1; + padding: 10px 0; + overflow-y: auto; + + .\$menu-group { + margin-bottom: 20px; + + .\$menu-group-title { + padding: 0 20px; + font-size: 0.75rem; + text-transform: uppercase; + color: var(--text2); + margin-bottom: 8px; + font-weight: 600; + letter-spacing: 1px; + } + + .\$menu-item { + display: flex; + align-items: center; + padding: 10px 20px; + color: var(--text); + text-decoration: none; + gap: 12px; + border-left: 3px solid transparent; + cursor: pointer; + transition: background-color 0.1s, border-color 0.1s; + + &:hover { + background-color: var(--bg4); + text-decoration: none; + } + .\$active { + background-color: var(--bg3); + border-left-color: var(--rhpz-orange); + font-weight: 600; + } + i { + width: 20px; + height: 20px; + color: var(--text2); + } + .\$active i, &:hover i { + color: var( --rhpz-orange ); + } + + } + } + + } + + .\$menu-user { + padding: 15px 20px; + border-top: 1px solid var(--border); + display: flex; + align-items: center; + gap: 12px; + background-color: var(--bg3); + cursor: pointer; + + &:hover { + background-color: var(--bg4); + } + .\$menu-user-avatar { + width: 36px; + height: 36px; + border-radius: 50%; + background-color: var( --menu-user-avatar-bg ); + display: flex; + align-items: center; + justify-content: center; + } + .\$menu-user-info { + display: flex; + flex-direction: column; + + &.\$username { + font-size: 0.9rem; + font-weight: 600; + } + &.\$user_role { + font-size: 0.75rem; + color: var(--rhpz-orange); + } + } + } + +} + + +/* File: resources/css/layout/news.css */ +.\$news-header { + width: 100%; + height: 250px; + background-color: #333; + background-image: linear-gradient(rgba(0,0,0,0.2), rgba(30,30,30,1)); + display: flex; + align-items: flex-end; + padding: 30px; + border: 1px solid var(--border); + border-bottom: none; + position: relative; + + .\$news-header-content { + + position: relative; + z-index: 2; + + .\$news-title { + font-size: 2.5rem; + font-weight: 300; + color: var(--text); + margin-bottom: 10px; + } + + .\$news-meta { + color: var(--text2); + display: flex; + gap: 15px; + font-size: 0.9rem; + } + + } + +} + +.\$news-content { + + background-color: var(--bg2); + border: 1px solid var(--border); + padding: 40px; + line-height: 1.7; + color: var(--text); + font-size: 1.05rem; + + p { + margin-bottom: 20px; + } +} + + +/* File: resources/css/xenforo.css */ +.\$xf-menu-user-avatar-fix { + width: 40px !important; + height: 40px !important; +} + diff --git a/templates/public/member_tooltip.html b/templates/public/member_tooltip.html new file mode 100644 index 0000000..7c82cdf --- /dev/null +++ b/templates/public/member_tooltip.html @@ -0,0 +1,126 @@ + + +
    +
    + + + + +
    + +
    + + + + + + + + + +
    +
    + +

    + + + + + + + + +

    + + +
    + +
    +
    + +
    + +
    + + + +
    +
    + +
    +
    +
    {{ phrase('joined') }}
    +
    +
    +
    + + +
    +
    +
    {{ phrase('last_seen') }}
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    + +
    + + + +
    +
    +
    +
    \ No newline at end of file diff --git a/templates/public/member_tooltip.less b/templates/public/member_tooltip.less new file mode 100644 index 0000000..e1f84a0 --- /dev/null +++ b/templates/public/member_tooltip.less @@ -0,0 +1,164 @@ +@_memberTooltip-padding: @xf-paddingMedium; +@_memberTooltip-avatarSize: @avatar-m; + +.memberTooltip-header +{ + display: flex; + padding: @_memberTooltip-padding; + .xf-memberTooltipHeader(); +} + +.memberTooltip-avatar +{ + width: (@_memberTooltip-padding * 2 + @_memberTooltip-avatarSize); +} + +.memberTooltip-headerInfo +{ + flex: 1; + min-width: 0; +} + +.memberTooltip-name +{ + margin: 0; + margin-top: -.15em; + padding: 0; + font-weight: @xf-fontWeightNormal; + line-height: (@xf-lineHeightDefault * 0.8); + .xf-memberTooltipName(); + + .m-hiddenLinks(); + + .memberTooltip-nameChangeIndicator + { + color: @xf-textColorMuted; + font-size: 75%; + + &:hover + { + color: @xf-textColorMuted; + } + } + + .memberTooltip--withBanner & + { + .xf-memberTooltipNameBanner(); + + .memberTooltip-nameChangeIndicator + { + color: darken(xf-default(@xf-memberTooltipNameBanner--color, white), 20%); + + &:hover + { + color: darken(xf-default(@xf-memberTooltipNameBanner--color, white), 20%); + } + } + } +} + +// See XF-197998 +@_memberTooltip-textStroke: 0 #000; + +.memberTooltip-textStroke() +{ + text-shadow: + -1px -1px @_memberTooltip-textStroke, + 1px -1px @_memberTooltip-textStroke, + -1px 1px @_memberTooltip-textStroke, + 1px 1px @_memberTooltip-textStroke; +} + +.memberTooltip--withBanner +{ + .memberTooltip-nameWrapper + { + .username:hover + { + text-decoration: none; + } + } + + .username + { + .memberTooltip-textStroke(); + } + + .memberTooltip-nameChangeIndicator .fa-history + { + .memberTooltip-textStroke(); + } +} + +.memberTooltip-headerAction +{ + float: right; +} + +.memberTooltip-blurbContainer +{ + .memberTooltip--withBanner & + { + .xf-memberTooltipBlurbContainerBanner(); + + .memberTooltip-blurb + { + &:first-child + { + margin-top: 0; + } + + .pairs dt, a + { + color: darken(xf-default(@xf-memberTooltipBlurbContainerBanner--color, white), 20%); + } + } + } +} + +.memberTooltip-banners, +.memberTooltip-blurb +{ + margin-top: .25em; +} + +.memberTooltip-blurb +{ + font-size: @xf-fontSizeSmall; +} + +.memberTooltip-stats +{ + font-size: @xf-fontSizeSmall; + + dl.pairs.pairs--rows > dt + { + font-size: @xf-fontSizeSmaller; + } +} + +.memberTooltip-info, +.memberTooltip-actions +{ + padding: @_memberTooltip-padding; +} + +.memberTooltip-separator +{ + margin: (@xf-borderSize * -1) @_memberTooltip-padding 0; + border: none; + border-top: @xf-borderSize solid @xf-borderColorLight; +} + +@media (max-width: @xf-responsiveNarrow) +{ + .memberTooltip-avatar + { + width: (@_memberTooltip-padding * 2 + @_memberTooltip-avatarSize * 2 / 3); + + .avatar + { + .m-avatarSize((@_memberTooltip-avatarSize * 2 / 3)); + } + } +} \ No newline at end of file diff --git a/templates/public/romhackplaza_css.html b/templates/public/romhackplaza_css.html new file mode 100644 index 0000000..3ccf800 --- /dev/null +++ b/templates/public/romhackplaza_css.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/templates/public/romhackplaza_js.html b/templates/public/romhackplaza_js.html new file mode 100644 index 0000000..fff3471 --- /dev/null +++ b/templates/public/romhackplaza_js.html @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/templates/public/topbar_actions.html b/templates/public/topbar_actions.html new file mode 100644 index 0000000..ba2965d --- /dev/null +++ b/templates/public/topbar_actions.html @@ -0,0 +1,78 @@ + + + +
    + + + + + + + + + + +
    +
    + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + +
    \ No newline at end of file