From 56df47e77683aa0a5df87cf90e59aae56d53d382 Mon Sep 17 00:00:00 2001 From: "cedric@yterium.com" <> Date: Thu, 29 Nov 2012 09:52:57 +0000 Subject: [PATCH] Rangement : spipr (pour spip reboot) est une famille de squelettes qui repose sur Z+BootStrap(+less)+html5 3 variantes de squelettes : spipr-dist : un squelette generique par defaut spipr-blog : un squelette de blog spipr-doc : un squelette de doc (pour un minisite de doc de quelques pages comme celui de bootstrap par exemple) + un 4e squelette complet multifonction configurable qui est la version 4.0 de SarkaSpip Des themes de base dans spipr/v1 (on versionne preventivement), adaptes de bootswatch Tout ca est encore en DEVELOPPEMENT, des choses sont suceptibles de bouger avec casse de la compatibilite (notamment revision de la typo car SPIP a mieux a proposer que BootStrap, et squelettes/conventions des listes d'objet) Documentation a venir. Merci de ne pas utiliser en production pour le moment. --- .gitattributes | 10 ++ body.html | 32 +++++ css/bootswatch.less | 182 +++++++++++++++++++++++++++ css/layouts.less | 5 + css/navbar.less | 19 +++ css/responsive.less | 32 +++++ css/theme.less | 24 ++++ css/variables.less | 297 ++++++++++++++++++++++++++++++++++++++++++++ plugin.xml | 12 ++ vignette.png | Bin 0 -> 5889 bytes 10 files changed, 613 insertions(+) create mode 100644 .gitattributes create mode 100644 body.html create mode 100644 css/bootswatch.less create mode 100644 css/layouts.less create mode 100644 css/navbar.less create mode 100644 css/responsive.less create mode 100644 css/theme.less create mode 100644 css/variables.less create mode 100644 plugin.xml create mode 100644 vignette.png diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..29344a1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,10 @@ +* text=auto !eol +/body.html -text +css/bootswatch.less -text +css/layouts.less -text +css/navbar.less -text +css/responsive.less -text +css/theme.less -text +css/variables.less -text +/plugin.xml -text +/vignette.png -text diff --git a/body.html b/body.html new file mode 100644 index 0000000..a167df1 --- /dev/null +++ b/body.html @@ -0,0 +1,32 @@ + +
+
+ +
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+ \ No newline at end of file diff --git a/css/bootswatch.less b/css/bootswatch.less new file mode 100644 index 0000000..0442252 --- /dev/null +++ b/css/bootswatch.less @@ -0,0 +1,182 @@ +// Bootswatch.less +// Swatch: Cerulean +// Version: 2.1.1 +// ----------------------------------------------------- + +// TYPOGRAPHY +// ----------------------------------------------------- + +@import url(https://fonts.googleapis.com/css?family=Telex); + +// SCAFFOLDING +// ----------------------------------------------------- + +// NAVBAR +// ----------------------------------------------------- + +.navbar { + + + .brand { + padding: 14px 20px 16px; + font-family: @headingsFontFamily; + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); + } + + li { + line-height: 20px; + } + + .nav > li > a { + padding: 16px 10px 14px; + font-family: @headingsFontFamily; + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); + } + + .search-query { + border: 1px solid darken(@linkColor, 10%); + } + + .btn-navbar:hover { + background-color: darken(@white, 20%); + } + + .navbar-text { + padding: 19px 10px 18px; + line-height: 13px; + color: rgba(0, 0, 0, 0.5); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + } + + &-inverse { + + .navbar-search .search-query { + color: @textColor; + } + } +} + +@media (max-width: @navbarCollapseWidth) { + + .navbar .nav-collapse { + + .nav li > a { + + font-family: @headingsFontFamily; + font-weight: normal; + color: @white; + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); + + &:hover { + background-color: #2B7CAC; + } + } + + .nav .active > a { + .box-shadow(none); + background-color: #2B7CAC; + } + + .dropdown-menu li > a:hover, + .dropdown-menu li > a:focus, + .dropdown-submenu:hover > a { + background-image: none; + } + + .navbar-form, + .navbar-search { + border: none; + } + + .nav-header { + color: #2B7CAC; + } + } + + .navbar-inverse .nav-collapse { + + .nav li > a { + color: @navbarInverseLinkColor; + + &:hover { + background-color: rgba(0, 0, 0, 0.1); + } + } + + .nav .active > a { + background-color: rgba(0, 0, 0, 0.1); + } + } +} + +div.subnav { + + font-family: @headingsFontFamily; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.2); + + &-fixed { + top: @navbarHeight; + } +} + +// NAV +// ----------------------------------------------------- + +// BUTTONS +// ----------------------------------------------------- + +.btn { + #gradient > .vertical-three-colors(@white, @white, 5%, darken(@white, 0%)); + @shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + .box-shadow(@shadow); + + &:hover { + background-position: 0 0; + } +} + +.btn-primary { + .buttonBackground(lighten(@btnPrimaryBackground, 5%), @btnPrimaryBackground); +} + +.btn-info { + .buttonBackground(lighten(@btnInfoBackground, 5%), @btnInfoBackground); +} + +.btn-success { + .buttonBackground(lighten(@btnSuccessBackground, 5%), @btnSuccessBackground); +} + +.btn-warning { + .buttonBackground(lighten(@btnWarningBackground, 5%), @btnWarningBackground); +} + +.btn-danger { + .buttonBackground(lighten(@btnDangerBackground, 5%), @btnDangerBackground); +} + +.btn-inverse { + .buttonBackground(lighten(@btnInverseBackground, 5%), @btnInverseBackground); +} + +// TABLES +// ----------------------------------------------------- + +// FORMS +// ----------------------------------------------------- + +// DROPDOWNS +// ----------------------------------------------------- + +// ALERTS, LABELS, BADGES +// ----------------------------------------------------- + +// MISC +// ----------------------------------------------------- + +i[class^="icon-"]{ + opacity: 0.8; +} + +// MEDIA QUERIES +// ----------------------------------------------------- diff --git a/css/layouts.less b/css/layouts.less new file mode 100644 index 0000000..0329f95 --- /dev/null +++ b/css/layouts.less @@ -0,0 +1,5 @@ +@import "bootstrap/css/layouts.less"; + +#content{float:right;} +#aside{float:left;} +#extra{float:left;clear:left;} diff --git a/css/navbar.less b/css/navbar.less new file mode 100644 index 0000000..928687e --- /dev/null +++ b/css/navbar.less @@ -0,0 +1,19 @@ +@import "bootstrap/css/navbar.less"; + +.navbar.row {margin-left: 0;} +.navbar .navbar-wrap { + float: none; + display: block; + margin-left: auto; + margin-right: auto; +} +.navbar { + #gradient > .vertical(@navbarBackgroundHighlight, @navbarBackground); +} +.navbar-inverse { + #gradient > .vertical(@navbarInverseBackgroundHighlight, @navbarInverseBackground); +} +.navbar-inner { + border: 0; + .border-radius(0); +} diff --git a/css/responsive.less b/css/responsive.less new file mode 100644 index 0000000..e74de2b --- /dev/null +++ b/css/responsive.less @@ -0,0 +1,32 @@ +@import "bootstrap/css/responsive.less"; + +@media (max-width: 767px) { + + // Padding to set content in a bit + body { + padding-left: 0px; + padding-right: 0px; + } + .container { + margin-left: 20px; + margin-right: 20px; + } + .navbar .container { + margin-left: 0px; + margin-right: 0px; + } + + #content { + border-bottom: 1px solid darken(@wellBackground, 7%); + margin-bottom :2em; + float: none; + } + + #aside {float:left;width:47.5%;} + #extra {float:right;width:47.5%;clear: none;} + +} +@media (max-width: 450px) { + #aside {float:none;width:100%;} + #extra {float:none;width:100%;} +} \ No newline at end of file diff --git a/css/theme.less b/css/theme.less new file mode 100644 index 0000000..7131adf --- /dev/null +++ b/css/theme.less @@ -0,0 +1,24 @@ +@import "css/variables.less"; +@import "css/mixins.less"; + +.header {position: relative;} +.header .accueil a {color: inherit;} +.header .spip_logos {float:left;margin: @paddingLarge;margin-left: 0;margin-top:0;} +#slogan_site_spip {display: block;} + +.header .formulaire_menu_lang {width: 100%;} +.header .formulaire_menu_lang select {width: 100%;} + +body {background-color: @wellBackground;} +.page {background-color: @white;} +.footer { + background-color: @wellBackground; + border-top: 1px solid darken(@wellBackground, 7%); + .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); + margin-top:10em;padding-bottom: 10em;padding-top: 5em; + font-size: @fontSizeSmall; + text-align: right; +} + +.cartouche {margin-bottom: @baseLineHeight;} +.content-principal {.clearfix} \ No newline at end of file diff --git a/css/variables.less b/css/variables.less new file mode 100644 index 0000000..f92385f --- /dev/null +++ b/css/variables.less @@ -0,0 +1,297 @@ +// +// Variables +// Swatch: Cerulean +// Version: 2.1.1 +// -------------------------------------------------- + + +// GLOBAL VALUES +// -------------------------------------------------- + + +// Grays +// ------------------------- +@black: #000; +@grayDarker: #222; +@grayDark: #333; +@gray: #555; +@grayLight: #999; +@grayLighter: #F5F5F5; +@white: #fff; + + +// Accent colors +// ------------------------- +@blue: #3E78B3; +@blueDark: #033C73; +@green: #73A839; +@red: #C71C22; +@yellow: #F7B42C; +@orange: #DD5600; +@pink: #F49AC1; +@purple: #9760B3; + + +// Scaffolding +// ------------------------- +@bodyBackground: @white; +@textColor: @gray; + + +// Links +// ------------------------- +@linkColor: #2FA4E7; +@linkColorHover: darken(@linkColor, 15%); + + +// Typography +// ------------------------- +@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; +@serifFontFamily: Georgia, "Times New Roman", Times, serif; +@monoFontFamily: Menlo, Monaco, Consolas, "Courier New", monospace; + +@baseFontSize: 14px; +@baseFontFamily: @sansFontFamily; +@baseLineHeight: 20px; +@altFontFamily: @monoFontFamily; + +@headingsFontFamily: 'Telex', sans-serif; // empty to use BS default, @baseFontFamily +@headingsFontWeight: bold; // instead of browser default, bold +@headingsColor: #317EAC; // empty to use BS default, @textColor + +// Component sizing +// ------------------------- +// Based on 14px font-size and 20px line-height + +@fontSizeLarge: @baseFontSize * 1.25; // ~18px +@fontSizeSmall: @baseFontSize * 0.85; // ~12px +@fontSizeMini: @baseFontSize * 0.75; // ~11px + +@paddingLarge: 11px 19px; // 44px +@paddingSmall: 2px 10px; // 26px +@paddingMini: 1px 6px; // 24px + +@baseBorderRadius: 4px; +@borderRadiusLarge: 5px; +@borderRadiusSmall: 3px; + + +// Tables +// ------------------------- +@tableBackground: transparent; // overall background-color +@tableBackgroundAccent: #f9f9f9; // for striping +@tableBackgroundHover: #f5f5f5; // for hover +@tableBorder: #ddd; // table and cell border + + +// Buttons +// ------------------------- +@btnBackground: @white; +@btnBackgroundHighlight: darken(@white, 10%); +@btnBorder: darken(@white, 20%); + +@btnPrimaryBackground: @linkColor; +@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 15%); + +@btnInfoBackground: @purple; +@btnInfoBackgroundHighlight: #2f96b4; + +@btnSuccessBackground: @green; +@btnSuccessBackgroundHighlight: #51a351; + +@btnWarningBackground: @orange; +@btnWarningBackgroundHighlight: @orange; + +@btnDangerBackground: @red; +@btnDangerBackgroundHighlight: #bd362f; + +@btnInverseBackground: @yellow; +@btnInverseBackgroundHighlight: @grayDarker; + + +// Forms +// ------------------------- +@inputBackground: @white; +@inputBorder: #ccc; +@inputBorderRadius: 3px; +@inputDisabledBackground: @grayLighter; +@formActionsBackground: #f5f5f5; +@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border + +// Dropdowns +// ------------------------- +@dropdownBackground: @white; +@dropdownBorder: rgba(0,0,0,.2); +@dropdownDividerTop: #e5e5e5; +@dropdownDividerBottom: @white; + +@dropdownLinkColor: @grayDark; + +@dropdownLinkColorHover: @white; +@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; + +@dropdownLinkColorActive: @dropdownLinkColor; +@dropdownLinkBackgroundActive: @linkColor; + + + +// COMPONENT VARIABLES +// -------------------------------------------------- + +// Z-index master list +// ------------------------- +// Used for a bird's eye view of components dependent on the z-axis +// Try to avoid customizing these :) +@zindexDropdown: 1000; +@zindexPopover: 1010; +@zindexTooltip: 1020; +@zindexFixedNavbar: 1030; +@zindexModalBackdrop: 1040; +@zindexModal: 1050; + + +// Sprite icons path +// ------------------------- +@iconSpritePath: "../img/glyphicons-halflings.png"; +@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; + + +// Input placeholder text color +// ------------------------- +@placeholderText: @grayLight; + + +// Hr border color +// ------------------------- +@hrBorder: @grayLighter; + + +// Wells +// ------------------------- +@wellBackground: #f5f5f5; + + +// Navbar +// ------------------------- +@navbarCollapseWidth: 767px; +@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; + +@navbarHeight: 50px; +@navbarBackground: #eee; +@navbarBackgroundHighlight: lighten(@navbarBackground, 5%); +@navbarBorder: rgba(0, 0, 0, 0.1); + +@navbarText: @textColor; +@navbarLinkColor: @textColor; +@navbarLinkColorHover: @textColor; +@navbarLinkColorActive: @textColor; +@navbarLinkBackgroundHover: rgba(0,0,0,.05); +@navbarLinkBackgroundActive: rgba(0,0,0,.05); + +@navbarBrandColor: @navbarLinkColor; + +// Inverted navbar +@navbarInverseBackground: @linkColor; +@navbarInverseBackgroundHighlight: lighten(@linkColor, 8%); +@navbarInverseBorder: darken(@navbarInverseBackground, 12%); + +@navbarInverseText: @grayLighter; +@navbarInverseLinkColor: @white; +@navbarInverseLinkColorHover: @white; +@navbarInverseLinkColorActive: @navbarInverseLinkColorHover; +@navbarInverseLinkBackgroundHover: rgba(0,0,0,.2); +@navbarInverseLinkBackgroundActive: rgba(0,0,0,.2); + +@navbarInverseSearchBackground: darken(@navbarInverseBackground, 25%); +@navbarInverseSearchBackgroundFocus: @white; +@navbarInverseSearchBorder: @navbarInverseBackground; +@navbarInverseSearchPlaceholderColor: #ccc; + +@navbarInverseBrandColor: @navbarInverseLinkColor; + + +// Pagination +// ------------------------- +@paginationBackground: #fff; +@paginationBorder: #ddd; +@paginationActiveBackground: #f5f5f5; + + +// Hero unit +// ------------------------- +@heroUnitBackground: @grayLighter; +@heroUnitHeadingColor: inherit; +@heroUnitLeadColor: inherit; + + +// Form states and alerts +// ------------------------- +@warningText: darken(@linkColor, 20%); +@warningBackground: lighten(@linkColor, 20%); +@warningBorder: darken(spin(@warningBackground, -10), 3%); + +@errorText: darken(#C45559, 5%); +@errorBackground: #EDDBE3; +@errorBorder: darken(spin(@errorBackground, -10), 3%); + +@successText: darken(@green, 5%); +@successBackground: #CDB; +@successBorder: darken(spin(@successBackground, -10), 5%); + +@infoText: darken(#908A62, 5%); +@infoBackground: #A7DFF1; +@infoBorder: darken(spin(@infoBackground, -10), 7%); + + +// Tooltips and popovers +// ------------------------- +@tooltipColor: #fff; +@tooltipBackground: #000; +@tooltipArrowWidth: 5px; +@tooltipArrowColor: @tooltipBackground; + +@popoverBackground: #fff; +@popoverArrowWidth: 10px; +@popoverArrowColor: #fff; +@popoverTitleBackground: darken(@popoverBackground, 3%); + +// Special enhancement for popovers +@popoverArrowOuterWidth: @popoverArrowWidth + 1; +@popoverArrowOuterColor: rgba(0,0,0,.25); + + + +// GRID +// -------------------------------------------------- + + +// Default 940px grid +// ------------------------- +@gridColumns: 12; +@gridColumnWidth: 60px; +@gridGutterWidth: 20px; +@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); + +// 1200px min +@gridColumnWidth1200: 70px; +@gridGutterWidth1200: 30px; +@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); + +// 768px-979px +@gridColumnWidth768: 42px; +@gridGutterWidth768: 20px; +@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); + + +// Fluid grid +// ------------------------- +@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); +@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); + +// 1200px min +@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); +@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); + +// 768px-979px +@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); +@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..5c9f240 --- /dev/null +++ b/plugin.xml @@ -0,0 +1,12 @@ + + Cerulean + 2.1.1 + stable + Cedric + GPL + theme_bscerulean + A calm, blue sky + vignette.png + + theme + diff --git a/vignette.png b/vignette.png new file mode 100644 index 0000000000000000000000000000000000000000..95cf32424c274104c5bffdcf5064cc2e10ef9432 GIT binary patch literal 5889 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 O00mhUP>r-v(Ek9`M}!Xm literal 0 HcmV?d00001