feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
- Base: wintercms/winter branch 1.2 (full framework) - Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS - Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication - Partials: hero (offline-first), features, modes (offline/nube toggle), screenshots, pricing (3 planes), comparison, FAQ, CTA - Plugin VivesPOS.Site with ContactForm - Dockerfile: PHP 8.2 Apache, port 80, healthcheck - Added winter/wn-pages, blog, sitemap, seo plugins - Active theme set to vivespos
This commit is contained in:
234
modules/backend/models/brandsetting/custom.less
Normal file
234
modules/backend/models/brandsetting/custom.less
Normal file
@@ -0,0 +1,234 @@
|
||||
//
|
||||
// Coded variables
|
||||
//
|
||||
// @logo-image
|
||||
// @brand-primary
|
||||
// @brand-secondary
|
||||
// @brand-accent
|
||||
//
|
||||
|
||||
.br-p { color: @brand-primary; }
|
||||
.br-s { color: @brand-secondary; }
|
||||
.br-a { color: @brand-accent; }
|
||||
.br-p-s10 { color: saturate(@brand-primary, 10%); }
|
||||
.br-s-s10 { color: saturate(@brand-secondary, 10%); }
|
||||
.br-a-s10 { color: saturate(@brand-accent, 10%); }
|
||||
.br-p-s20 { color: saturate(@brand-primary, 20%); }
|
||||
.br-s-s20 { color: saturate(@brand-secondary, 20%); }
|
||||
.br-a-s20 { color: saturate(@brand-accent, 20%); }
|
||||
|
||||
.bg-p { background-color: @brand-primary; }
|
||||
.bg-s { background-color: @brand-secondary; }
|
||||
.bg-a { background-color: @brand-accent; }
|
||||
.bg-p-s10 { background-color: saturate(@brand-primary, 10%); }
|
||||
.bg-s-s10 { background-color: saturate(@brand-secondary, 10%); }
|
||||
.bg-a-s10 { background-color: saturate(@brand-accent, 10%); }
|
||||
.bg-p-s20 { background-color: saturate(@brand-primary, 20%); }
|
||||
.bg-s-s20 { background-color: saturate(@brand-secondary, 20%); }
|
||||
.bg-a-s20 { background-color: saturate(@brand-accent, 20%); }
|
||||
|
||||
@custom-dark-accent: mix(black, desaturate(@brand-accent, 35%), 20%);
|
||||
@custom-dark-secondary: mix(black, saturate(@brand-secondary, 20%), 25%);
|
||||
@custom-dark-primary: mix(black, saturate(@brand-primary, 5%), 15%);
|
||||
|
||||
//
|
||||
// Sidenav Tree
|
||||
//
|
||||
|
||||
.sidenav-tree ul.top-level > li {
|
||||
> div.group:before {
|
||||
border-top-color: @brand-primary;
|
||||
}
|
||||
> ul li.active {
|
||||
border-color: @brand-secondary;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Side panel
|
||||
//
|
||||
|
||||
#layout-side-panel {
|
||||
.sidepanel-content-header {
|
||||
background: @custom-dark-secondary;
|
||||
|
||||
&::after {
|
||||
border-top-color: @custom-dark-secondary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Asset List
|
||||
//
|
||||
|
||||
.control-assetlist ul li.active a:after,
|
||||
.control-assetlist ul li.active a.link:after {
|
||||
background: @brand-secondary;
|
||||
}
|
||||
|
||||
//
|
||||
// Pages List
|
||||
//
|
||||
|
||||
.control-treeview ol > li.active > div::after {
|
||||
background: @brand-secondary;
|
||||
}
|
||||
|
||||
//
|
||||
// Outside Layout
|
||||
//
|
||||
|
||||
body.outer {
|
||||
background: @custom-dark-primary;
|
||||
}
|
||||
|
||||
//
|
||||
// Logos
|
||||
//
|
||||
|
||||
.wn-logo-transparent when not (@logo-image = '') {
|
||||
background-image: url('@{logo-image}') !important;
|
||||
}
|
||||
|
||||
.wn-logo when not (@logo-image = '') {
|
||||
background-image: url('@{logo-image}');
|
||||
}
|
||||
|
||||
.oc-logo-transparent when not (@logo-image = '') {
|
||||
background-image: url('@{logo-image}') !important;
|
||||
}
|
||||
|
||||
.oc-logo when not (@logo-image = '') {
|
||||
background-image: url('@{logo-image}');
|
||||
}
|
||||
|
||||
//
|
||||
// List
|
||||
//
|
||||
|
||||
table.table.data {
|
||||
tbody {
|
||||
tr.active td {
|
||||
&:first-child {
|
||||
border-left: 3px solid @brand-secondary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Fancy Layout
|
||||
//
|
||||
|
||||
.fancy-layout *:not(.nested-form):not(.modal-body) > .form-widget > .layout-row > .form-tabless-fields {
|
||||
background: @brand-secondary;
|
||||
|
||||
.loading-indicator-container .loading-indicator {
|
||||
background: @brand-secondary;
|
||||
}
|
||||
}
|
||||
|
||||
body.fancy-layout .master-tabs.control-tabs,
|
||||
.master-tabs.control-tabs.fancy-layout {
|
||||
> div > div.tabs-container > ul.nav-tabs > li.active a > span.title {
|
||||
&, &:before, &:after {
|
||||
background: @brand-secondary;
|
||||
}
|
||||
}
|
||||
|
||||
> div > div.tabs-container > ul.nav-tabs > li a > span.title {
|
||||
&, &:before, &:after {
|
||||
background-color: mix(black, saturate(@brand-secondary, 20%), 31%);
|
||||
}
|
||||
}
|
||||
|
||||
> div > div.tabs-container {
|
||||
background: @custom-dark-secondary;
|
||||
}
|
||||
}
|
||||
|
||||
.fancy-layout *:not(.nested-form):not(.modal-body) > .form-widget > .layout-row > .control-tabs.primary-tabs,
|
||||
*:not(.nested-form):not(.modal-body) > .form-widget > .layout-row > .control-tabs.fancy-layout.primary-tabs {
|
||||
&.master-area > div > ul.nav-tabs {
|
||||
background: @brand-secondary;
|
||||
}
|
||||
}
|
||||
|
||||
.fancy-layout *:not(.nested-form):not(.modal-body) > .form-widget > .layout-row > .control-tabs.secondary-tabs.secondary-content-tabs.primary-collapsed {
|
||||
> div > ul.nav-tabs {
|
||||
background: @brand-secondary;
|
||||
}
|
||||
}
|
||||
|
||||
.control-filelist ul li.active > a:after {
|
||||
background: @brand-secondary;
|
||||
}
|
||||
|
||||
//
|
||||
// Component List
|
||||
//
|
||||
|
||||
div.control-componentlist {
|
||||
&.droppable {
|
||||
background-color: lighten(@brand-secondary, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Stripe Indicator
|
||||
//
|
||||
|
||||
.stripe-loading-indicator {
|
||||
.stripe, .stripe-loaded {
|
||||
background: @brand-accent;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Balloon Selector
|
||||
//
|
||||
|
||||
.control-balloon-selector {
|
||||
ul {
|
||||
li.active {
|
||||
background: @brand-secondary !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Media
|
||||
//
|
||||
|
||||
.nav.selector-group li.active {
|
||||
border-left-color: @brand-secondary;
|
||||
}
|
||||
|
||||
//
|
||||
// Fancy breadcrumb
|
||||
//
|
||||
body.breadcrumb-fancy .control-breadcrumb,
|
||||
.control-breadcrumb.breadcrumb-fancy {
|
||||
background-color: mix(black, saturate(@brand-secondary, 20%), 16%);
|
||||
|
||||
li {
|
||||
background-color: mix(black, saturate(@brand-secondary, 20%), 31%);
|
||||
|
||||
&:last-child {
|
||||
background-color: mix(black, saturate(@brand-secondary, 20%), 16%);
|
||||
|
||||
&::before {
|
||||
border-left-color: mix(black, saturate(@brand-secondary, 20%), 16%);
|
||||
}
|
||||
}
|
||||
|
||||
&::after {
|
||||
border-left-color: mix(black, saturate(@brand-secondary, 20%), 31%);
|
||||
}
|
||||
|
||||
&:not(:last-child)::before {
|
||||
border-left-color: @brand-secondary;
|
||||
}
|
||||
}
|
||||
}
|
||||
112
modules/backend/models/brandsetting/fields.yaml
Normal file
112
modules/backend/models/brandsetting/fields.yaml
Normal file
@@ -0,0 +1,112 @@
|
||||
# ===================================
|
||||
# Field Definitions
|
||||
# ===================================
|
||||
# Light palette: [#1abc9c, #6cc551, #b1dbef, #2da7c7, #b281c5, #103141, #f8e095, #de8754, #b33f32, #95a5a6]
|
||||
# Dark palette: [#16a085, #52a838, #88c9e7, #227f96, #7b4e8e, #081821, #dcb22d, #d66829, #ab2a1c, #7f8c8d]
|
||||
|
||||
tabs:
|
||||
fields:
|
||||
|
||||
logo:
|
||||
label: backend::lang.branding.logo
|
||||
type: fileupload
|
||||
commentAbove: backend::lang.branding.logo_description
|
||||
mode: image
|
||||
imageHeight: 170
|
||||
tab: backend::lang.branding.brand
|
||||
span: right
|
||||
fileTypes: jpg,jpeg,bmp,png,webp,gif,svg
|
||||
|
||||
app_name:
|
||||
label: backend::lang.branding.app_name
|
||||
commentAbove: backend::lang.branding.app_name_description
|
||||
tab: backend::lang.branding.brand
|
||||
span: left
|
||||
|
||||
app_tagline:
|
||||
label: backend::lang.branding.app_tagline
|
||||
commentAbove: backend::lang.branding.app_tagline_description
|
||||
tab: backend::lang.branding.brand
|
||||
span: left
|
||||
|
||||
favicon:
|
||||
label: backend::lang.branding.favicon
|
||||
type: fileupload
|
||||
commentAbove: backend::lang.branding.favicon_description
|
||||
mode: image
|
||||
imageHeight: 32
|
||||
tab: backend::lang.branding.brand
|
||||
span: right
|
||||
fileTypes: jpg,jpeg,bmp,png,webp,gif,svg,ico
|
||||
|
||||
_branding_colors:
|
||||
label: backend::lang.branding.branding_colors
|
||||
comment: backend::lang.branding.branding_colors_comment
|
||||
type: section
|
||||
tab: backend::lang.branding.colors
|
||||
|
||||
primary_color:
|
||||
label: backend::lang.branding.primary_color
|
||||
type: colorpicker
|
||||
span: storm
|
||||
cssClass: row col-lg-4
|
||||
tab: backend::lang.branding.colors
|
||||
availableColors: ['#16a085', '#52a838', '#88c9e7', '#2da7c7', '#7b4e8e', '#081821', '#dcb22d', '#d66829', '#ab2a1c', '#7f8c8d']
|
||||
|
||||
secondary_color:
|
||||
label: backend::lang.branding.secondary_color
|
||||
type: colorpicker
|
||||
span: storm
|
||||
cssClass: row col-lg-4
|
||||
tab: backend::lang.branding.colors
|
||||
availableColors: ['#16a085', '#52a838', '#88c9e7', '#2da7c7', '#7b4e8e', '#081821', '#dcb22d', '#d66829', '#ab2a1c', '#7f8c8d']
|
||||
|
||||
accent_color:
|
||||
label: backend::lang.branding.accent_color
|
||||
type: colorpicker
|
||||
span: storm
|
||||
cssClass: row col-lg-4
|
||||
tab: backend::lang.branding.colors
|
||||
availableColors: ['#16a085', '#6cc551', '#88c9e7', '#2da7c7', '#7b4e8e', '#081821', '#dcb22d', '#d66829', '#ab2a1c', '#7f8c8d']
|
||||
|
||||
_default_colors:
|
||||
label: backend::lang.branding.default_colors
|
||||
comment: backend::lang.branding.default_colors_comment
|
||||
type: section
|
||||
span: storm
|
||||
cssClass: row col-lg-12
|
||||
tab: backend::lang.branding.colors
|
||||
|
||||
default_colors:
|
||||
label: false
|
||||
type: repeater
|
||||
tab: backend::lang.branding.colors
|
||||
prompt: backend::lang.branding.add_default_color
|
||||
titleFrom: color
|
||||
form:
|
||||
fields:
|
||||
color:
|
||||
label: false
|
||||
type: colorpicker
|
||||
availableColors: []
|
||||
allowCustom: true
|
||||
allowAlpha: true
|
||||
formats: all
|
||||
span: full
|
||||
|
||||
menu_mode:
|
||||
label: backend::lang.branding.menu_mode
|
||||
tab: backend::lang.branding.navigation
|
||||
type: radio
|
||||
options:
|
||||
inline: backend::lang.branding.menu_mode_inline
|
||||
inline_no_icons: backend::lang.branding.menu_mode_inline_no_icons
|
||||
tile: backend::lang.branding.menu_mode_tile
|
||||
collapse: backend::lang.branding.menu_mode_collapsed
|
||||
|
||||
custom_css:
|
||||
label: backend::lang.branding.custom_stylesheet
|
||||
type: codeeditor
|
||||
tab: backend::lang.branding.styles
|
||||
size: giant
|
||||
language: less
|
||||
Reference in New Issue
Block a user