Repository: picturepan2/spectre Branch: master Commit: 8847251d71b4 Files: 229 Total size: 2.0 MB Directory structure: gitextract_t0vr0ru3/ ├── .csscomb.json ├── .gitattributes ├── .gitignore ├── .hound.yml ├── .scss-lint.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── bower.json ├── dist/ │ ├── spectre-exp.css │ ├── spectre-icons.css │ └── spectre.css ├── docs/ │ ├── components/ │ │ ├── accordions.html │ │ ├── avatars.html │ │ ├── badges.html │ │ ├── bars.html │ │ ├── breadcrumbs.html │ │ ├── cards.html │ │ ├── chips.html │ │ ├── empty.html │ │ ├── menu.html │ │ ├── modals.html │ │ ├── nav.html │ │ ├── pagination.html │ │ ├── panels.html │ │ ├── popovers.html │ │ ├── steps.html │ │ ├── tabs.html │ │ ├── tiles.html │ │ ├── toasts.html │ │ └── tooltips.html │ ├── components.html │ ├── dist/ │ │ ├── docs.css │ │ ├── spectre-exp.css │ │ ├── spectre-icons.css │ │ ├── spectre-rtl.css │ │ └── spectre.css │ ├── elements/ │ │ ├── buttons.html │ │ ├── code.html │ │ ├── forms.html │ │ ├── icons.html │ │ ├── labels.html │ │ ├── media.html │ │ ├── tables.html │ │ └── typography.html │ ├── elements.html │ ├── examples/ │ │ └── starter.html │ ├── experimentals/ │ │ ├── autocomplete.html │ │ ├── calendars.html │ │ ├── carousels.html │ │ ├── comparison.html │ │ ├── filters.html │ │ ├── meters.html │ │ ├── off-canvas.html │ │ ├── parallax.html │ │ ├── progress.html │ │ ├── sliders.html │ │ ├── timelines.html │ │ └── viewer-360.html │ ├── experimentals.html │ ├── getting-started/ │ │ ├── browsers.html │ │ ├── custom.html │ │ ├── installation.html │ │ └── whatsnew.html │ ├── getting-started.html │ ├── index.html │ ├── layout/ │ │ ├── grid.html │ │ ├── hero.html │ │ ├── navbar.html │ │ └── responsive.html │ ├── layout.html │ ├── rtl.html │ ├── src/ │ │ ├── _layout/ │ │ │ ├── _ad-c.pug │ │ │ ├── _ad-g.pug │ │ │ ├── _docs-layout.pug │ │ │ ├── _example-layout.pug │ │ │ ├── _footer.pug │ │ │ ├── _layout.pug │ │ │ └── _mixins.pug │ │ ├── components/ │ │ │ ├── accordions.pug │ │ │ ├── avatars.pug │ │ │ ├── badges.pug │ │ │ ├── bars.pug │ │ │ ├── breadcrumbs.pug │ │ │ ├── cards.pug │ │ │ ├── chips.pug │ │ │ ├── empty.pug │ │ │ ├── menu.pug │ │ │ ├── modals.pug │ │ │ ├── nav.pug │ │ │ ├── pagination.pug │ │ │ ├── panels.pug │ │ │ ├── popovers.pug │ │ │ ├── steps.pug │ │ │ ├── tabs.pug │ │ │ ├── tiles.pug │ │ │ ├── toasts.pug │ │ │ └── tooltips.pug │ │ ├── components.pug │ │ ├── elements/ │ │ │ ├── buttons.pug │ │ │ ├── code.pug │ │ │ ├── forms.pug │ │ │ ├── icons.pug │ │ │ ├── labels.pug │ │ │ ├── media.pug │ │ │ ├── tables.pug │ │ │ └── typography.pug │ │ ├── elements.pug │ │ ├── examples/ │ │ │ └── starter.pug │ │ ├── experimentals/ │ │ │ ├── autocomplete.pug │ │ │ ├── calendars.pug │ │ │ ├── carousels.pug │ │ │ ├── comparison.pug │ │ │ ├── filters.pug │ │ │ ├── meters.pug │ │ │ ├── off-canvas.pug │ │ │ ├── parallax.pug │ │ │ ├── progress.pug │ │ │ ├── sliders.pug │ │ │ ├── timelines.pug │ │ │ └── viewer-360.pug │ │ ├── experimentals.pug │ │ ├── getting-started/ │ │ │ ├── browsers.pug │ │ │ ├── custom.pug │ │ │ ├── installation.pug │ │ │ └── whatsnew.pug │ │ ├── getting-started.pug │ │ ├── index.pug │ │ ├── layout/ │ │ │ ├── grid.pug │ │ │ ├── hero.pug │ │ │ ├── navbar.pug │ │ │ └── responsive.pug │ │ ├── layout.pug │ │ ├── scss/ │ │ │ ├── docs.scss │ │ │ └── spectre-rtl.scss │ │ ├── utilities/ │ │ │ ├── colors.pug │ │ │ ├── cursors.pug │ │ │ ├── display.pug │ │ │ ├── divider.pug │ │ │ ├── loading.pug │ │ │ ├── position.pug │ │ │ ├── shapes.pug │ │ │ └── text.pug │ │ └── utilities.pug │ ├── utilities/ │ │ ├── colors.html │ │ ├── cursors.html │ │ ├── display.html │ │ ├── divider.html │ │ ├── loading.html │ │ ├── position.html │ │ ├── shapes.html │ │ └── text.html │ └── utilities.html ├── gulpfile.js ├── package.json └── src/ ├── _accordions.scss ├── _animations.scss ├── _asian.scss ├── _autocomplete.scss ├── _avatars.scss ├── _badges.scss ├── _bars.scss ├── _base.scss ├── _breadcrumbs.scss ├── _buttons.scss ├── _calendars.scss ├── _cards.scss ├── _carousels.scss ├── _chips.scss ├── _codes.scss ├── _comparison-sliders.scss ├── _dropdowns.scss ├── _empty.scss ├── _filters.scss ├── _forms.scss ├── _hero.scss ├── _icons.scss ├── _labels.scss ├── _layout.scss ├── _media.scss ├── _menus.scss ├── _meters.scss ├── _mixins.scss ├── _modals.scss ├── _navbar.scss ├── _navs.scss ├── _normalize.scss ├── _off-canvas.scss ├── _pagination.scss ├── _panels.scss ├── _parallax.scss ├── _popovers.scss ├── _progress.scss ├── _sliders.scss ├── _steps.scss ├── _tables.scss ├── _tabs.scss ├── _tiles.scss ├── _timelines.scss ├── _toasts.scss ├── _tooltips.scss ├── _typography.scss ├── _utilities.scss ├── _variables.scss ├── _viewer-360.scss ├── icons/ │ ├── _icons-action.scss │ ├── _icons-core.scss │ ├── _icons-navigation.scss │ └── _icons-object.scss ├── mixins/ │ ├── _avatar.scss │ ├── _button.scss │ ├── _clearfix.scss │ ├── _color.scss │ ├── _label.scss │ ├── _position.scss │ ├── _shadow.scss │ ├── _text.scss │ └── _toast.scss ├── spectre-exp.scss ├── spectre-icons.scss ├── spectre.scss └── utilities/ ├── _colors.scss ├── _cursors.scss ├── _display.scss ├── _divider.scss ├── _loading.scss ├── _position.scss ├── _shapes.scss └── _text.scss ================================================ FILE CONTENTS ================================================ ================================================ FILE: .csscomb.json ================================================ { "remove-empty-rulesets": true, "always-semicolon": true, "color-case": "lower", "block-indent": " ", "color-shorthand": true, "element-case": "lower", "eof-newline": false, "leading-zero": false, "quotes": "double", "sort-order-fallback": "abc", "space-before-colon": "", "space-after-colon": " ", "space-before-combinator": " ", "space-after-combinator": " ", "space-between-declarations": "\n", "space-before-opening-brace": " ", "space-after-opening-brace": "\n", "space-after-selector-delimiter": "\n", "space-before-selector-delimiter": "", "space-before-closing-brace": "\n", "strip-spaces": true, "tab-size": true, "unitless-zero": true, "sort-order": [[ "$variable", "$include", "$import" ]] } ================================================ FILE: .gitattributes ================================================ **/*.html linguist-documentation ================================================ FILE: .gitignore ================================================ .idea/ node_modules/ yarn.lock package-lock.json .* !.csscomb.json !.gitignore !.gitattributes !.hound.yml !.scss-lint.yml ================================================ FILE: .hound.yml ================================================ scss: config_file: .scss-lint.yml ================================================ FILE: .scss-lint.yml ================================================ # Default application configuration that all configurations inherit from. scss_files: "**/*.scss" plugin_directories: ['.scss-linters'] # List of gem names to load custom linters from (make sure they are already # installed) plugin_gems: [] # Default severity of all linters. severity: warning linters: BangFormat: enabled: true space_before_bang: true space_after_bang: false BemDepth: enabled: false max_elements: 1 BorderZero: enabled: true convention: zero # or `none` ChainedClasses: enabled: false ColorKeyword: enabled: true ColorVariable: enabled: true Comment: enabled: false style: silent DebugStatement: enabled: true DeclarationOrder: enabled: true DisableLinterReason: enabled: false DuplicateProperty: enabled: true ElsePlacement: enabled: true style: same_line # or 'new_line' EmptyLineBetweenBlocks: enabled: true ignore_single_line_blocks: true EmptyRule: enabled: true ExtendDirective: enabled: false FinalNewline: enabled: true present: true HexLength: enabled: false style: short # or 'long' HexNotation: enabled: true style: lowercase # or 'uppercase' HexValidation: enabled: true IdSelector: enabled: true ImportantRule: enabled: true ImportPath: enabled: true leading_underscore: false filename_extension: false Indentation: enabled: true allow_non_nested_indentation: false character: space # or 'tab' width: 2 LeadingZero: enabled: true style: exclude_zero # or 'include_zero' MergeableSelector: enabled: true force_nesting: true NameFormat: enabled: true allow_leading_underscore: true convention: hyphenated_lowercase # or 'camel_case', or 'snake_case', or a regex pattern NestingDepth: enabled: true max_depth: 4 ignore_parent_selectors: false PlaceholderInExtend: enabled: false PrivateNamingConvention: enabled: false prefix: _ PropertyCount: enabled: true include_nested: false max_properties: 10 PropertySortOrder: enabled: true ignore_unspecified: false min_properties: 2 separate_groups: false PropertySpelling: enabled: true extra_properties: [] disabled_properties: [] PropertyUnits: enabled: true global: [ 'ch', 'em', 'ex', 'rem', # Font-relative lengths 'cm', 'in', 'mm', 'pc', 'pt', 'px', 'q', # Absolute lengths 'vh', 'vw', 'vmin', 'vmax', # Viewport-percentage lengths 'deg', 'grad', 'rad', 'turn', # Angle 'ms', 's', # Duration 'Hz', 'kHz', # Frequency 'dpi', 'dpcm', 'dppx', # Resolution '%'] # Other properties: {} PseudoElement: enabled: true QualifyingElement: enabled: true allow_element_with_attribute: false allow_element_with_class: false allow_element_with_id: false SelectorDepth: enabled: true max_depth: 2 SelectorFormat: enabled: true convention: hyphenated_lowercase # or 'strict_BEM', or 'hyphenated_BEM', or 'snake_case', or 'camel_case', or a regex pattern Shorthand: enabled: false allowed_shorthands: [1, 2, 3, 4] SingleLinePerProperty: enabled: true allow_single_line_rule_sets: true SingleLinePerSelector: enabled: true SpaceAfterComma: enabled: true style: one_space # or 'no_space', or 'at_least_one_space' SpaceAfterPropertyColon: enabled: true style: one_space # or 'no_space', or 'at_least_one_space', or 'aligned' SpaceAfterPropertyName: enabled: true SpaceAfterVariableColon: enabled: false style: one_space # or 'no_space', 'at_least_one_space' or 'one_space_or_newline' SpaceAfterVariableName: enabled: true SpaceAroundOperator: enabled: true style: one_space # or 'at_least_one_space', or 'no_space' SpaceBeforeBrace: enabled: true style: space # or 'new_line' allow_single_line_padding: false SpaceBetweenParens: enabled: true spaces: 0 StringQuotes: enabled: true style: double_quotes # or single_quotes TrailingSemicolon: enabled: true TrailingWhitespace: enabled: true TrailingZero: enabled: false TransitionAll: enabled: false UnnecessaryMantissa: enabled: true UnnecessaryParentReference: enabled: true UrlFormat: enabled: true UrlQuotes: enabled: true VariableForProperty: enabled: false properties: [] VendorPrefix: enabled: true identifier_list: base additional_identifiers: [] excluded_identifiers: [] ZeroUnit: enabled: true Compass::*: enabled: false ================================================ FILE: CHANGELOG.md ================================================ #### Spectre.css Changelog ##### v0.5.9 [#](https://github.com/picturepan2/spectre/releases/tag/v0.5.9) - Update gulp and dependencies - Update docs, fixes typos, merging PRs, and add more examples like Hero layout and custom prefix - Update column classes less verbose - Fix #619 by adding pointer-events to 3 dots - Fix the behavior of class `loading` together with tooltip - Only rotate the first child icon when accordion is open/close - Add a "Reviewed by Hound" badge ##### v0.5.8 [#](https://github.com/picturepan2/spectre/releases/tag/v0.5.8) - IMPORTANT: Moving - Add Auto width column #541 - Add more Menu badge support #545 - Improve 360-Degree Viewer - Fix gulp issue #547 - Fix the errors in the Docs #538 ##### v0.5.7 [#](https://github.com/picturepan2/spectre/releases/tag/v0.5.7) - Add pure CSS 360-Degree Viewer - Improve Docs SEO - Change Carousels image number to variable #428 - Fix Form textarea height issue ##### v0.5.6 [#](https://github.com/picturepan2/spectre/releases/tag/v0.5.6) - Add Docs Search #509 #291 - Add Copy icon - Add Hero layout #380 - Add multiline Tooltips #500 - Replace transition: all; #526 - Fix #511 issue - Fix sidebar background height for short docs pages ##### v0.5.5 [#](https://github.com/picturepan2/spectre/releases/tag/v0.5.5) - IMPORTANT: New Docs - Add Changelog to What's New section - Fix chip vertical scrollbar #521 - Fix circle -> s-circle #489 - Fix code font-family issue for asian languages #476 ##### v0.5.4 [#](https://github.com/picturepan2/spectre/releases/tag/v0.5.4) - IMPORTANT: Change naming of position utilities to avoid conflicts - Update dark color variable - Fix sidebar hash link bug #482 - Fix browser support typo #469 - Fix code typo #460 - Fix GitHub button z-index bug #458 - Fix Bar background color issue by adding !important to color utilities - Fix chip bug when content is too long #506 - Fix multiple select height bug #508 ##### v0.5.3 [#](https://github.com/picturepan2/spectre/releases/tag/v0.5.3) - Add dark text color to utilities - Add error state to the indeterminate checkbox - Add inline forms - Add more code examples - Fix errors in the Docs ##### v0.5.2 [#](https://github.com/picturepan2/spectre/releases/tag/v0.5.2) - IMPORTANT: Move Docs to Pug templates - Add more Docs examples - Add visited link style - Add 100% modal height class #391 - Fix off-canvas-overlay bug #392 - Fix margin and padding values #431 - Fix Accordion example #438 - Fix a bug of input addons width on mobile devices #449 - Separate Simplified Chinese (zh/zh-Hans) from Traditional (zh-Hant) ##### v0.5.1 [#](https://github.com/picturepan2/spectre/releases/tag/v0.5.1) IMPORTANT: Move Autocomplete to the Experimentals - Add form checkbox, radio and switch support to Menus - Add responsive horizontal form support #375 - Add Favicons in the docs #398 - Fix Off-canvas z-index problem #361 - Fix icons disappearing on group classes on focus - Fix Deprecation Warning #396 #356 - Initial commit of RTL support (not finished) ##### v0.5.0 [#](https://github.com/picturepan2/spectre/releases/tag/v0.5.0) - IMPORTANT: Restore /dist folder - Add Grid nesting example #353 - Add Form control sizes support - Update Off-canvas default behavior and new option available #347 - Split Mixins - Fix Navbar last-child align right bug #346 - Fix modal doc typo - Fix docs examples #348 ##### v0.4.7 [#](https://github.com/picturepan2/spectre/releases/tag/v0.4.7) - Add new button colors (success and error) #227 #241 #342 - Add overflow-scrolling: touch; CSS for better scrolling - Add touch support to Parallax image hover effect - Update the Modal example code - Fix form horizontal layout spacing ##### v0.4.6 [#](https://github.com/picturepan2/spectre/releases/tag/v0.4.6) - Add new Sliders example #328 - Add Table with horizontal scroll support #333 - Update Calendar event style which makes use of color utilities #326 - Define $parallax-fade-color as default variable #332 - Fix the Docs content mistake - Fix breadcrumb-item extra spacing #337 - Fix comparison slider image responsive bug #338 ##### v0.4.5 [#](https://github.com/picturepan2/spectre/releases/tag/v0.4.5) - Rewrite Off-canvas component - Add `active` support to the Off-canvas #308 - Update the Docs pages ##### v0.4.4 [#](https://github.com/picturepan2/spectre/releases/tag/v0.4.4) - IMPORTANT: Increase default font sizes to 16px #271 - Add version number to CSS #288 #289 ##### v0.4.3 [#](https://github.com/picturepan2/spectre/releases/tag/v0.4.3) - Add Icon Sizes #284 - Add Large Modals #293 - Update primary color to #5755d9 - Change Tooltips `white-space` to `pre` #292 - Encode SVG Data URI (thanks to @mariodev) #297 #298 - Improve Buttons and Forms small and large variables - Improve Filters code - Improve gulpfile and package - Add Importing Sass Docs ##### v0.4.2 [#](https://github.com/picturepan2/spectre/releases/tag/v0.4.2) - Add Off-screen experimental - Fix Docs rendering bug in Safari ##### v0.4.1 [#](https://github.com/picturepan2/spectre/releases/tag/v0.4.1) - Add default modifier to all variables - Add `address` reset which changes font-style to normal - Add Details and Summary Accordions support - Fix responsive video - Update the Docs ##### v0.4.0 [#](https://github.com/picturepan2/spectre/releases/tag/v0.4.0) - Switch from Less to Sass - Add Cursor utilities ##### v0.3.2 [#](https://github.com/picturepan2/spectre/releases/tag/v0.3.2) - Add label-rounded classes - Add Avatars presence status code - Add Typography Fonts Docs - Add Button variant mixins - Update Autocomplete style - Update Autoprefixer rules - Update label mixin and code mono font family ##### v0.3.1 [#](https://github.com/picturepan2/spectre/releases/tag/v0.3.1) *IMPORTANT*: The default root font-size has been changed to `20px`, please update your `rem` numbers if you're using the custom sizes. [Learn more](https://picturepan2.github.io/spectre/getting-started/custom.html#variables-sizes). - Fix margin and padding utilities bug - Add grid offset - Rename Display utilities class names - Move Panels and Empty states to Components from Layout - Fix Docs bugs and cleanup codes ##### v0.2.15 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.15) - BIG Update to the Docs experience, completely rewritten and improved #240 - Add Text and Background colors utilities #205 #219 - Add Install from CDN option #191 - Add unit size (4px) and unit size variables - Add Responsive container (max width container) #222 - Add error and success states to checkbox, radio and switch #246 - Fix Rem unit issue in East Asian Chrome #110 - Fix icon direction bug #218 - Fix Dropdown menu max items/height #226 ##### v0.2.14 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.14) - Add vertical divider - Add Form icon support - Add Accordions - Add anchor links to Docs - Add new container grid size - Fix link error and typo ##### v0.2.13 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.13) - Add Timelines code - Add input readonly style - Change Gulp building process and ignore /dist - Change naming `danger` to `error` - Change label-variant mixin - Fix dropdown-toggle border radius in button groups - Fix Calendars date item width bug under Firefox ##### v0.2.12 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.12) - Add pure CSS Comparison Sliders - Add pure CSS content Filters - Add Avatars badge support - Add more icons - Change :focus support - Change Docs image sizes and add object-fit support - Update Navbar code - Fix typos, Modals bugs ##### v0.2.11 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.11) - Add pure CSS Popovers - Add pure CSS Icons - Add Slider bars - Add tvOS Parallax effect text layer - Update shadow mixin ##### v0.2.10 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.10) - Add Shadows and Z-index variables - Add Divider text - Improve color variables - Cleanup components code - Remove the Responsive Resizer tool (Moved to https://github.com/picturepan2/responsive-resizer) ##### v0.2.9 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.9) - Add Panels layout: flexible view container layout with auto-expand content section - Update Navbar layout - Update docs and examples ##### v0.2.8 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.8) - Add Carousels previous and next buttons - Improve disabled state for forms - Improve calendar events style - Improve Sliders disabled style - Improve Autocomplete menu position - Merge Menus and Dropdowns ##### v0.2.7 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.7) - Add Calendars experimental support - Add tabindex note to the dropdowns docs - Add shrink-to-fit=no to head meta - Add Colors docs and update colors - Fix wrong shadow colors with form-select - Fix grid-480 ##### v0.2.6 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.6) - Add Carousels initial experimental version - Add Spectre.css Twitter account (@spectrecss) link - Improve Docs experience and navbar - Fix the bug of form input focus colors ##### v0.2.5 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.5) - Improve color variables completely - Add Menu badges - Add Responsive visibility (show-x) - Add Parallax effect (pure CSS) - Fix elements and components - Update empty state layout code ##### v0.2.4 [#] (https://github.com/picturepan2/spectre/releases/tag/v0.2.4) - ADD: Meters element experimental support - ADD: Progress indeterminate animation - ADD: Text-decoration-skip support - CHG: Split Codes and improve docs codes - FIX: Steps with tooltips z-index bug ##### v0.2.3 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.3) - Bars component - Badges for buttons - Experimentals CSS and docs - Sliders experimental component - A number of fixes as usual ##### v0.2.1 [#](https://github.com/picturepan2/spectre/releases/tag/v0.2.1) I have updated the whole Spectre.css documents experience and bumped the version to v0.2.x. The new Docs can be viewed at https://picturepan2.github.io/spectre/. Here are the new things added: - New Docs experience with better navigations and better mobile off-canvas menu - New components: Tiles, Steps and Navs (part of Navigation) - Improvements: Action button, Autocomplete, Pagination, Tabs, Breadcrumbs, Badges, Cards, new Progress experimental support - Improvements: better focus style - Fixes ##### v0.0.1 - March 2016 Initial commit Thank you. ♥ ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2016 - 2020 Yan Zhu Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ ## Spectre.css [![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com) Spectre.css is a lightweight, responsive and modern CSS framework. - Lightweight (~10KB gzipped) starting point for your projects - Flexbox-based, responsive and mobile-friendly layout - Elegantly designed and developed elements and components Spectre is a side project based on years of CSS development work on a large web service project. Spectre only includes modern base styles, responsive layout system, CSS components and utilities, and it can be modified for your project with Sass/Scss compiler. Spectre.css is completely free to use. If you enjoy it, please consider [donating via Paypal](https://www.paypal.me/picturepan2) or [via Patreon](https://www.patreon.com/spectrecss) for the further development. ♥ ## Getting started There are 5 ways to get started with Spectre CSS framework in your projects. You can either manually install or use NPM, Yarn and Bower. ### Install manually Download the compiled and minified [Spectre CSS files](https://github.com/picturepan2/spectre/tree/master/docs/dist). And include `spectre.css` located in `/docs/dist` in your website or Web app <head> part. `` ### Install from CDN Alternatively, you can use the [unpkg](https://unpkg.com/) or [cdnjs](https://cdnjs.com/libraries/spectre.css) CDN to load compiled Spectre.css. `` ### Install with NPM `$ npm install spectre.css --save` ### Install with Yarn `$ yarn add spectre.css` ### Install with Bower `$ bower install spectre.css --save` ## Compiling custom version You can compile your custom version of Spectre.css. Read [the documentation](https://picturepan2.github.io/spectre/getting-started/custom.html). ## Documentation and examples ### Elements - [Typography](https://picturepan2.github.io/spectre/elements/typography.html) - [Tables](https://picturepan2.github.io/spectre/elements/tables.html) - [Buttons](https://picturepan2.github.io/spectre/elements/buttons.html) - [Forms](https://picturepan2.github.io/spectre/elements/forms.html) - [Icons.css](https://picturepan2.github.io/icons.css) - CSS ONLY - [Labels](https://picturepan2.github.io/spectre/elements/labels.html) - [Code](https://picturepan2.github.io/spectre/elements/code.html) - [Media](https://picturepan2.github.io/spectre/elements/media.html) ### Layout - [Flexbox grid](https://picturepan2.github.io/spectre/layout/grid.html) - [Responsive](https://picturepan2.github.io/spectre/layout/responsive.html) - [Hero](https://picturepan2.github.io/spectre/layout/hero.html) - [Navbar](https://picturepan2.github.io/spectre/layout/navbar.html) ### Components - [Accordions](https://picturepan2.github.io/spectre/components/accordions.html) - [Avatars](https://picturepan2.github.io/spectre/components/avatars.html) - [Badges](https://picturepan2.github.io/spectre/components/badges.html) - [Breadcrumbs](https://picturepan2.github.io/spectre/components/breadcrumbs.html) - [Bars](https://picturepan2.github.io/spectre/components/bars.html) - [Cards](https://picturepan2.github.io/spectre/components/cards.html) - [Chips](https://picturepan2.github.io/spectre/components/chips.html) - [Empty states](https://picturepan2.github.io/spectre/components/empty.html) - [Menu](https://picturepan2.github.io/spectre/components/menu.html) - [Nav](https://picturepan2.github.io/spectre/components/nav.html) - [Modals](https://picturepan2.github.io/spectre/components/modals.html) - [Pagination](https://picturepan2.github.io/spectre/components/pagination.html) - [Panels](https://picturepan2.github.io/spectre/components/panels.html) - [Popovers](https://picturepan2.github.io/spectre/components/popovers.html) - [Steps](https://picturepan2.github.io/spectre/components/steps.html) - [Tabs](https://picturepan2.github.io/spectre/components/tabs.html) - [Tiles](https://picturepan2.github.io/spectre/components/tiles.html) - [Toasts](https://picturepan2.github.io/spectre/components/toasts.html) - [Tooltips](https://picturepan2.github.io/spectre/components/tooltips.html) ### Utilities - [Utilities](https://picturepan2.github.io/spectre/utilities.html) - colors, display, divider, loading, position, shapes and text utilities ### Experimentals - [360-Degree Viewer](https://picturepan2.github.io/spectre/experimentals/viewer-360.html) - CSS ONLY - [Autocomplete](https://picturepan2.github.io/spectre/experimentals/autocomplete.html) - [Calendars](https://picturepan2.github.io/spectre/experimentals/calendars.html) - [Carousels](https://picturepan2.github.io/spectre/experimentals/carousels.html) - CSS ONLY - [Comparison Sliders](https://picturepan2.github.io/spectre/experimentals/comparison.html) - CSS ONLY - [Filters](https://picturepan2.github.io/spectre/experimentals/filters.html) - CSS ONLY - [Meters](https://picturepan2.github.io/spectre/experimentals/meters.html) - [Off-canvas](https://picturepan2.github.io/spectre/experimentals/off-canvas.html) - CSS ONLY - [Parallax](https://picturepan2.github.io/spectre/experimentals/parallax.html) - CSS ONLY - [Progress](https://picturepan2.github.io/spectre/experimentals/progress.html) - [Sliders](https://picturepan2.github.io/spectre/experimentals/sliders.html) - [Timelines](https://picturepan2.github.io/spectre/experimentals/timelines.html) ## Browser support Spectre uses [Autoprefixer](https://github.com/postcss/autoprefixer) to make most styles compatible with earlier browsers and [Normalize.css](https://necolas.github.io/normalize.css/) for CSS resets. Spectre is designed for modern browsers. For best compatibility, these browsers are recommended: - Chrome (LAST 4) - Microsoft Edge (LAST 4) - Firefox (EXTENDED SUPPORT RELEASE) - Safari (LAST 4) - Opera (LAST 4) - Internet Explorer 10+ Spectre supports Internet Explorer 10+, but some HTML5 and CSS3 features are not perfectly supported by Internet Explorer. Designed and built with ♥ by [Yan Zhu](https://twitter.com/picturepan2). Feel free to submit a pull request. Help is always appreciated. ================================================ FILE: bower.json ================================================ { "name": "spectre.css", "version": "0.5.9", "description": "Spectre.css: A lightweight, responsive and modern CSS framework", "homepage": "http://picturepan2.github.io/spectre", "repository": "picturepan2/spectre", "license": "MIT", "author": "Yan Zhu ", "main": "dist/spectre.css", "keywords": [ "css", "framework", "flexbox", "responsive", "mobile-friendly", "front-end", "sass", "modern" ], "ignore": [ ".idea", ".gitignore", "bower.json", "package.json", "node_modules" ] } ================================================ FILE: dist/spectre-exp.css ================================================ /*! Spectre.css Experimentals v0.5.9 | MIT License | github.com/picturepan2/spectre */ .form-autocomplete { position: relative; } .form-autocomplete .form-autocomplete-input { align-content: flex-start; display: -ms-flexbox; display: flex; -ms-flex-line-pack: start; -ms-flex-wrap: wrap; flex-wrap: wrap; height: auto; min-height: 1.6rem; padding: .1rem; } .form-autocomplete .form-autocomplete-input.is-focused { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-autocomplete .form-autocomplete-input .form-input { border-color: transparent; box-shadow: none; display: inline-block; -ms-flex: 1 0 auto; flex: 1 0 auto; height: 1.2rem; line-height: .8rem; margin: .1rem; width: auto; } .form-autocomplete .menu { left: 0; position: absolute; top: 100%; width: 100%; } .form-autocomplete.autocomplete-oneline .form-autocomplete-input { -ms-flex-wrap: nowrap; flex-wrap: nowrap; overflow-x: auto; } .form-autocomplete.autocomplete-oneline .chip { -ms-flex: 1 0 auto; flex: 1 0 auto; } .calendar { border: .05rem solid #dadee4; border-radius: .1rem; display: block; min-width: 280px; } .calendar .calendar-nav { align-items: center; background: #f7f8f9; border-top-left-radius: .1rem; border-top-right-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-align: center; font-size: .9rem; padding: .4rem; } .calendar .calendar-header, .calendar .calendar-body { display: -ms-flexbox; display: flex; -ms-flex-pack: center; -ms-flex-wrap: wrap; flex-wrap: wrap; justify-content: center; padding: .4rem 0; } .calendar .calendar-header .calendar-date, .calendar .calendar-body .calendar-date { -ms-flex: 0 0 14.28%; flex: 0 0 14.28%; max-width: 14.28%; } .calendar .calendar-header { background: #f7f8f9; border-bottom: .05rem solid #dadee4; color: #bcc3ce; font-size: .7rem; text-align: center; } .calendar .calendar-body { color: #66758c; } .calendar .calendar-date { border: 0; padding: .2rem; } .calendar .calendar-date .date-item { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; border: .05rem solid transparent; border-radius: 50%; color: #66758c; cursor: pointer; font-size: .7rem; height: 1.4rem; line-height: 1rem; outline: none; padding: .1rem; position: relative; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; vertical-align: middle; white-space: nowrap; width: 1.4rem; } .calendar .calendar-date .date-item.date-today { border-color: #e5e5f9; color: #5755d9; } .calendar .calendar-date .date-item:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .calendar .calendar-date .date-item:focus, .calendar .calendar-date .date-item:hover { background: #fefeff; border-color: #e5e5f9; color: #5755d9; text-decoration: none; } .calendar .calendar-date .date-item:active, .calendar .calendar-date .date-item.active { background: #4b48d6; border-color: #3634d2; color: #fff; } .calendar .calendar-date .date-item.badge::after { position: absolute; right: 3px; top: 3px; transform: translate(50%, -50%); } .calendar .calendar-date .date-item:disabled, .calendar .calendar-date .date-item.disabled, .calendar .calendar-date .calendar-event:disabled, .calendar .calendar-date .calendar-event.disabled { cursor: default; opacity: .25; pointer-events: none; } .calendar .calendar-date.prev-month .date-item, .calendar .calendar-date.prev-month .calendar-event, .calendar .calendar-date.next-month .date-item, .calendar .calendar-date.next-month .calendar-event { opacity: .25; } .calendar .calendar-range { position: relative; } .calendar .calendar-range::before { background: #f1f1fc; content: ""; height: 1.4rem; left: 0; position: absolute; right: 0; top: 50%; transform: translateY(-50%); } .calendar .calendar-range.range-start::before { left: 50%; } .calendar .calendar-range.range-end::before { right: 50%; } .calendar .calendar-range.range-start .date-item, .calendar .calendar-range.range-end .date-item { background: #4b48d6; border-color: #3634d2; color: #fff; } .calendar .calendar-range .date-item { color: #5755d9; } .calendar.calendar-lg .calendar-body { padding: 0; } .calendar.calendar-lg .calendar-body .calendar-date { border-bottom: .05rem solid #dadee4; border-right: .05rem solid #dadee4; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; height: 5.5rem; padding: 0; } .calendar.calendar-lg .calendar-body .calendar-date:nth-child(7n) { border-right: 0; } .calendar.calendar-lg .calendar-body .calendar-date:nth-last-child(-n+7) { border-bottom: 0; } .calendar.calendar-lg .date-item { align-self: flex-end; -ms-flex-item-align: end; height: 1.4rem; margin-right: .2rem; margin-top: .2rem; } .calendar.calendar-lg .calendar-range::before { top: 19px; } .calendar.calendar-lg .calendar-range.range-start::before { left: auto; width: 19px; } .calendar.calendar-lg .calendar-range.range-end::before { right: 19px; } .calendar.calendar-lg .calendar-events { flex-grow: 1; -ms-flex-positive: 1; line-height: 1; overflow-y: auto; padding: .2rem; } .calendar.calendar-lg .calendar-event { border-radius: .1rem; display: block; font-size: .7rem; margin: .1rem auto; overflow: hidden; padding: 3px 4px; text-overflow: ellipsis; white-space: nowrap; } .carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-container .carousel-item:nth-of-type(1), .carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-container .carousel-item:nth-of-type(2), .carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-container .carousel-item:nth-of-type(3), .carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-container .carousel-item:nth-of-type(4), .carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-container .carousel-item:nth-of-type(5), .carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-container .carousel-item:nth-of-type(6), .carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-container .carousel-item:nth-of-type(7), .carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-container .carousel-item:nth-of-type(8) { animation: carousel-slidein .75s ease-in-out 1; opacity: 1; z-index: 100; } .carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-nav .nav-item:nth-of-type(1), .carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-nav .nav-item:nth-of-type(2), .carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-nav .nav-item:nth-of-type(3), .carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-nav .nav-item:nth-of-type(4), .carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-nav .nav-item:nth-of-type(5), .carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-nav .nav-item:nth-of-type(6), .carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-nav .nav-item:nth-of-type(7), .carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-nav .nav-item:nth-of-type(8) { color: #f7f8f9; } .carousel { background: #f7f8f9; display: block; overflow: hidden; -webkit-overflow-scrolling: touch; position: relative; width: 100%; z-index: 1; } .carousel .carousel-container { height: 100%; left: 0; position: relative; } .carousel .carousel-container::before { content: ""; display: block; padding-bottom: 56.25%; } .carousel .carousel-container .carousel-item { animation: carousel-slideout 1s ease-in-out 1; height: 100%; left: 0; margin: 0; opacity: 0; position: absolute; top: 0; width: 100%; } .carousel .carousel-container .carousel-item:hover .item-prev, .carousel .carousel-container .carousel-item:hover .item-next { opacity: 1; } .carousel .carousel-container .item-prev, .carousel .carousel-container .item-next { background: rgba(247, 248, 249, .25); border-color: rgba(247, 248, 249, .5); color: #f7f8f9; opacity: 0; position: absolute; top: 50%; transform: translateY(-50%); transition: all .4s; z-index: 100; } .carousel .carousel-container .item-prev { left: 1rem; } .carousel .carousel-container .item-next { right: 1rem; } .carousel .carousel-nav { bottom: .4rem; display: -ms-flexbox; display: flex; -ms-flex-pack: center; justify-content: center; left: 50%; position: absolute; transform: translateX(-50%); width: 10rem; z-index: 100; } .carousel .carousel-nav .nav-item { color: rgba(247, 248, 249, .5); display: block; -ms-flex: 1 0 auto; flex: 1 0 auto; height: 1.6rem; margin: .2rem; max-width: 2.5rem; position: relative; } .carousel .carousel-nav .nav-item::before { background: currentColor; content: ""; display: block; height: .1rem; position: absolute; top: .5rem; width: 100%; } @keyframes carousel-slidein { 0% { transform: translateX(100%); } 100% { transform: translateX(0); } } @keyframes carousel-slideout { 0% { opacity: 1; transform: translateX(0); } 100% { opacity: 1; transform: translateX(-50%); } } .comparison-slider { height: 50vh; overflow: hidden; -webkit-overflow-scrolling: touch; position: relative; width: 100%; } .comparison-slider .comparison-before, .comparison-slider .comparison-after { height: 100%; left: 0; margin: 0; overflow: hidden; position: absolute; top: 0; } .comparison-slider .comparison-before img, .comparison-slider .comparison-after img { height: 100%; object-fit: cover; object-position: left center; position: absolute; width: 100%; } .comparison-slider .comparison-before { width: 100%; z-index: 1; } .comparison-slider .comparison-before .comparison-label { right: .8rem; } .comparison-slider .comparison-after { max-width: 100%; min-width: 0; z-index: 2; } .comparison-slider .comparison-after::before { background: transparent; content: ""; cursor: default; height: 100%; left: 0; position: absolute; right: .8rem; top: 0; z-index: 1; } .comparison-slider .comparison-after::after { background: currentColor; border-radius: 50%; box-shadow: 0 -5px, 0 5px; color: #fff; content: ""; height: 3px; pointer-events: none; position: absolute; right: .4rem; top: 50%; transform: translate(50%, -50%); width: 3px; } .comparison-slider .comparison-after .comparison-label { left: .8rem; } .comparison-slider .comparison-resizer { animation: first-run 1.5s 1 ease-in-out; cursor: ew-resize; height: .8rem; left: 0; max-width: 100%; min-width: .8rem; opacity: 0; outline: none; position: relative; resize: horizontal; top: 50%; transform: translateY(-50%) scaleY(30); width: 0; } .comparison-slider .comparison-label { background: rgba(48, 55, 66, .5); bottom: .8rem; color: #fff; padding: .2rem .4rem; position: absolute; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } @keyframes first-run { 0% { width: 0; } 25% { width: 2.4rem; } 50% { width: .8rem; } 75% { width: 1.2rem; } 100% { width: 0; } } .filter .filter-tag#tag-0:checked ~ .filter-nav .chip[for="tag-0"], .filter .filter-tag#tag-1:checked ~ .filter-nav .chip[for="tag-1"], .filter .filter-tag#tag-2:checked ~ .filter-nav .chip[for="tag-2"], .filter .filter-tag#tag-3:checked ~ .filter-nav .chip[for="tag-3"], .filter .filter-tag#tag-4:checked ~ .filter-nav .chip[for="tag-4"], .filter .filter-tag#tag-5:checked ~ .filter-nav .chip[for="tag-5"], .filter .filter-tag#tag-6:checked ~ .filter-nav .chip[for="tag-6"], .filter .filter-tag#tag-7:checked ~ .filter-nav .chip[for="tag-7"], .filter .filter-tag#tag-8:checked ~ .filter-nav .chip[for="tag-8"] { background: #5755d9; color: #fff; } .filter .filter-tag#tag-1:checked ~ .filter-body .filter-item:not([data-tag~="tag-1"]), .filter .filter-tag#tag-2:checked ~ .filter-body .filter-item:not([data-tag~="tag-2"]), .filter .filter-tag#tag-3:checked ~ .filter-body .filter-item:not([data-tag~="tag-3"]), .filter .filter-tag#tag-4:checked ~ .filter-body .filter-item:not([data-tag~="tag-4"]), .filter .filter-tag#tag-5:checked ~ .filter-body .filter-item:not([data-tag~="tag-5"]), .filter .filter-tag#tag-6:checked ~ .filter-body .filter-item:not([data-tag~="tag-6"]), .filter .filter-tag#tag-7:checked ~ .filter-body .filter-item:not([data-tag~="tag-7"]), .filter .filter-tag#tag-8:checked ~ .filter-body .filter-item:not([data-tag~="tag-8"]) { display: none; } .filter .filter-nav { margin: .4rem 0; } .filter .filter-body { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } .meter { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #f7f8f9; border: 0; border-radius: .1rem; display: block; height: .8rem; width: 100%; } .meter::-webkit-meter-inner-element { display: block; } .meter::-webkit-meter-bar, .meter::-webkit-meter-optimum-value, .meter::-webkit-meter-suboptimum-value, .meter::-webkit-meter-even-less-good-value { border-radius: .1rem; } .meter::-webkit-meter-bar { background: #f7f8f9; } .meter::-webkit-meter-optimum-value { background: #32b643; } .meter::-webkit-meter-suboptimum-value { background: #ffb700; } .meter::-webkit-meter-even-less-good-value { background: #e85600; } .meter::-moz-meter-bar, .meter:-moz-meter-optimum, .meter:-moz-meter-sub-optimum, .meter:-moz-meter-sub-sub-optimum { border-radius: .1rem; } .meter:-moz-meter-optimum::-moz-meter-bar { background: #32b643; } .meter:-moz-meter-sub-optimum::-moz-meter-bar { background: #ffb700; } .meter:-moz-meter-sub-sub-optimum::-moz-meter-bar { background: #e85600; } .off-canvas { display: -ms-flexbox; display: flex; -ms-flex-flow: nowrap; flex-flow: nowrap; height: 100%; position: relative; width: 100%; } .off-canvas .off-canvas-toggle { display: block; left: .4rem; position: absolute; top: .4rem; transition: none; z-index: 1; } .off-canvas .off-canvas-sidebar { background: #f7f8f9; bottom: 0; left: 0; min-width: 10rem; overflow-y: auto; position: fixed; top: 0; transform: translateX(-100%); transition: transform .25s; z-index: 200; } .off-canvas .off-canvas-content { -ms-flex: 1 1 auto; flex: 1 1 auto; height: 100%; padding: .4rem .4rem .4rem 4rem; } .off-canvas .off-canvas-overlay { background: rgba(48, 55, 66, .1); border-color: transparent; border-radius: 0; bottom: 0; display: none; height: 100%; left: 0; position: fixed; right: 0; top: 0; width: 100%; } .off-canvas .off-canvas-sidebar:target, .off-canvas .off-canvas-sidebar.active { transform: translateX(0); } .off-canvas .off-canvas-sidebar:target ~ .off-canvas-overlay, .off-canvas .off-canvas-sidebar.active ~ .off-canvas-overlay { display: block; z-index: 100; } @media (min-width: 960px) { .off-canvas.off-canvas-sidebar-show .off-canvas-toggle { display: none; } .off-canvas.off-canvas-sidebar-show .off-canvas-sidebar { -ms-flex: 0 0 auto; flex: 0 0 auto; position: relative; transform: none; } .off-canvas.off-canvas-sidebar-show .off-canvas-overlay { display: none !important; } } .parallax { display: block; height: auto; position: relative; width: auto; } .parallax .parallax-content { box-shadow: 0 1rem 2.1rem rgba(48, 55, 66, .3); height: auto; transform: perspective(1000px); transform-style: preserve-3d; transition: all .4s ease; width: 100%; } .parallax .parallax-content::before { content: ""; display: block; height: 100%; left: 0; position: absolute; top: 0; width: 100%; } .parallax .parallax-front { align-items: center; color: #fff; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-pack: center; height: 100%; justify-content: center; left: 0; position: absolute; text-align: center; text-shadow: 0 0 20px rgba(48, 55, 66, .75); top: 0; transform: translateZ(50px) scale(.95); transition: transform .4s; width: 100%; z-index: 1; } .parallax .parallax-top-left { height: 50%; left: 0; outline: none; position: absolute; top: 0; width: 50%; z-index: 100; } .parallax .parallax-top-left:focus ~ .parallax-content, .parallax .parallax-top-left:hover ~ .parallax-content { transform: perspective(1000px) rotateX(3deg) rotateY(-3deg); } .parallax .parallax-top-left:focus ~ .parallax-content::before, .parallax .parallax-top-left:hover ~ .parallax-content::before { background: linear-gradient(135deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-top-left:focus ~ .parallax-content .parallax-front, .parallax .parallax-top-left:hover ~ .parallax-content .parallax-front { transform: translate3d(4.5px, 4.5px, 50px) scale(.95); } .parallax .parallax-top-right { height: 50%; outline: none; position: absolute; right: 0; top: 0; width: 50%; z-index: 100; } .parallax .parallax-top-right:focus ~ .parallax-content, .parallax .parallax-top-right:hover ~ .parallax-content { transform: perspective(1000px) rotateX(3deg) rotateY(3deg); } .parallax .parallax-top-right:focus ~ .parallax-content::before, .parallax .parallax-top-right:hover ~ .parallax-content::before { background: linear-gradient(-135deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-top-right:focus ~ .parallax-content .parallax-front, .parallax .parallax-top-right:hover ~ .parallax-content .parallax-front { transform: translate3d(-4.5px, 4.5px, 50px) scale(.95); } .parallax .parallax-bottom-left { bottom: 0; height: 50%; left: 0; outline: none; position: absolute; width: 50%; z-index: 100; } .parallax .parallax-bottom-left:focus ~ .parallax-content, .parallax .parallax-bottom-left:hover ~ .parallax-content { transform: perspective(1000px) rotateX(-3deg) rotateY(-3deg); } .parallax .parallax-bottom-left:focus ~ .parallax-content::before, .parallax .parallax-bottom-left:hover ~ .parallax-content::before { background: linear-gradient(45deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-bottom-left:focus ~ .parallax-content .parallax-front, .parallax .parallax-bottom-left:hover ~ .parallax-content .parallax-front { transform: translate3d(4.5px, -4.5px, 50px) scale(.95); } .parallax .parallax-bottom-right { bottom: 0; height: 50%; outline: none; position: absolute; right: 0; width: 50%; z-index: 100; } .parallax .parallax-bottom-right:focus ~ .parallax-content, .parallax .parallax-bottom-right:hover ~ .parallax-content { transform: perspective(1000px) rotateX(-3deg) rotateY(3deg); } .parallax .parallax-bottom-right:focus ~ .parallax-content::before, .parallax .parallax-bottom-right:hover ~ .parallax-content::before { background: linear-gradient(-45deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-bottom-right:focus ~ .parallax-content .parallax-front, .parallax .parallax-bottom-right:hover ~ .parallax-content .parallax-front { transform: translate3d(-4.5px, -4.5px, 50px) scale(.95); } .progress { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #eef0f3; border: 0; border-radius: .1rem; color: #5755d9; height: .2rem; position: relative; width: 100%; } .progress::-webkit-progress-bar { background: transparent; border-radius: .1rem; } .progress::-webkit-progress-value { background: #5755d9; border-radius: .1rem; } .progress::-moz-progress-bar { background: #5755d9; border-radius: .1rem; } .progress:indeterminate { animation: progress-indeterminate 1.5s linear infinite; background: #eef0f3 linear-gradient(to right, #5755d9 30%, #eef0f3 30%) top left/150% 150% no-repeat; } .progress:indeterminate::-moz-progress-bar { background: transparent; } @keyframes progress-indeterminate { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } .slider { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; display: block; height: 1.2rem; width: 100%; } .slider:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); outline: none; } .slider.tooltip:not([data-tooltip])::after { content: attr(value); } .slider::-webkit-slider-thumb { -webkit-appearance: none; background: #5755d9; border: 0; border-radius: 50%; height: .6rem; margin-top: -.25rem; -webkit-transition: transform .2s; transition: transform .2s; width: .6rem; } .slider::-moz-range-thumb { background: #5755d9; border: 0; border-radius: 50%; height: .6rem; -moz-transition: transform .2s; transition: transform .2s; width: .6rem; } .slider::-ms-thumb { background: #5755d9; border: 0; border-radius: 50%; height: .6rem; -ms-transition: transform .2s; transition: transform .2s; width: .6rem; } .slider:active::-webkit-slider-thumb { transform: scale(1.25); } .slider:active::-moz-range-thumb { transform: scale(1.25); } .slider:active::-ms-thumb { transform: scale(1.25); } .slider:disabled::-webkit-slider-thumb, .slider.disabled::-webkit-slider-thumb { background: #f7f8f9; transform: scale(1); } .slider:disabled::-moz-range-thumb, .slider.disabled::-moz-range-thumb { background: #f7f8f9; transform: scale(1); } .slider:disabled::-ms-thumb, .slider.disabled::-ms-thumb { background: #f7f8f9; transform: scale(1); } .slider::-webkit-slider-runnable-track { background: #eef0f3; border-radius: .1rem; height: .1rem; width: 100%; } .slider::-moz-range-track { background: #eef0f3; border-radius: .1rem; height: .1rem; width: 100%; } .slider::-ms-track { background: #eef0f3; border-radius: .1rem; height: .1rem; width: 100%; } .slider::-ms-fill-lower { background: #5755d9; } .timeline .timeline-item { display: -ms-flexbox; display: flex; margin-bottom: 1.2rem; position: relative; } .timeline .timeline-item::before { background: #dadee4; content: ""; height: 100%; left: 11px; position: absolute; top: 1.2rem; width: 2px; } .timeline .timeline-item .timeline-left { -ms-flex: 0 0 auto; flex: 0 0 auto; } .timeline .timeline-item .timeline-content { -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 2px 0 2px .8rem; } .timeline .timeline-item .timeline-icon { align-items: center; border-radius: 50%; color: #fff; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-pack: center; height: 1.2rem; justify-content: center; text-align: center; width: 1.2rem; } .timeline .timeline-item .timeline-icon::before { border: .1rem solid #5755d9; border-radius: 50%; content: ""; display: block; height: .4rem; left: .4rem; position: absolute; top: .4rem; width: .4rem; } .timeline .timeline-item .timeline-icon.icon-lg { background: #5755d9; line-height: 1.2rem; } .timeline .timeline-item .timeline-icon.icon-lg::before { content: none; } .viewer-360 { align-items: center; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-direction: column; flex-direction: column; } .viewer-360 .viewer-slider[max="36"][value="1"] + .viewer-image { background-position-y: 0; } .viewer-360 .viewer-slider[max="36"][value="2"] + .viewer-image { background-position-y: 2.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="3"] + .viewer-image { background-position-y: 5.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="4"] + .viewer-image { background-position-y: 8.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="5"] + .viewer-image { background-position-y: 11.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="6"] + .viewer-image { background-position-y: 14.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="7"] + .viewer-image { background-position-y: 17.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="8"] + .viewer-image { background-position-y: 20%; } .viewer-360 .viewer-slider[max="36"][value="9"] + .viewer-image { background-position-y: 22.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="10"] + .viewer-image { background-position-y: 25.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="11"] + .viewer-image { background-position-y: 28.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="12"] + .viewer-image { background-position-y: 31.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="13"] + .viewer-image { background-position-y: 34.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="14"] + .viewer-image { background-position-y: 37.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="15"] + .viewer-image { background-position-y: 40%; } .viewer-360 .viewer-slider[max="36"][value="16"] + .viewer-image { background-position-y: 42.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="17"] + .viewer-image { background-position-y: 45.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="18"] + .viewer-image { background-position-y: 48.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="19"] + .viewer-image { background-position-y: 51.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="20"] + .viewer-image { background-position-y: 54.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="21"] + .viewer-image { background-position-y: 57.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="22"] + .viewer-image { background-position-y: 60%; } .viewer-360 .viewer-slider[max="36"][value="23"] + .viewer-image { background-position-y: 62.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="24"] + .viewer-image { background-position-y: 65.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="25"] + .viewer-image { background-position-y: 68.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="26"] + .viewer-image { background-position-y: 71.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="27"] + .viewer-image { background-position-y: 74.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="28"] + .viewer-image { background-position-y: 77.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="29"] + .viewer-image { background-position-y: 80%; } .viewer-360 .viewer-slider[max="36"][value="30"] + .viewer-image { background-position-y: 82.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="31"] + .viewer-image { background-position-y: 85.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="32"] + .viewer-image { background-position-y: 88.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="33"] + .viewer-image { background-position-y: 91.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="34"] + .viewer-image { background-position-y: 94.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="35"] + .viewer-image { background-position-y: 97.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="36"] + .viewer-image { background-position-y: 100%; } .viewer-360 .viewer-slider { cursor: ew-resize; -ms-flex-order: 2; margin: 1rem; order: 2; width: 60%; } .viewer-360 .viewer-image { background-position-y: 0; background-repeat: no-repeat; background-size: 100%; -ms-flex-order: 1; max-width: 100%; order: 1; } ================================================ FILE: dist/spectre-icons.css ================================================ /*! Spectre.css Icons v0.5.9 | MIT License | github.com/picturepan2/spectre */ .icon { box-sizing: border-box; display: inline-block; font-size: inherit; font-style: normal; height: 1em; position: relative; text-indent: -9999px; vertical-align: middle; width: 1em; } .icon::before, .icon::after { content: ""; display: block; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); } .icon.icon-2x { font-size: 1.6rem; } .icon.icon-3x { font-size: 2.4rem; } .icon.icon-4x { font-size: 3.2rem; } .accordion .icon, .btn .icon, .toast .icon, .menu .icon { vertical-align: -10%; } .btn-lg .icon { vertical-align: -15%; } .icon-arrow-down::before, .icon-arrow-left::before, .icon-arrow-right::before, .icon-arrow-up::before, .icon-downward::before, .icon-back::before, .icon-forward::before, .icon-upward::before { border: .1rem solid currentColor; border-bottom: 0; border-right: 0; height: .65em; width: .65em; } .icon-arrow-down::before { transform: translate(-50%, -75%) rotate(225deg); } .icon-arrow-left::before { transform: translate(-25%, -50%) rotate(-45deg); } .icon-arrow-right::before { transform: translate(-75%, -50%) rotate(135deg); } .icon-arrow-up::before { transform: translate(-50%, -25%) rotate(45deg); } .icon-back::after, .icon-forward::after { background: currentColor; height: .1rem; width: .8em; } .icon-downward::after, .icon-upward::after { background: currentColor; height: .8em; width: .1rem; } .icon-back::after { left: 55%; } .icon-back::before { transform: translate(-50%, -50%) rotate(-45deg); } .icon-downward::after { top: 45%; } .icon-downward::before { transform: translate(-50%, -50%) rotate(-135deg); } .icon-forward::after { left: 45%; } .icon-forward::before { transform: translate(-50%, -50%) rotate(135deg); } .icon-upward::after { top: 55%; } .icon-upward::before { transform: translate(-50%, -50%) rotate(45deg); } .icon-caret::before { border-left: .3em solid transparent; border-right: .3em solid transparent; border-top: .3em solid currentColor; height: 0; transform: translate(-50%, -25%); width: 0; } .icon-menu::before { background: currentColor; box-shadow: 0 -.35em, 0 .35em; height: .1rem; width: 100%; } .icon-apps::before { background: currentColor; box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em; height: 3px; width: 3px; } .icon-resize-horiz::before, .icon-resize-horiz::after, .icon-resize-vert::before, .icon-resize-vert::after { border: .1rem solid currentColor; border-bottom: 0; border-right: 0; height: .45em; width: .45em; } .icon-resize-horiz::before, .icon-resize-vert::before { transform: translate(-50%, -90%) rotate(45deg); } .icon-resize-horiz::after, .icon-resize-vert::after { transform: translate(-50%, -10%) rotate(225deg); } .icon-resize-horiz::before { transform: translate(-90%, -50%) rotate(-45deg); } .icon-resize-horiz::after { transform: translate(-10%, -50%) rotate(135deg); } .icon-more-horiz::before, .icon-more-vert::before { background: currentColor; border-radius: 50%; box-shadow: -.4em 0, .4em 0; height: 3px; width: 3px; } .icon-more-vert::before { box-shadow: 0 -.4em, 0 .4em; } .icon-plus::before, .icon-minus::before, .icon-cross::before { background: currentColor; height: .1rem; width: 100%; } .icon-plus::after, .icon-cross::after { background: currentColor; height: 100%; width: .1rem; } .icon-cross::before { width: 100%; } .icon-cross::after { height: 100%; } .icon-cross::before, .icon-cross::after { transform: translate(-50%, -50%) rotate(45deg); } .icon-check::before { border: .1rem solid currentColor; border-right: 0; border-top: 0; height: .5em; transform: translate(-50%, -75%) rotate(-45deg); width: .9em; } .icon-stop { border: .1rem solid currentColor; border-radius: 50%; } .icon-stop::before { background: currentColor; height: .1rem; transform: translate(-50%, -50%) rotate(45deg); width: 1em; } .icon-shutdown { border: .1rem solid currentColor; border-radius: 50%; border-top-color: transparent; } .icon-shutdown::before { background: currentColor; content: ""; height: .5em; top: .1em; width: .1rem; } .icon-refresh::before { border: .1rem solid currentColor; border-radius: 50%; border-right-color: transparent; height: 1em; width: 1em; } .icon-refresh::after { border: .2em solid currentColor; border-left-color: transparent; border-top-color: transparent; height: 0; left: 80%; top: 20%; width: 0; } .icon-search::before { border: .1rem solid currentColor; border-radius: 50%; height: .75em; left: 5%; top: 5%; transform: translate(0, 0) rotate(45deg); width: .75em; } .icon-search::after { background: currentColor; height: .1rem; left: 80%; top: 80%; transform: translate(-50%, -50%) rotate(45deg); width: .4em; } .icon-edit::before { border: .1rem solid currentColor; height: .4em; transform: translate(-40%, -60%) rotate(-45deg); width: .85em; } .icon-edit::after { border: .15em solid currentColor; border-right-color: transparent; border-top-color: transparent; height: 0; left: 5%; top: 95%; transform: translate(0, -100%); width: 0; } .icon-delete::before { border: .1rem solid currentColor; border-bottom-left-radius: .1rem; border-bottom-right-radius: .1rem; border-top: 0; height: .75em; top: 60%; width: .75em; } .icon-delete::after { background: currentColor; box-shadow: -.25em .2em, .25em .2em; height: .1rem; top: .05rem; width: .5em; } .icon-share { border: .1rem solid currentColor; border-radius: .1rem; border-right: 0; border-top: 0; } .icon-share::before { border: .1rem solid currentColor; border-left: 0; border-top: 0; height: .4em; left: 100%; top: .25em; transform: translate(-125%, -50%) rotate(-45deg); width: .4em; } .icon-share::after { border: .1rem solid currentColor; border-bottom: 0; border-radius: 75% 0; border-right: 0; height: .5em; width: .6em; } .icon-flag::before { background: currentColor; height: 1em; left: 15%; width: .1rem; } .icon-flag::after { border: .1rem solid currentColor; border-bottom-right-radius: .1rem; border-left: 0; border-top-right-radius: .1rem; height: .65em; left: 60%; top: 35%; width: .8em; } .icon-bookmark::before { border: .1rem solid currentColor; border-bottom: 0; border-top-left-radius: .1rem; border-top-right-radius: .1rem; height: .9em; width: .8em; } .icon-bookmark::after { border: .1rem solid currentColor; border-bottom: 0; border-left: 0; border-radius: .1rem; height: .5em; transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg); width: .5em; } .icon-download, .icon-upload { border-bottom: .1rem solid currentColor; } .icon-download::before, .icon-upload::before { border: .1rem solid currentColor; border-bottom: 0; border-right: 0; height: .5em; transform: translate(-50%, -60%) rotate(-135deg); width: .5em; } .icon-download::after, .icon-upload::after { background: currentColor; height: .6em; top: 40%; width: .1rem; } .icon-upload::before { transform: translate(-50%, -60%) rotate(45deg); } .icon-upload::after { top: 50%; } .icon-copy::before { border: .1rem solid currentColor; border-bottom: 0; border-radius: .1rem; border-right: 0; height: .8em; left: 40%; top: 35%; width: .8em; } .icon-copy::after { border: .1rem solid currentColor; border-radius: .1rem; height: .8em; left: 60%; top: 60%; width: .8em; } .icon-time { border: .1rem solid currentColor; border-radius: 50%; } .icon-time::before { background: currentColor; height: .4em; transform: translate(-50%, -75%); width: .1rem; } .icon-time::after { background: currentColor; height: .3em; transform: translate(-50%, -75%) rotate(90deg); transform-origin: 50% 90%; width: .1rem; } .icon-mail::before { border: .1rem solid currentColor; border-radius: .1rem; height: .8em; width: 1em; } .icon-mail::after { border: .1rem solid currentColor; border-right: 0; border-top: 0; height: .5em; transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg); width: .5em; } .icon-people::before { border: .1rem solid currentColor; border-radius: 50%; height: .45em; top: 25%; width: .45em; } .icon-people::after { border: .1rem solid currentColor; border-radius: 50% 50% 0 0; height: .4em; top: 75%; width: .9em; } .icon-message { border: .1rem solid currentColor; border-bottom: 0; border-radius: .1rem; border-right: 0; } .icon-message::before { border: .1rem solid currentColor; border-bottom-right-radius: .1rem; border-left: 0; border-top: 0; height: .8em; left: 65%; top: 40%; width: .7em; } .icon-message::after { background: currentColor; border-radius: .1rem; height: .3em; left: 10%; top: 100%; transform: translate(0, -90%) rotate(45deg); width: .1rem; } .icon-photo { border: .1rem solid currentColor; border-radius: .1rem; } .icon-photo::before { border: .1rem solid currentColor; border-radius: 50%; height: .25em; left: 35%; top: 35%; width: .25em; } .icon-photo::after { border: .1rem solid currentColor; border-bottom: 0; border-left: 0; height: .5em; left: 60%; transform: translate(-50%, 25%) rotate(-45deg); width: .5em; } .icon-link::before, .icon-link::after { border: .1rem solid currentColor; border-radius: 5em 0 0 5em; border-right: 0; height: .5em; width: .75em; } .icon-link::before { transform: translate(-70%, -45%) rotate(-45deg); } .icon-link::after { transform: translate(-30%, -55%) rotate(135deg); } .icon-location::before { border: .1rem solid currentColor; border-radius: 50% 50% 50% 0; height: .8em; transform: translate(-50%, -60%) rotate(-45deg); width: .8em; } .icon-location::after { border: .1rem solid currentColor; border-radius: 50%; height: .2em; transform: translate(-50%, -80%); width: .2em; } .icon-emoji { border: .1rem solid currentColor; border-radius: 50%; } .icon-emoji::before { border-radius: 50%; box-shadow: -.17em -.1em, .17em -.1em; height: .15em; width: .15em; } .icon-emoji::after { border: .1rem solid currentColor; border-bottom-color: transparent; border-radius: 50%; border-right-color: transparent; height: .5em; transform: translate(-50%, -40%) rotate(-135deg); width: .5em; } ================================================ FILE: dist/spectre.css ================================================ /*! Spectre.css v0.5.9 | MIT License | github.com/picturepan2/spectre */ /* Manually forked from Normalize.css */ /* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ /** 1. Change the default font family in all browsers (opinionated). 2. Correct the line height in all browsers. 3. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS. */ /* Document ========================================================================== */ html { font-family: sans-serif; /* 1 */ -webkit-text-size-adjust: 100%; /* 3 */ -ms-text-size-adjust: 100%; /* 3 */ } /* Sections ========================================================================== */ /** Remove the margin in all browsers (opinionated). */ body { margin: 0; } /** Add the correct display in IE 9-. */ article, aside, footer, header, nav, section { display: block; } /** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */ h1 { font-size: 2em; margin: .67em 0; } /* Grouping content ========================================================================== */ /** Add the correct display in IE 9-. 1. Add the correct display in IE. */ figcaption, figure, main { /* 1 */ display: block; } /** Add the correct margin in IE 8 (removed). */ /** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */ hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ } /** 1. Correct the inheritance and scaling of font size in all browsers. (removed) 2. Correct the odd `em` font sizing in all browsers. */ /* Text-level semantics ========================================================================== */ /** 1. Remove the gray background on active links in IE 10. 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ a { background-color: transparent; /* 1 */ -webkit-text-decoration-skip: objects; /* 2 */ } /** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */ a:active, a:hover { outline-width: 0; } /** Modify default styling of address. */ address { font-style: normal; } /** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed) */ /** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ b, strong { font-weight: inherit; } /** Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { font-weight: bolder; } /** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */ code, kbd, pre, samp { font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace; /* 1 (changed) */ font-size: 1em; /* 2 */ } /** Add the correct font style in Android 4.3-. */ dfn { font-style: italic; } /** Add the correct background and color in IE 9-. (Removed) */ /** Add the correct font size in all browsers. */ small { font-size: 80%; font-weight: 400; /* (added) */ } /** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } /* Embedded content ========================================================================== */ /** Add the correct display in IE 9-. */ audio, video { display: inline-block; } /** Add the correct display in iOS 4-7. */ audio:not([controls]) { display: none; height: 0; } /** Remove the border on images inside links in IE 10-. */ img { border-style: none; } /** Hide the overflow in IE. */ svg:not(:root) { overflow: hidden; } /* Forms ========================================================================== */ /** 1. Change the font styles in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 (changed) */ font-size: inherit; /* 1 (changed) */ line-height: inherit; /* 1 (changed) */ margin: 0; /* 2 */ } /** Show the overflow in IE. 1. Show the overflow in Edge. */ button, input { /* 1 */ overflow: visible; } /** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */ button, select { /* 1 */ text-transform: none; } /** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */ button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; /* 2 */ } /** Remove the inner border and padding in Firefox. */ button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } /** Restore the focus styles unset by the previous rule (removed). */ /** Change the border, margin, and padding in all browsers (opinionated) (changed). */ fieldset { border: 0; margin: 0; padding: 0; } /** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */ legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ } /** 1. Add the correct display in IE 9-. 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ progress { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } /** Remove the default vertical scrollbar in IE. */ textarea { overflow: auto; } /** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */ [type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** Correct the cursor style of increment and decrement buttons in Chrome. */ [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } /** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /** Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Interactive ========================================================================== */ /* Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. */ details, menu { display: block; } /* Add the correct display in all browsers. */ summary { display: list-item; outline: none; } /* Scripting ========================================================================== */ /** Add the correct display in IE 9-. */ canvas { display: inline-block; } /** Add the correct display in IE. */ template { display: none; } /* Hidden ========================================================================== */ /** Add the correct display in IE 10-. */ [hidden] { display: none; } *, *::before, *::after { box-sizing: inherit; } html { box-sizing: border-box; font-size: 20px; line-height: 1.5; -webkit-tap-highlight-color: transparent; } body { background: #fff; color: #3b4351; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif; font-size: .8rem; overflow-x: hidden; text-rendering: optimizeLegibility; } a { color: #5755d9; outline: none; text-decoration: none; } a:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } a:focus, a:hover, a:active, a.active { color: #302ecd; text-decoration: underline; } a:visited { color: #807fe2; } h1, h2, h3, h4, h5, h6 { color: inherit; font-weight: 500; line-height: 1.2; margin-bottom: .5em; margin-top: 0; } .h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 500; } h1, .h1 { font-size: 2rem; } h2, .h2 { font-size: 1.6rem; } h3, .h3 { font-size: 1.4rem; } h4, .h4 { font-size: 1.2rem; } h5, .h5 { font-size: 1rem; } h6, .h6 { font-size: .8rem; } p { margin: 0 0 1.2rem; } a, ins, u { -webkit-text-decoration-skip: ink edges; text-decoration-skip: ink edges; } abbr[title] { border-bottom: .05rem dotted; cursor: help; text-decoration: none; } kbd { background: #303742; border-radius: .1rem; color: #fff; font-size: .7rem; line-height: 1.25; padding: .1rem .2rem; } mark { background: #ffe9b3; border-bottom: .05rem solid #ffd367; border-radius: .1rem; color: #3b4351; padding: .05rem .1rem 0; } blockquote { border-left: .1rem solid #dadee4; margin-left: 0; padding: .4rem .8rem; } blockquote p:last-child { margin-bottom: 0; } ul, ol { margin: .8rem 0 .8rem .8rem; padding: 0; } ul ul, ul ol, ol ul, ol ol { margin: .8rem 0 .8rem .8rem; } ul li, ol li { margin-top: .4rem; } ul { list-style: disc inside; } ul ul { list-style-type: circle; } ol { list-style: decimal inside; } ol ol { list-style-type: lower-alpha; } dl dt { font-weight: bold; } dl dd { margin: .4rem 0 .8rem 0; } html:lang(zh), html:lang(zh-Hans), .lang-zh, .lang-zh-hans { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif; } html:lang(zh-Hant), .lang-zh-hant { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", "Helvetica Neue", sans-serif; } html:lang(ja), .lang-ja { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, "Helvetica Neue", sans-serif; } html:lang(ko), .lang-ko { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Malgun Gothic", "Helvetica Neue", sans-serif; } :lang(zh) ins, :lang(zh) u, :lang(ja) ins, :lang(ja) u, .lang-cjk ins, .lang-cjk u { border-bottom: .05rem solid; text-decoration: none; } :lang(zh) del + del, :lang(zh) del + s, :lang(zh) ins + ins, :lang(zh) ins + u, :lang(zh) s + del, :lang(zh) s + s, :lang(zh) u + ins, :lang(zh) u + u, :lang(ja) del + del, :lang(ja) del + s, :lang(ja) ins + ins, :lang(ja) ins + u, :lang(ja) s + del, :lang(ja) s + s, :lang(ja) u + ins, :lang(ja) u + u, .lang-cjk del + del, .lang-cjk del + s, .lang-cjk ins + ins, .lang-cjk ins + u, .lang-cjk s + del, .lang-cjk s + s, .lang-cjk u + ins, .lang-cjk u + u { margin-left: .125em; } .table { border-collapse: collapse; border-spacing: 0; text-align: left; width: 100%; } .table.table-striped tbody tr:nth-of-type(odd) { background: #f7f8f9; } .table tbody tr.active, .table.table-striped tbody tr.active { background: #eef0f3; } .table.table-hover tbody tr:hover { background: #eef0f3; } .table.table-scroll { display: block; overflow-x: auto; padding-bottom: .75rem; white-space: nowrap; } .table td, .table th { border-bottom: .05rem solid #dadee4; padding: .6rem .4rem; } .table th { border-bottom-width: .1rem; } .btn { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; border: .05rem solid #5755d9; border-radius: .1rem; color: #5755d9; cursor: pointer; display: inline-block; font-size: .8rem; height: 1.8rem; line-height: 1.2rem; outline: none; padding: .25rem .4rem; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; white-space: nowrap; } .btn:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .btn:focus, .btn:hover { background: #f1f1fc; border-color: #4b48d6; text-decoration: none; } .btn:active, .btn.active { background: #4b48d6; border-color: #3634d2; color: #fff; text-decoration: none; } .btn:active.loading::after, .btn.active.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn[disabled], .btn:disabled, .btn.disabled { cursor: default; opacity: .5; pointer-events: none; } .btn.btn-primary { background: #5755d9; border-color: #4b48d6; color: #fff; } .btn.btn-primary:focus, .btn.btn-primary:hover { background: #4240d4; border-color: #3634d2; color: #fff; } .btn.btn-primary:active, .btn.btn-primary.active { background: #3a38d2; border-color: #302ecd; color: #fff; } .btn.btn-primary.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn.btn-success { background: #32b643; border-color: #2faa3f; color: #fff; } .btn.btn-success:focus { box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2); } .btn.btn-success:focus, .btn.btn-success:hover { background: #30ae40; border-color: #2da23c; color: #fff; } .btn.btn-success:active, .btn.btn-success.active { background: #2a9a39; border-color: #278e34; color: #fff; } .btn.btn-success.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn.btn-error { background: #e85600; border-color: #d95000; color: #fff; } .btn.btn-error:focus { box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .btn.btn-error:focus, .btn.btn-error:hover { background: #de5200; border-color: #cf4d00; color: #fff; } .btn.btn-error:active, .btn.btn-error.active { background: #c44900; border-color: #b54300; color: #fff; } .btn.btn-error.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn.btn-link { background: transparent; border-color: transparent; color: #5755d9; } .btn.btn-link:focus, .btn.btn-link:hover, .btn.btn-link:active, .btn.btn-link.active { color: #302ecd; } .btn.btn-sm { font-size: .7rem; height: 1.4rem; padding: .05rem .3rem; } .btn.btn-lg { font-size: .9rem; height: 2rem; padding: .35rem .6rem; } .btn.btn-block { display: block; width: 100%; } .btn.btn-action { padding-left: 0; padding-right: 0; width: 1.8rem; } .btn.btn-action.btn-sm { width: 1.4rem; } .btn.btn-action.btn-lg { width: 2rem; } .btn.btn-clear { background: transparent; border: 0; color: currentColor; height: 1rem; line-height: .8rem; margin-left: .2rem; margin-right: -2px; opacity: 1; padding: .1rem; text-decoration: none; width: 1rem; } .btn.btn-clear:focus, .btn.btn-clear:hover { background: rgba(247, 248, 249, .5); opacity: .95; } .btn.btn-clear::before { content: "\2715"; } .btn-group { display: -ms-inline-flexbox; display: inline-flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } .btn-group .btn { -ms-flex: 1 0 auto; flex: 1 0 auto; } .btn-group .btn:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } .btn-group .btn:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -.05rem; } .btn-group .btn:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -.05rem; } .btn-group .btn:focus, .btn-group .btn:hover, .btn-group .btn:active, .btn-group .btn.active { z-index: 1; } .btn-group.btn-group-block { display: -ms-flexbox; display: flex; } .btn-group.btn-group-block .btn { -ms-flex: 1 0 0; flex: 1 0 0; } .form-group:not(:last-child) { margin-bottom: .4rem; } fieldset { margin-bottom: .8rem; } legend { font-size: .9rem; font-weight: 500; margin-bottom: .8rem; } .form-label { display: block; line-height: 1.2rem; padding: .3rem 0; } .form-label.label-sm { font-size: .7rem; padding: .1rem 0; } .form-label.label-lg { font-size: .9rem; padding: .4rem 0; } .form-input { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; background-image: none; border: .05rem solid #bcc3ce; border-radius: .1rem; color: #3b4351; display: block; font-size: .8rem; height: 1.8rem; line-height: 1.2rem; max-width: 100%; outline: none; padding: .25rem .4rem; position: relative; transition: background .2s, border .2s, box-shadow .2s, color .2s; width: 100%; } .form-input:focus { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-input:-ms-input-placeholder { color: #bcc3ce; } .form-input::-ms-input-placeholder { color: #bcc3ce; } .form-input::placeholder { color: #bcc3ce; } .form-input.input-sm { font-size: .7rem; height: 1.4rem; padding: .05rem .3rem; } .form-input.input-lg { font-size: .9rem; height: 2rem; padding: .35rem .6rem; } .form-input.input-inline { display: inline-block; vertical-align: middle; width: auto; } .form-input[type="file"] { height: auto; } textarea.form-input, textarea.form-input.input-lg, textarea.form-input.input-sm { height: auto; } .form-input-hint { color: #bcc3ce; font-size: .7rem; margin-top: .2rem; } .has-success .form-input-hint, .is-success + .form-input-hint { color: #32b643; } .has-error .form-input-hint, .is-error + .form-input-hint { color: #e85600; } .form-select { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; border: .05rem solid #bcc3ce; border-radius: .1rem; color: inherit; font-size: .8rem; height: 1.8rem; line-height: 1.2rem; outline: none; padding: .25rem .4rem; vertical-align: middle; width: 100%; } .form-select:focus { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-select::-ms-expand { display: none; } .form-select.select-sm { font-size: .7rem; height: 1.4rem; padding: .05rem 1.1rem .05rem .3rem; } .form-select.select-lg { font-size: .9rem; height: 2rem; padding: .35rem 1.4rem .35rem .6rem; } .form-select[size], .form-select[multiple] { height: auto; padding: .25rem .4rem; } .form-select[size] option, .form-select[multiple] option { padding: .1rem .2rem; } .form-select:not([multiple]):not([size]) { background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center/.4rem .5rem; padding-right: 1.2rem; } .has-icon-left, .has-icon-right { position: relative; } .has-icon-left .form-icon, .has-icon-right .form-icon { height: .8rem; margin: 0 .25rem; position: absolute; top: 50%; transform: translateY(-50%); width: .8rem; z-index: 2; } .has-icon-left .form-icon { left: .05rem; } .has-icon-left .form-input { padding-left: 1.3rem; } .has-icon-right .form-icon { right: .05rem; } .has-icon-right .form-input { padding-right: 1.3rem; } .form-checkbox, .form-radio, .form-switch { display: block; line-height: 1.2rem; margin: .2rem 0; min-height: 1.4rem; padding: .1rem .4rem .1rem 1.2rem; position: relative; } .form-checkbox input, .form-radio input, .form-switch input { clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; position: absolute; width: 1px; } .form-checkbox input:focus + .form-icon, .form-radio input:focus + .form-icon, .form-switch input:focus + .form-icon { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-checkbox input:checked + .form-icon, .form-radio input:checked + .form-icon, .form-switch input:checked + .form-icon { background: #5755d9; border-color: #5755d9; } .form-checkbox .form-icon, .form-radio .form-icon, .form-switch .form-icon { border: .05rem solid #bcc3ce; cursor: pointer; display: inline-block; position: absolute; transition: background .2s, border .2s, box-shadow .2s, color .2s; } .form-checkbox.input-sm, .form-radio.input-sm, .form-switch.input-sm { font-size: .7rem; margin: 0; } .form-checkbox.input-lg, .form-radio.input-lg, .form-switch.input-lg { font-size: .9rem; margin: .3rem 0; } .form-checkbox .form-icon, .form-radio .form-icon { background: #fff; height: .8rem; left: 0; top: .3rem; width: .8rem; } .form-checkbox input:active + .form-icon, .form-radio input:active + .form-icon { background: #eef0f3; } .form-checkbox .form-icon { border-radius: .1rem; } .form-checkbox input:checked + .form-icon::before { background-clip: padding-box; border: .1rem solid #fff; border-left-width: 0; border-top-width: 0; content: ""; height: 9px; left: 50%; margin-left: -3px; margin-top: -6px; position: absolute; top: 50%; transform: rotate(45deg); width: 6px; } .form-checkbox input:indeterminate + .form-icon { background: #5755d9; border-color: #5755d9; } .form-checkbox input:indeterminate + .form-icon::before { background: #fff; content: ""; height: 2px; left: 50%; margin-left: -5px; margin-top: -1px; position: absolute; top: 50%; width: 10px; } .form-radio .form-icon { border-radius: 50%; } .form-radio input:checked + .form-icon::before { background: #fff; border-radius: 50%; content: ""; height: 6px; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 6px; } .form-switch { padding-left: 2rem; } .form-switch .form-icon { background: #bcc3ce; background-clip: padding-box; border-radius: .45rem; height: .9rem; left: 0; top: .25rem; width: 1.6rem; } .form-switch .form-icon::before { background: #fff; border-radius: 50%; content: ""; display: block; height: .8rem; left: 0; position: absolute; top: 0; transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s; width: .8rem; } .form-switch input:checked + .form-icon::before { left: 14px; } .form-switch input:active + .form-icon::before { background: #f7f8f9; } .input-group { display: -ms-flexbox; display: flex; } .input-group .input-group-addon { background: #f7f8f9; border: .05rem solid #bcc3ce; border-radius: .1rem; line-height: 1.2rem; padding: .25rem .4rem; white-space: nowrap; } .input-group .input-group-addon.addon-sm { font-size: .7rem; padding: .05rem .3rem; } .input-group .input-group-addon.addon-lg { font-size: .9rem; padding: .35rem .6rem; } .input-group .form-input, .input-group .form-select { -ms-flex: 1 1 auto; flex: 1 1 auto; width: 1%; } .input-group .input-group-btn { z-index: 1; } .input-group .form-input:first-child:not(:last-child), .input-group .form-select:first-child:not(:last-child), .input-group .input-group-addon:first-child:not(:last-child), .input-group .input-group-btn:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } .input-group .form-input:not(:first-child):not(:last-child), .input-group .form-select:not(:first-child):not(:last-child), .input-group .input-group-addon:not(:first-child):not(:last-child), .input-group .input-group-btn:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -.05rem; } .input-group .form-input:last-child:not(:first-child), .input-group .form-select:last-child:not(:first-child), .input-group .input-group-addon:last-child:not(:first-child), .input-group .input-group-btn:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -.05rem; } .input-group .form-input:focus, .input-group .form-select:focus, .input-group .input-group-addon:focus, .input-group .input-group-btn:focus { z-index: 2; } .input-group .form-select { width: auto; } .input-group.input-inline { display: -ms-inline-flexbox; display: inline-flex; } .has-success .form-input, .form-input.is-success, .has-success .form-select, .form-select.is-success { background: #f9fdfa; border-color: #32b643; } .has-success .form-input:focus, .form-input.is-success:focus, .has-success .form-select:focus, .form-select.is-success:focus { box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2); } .has-error .form-input, .form-input.is-error, .has-error .form-select, .form-select.is-error { background: #fffaf7; border-color: #e85600; } .has-error .form-input:focus, .form-input.is-error:focus, .has-error .form-select:focus, .form-select.is-error:focus { box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .has-error .form-checkbox .form-icon, .form-checkbox.is-error .form-icon, .has-error .form-radio .form-icon, .form-radio.is-error .form-icon, .has-error .form-switch .form-icon, .form-switch.is-error .form-icon { border-color: #e85600; } .has-error .form-checkbox input:checked + .form-icon, .form-checkbox.is-error input:checked + .form-icon, .has-error .form-radio input:checked + .form-icon, .form-radio.is-error input:checked + .form-icon, .has-error .form-switch input:checked + .form-icon, .form-switch.is-error input:checked + .form-icon { background: #e85600; border-color: #e85600; } .has-error .form-checkbox input:focus + .form-icon, .form-checkbox.is-error input:focus + .form-icon, .has-error .form-radio input:focus + .form-icon, .form-radio.is-error input:focus + .form-icon, .has-error .form-switch input:focus + .form-icon, .form-switch.is-error input:focus + .form-icon { border-color: #e85600; box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .has-error .form-checkbox input:indeterminate + .form-icon, .form-checkbox.is-error input:indeterminate + .form-icon { background: #e85600; border-color: #e85600; } .form-input:not(:-ms-input-placeholder):invalid { border-color: #e85600; } .form-input:not(:placeholder-shown):invalid { border-color: #e85600; } .form-input:not(:-ms-input-placeholder):invalid:focus { background: #fffaf7; box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .form-input:not(:placeholder-shown):invalid:focus { background: #fffaf7; box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .form-input:not(:-ms-input-placeholder):invalid + .form-input-hint { color: #e85600; } .form-input:not(:placeholder-shown):invalid + .form-input-hint { color: #e85600; } .form-input:disabled, .form-input.disabled, .form-select:disabled, .form-select.disabled { background-color: #eef0f3; cursor: not-allowed; opacity: .5; } .form-input[readonly] { background-color: #f7f8f9; } input:disabled + .form-icon, input.disabled + .form-icon { background: #eef0f3; cursor: not-allowed; opacity: .5; } .form-switch input:disabled + .form-icon::before, .form-switch input.disabled + .form-icon::before { background: #fff; } .form-horizontal { padding: .4rem 0; } .form-horizontal .form-group { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } .form-inline { display: inline-block; } .label { background: #eef0f3; border-radius: .1rem; color: #455060; display: inline-block; line-height: 1.25; padding: .1rem .2rem; } .label.label-rounded { border-radius: 5rem; padding-left: .4rem; padding-right: .4rem; } .label.label-primary { background: #5755d9; color: #fff; } .label.label-secondary { background: #f1f1fc; color: #5755d9; } .label.label-success { background: #32b643; color: #fff; } .label.label-warning { background: #ffb700; color: #fff; } .label.label-error { background: #e85600; color: #fff; } code { background: #fcf2f2; border-radius: .1rem; color: #d73e48; font-size: 85%; line-height: 1.25; padding: .1rem .2rem; } .code { border-radius: .1rem; color: #3b4351; position: relative; } .code::before { color: #bcc3ce; content: attr(data-lang); font-size: .7rem; position: absolute; right: .4rem; top: .1rem; } .code code { background: #f7f8f9; color: inherit; display: block; line-height: 1.5; overflow-x: auto; padding: 1rem; width: 100%; } .img-responsive { display: block; height: auto; max-width: 100%; } .img-fit-cover { object-fit: cover; } .img-fit-contain { object-fit: contain; } .video-responsive { display: block; overflow: hidden; padding: 0; position: relative; width: 100%; } .video-responsive::before { content: ""; display: block; padding-bottom: 56.25%; } .video-responsive iframe, .video-responsive object, .video-responsive embed { border: 0; bottom: 0; height: 100%; left: 0; position: absolute; right: 0; top: 0; width: 100%; } video.video-responsive { height: auto; max-width: 100%; } video.video-responsive::before { content: none; } .video-responsive-4-3::before { padding-bottom: 75%; } .video-responsive-1-1::before { padding-bottom: 100%; } .figure { margin: 0 0 .4rem 0; } .figure .figure-caption { color: #66758c; margin-top: .4rem; } .container { margin-left: auto; margin-right: auto; padding-left: .4rem; padding-right: .4rem; width: 100%; } .container.grid-xl { max-width: 1296px; } .container.grid-lg { max-width: 976px; } .container.grid-md { max-width: 856px; } .container.grid-sm { max-width: 616px; } .container.grid-xs { max-width: 496px; } .show-xs, .show-sm, .show-md, .show-lg, .show-xl { display: none !important; } .cols, .columns { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-left: -.4rem; margin-right: -.4rem; } .cols.col-gapless, .columns.col-gapless { margin-left: 0; margin-right: 0; } .cols.col-gapless > .column, .columns.col-gapless > .column { padding-left: 0; padding-right: 0; } .cols.col-oneline, .columns.col-oneline { -ms-flex-wrap: nowrap; flex-wrap: nowrap; overflow-x: auto; } [class~="col-"], .column { -ms-flex: 1; flex: 1; max-width: 100%; padding-left: .4rem; padding-right: .4rem; } [class~="col-"].col-12, [class~="col-"].col-11, [class~="col-"].col-10, [class~="col-"].col-9, [class~="col-"].col-8, [class~="col-"].col-7, [class~="col-"].col-6, [class~="col-"].col-5, [class~="col-"].col-4, [class~="col-"].col-3, [class~="col-"].col-2, [class~="col-"].col-1, [class~="col-"].col-auto, .column.col-12, .column.col-11, .column.col-10, .column.col-9, .column.col-8, .column.col-7, .column.col-6, .column.col-5, .column.col-4, .column.col-3, .column.col-2, .column.col-1, .column.col-auto { -ms-flex: none; flex: none; } .col-12 { width: 100%; } .col-11 { width: 91.66666667%; } .col-10 { width: 83.33333333%; } .col-9 { width: 75%; } .col-8 { width: 66.66666667%; } .col-7 { width: 58.33333333%; } .col-6 { width: 50%; } .col-5 { width: 41.66666667%; } .col-4 { width: 33.33333333%; } .col-3 { width: 25%; } .col-2 { width: 16.66666667%; } .col-1 { width: 8.33333333%; } .col-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; max-width: none; width: auto; } .col-mx-auto { margin-left: auto; margin-right: auto; } .col-ml-auto { margin-left: auto; } .col-mr-auto { margin-right: auto; } @media (max-width: 1280px) { .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl-auto { -ms-flex: none; flex: none; } .col-xl-12 { width: 100%; } .col-xl-11 { width: 91.66666667%; } .col-xl-10 { width: 83.33333333%; } .col-xl-9 { width: 75%; } .col-xl-8 { width: 66.66666667%; } .col-xl-7 { width: 58.33333333%; } .col-xl-6 { width: 50%; } .col-xl-5 { width: 41.66666667%; } .col-xl-4 { width: 33.33333333%; } .col-xl-3 { width: 25%; } .col-xl-2 { width: 16.66666667%; } .col-xl-1 { width: 8.33333333%; } .col-xl-auto { width: auto; } .hide-xl { display: none !important; } .show-xl { display: block !important; } } @media (max-width: 960px) { .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg-auto { -ms-flex: none; flex: none; } .col-lg-12 { width: 100%; } .col-lg-11 { width: 91.66666667%; } .col-lg-10 { width: 83.33333333%; } .col-lg-9 { width: 75%; } .col-lg-8 { width: 66.66666667%; } .col-lg-7 { width: 58.33333333%; } .col-lg-6 { width: 50%; } .col-lg-5 { width: 41.66666667%; } .col-lg-4 { width: 33.33333333%; } .col-lg-3 { width: 25%; } .col-lg-2 { width: 16.66666667%; } .col-lg-1 { width: 8.33333333%; } .col-lg-auto { width: auto; } .hide-lg { display: none !important; } .show-lg { display: block !important; } } @media (max-width: 840px) { .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md-auto { -ms-flex: none; flex: none; } .col-md-12 { width: 100%; } .col-md-11 { width: 91.66666667%; } .col-md-10 { width: 83.33333333%; } .col-md-9 { width: 75%; } .col-md-8 { width: 66.66666667%; } .col-md-7 { width: 58.33333333%; } .col-md-6 { width: 50%; } .col-md-5 { width: 41.66666667%; } .col-md-4 { width: 33.33333333%; } .col-md-3 { width: 25%; } .col-md-2 { width: 16.66666667%; } .col-md-1 { width: 8.33333333%; } .col-md-auto { width: auto; } .hide-md { display: none !important; } .show-md { display: block !important; } } @media (max-width: 600px) { .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm-auto { -ms-flex: none; flex: none; } .col-sm-12 { width: 100%; } .col-sm-11 { width: 91.66666667%; } .col-sm-10 { width: 83.33333333%; } .col-sm-9 { width: 75%; } .col-sm-8 { width: 66.66666667%; } .col-sm-7 { width: 58.33333333%; } .col-sm-6 { width: 50%; } .col-sm-5 { width: 41.66666667%; } .col-sm-4 { width: 33.33333333%; } .col-sm-3 { width: 25%; } .col-sm-2 { width: 16.66666667%; } .col-sm-1 { width: 8.33333333%; } .col-sm-auto { width: auto; } .hide-sm { display: none !important; } .show-sm { display: block !important; } } @media (max-width: 480px) { .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs-auto { -ms-flex: none; flex: none; } .col-xs-12 { width: 100%; } .col-xs-11 { width: 91.66666667%; } .col-xs-10 { width: 83.33333333%; } .col-xs-9 { width: 75%; } .col-xs-8 { width: 66.66666667%; } .col-xs-7 { width: 58.33333333%; } .col-xs-6 { width: 50%; } .col-xs-5 { width: 41.66666667%; } .col-xs-4 { width: 33.33333333%; } .col-xs-3 { width: 25%; } .col-xs-2 { width: 16.66666667%; } .col-xs-1 { width: 8.33333333%; } .col-xs-auto { width: auto; } .hide-xs { display: none !important; } .show-xs { display: block !important; } } .hero { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; -ms-flex-pack: justify; justify-content: space-between; padding-bottom: 4rem; padding-top: 4rem; } .hero.hero-sm { padding-bottom: 2rem; padding-top: 2rem; } .hero.hero-lg { padding-bottom: 8rem; padding-top: 8rem; } .hero .hero-body { padding: .4rem; } .navbar { align-items: stretch; display: -ms-flexbox; display: flex; -ms-flex-align: stretch; -ms-flex-pack: justify; -ms-flex-wrap: wrap; flex-wrap: wrap; justify-content: space-between; } .navbar .navbar-section { align-items: center; display: -ms-flexbox; display: flex; -ms-flex: 1 0 0; flex: 1 0 0; -ms-flex-align: center; } .navbar .navbar-section:not(:first-child):last-child { -ms-flex-pack: end; justify-content: flex-end; } .navbar .navbar-center { align-items: center; display: -ms-flexbox; display: flex; -ms-flex: 0 0 auto; flex: 0 0 auto; -ms-flex-align: center; } .navbar .navbar-brand { font-size: .9rem; text-decoration: none; } .accordion input:checked ~ .accordion-header > .icon:first-child, .accordion[open] .accordion-header > .icon:first-child { transform: rotate(90deg); } .accordion input:checked ~ .accordion-body, .accordion[open] .accordion-body { max-height: 50rem; } .accordion .accordion-header { display: block; padding: .2rem .4rem; } .accordion .accordion-header .icon { transition: transform .25s; } .accordion .accordion-body { margin-bottom: .4rem; max-height: 0; overflow: hidden; transition: max-height .25s; } summary.accordion-header::-webkit-details-marker { display: none; } .avatar { background: #5755d9; border-radius: 50%; color: rgba(255, 255, 255, .85); display: inline-block; font-size: .8rem; font-weight: 300; height: 1.6rem; line-height: 1.25; margin: 0; position: relative; vertical-align: middle; width: 1.6rem; } .avatar.avatar-xs { font-size: .4rem; height: .8rem; width: .8rem; } .avatar.avatar-sm { font-size: .6rem; height: 1.2rem; width: 1.2rem; } .avatar.avatar-lg { font-size: 1.2rem; height: 2.4rem; width: 2.4rem; } .avatar.avatar-xl { font-size: 1.6rem; height: 3.2rem; width: 3.2rem; } .avatar img { border-radius: 50%; height: 100%; position: relative; width: 100%; z-index: 1; } .avatar .avatar-icon, .avatar .avatar-presence { background: #fff; bottom: 14.64%; height: 50%; padding: .1rem; position: absolute; right: 14.64%; transform: translate(50%, 50%); width: 50%; z-index: 2; } .avatar .avatar-presence { background: #bcc3ce; border-radius: 50%; box-shadow: 0 0 0 .1rem #fff; height: .5em; width: .5em; } .avatar .avatar-presence.online { background: #32b643; } .avatar .avatar-presence.busy { background: #e85600; } .avatar .avatar-presence.away { background: #ffb700; } .avatar[data-initial]::before { color: currentColor; content: attr(data-initial); left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); z-index: 1; } .badge { position: relative; white-space: nowrap; } .badge[data-badge]::after, .badge:not([data-badge])::after { background: #5755d9; background-clip: padding-box; border-radius: .5rem; box-shadow: 0 0 0 .1rem #fff; color: #fff; content: attr(data-badge); display: inline-block; transform: translate(-.05rem, -.5rem); } .badge[data-badge]::after { font-size: .7rem; height: .9rem; line-height: 1; min-width: .9rem; padding: .1rem .2rem; text-align: center; white-space: nowrap; } .badge:not([data-badge])::after, .badge[data-badge=""]::after { height: 6px; min-width: 6px; padding: 0; width: 6px; } .badge.btn::after { position: absolute; right: 0; top: 0; transform: translate(50%, -50%); } .badge.avatar::after { position: absolute; right: 14.64%; top: 14.64%; transform: translate(50%, -50%); z-index: 100; } .breadcrumb { list-style: none; margin: .2rem 0; padding: .2rem 0; } .breadcrumb .breadcrumb-item { color: #66758c; display: inline-block; margin: 0; padding: .2rem 0; } .breadcrumb .breadcrumb-item:not(:last-child) { margin-right: .2rem; } .breadcrumb .breadcrumb-item:not(:last-child) a { color: #66758c; } .breadcrumb .breadcrumb-item:not(:first-child)::before { color: #66758c; content: "/"; padding-right: .4rem; } .bar { background: #eef0f3; border-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; height: .8rem; width: 100%; } .bar.bar-sm { height: .2rem; } .bar .bar-item { background: #5755d9; color: #fff; display: block; -ms-flex-negative: 0; flex-shrink: 0; font-size: .7rem; height: 100%; line-height: .8rem; position: relative; text-align: center; width: 0; } .bar .bar-item:first-child { border-bottom-left-radius: .1rem; border-top-left-radius: .1rem; } .bar .bar-item:last-child { border-bottom-right-radius: .1rem; border-top-right-radius: .1rem; -ms-flex-negative: 1; flex-shrink: 1; } .bar-slider { height: .1rem; margin: .4rem 0; position: relative; } .bar-slider .bar-item { left: 0; padding: 0; position: absolute; } .bar-slider .bar-item:not(:last-child):first-child { background: #eef0f3; z-index: 1; } .bar-slider .bar-slider-btn { background: #5755d9; border: 0; border-radius: 50%; height: .6rem; padding: 0; position: absolute; right: 0; top: 50%; transform: translate(50%, -50%); width: .6rem; } .bar-slider .bar-slider-btn:active { box-shadow: 0 0 0 .1rem #5755d9; } .card { background: #fff; border: .05rem solid #dadee4; border-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } .card .card-header, .card .card-body, .card .card-footer { padding: .8rem; padding-bottom: 0; } .card .card-header:last-child, .card .card-body:last-child, .card .card-footer:last-child { padding-bottom: .8rem; } .card .card-body { -ms-flex: 1 1 auto; flex: 1 1 auto; } .card .card-image { padding-top: .8rem; } .card .card-image:first-child { padding-top: 0; } .card .card-image:first-child img { border-top-left-radius: .1rem; border-top-right-radius: .1rem; } .card .card-image:last-child img { border-bottom-left-radius: .1rem; border-bottom-right-radius: .1rem; } .chip { align-items: center; background: #eef0f3; border-radius: 5rem; display: -ms-inline-flexbox; display: inline-flex; -ms-flex-align: center; font-size: 90%; height: 1.2rem; line-height: .8rem; margin: .1rem; max-width: 320px; overflow: hidden; padding: .2rem .4rem; text-decoration: none; text-overflow: ellipsis; vertical-align: middle; white-space: nowrap; } .chip.active { background: #5755d9; color: #fff; } .chip .avatar { margin-left: -.4rem; margin-right: .2rem; } .chip .btn-clear { border-radius: 50%; transform: scale(.75); } .dropdown { display: inline-block; position: relative; } .dropdown .menu { animation: slide-down .15s ease 1; display: none; left: 0; max-height: 50vh; overflow-y: auto; position: absolute; top: 100%; } .dropdown.dropdown-right .menu { left: auto; right: 0; } .dropdown.active .menu, .dropdown .dropdown-toggle:focus + .menu, .dropdown .menu:hover { display: block; } .dropdown .btn-group .dropdown-toggle:nth-last-child(2) { border-bottom-right-radius: .1rem; border-top-right-radius: .1rem; } .empty { background: #f7f8f9; border-radius: .1rem; color: #66758c; padding: 3.2rem 1.6rem; text-align: center; } .empty .empty-icon { margin-bottom: .8rem; } .empty .empty-title, .empty .empty-subtitle { margin: .4rem auto; } .empty .empty-action { margin-top: .8rem; } .menu { background: #fff; border-radius: .1rem; box-shadow: 0 .05rem .2rem rgba(48, 55, 66, .3); list-style: none; margin: 0; min-width: 180px; padding: .4rem; transform: translateY(.2rem); z-index: 300; } .menu.menu-nav { background: transparent; box-shadow: none; } .menu .menu-item { margin-top: 0; padding: 0 .4rem; position: relative; text-decoration: none; } .menu .menu-item > a { border-radius: .1rem; color: inherit; display: block; margin: 0 -.4rem; padding: .2rem .4rem; text-decoration: none; } .menu .menu-item > a:focus, .menu .menu-item > a:hover { background: #f1f1fc; color: #5755d9; } .menu .menu-item > a:active, .menu .menu-item > a.active { background: #f1f1fc; color: #5755d9; } .menu .menu-item .form-checkbox, .menu .menu-item .form-radio, .menu .menu-item .form-switch { margin: .1rem 0; } .menu .menu-item + .menu-item { margin-top: .2rem; } .menu .menu-badge { align-items: center; display: -ms-flexbox; display: flex; -ms-flex-align: center; height: 100%; position: absolute; right: 0; top: 0; } .menu .menu-badge .label { margin-right: .4rem; } .modal { align-items: center; bottom: 0; display: none; -ms-flex-align: center; -ms-flex-pack: center; justify-content: center; left: 0; opacity: 0; overflow: hidden; padding: .4rem; position: fixed; right: 0; top: 0; } .modal:target, .modal.active { display: -ms-flexbox; display: flex; opacity: 1; z-index: 400; } .modal:target .modal-overlay, .modal.active .modal-overlay { background: rgba(247, 248, 249, .75); bottom: 0; cursor: default; display: block; left: 0; position: absolute; right: 0; top: 0; } .modal:target .modal-container, .modal.active .modal-container { animation: slide-down .2s ease 1; z-index: 1; } .modal.modal-sm .modal-container { max-width: 320px; padding: 0 .4rem; } .modal.modal-lg .modal-overlay { background: #fff; } .modal.modal-lg .modal-container { box-shadow: none; max-width: 960px; } .modal-container { background: #fff; border-radius: .1rem; box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3); display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; max-height: 75vh; max-width: 640px; padding: 0 .8rem; width: 100%; } .modal-container.modal-fullheight { max-height: 100vh; } .modal-container .modal-header { color: #303742; padding: .8rem; } .modal-container .modal-body { overflow-y: auto; padding: .8rem; position: relative; } .modal-container .modal-footer { padding: .8rem; text-align: right; } .nav { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; list-style: none; margin: .2rem 0; } .nav .nav-item a { color: #66758c; padding: .2rem .4rem; text-decoration: none; } .nav .nav-item a:focus, .nav .nav-item a:hover { color: #5755d9; } .nav .nav-item.active > a { color: #505c6e; font-weight: bold; } .nav .nav-item.active > a:focus, .nav .nav-item.active > a:hover { color: #5755d9; } .nav .nav { margin-bottom: .4rem; margin-left: .8rem; } .pagination { display: -ms-flexbox; display: flex; list-style: none; margin: .2rem 0; padding: .2rem 0; } .pagination .page-item { margin: .2rem .05rem; } .pagination .page-item span { display: inline-block; padding: .2rem .2rem; } .pagination .page-item a { border-radius: .1rem; display: inline-block; padding: .2rem .4rem; text-decoration: none; } .pagination .page-item a:focus, .pagination .page-item a:hover { color: #5755d9; } .pagination .page-item.disabled a { cursor: default; opacity: .5; pointer-events: none; } .pagination .page-item.active a { background: #5755d9; color: #fff; } .pagination .page-item.page-prev, .pagination .page-item.page-next { -ms-flex: 1 0 50%; flex: 1 0 50%; } .pagination .page-item.page-next { text-align: right; } .pagination .page-item .page-item-title { margin: 0; } .pagination .page-item .page-item-subtitle { margin: 0; opacity: .5; } .panel { border: .05rem solid #dadee4; border-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } .panel .panel-header, .panel .panel-footer { -ms-flex: 0 0 auto; flex: 0 0 auto; padding: .8rem; } .panel .panel-nav { -ms-flex: 0 0 auto; flex: 0 0 auto; } .panel .panel-body { -ms-flex: 1 1 auto; flex: 1 1 auto; overflow-y: auto; padding: 0 .8rem; } .popover { display: inline-block; position: relative; } .popover .popover-container { left: 50%; opacity: 0; padding: .4rem; position: absolute; top: 0; transform: translate(-50%, -50%) scale(0); transition: transform .2s; width: 320px; z-index: 300; } .popover *:focus + .popover-container, .popover:hover .popover-container { display: block; opacity: 1; transform: translate(-50%, -100%) scale(1); } .popover.popover-right .popover-container { left: 100%; top: 50%; } .popover.popover-right *:focus + .popover-container, .popover.popover-right:hover .popover-container { transform: translate(0, -50%) scale(1); } .popover.popover-bottom .popover-container { left: 50%; top: 100%; } .popover.popover-bottom *:focus + .popover-container, .popover.popover-bottom:hover .popover-container { transform: translate(-50%, 0) scale(1); } .popover.popover-left .popover-container { left: 0; top: 50%; } .popover.popover-left *:focus + .popover-container, .popover.popover-left:hover .popover-container { transform: translate(-100%, -50%) scale(1); } .popover .card { border: 0; box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3); } .step { display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; list-style: none; margin: .2rem 0; width: 100%; } .step .step-item { -ms-flex: 1 1 0; flex: 1 1 0; margin-top: 0; min-height: 1rem; position: relative; text-align: center; } .step .step-item:not(:first-child)::before { background: #5755d9; content: ""; height: 2px; left: -50%; position: absolute; top: 9px; width: 100%; } .step .step-item a { color: #5755d9; display: inline-block; padding: 20px 10px 0; text-decoration: none; } .step .step-item a::before { background: #5755d9; border: .1rem solid #fff; border-radius: 50%; content: ""; display: block; height: .6rem; left: 50%; position: absolute; top: .2rem; transform: translateX(-50%); width: .6rem; z-index: 1; } .step .step-item.active a::before { background: #fff; border: .1rem solid #5755d9; } .step .step-item.active ~ .step-item::before { background: #dadee4; } .step .step-item.active ~ .step-item a { color: #bcc3ce; } .step .step-item.active ~ .step-item a::before { background: #dadee4; } .tab { align-items: center; border-bottom: .05rem solid #dadee4; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-wrap: wrap; flex-wrap: wrap; list-style: none; margin: .2rem 0 .15rem 0; } .tab .tab-item { margin-top: 0; } .tab .tab-item a { border-bottom: .1rem solid transparent; color: inherit; display: block; margin: 0 .4rem 0 0; padding: .4rem .2rem .3rem .2rem; text-decoration: none; } .tab .tab-item a:focus, .tab .tab-item a:hover { color: #5755d9; } .tab .tab-item.active a, .tab .tab-item a.active { border-bottom-color: #5755d9; color: #5755d9; } .tab .tab-item.tab-action { -ms-flex: 1 0 auto; flex: 1 0 auto; text-align: right; } .tab .tab-item .btn-clear { margin-top: -.2rem; } .tab.tab-block .tab-item { -ms-flex: 1 0 0; flex: 1 0 0; text-align: center; } .tab.tab-block .tab-item a { margin: 0; } .tab.tab-block .tab-item .badge[data-badge]::after { position: absolute; right: .1rem; top: .1rem; transform: translate(0, 0); } .tab:not(.tab-block) .badge { padding-right: 0; } .tile { align-content: space-between; align-items: flex-start; display: -ms-flexbox; display: flex; -ms-flex-align: start; -ms-flex-line-pack: justify; } .tile .tile-icon, .tile .tile-action { -ms-flex: 0 0 auto; flex: 0 0 auto; } .tile .tile-content { -ms-flex: 1 1 auto; flex: 1 1 auto; } .tile .tile-content:not(:first-child) { padding-left: .4rem; } .tile .tile-content:not(:last-child) { padding-right: .4rem; } .tile .tile-title, .tile .tile-subtitle { line-height: 1.2rem; } .tile.tile-centered { align-items: center; -ms-flex-align: center; } .tile.tile-centered .tile-content { overflow: hidden; } .tile.tile-centered .tile-title, .tile.tile-centered .tile-subtitle { margin-bottom: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .toast { background: rgba(48, 55, 66, .95); border: .05rem solid #303742; border-color: #303742; border-radius: .1rem; color: #fff; display: block; padding: .4rem; width: 100%; } .toast.toast-primary { background: rgba(87, 85, 217, .95); border-color: #5755d9; } .toast.toast-success { background: rgba(50, 182, 67, .95); border-color: #32b643; } .toast.toast-warning { background: rgba(255, 183, 0, .95); border-color: #ffb700; } .toast.toast-error { background: rgba(232, 86, 0, .95); border-color: #e85600; } .toast a { color: #fff; text-decoration: underline; } .toast a:focus, .toast a:hover, .toast a:active, .toast a.active { opacity: .75; } .toast .btn-clear { margin: .1rem; } .toast p:last-child { margin-bottom: 0; } .tooltip { position: relative; } .tooltip::after { background: rgba(48, 55, 66, .95); border-radius: .1rem; bottom: 100%; color: #fff; content: attr(data-tooltip); display: block; font-size: .7rem; left: 50%; max-width: 320px; opacity: 0; overflow: hidden; padding: .2rem .4rem; pointer-events: none; position: absolute; text-overflow: ellipsis; transform: translate(-50%, .4rem); transition: opacity .2s, transform .2s; white-space: pre; z-index: 300; } .tooltip:focus::after, .tooltip:hover::after { opacity: 1; transform: translate(-50%, -.2rem); } .tooltip[disabled], .tooltip.disabled { pointer-events: auto; } .tooltip.tooltip-right::after { bottom: 50%; left: 100%; transform: translate(-.2rem, 50%); } .tooltip.tooltip-right:focus::after, .tooltip.tooltip-right:hover::after { transform: translate(.2rem, 50%); } .tooltip.tooltip-bottom::after { bottom: auto; top: 100%; transform: translate(-50%, -.4rem); } .tooltip.tooltip-bottom:focus::after, .tooltip.tooltip-bottom:hover::after { transform: translate(-50%, .2rem); } .tooltip.tooltip-left::after { bottom: 50%; left: auto; right: 100%; transform: translate(.4rem, 50%); } .tooltip.tooltip-left:focus::after, .tooltip.tooltip-left:hover::after { transform: translate(-.2rem, 50%); } @keyframes loading { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @keyframes slide-down { 0% { opacity: 0; transform: translateY(-1.6rem); } 100% { opacity: 1; transform: translateY(0); } } .text-primary { color: #5755d9 !important; } a.text-primary:focus, a.text-primary:hover { color: #4240d4; } a.text-primary:visited { color: #6c6ade; } .text-secondary { color: #e5e5f9 !important; } a.text-secondary:focus, a.text-secondary:hover { color: #d1d0f4; } a.text-secondary:visited { color: #fafafe; } .text-gray { color: #bcc3ce !important; } a.text-gray:focus, a.text-gray:hover { color: #adb6c4; } a.text-gray:visited { color: #cbd0d9; } .text-light { color: #fff !important; } a.text-light:focus, a.text-light:hover { color: #f2f2f2; } a.text-light:visited { color: white; } .text-dark { color: #3b4351 !important; } a.text-dark:focus, a.text-dark:hover { color: #303742; } a.text-dark:visited { color: #455060; } .text-success { color: #32b643 !important; } a.text-success:focus, a.text-success:hover { color: #2da23c; } a.text-success:visited { color: #39c94b; } .text-warning { color: #ffb700 !important; } a.text-warning:focus, a.text-warning:hover { color: #e6a500; } a.text-warning:visited { color: #ffbe1a; } .text-error { color: #e85600 !important; } a.text-error:focus, a.text-error:hover { color: #cf4d00; } a.text-error:visited { color: #ff6003; } .bg-primary { background: #5755d9 !important; color: #fff; } .bg-secondary { background: #f1f1fc !important; } .bg-dark { background: #303742 !important; color: #fff; } .bg-gray { background: #f7f8f9 !important; } .bg-success { background: #32b643 !important; color: #fff; } .bg-warning { background: #ffb700 !important; color: #fff; } .bg-error { background: #e85600 !important; color: #fff; } .c-hand { cursor: pointer; } .c-move { cursor: move; } .c-zoom-in { cursor: zoom-in; } .c-zoom-out { cursor: zoom-out; } .c-not-allowed { cursor: not-allowed; } .c-auto { cursor: auto; } .d-block { display: block; } .d-inline { display: inline; } .d-inline-block { display: inline-block; } .d-flex { display: -ms-flexbox; display: flex; } .d-inline-flex { display: -ms-inline-flexbox; display: inline-flex; } .d-none, .d-hide { display: none !important; } .d-visible { visibility: visible; } .d-invisible { visibility: hidden; } .text-hide { background: transparent; border: 0; color: transparent; font-size: 0; line-height: 0; text-shadow: none; } .text-assistive { border: 0; clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } .divider, .divider-vert { display: block; position: relative; } .divider[data-content]::after, .divider-vert[data-content]::after { background: #fff; color: #bcc3ce; content: attr(data-content); display: inline-block; font-size: .7rem; padding: 0 .4rem; transform: translateY(-.65rem); } .divider { border-top: .05rem solid #f1f3f5; height: .05rem; margin: .4rem 0; } .divider[data-content] { margin: .8rem 0; } .divider-vert { display: block; padding: .8rem; } .divider-vert::before { border-left: .05rem solid #dadee4; bottom: .4rem; content: ""; display: block; left: 50%; position: absolute; top: .4rem; transform: translateX(-50%); } .divider-vert[data-content]::after { left: 50%; padding: .2rem 0; position: absolute; top: 50%; transform: translate(-50%, -50%); } .loading { color: transparent !important; min-height: .8rem; pointer-events: none; position: relative; } .loading::after { animation: loading 500ms infinite linear; background: transparent; border: .1rem solid #5755d9; border-radius: 50%; border-right-color: transparent; border-top-color: transparent; content: ""; display: block; height: .8rem; left: 50%; margin-left: -.4rem; margin-top: -.4rem; opacity: 1; padding: 0; position: absolute; top: 50%; width: .8rem; z-index: 1; } .loading.loading-lg { min-height: 2rem; } .loading.loading-lg::after { height: 1.6rem; margin-left: -.8rem; margin-top: -.8rem; width: 1.6rem; } .clearfix::after { clear: both; content: ""; display: table; } .float-left { float: left !important; } .float-right { float: right !important; } .p-relative { position: relative !important; } .p-absolute { position: absolute !important; } .p-fixed { position: fixed !important; } .p-sticky { position: -webkit-sticky !important; position: sticky !important; } .p-centered { display: block; float: none; margin-left: auto; margin-right: auto; } .flex-centered { align-items: center; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-pack: center; justify-content: center; } .m-0 { margin: 0 !important; } .mb-0 { margin-bottom: 0 !important; } .ml-0 { margin-left: 0 !important; } .mr-0 { margin-right: 0 !important; } .mt-0 { margin-top: 0 !important; } .mx-0 { margin-left: 0 !important; margin-right: 0 !important; } .my-0 { margin-bottom: 0 !important; margin-top: 0 !important; } .m-1 { margin: .2rem !important; } .mb-1 { margin-bottom: .2rem !important; } .ml-1 { margin-left: .2rem !important; } .mr-1 { margin-right: .2rem !important; } .mt-1 { margin-top: .2rem !important; } .mx-1 { margin-left: .2rem !important; margin-right: .2rem !important; } .my-1 { margin-bottom: .2rem !important; margin-top: .2rem !important; } .m-2 { margin: .4rem !important; } .mb-2 { margin-bottom: .4rem !important; } .ml-2 { margin-left: .4rem !important; } .mr-2 { margin-right: .4rem !important; } .mt-2 { margin-top: .4rem !important; } .mx-2 { margin-left: .4rem !important; margin-right: .4rem !important; } .my-2 { margin-bottom: .4rem !important; margin-top: .4rem !important; } .p-0 { padding: 0 !important; } .pb-0 { padding-bottom: 0 !important; } .pl-0 { padding-left: 0 !important; } .pr-0 { padding-right: 0 !important; } .pt-0 { padding-top: 0 !important; } .px-0 { padding-left: 0 !important; padding-right: 0 !important; } .py-0 { padding-bottom: 0 !important; padding-top: 0 !important; } .p-1 { padding: .2rem !important; } .pb-1 { padding-bottom: .2rem !important; } .pl-1 { padding-left: .2rem !important; } .pr-1 { padding-right: .2rem !important; } .pt-1 { padding-top: .2rem !important; } .px-1 { padding-left: .2rem !important; padding-right: .2rem !important; } .py-1 { padding-bottom: .2rem !important; padding-top: .2rem !important; } .p-2 { padding: .4rem !important; } .pb-2 { padding-bottom: .4rem !important; } .pl-2 { padding-left: .4rem !important; } .pr-2 { padding-right: .4rem !important; } .pt-2 { padding-top: .4rem !important; } .px-2 { padding-left: .4rem !important; padding-right: .4rem !important; } .py-2 { padding-bottom: .4rem !important; padding-top: .4rem !important; } .s-rounded { border-radius: .1rem; } .s-circle { border-radius: 50%; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .text-justify { text-align: justify; } .text-lowercase { text-transform: lowercase; } .text-uppercase { text-transform: uppercase; } .text-capitalize { text-transform: capitalize; } .text-normal { font-weight: normal; } .text-bold { font-weight: bold; } .text-italic { font-style: italic; } .text-large { font-size: 1.2em; } .text-small { font-size: .9em; } .text-tiny { font-size: .8em; } .text-muted { opacity: .8; } .text-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .text-clip { overflow: hidden; text-overflow: clip; white-space: nowrap; } .text-break { -webkit-hyphens: auto; -ms-hyphens: auto; hyphens: auto; word-break: break-word; word-wrap: break-word; } ================================================ FILE: docs/components/accordions.html ================================================ Accordions - Components - Spectre.css CSS Framework

Accordions

Accordions are used to toggle sections of content.

<!-- standard Accordions example -->
<div class="accordion">
  <input type="checkbox" id="accordion-1" name="accordion-checkbox" hidden>
  <label class="accordion-header" for="accordion-1">
    <i class="icon icon-arrow-right mr-1"></i>
    Title
  </label>
  <div class="accordion-body">
    <!-- Accordions content -->
  </div>
</div>

<!-- mutually exclusive Accordions example (with same input names) -->
<div class="accordion">
  <input type="radio" id="accordion-1" name="accordion-radio" hidden>
  <label class="accordion-header" for="accordion-1">
    Title
  </label>
  <div class="accordion-body">
    <!-- Accordions content -->
  </div>
</div>

Alternatively, you can use details and summary instead of input radio or checkbox trick. Add the open attribute to details to expand it. Microsoft Edge support is under consideration.

<!-- details and summary Accordions example -->
<details class="accordion" open>
  <summary class="accordion-header">
    <i class="icon icon-arrow-right mr-1"></i>
    Title
  </summary>
  <div class="accordion-body">
    <!-- Accordions content -->
  </div>
</details>
================================================ FILE: docs/components/avatars.html ================================================ Avatars - Components - Spectre.css CSS Framework

Avatars

Avatars are user profile pictures.

Avatar XL
Avatar LG
Avatar
Avatar SM
Avatar XS

Add the avatar class to <img> element. There are 4 additional sizes available, including avatar-xl(64px), avatar-lg(48px), avatar-sm(24px), and avatar-xs(16px). By default, the avatar size is 32px.

For users who don't have profile pictures, you may use their initials for avatars. Add the avatar class and avatar size class to <div> element. The data-initial attribute is the name appear inside the avatar.

<!-- Basic avatar examples -->
<figure class="avatar avatar-xl">
  <img src="img/avatar-1.png" alt="...">
</figure>

<figure class="avatar avatar-xl" data-initial="YZ" style="background-color: #5755d9;"></figure>

<!-- Show initals when avatar image is unavailable or not fully loaded -->
<figure class="avatar avatar-xl" data-initial="YZ" style="background-color: #5755d9;">
  <img src="img/avatar-1.png" alt="...">
</figure>

Avatar icons

AvatarAvatar
AvatarAvatar
AvatarAvatar
AvatarAvatar
AvatarAvatar
<figure class="avatar avatar-xl">
  <img src="img/avatar-1.png" alt="...">
  <img src="img/avatar-5.png" class="avatar-icon" alt="...">
</figure>

Avatar presence

Avatars support presence indicators. You can add an <i> element with the avatar-presence class, and add online, busy or away class for different status colors. The default is gray which means offline.

<figure class="avatar avatar-xl">
  <img src="img/avatar-1.png" alt="...">
  <i class="avatar-presence online"></i>
</figure>
================================================ FILE: docs/components/badges.html ================================================ Badges - Components - Spectre.css CSS Framework

Badges

Badges are often used as unread number indicators.

Notifications
Notifications
Notifications
Notifications

Add the badge class to non self closing elements. And add the data-badge attribute to define the content of a badge. The badge will appear in the top-right direction of the element.

If there is no data-badge or the attribute is not specified, the badge will appear as a dot.

YZ
YZ
YZ

Badges support button and avatars elements as well.

<span class="badge">
  Notifications
</span>

<span class="badge" data-badge="8">
  Notifications
</span>

<button class="btn badge" data-badge="8">
  Button
</button>

<figure class="avatar badge" data-badge="8" data-initial="YZ">
  <img src="img/avatar-3.png" alt="YZ">
</figure>
================================================ FILE: docs/components/bars.html ================================================ Bars - Components - Spectre.css CSS Framework

Bars

Bars represent the progress of a task or the value within the known range. Bars are custom components for displaying HTML5 <progress>, <meter> and input range elements.

25%
15%
10%
15%

Add a container element with the bar class. And add child elements with the bar-item class. The width percentage value is needed for every bar-item.

There is the bar-sm class for thinner Bars. Also, you could use Tooltips for any bar-item.

<!-- normal bars -->
<div class="bar bar-sm">
  <div class="bar-item" role="progressbar" style="width:25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
</div>

<!-- multi-bars -->
<div class="bar">
  <div class="bar-item tooltip" data-tooltip="25%" style="width:25%;">25%</div>
  <div class="bar-item" style="width:15%;background:#818bd5;">15%</div>
</div>

Slider bars

You can add the bar-slider class to the Bars container. And add child elements with the bar-item class and bar-slider-btn inside bar-item. You need to set the bar-item width manually to have the slider point.

If there are two bar-item divs in one bar-slider, you will have a range slider.

<!-- normal slider -->
<div class="bar bar-slider">
  <div class="bar-item" role="progressbar" style="width:25%;">
    <button class="bar-slider-btn btn" role="slider"></button>
  </div>
</div>

<!-- range slider -->
<div class="bar bar-slider">
  <div class="bar-item" role="progressbar" style="width:15%;">
    <button class="bar-slider-btn btn" role="slider"></button>
  </div>
  <div class="bar-item" role="progressbar" style="width:65%;">
    <button class="bar-slider-btn btn" role="slider"></button>
  </div>
</div>
================================================ FILE: docs/components/breadcrumbs.html ================================================ Breadcrumbs - Components - Spectre.css CSS Framework
================================================ FILE: docs/components/cards.html ================================================ Cards - Components - Spectre.css CSS Framework

Cards

Cards are flexible content containers.

OS X El Capitan
Microsoft
Software and hardware
Empower every person and every organization on the planet to achieve more.
Apple
Hardware and software
OS X Yosemite
To make a contribution to the world by making tools for the mind that advance humankind.
macOS Sierra
Google I/O
Software and hardware
An immersive, three-day experience focused on exploring the next generation of technology, mobile and beyond.
OS X El Capitan
Surface Studio. Turn your desk into a Studio. Surface Studio is designed for the creative process.
Apple
Hardware and software
To make a contribution to the world by making tools for the mind that advance humankind.
macOS Sierra
Google
Software and hardware
Organize the world’s information and make it universally accessible and useful.
OS X Yosemite

Add a container element with the card class. And add child elements with the card-image, card-header, card-body and/or card-footer classes. The card-image can be placed in any position.

<div class="card">
  <div class="card-image">
    <img src="img/osx-el-capitan.jpg" class="img-responsive">
  </div>
  <div class="card-header">
    <div class="card-title h5">...</div>
    <div class="card-subtitle text-gray">...</div>
  </div>
  <div class="card-body">
    ...
  </div>
  <div class="card-footer">
    <button class="btn btn-primary">...</button>
  </div>
</div>
================================================ FILE: docs/components/chips.html ================================================ Chips - Components - Spectre.css CSS Framework

Chips

Chips are complex entities in small blocks.

CrimeDramaBiographyMystery
Tony Stark
Thor OdinsonThor Odinson
Steve RogersSteve Rogers

Add a container element with the chip class. And add child text element, buttons or avatars with the avatar class.

<span class="chip">Crime</span>

<span class="chip">
  Biography
  <a href="#" class="btn btn-clear" aria-label="Close" role="button"></a>
</span>

<div class="chip">
  <img src="img/avatar-1.png" class="avatar avatar-sm">
  Yan Zhu
  <a href="#" class="btn btn-clear" aria-label="Close" role="button"></a>
</div>
================================================ FILE: docs/components/empty.html ================================================ Empty states - Components - Spectre.css CSS Framework

Empty states

Empty states/blank slates are commonly used as placeholders for first time use, empty data and error screens.

You have no new messages

Click the button to start a conversation

You've successfully signed up

Click the button to invite your friends

You are not following anyone

Start to meet new friends

An empty state component can include icons, messages (title and subtitle messages) and action buttons or any combination of those elements. Add empty-icon, empty-title, empty-subtitle or empty-action to the elements. HTML structure is exampled below.

<div class="empty">
  <div class="empty-icon">
    <i class="icon icon-people"></i>
  </div>
  <p class="empty-title h5">You have no new messages</p>
  <p class="empty-subtitle">Click the button to start a conversation.</p>
  <div class="empty-action">
    <button class="btn btn-primary">Send a message</button>
  </div>
</div>
================================================ FILE: docs/components/menu.html ================================================ Menu - Components - Spectre.css CSS Framework
================================================ FILE: docs/components/modals.html ================================================ Modals - Components - Spectre.css CSS Framework

Modals

Modals are flexible dialog prompts.

Open Modal

Add a container element with the modal class. And add a real container modal-container and overlay modal-overlay inside it. You can add child elements with the modal-header, modal-body and modal-footer - any or all of them.

Spectre.css does not include JavaScript code, you will need to implement your JS to interact with modals. To make a modal appear, add the active class to the modal container.

<div class="modal active" id="modal-id">
  <a href="#close" class="modal-overlay" aria-label="Close"></a>
  <div class="modal-container">
    <div class="modal-header">
      <a href="#close" class="btn btn-clear float-right" aria-label="Close"></a>
      <div class="modal-title h5">Modal title</div>
    </div>
    <div class="modal-body">
      <div class="content">
        <!-- content here -->
      </div>
    </div>
    <div class="modal-footer">
      ...
    </div>
  </div>
</div>

Modal sizes

Open small size Modal

Use the modal-sm class for a smaller modal dialog. The container max width is 320px.

Open large size Modal

Use the modal-lg class for a full size modal. The container max width is 960px.

<div class="modal modal-sm">
  <a href="#close" class="modal-overlay" aria-label="Close"></a>
  <div class="modal-container">
    <!-- modal structure here -->
  </div>
</div>
================================================ FILE: docs/components/nav.html ================================================ Nav - Components - Spectre.css CSS Framework
================================================ FILE: docs/components/pagination.html ================================================ Pagination - Components - Spectre.css CSS Framework
================================================ FILE: docs/components/panels.html ================================================ Panels - Components - Spectre.css CSS Framework

Panels

Panels are flexible view container with auto-expand content section.

Avatar
Bruce Banner
THE HULK
E-mail
bruce.banner@hulk.com
Skype
bruce.banner
Location
Dayton, Ohio
Comments
Avatar

Thor Odinson

Earth's Mightiest Heroes joined forces to take on threats that were too big for any one hero to tackle...

Avatar

Bruce Banner

The Strategic Homeland Intervention, Enforcement, and Logistics Division...

Tony Stark

Earth's Mightiest Heroes joined forces to take on threats that were too big for any one hero to tackle...

Avatar

Steve Rogers

The Strategic Homeland Intervention, Enforcement, and Logistics Division...

Avatar

Natasha Romanoff

Earth's Mightiest Heroes joined forces to take on threats that were too big for any one hero to tackle...

Add a container element with the panel class. And add child elements with the panel-header, panel-nav, panel-body and/or panel-footer classes. The panel-body can be auto expanded and vertically scrollable.

<div class="panel">
  <div class="panel-header">
    <div class="panel-title">Comments</div>
  </div>
  <div class="panel-nav">
    <!-- navigation components: tabs, breadcrumbs or pagination -->
  </div>
  <div class="panel-body">
    <!-- contents -->
  </div>
  <div class="panel-footer">
    <!-- buttons or inputs -->
  </div>
</div>
================================================ FILE: docs/components/popovers.html ================================================ Popovers - Components - Spectre.css CSS Framework

Popovers

Popovers are small overlay content containers. Popovers component is built entirely in CSS.

top popover
Apple
Software and hardware
To make a contribution to the world by making tools for the mind that advance humankind.
right popover
Apple
Software and hardware
To make a contribution to the world by making tools for the mind that advance humankind.
bottom popover
Apple
Software and hardware
To make a contribution to the world by making tools for the mind that advance humankind.
left popover
Apple
Software and hardware
To make a contribution to the world by making tools for the mind that advance humankind.

Wrap an element by a container with the popover class. And add a container with the popover-container next to the element. You can use Cards component inside the popover-container.

Also, you can add the popover-right, popover-bottom or popover-left class to define the position. By default, the popovers appear above the element.

<div class="popover popover-right">
  <button class="btn btn-primary">right popover</button>
  <div class="popover-container">
    <div class="card">
      <div class="card-header">
        ...
      </div>
      <div class="card-body">
        ...
      </div>
      <div class="card-footer">
        ...
      </div>
    </div>
  </div>
</div>
================================================ FILE: docs/components/steps.html ================================================ Steps - Components - Spectre.css CSS Framework

Steps

Steps are progress indicators of a sequence of task steps.

Add a container element with the step class. And add child elements with the step-item class. The step-item with the active class will be highlighted and indicate the current state of progress.

<ul class="step">
  <li class="step-item">
    <a href="#" class="tooltip" data-tooltip="Step 1">Step 1</a>
  </li>
  <li class="step-item active">
    <a href="#" class="tooltip" data-tooltip="Step 2">Step 2</a>
  </li>
  <li class="step-item">
    <a href="#" class="tooltip" data-tooltip="Step 3">Step 3</a>
  </li>
  <li class="step-item">
    <a href="#" class="tooltip" data-tooltip="Step 4">Step 4</a>
  </li>
</ul>
================================================ FILE: docs/components/tabs.html ================================================ Tabs - Components - Spectre.css CSS Framework

Tabs

Tabs enable quick switch between different views.

Add a container element with the tab class. And add child elements with the tab-item class. You can add the tab-block class for a full-width tab. The tab-item or its child <a> with the active class will be highlighted.

<ul class="tab tab-block">
  <li class="tab-item active">
    <a href="#">Music</a>
  </li>
  <li class="tab-item">
    <a href="#" class="active">Playlists</a>
  </li>
  <li class="tab-item">
    <a href="#">Radio</a>
  </li>
  <li class="tab-item">
    <a href="#">Connect</a>
  </li>
</ul>

If you need badges on tabs, you can add badge class to the element within tab-item.

<ul class="tab tab-block">
  <li class="tab-item active">
    <a href="#" class="badge" data-badge="9">
      Music
    </a>
  </li>
</ul>

You could add a search box or buttons inside a tab. Add the tab-action class to the tab-item.

<ul class="tab">
  <li class="tab-item active">
    <a href="#">
      Music
    </a>
  </li>
  <li class="tab-item tab-action">
    <div class="input-group input-inline">
      <input class="form-input input-sm" type="text">
      <button class="btn btn-primary btn-sm input-group-btn">Search</button>
    </div>
  </li>
</ul>
================================================ FILE: docs/components/tiles.html ================================================ Tiles - Components - Spectre.css CSS Framework

Tiles

Tiles are repeatable or embeddable information blocks.

Avatar

The Avengers

Earth's Mightiest Heroes joined forces to take on threats that were too big for any one hero to tackle...

Avatar

The S.H.I.E.L.D.

The Strategic Homeland Intervention, Enforcement, and Logistics Division...

Add a container with the tile class. And add child elements with the tile-icon, tile-content or/and tile-action classes. The tile-icon and tile-action are optional.

There are tile-title and tile-subtitle classes for title and subtitle text styles.

<div class="tile">
  <div class="tile-icon">
    <div class="example-tile-icon">
      <i class="icon icon-file centered"></i>
    </div>
  </div>
  <div class="tile-content">
    <p class="tile-title">The Avengers</p>
    <p class="tile-subtitle">Earth's Mightiest Heroes joined forces to take on threats that were too big for any one hero to tackle...</p>
  </div>
  <div class="tile-action">
    <button class="btn btn-primary">Join</button>
  </div>
</div>

Compact tiles

There is compact version of Tiles component, which is often used as contact and file info blocks.

Add the tile-centered class to the container tile. The tile-icon, tile-content and tile-action will be vertically centered.

spectre-docs.pdf
14MB · Public · 1 Jan, 2017
<div class="tile tile-centered">
  <div class="tile-icon">
    <div class="example-tile-icon">
      <i class="icon icon-file centered"></i>
    </div>
  </div>
  <div class="tile-content">
    <div class="tile-title">spectre-docs.pdf</div>
    <small class="tile-subtitle text-gray">14MB · Public · 1 Jan, 2017</small>
  </div>
  <div class="tile-action">
    <button class="btn btn-link">
      <i class="icon icon-more-vert"></i>
    </button>
  </div>
</div>
================================================ FILE: docs/components/toasts.html ================================================ Toasts - Components - Spectre.css CSS Framework

Toasts

Toasts are used to show alert or information to users.

Toast Title

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Add a container element with the toast class. You can add any text within the container, and even icons. You may also add a close button with the btn-clear class if you need.

<div class="toast">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</div>

Toast success

Toast warning

Toast error

And you can add the toast-primary, toast-success, toast-warning or toast-error class for additional toast colors.

<div class="toast toast-primary">
  <button class="btn btn-clear float-right"></button>
  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</div>
================================================ FILE: docs/components/tooltips.html ================================================ Tooltips - Components - Spectre.css CSS Framework

Tooltips

Tooltips provide context information labels that appear on hover and focus. Tooltips component is built entirely in CSS.

Add the tooltip class and the data-tooltip attribute, which contains the tooltip content, to non self closing elements.

And add the tooltip-right, tooltip-bottom or tooltip-left class to define the position of a tooltip. By default, the tooltip appears above the element.

<button class="btn tooltip" data-tooltip="Lorem ipsum dolor sit amet">top tooltip</button>
<button class="btn tooltip tooltip-right" data-tooltip="Lorem ipsum dolor sit amet">right tooltip</button>

Multiline tooltips

Add the \n string between any text for multiline tooltips.

<button class="btn tooltip" data-tooltip="First Line Tooltip Text \n Second Line Tooltip Text">multiline tooltip</button>
================================================ FILE: docs/components.html ================================================ Components - Spectre.css CSS Framework

Components

Spectre.css is a lightweight, responsive and modern CSS framework for faster and extensible development.

Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.

Accordions
Used to toggle sections of content
Avatars
User profile pictures
Badges
Used as unread number indicators
Bars
Progress of a task or the value within the known range
Breadcrumbs
Navigational hierarchies to indicate current location
Cards
Flexible content containers
Chips
Complex entities in small blocks
Empty states
Navigational hierarchies to indicate current location
Menu
Vertical list of links or buttons for actions and navigation
Modals
Flexible dialog prompts
Nav
Vertical list of links
Pagination
Vertical list of links or buttons for actions and navigation
Panels
Flexible view container with auto-expand content section
Popovers
Small overlay content containers
Steps
Progress indicators of a sequence of task steps
Tabs
Switch between different views
Tiles
Repeatable or embeddable information blocks
Toasts
Progress indicators of a sequence of task steps
Tooltips
Context information labels that appear on hover and focus
================================================ FILE: docs/dist/docs.css ================================================ /*! Spectre.css Docs | MIT License | github.com/picturepan2/spectre */ .version::after { content: "0.5.9"; } .off-canvas .off-canvas-toggle { font-size: 1rem; left: 1.5rem; position: fixed; top: 1rem; } .off-canvas .off-canvas-sidebar { width: 12rem; } .off-canvas .off-canvas-content { padding: 0; } .docs-container { min-height: 100vh; } .docs-navbar { height: 3.8rem; position: fixed; right: 0; top: 0; z-index: 100; } .docs-navbar .btns { position: absolute; right: 1.5rem; top: 1rem; width: 14rem; } .docs-navbar .algolia-autocomplete { -ms-flex: 1 1 auto; flex: 1 1 auto; } .docs-sidebar .docs-nav { bottom: 1.5rem; -webkit-overflow-scrolling: touch; overflow-y: auto; padding: .5rem 1.5rem; position: fixed; top: 3.5rem; width: 12rem; } .docs-sidebar .accordion { margin-bottom: .75rem; } .docs-sidebar .accordion input ~ .accordion-header { color: #455060; font-size: .65rem; font-weight: 600; text-transform: uppercase; } .docs-sidebar .accordion input:checked ~ .accordion-header { color: #505c6e; } .docs-sidebar .accordion .menu .menu-item { font-size: .7rem; padding-left: 1rem; } .docs-sidebar .accordion .menu .menu-item > a { background: transparent; color: #66758c; display: inline-block; } .docs-content { -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 0 4rem; width: calc(100vw - 12rem); } .docs-content > .container { margin-left: 0; max-width: 800px; padding-bottom: 1.5rem; } .docs-content .anchor { color: #6362dc; display: none; margin-left: .2rem; padding: 0 .2rem; } .docs-content .anchor:focus, .docs-content .anchor:hover { display: inline; text-decoration: none; } .docs-content .s-title, .docs-content .s-subtitle { line-height: 1.8rem; margin-bottom: 0; padding-bottom: 1rem; padding-top: 1rem; position: static; } @supports ((position: -webkit-sticky) or (position: sticky)) { .docs-content .s-title, .docs-content .s-subtitle { position: -webkit-sticky; position: sticky; top: 0; z-index: 99; } .docs-content .s-title::before, .docs-content .s-subtitle::before { background: #fff; bottom: 0; content: ""; display: block; left: -10px; position: absolute; right: -10px; top: -5px; z-index: -1; } } .docs-content .s-title:hover .anchor, .docs-content .s-subtitle:hover .anchor { display: inline; } .docs-content .s-title + .docs-note, .docs-content .s-subtitle + .docs-note { margin-top: .4rem; } .docs-content .docs-demo { padding-bottom: 1rem; padding-top: 1rem; } .docs-content .docs-demo .card { border: 0; box-shadow: 0 .25rem 1rem rgba(48, 55, 66, .15); height: 100%; } .docs-content .column { padding: .4rem; } .docs-content .docs-block { border-radius: .1rem; padding: .4rem; } .docs-content .docs-block.bg-gray { background: #eef0f3; } .docs-content .docs-shape { height: 4.8rem; line-height: 1.2rem; padding: 1.8rem 0; width: 4.8rem; } .docs-content .docs-dot { border-radius: 50%; display: inline-block; height: .5rem; padding: 0; width: .5rem; } .docs-content .docs-table th, .docs-content .docs-table td { padding: .75rem .25rem; } .docs-content .docs-color { border-radius: .1rem; margin: .25rem 0; padding: 5rem .5rem .5rem; } .docs-content .docs-color .color-subtitle { font-size: .7rem; opacity: .75; } .docs-content .code .hljs-tag { color: #505c6e; } .docs-content .code .hljs-comment { color: #bcc3ce; } .docs-content .code .hljs-title, .docs-content .code .hljs-class, .docs-content .code .hljs-string, .docs-content .code .hljs-number { color: #5755d9; } .docs-content .code .hljs-name, .docs-content .code .hljs-attribute, .docs-content .code .hljs-variable, .docs-content .code .hljs-keyword, .docs-content .code .hljs-built_in { color: #d73e48; } .docs-content .code .hljs-value, .docs-content .code .hljs-hexcolor { color: #505c6e; } .docs-content .c-select-all { -webkit-user-select: all; -moz-user-select: all; -ms-user-select: all; user-select: all; } .docs-content .panel { height: 75vh; } .docs-content .panel .tile { margin: .75rem 0; } .docs-content .parallax { margin: 2rem auto; } .docs-content .form-autocomplete .menu { position: static; } .docs-content .example-tile-icon { align-content: space-around; align-items: center; background: #5755d9; border-radius: .1rem; color: #fff; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-line-pack: distribute; font-size: 1.2rem; height: 2rem; width: 2rem; } .docs-content .example-tile-icon .icon { margin: auto; } .docs-content .comparison-slider { height: auto; padding-bottom: 56.2222%; } .docs-content .comparison-slider .filter-grayscale { filter: grayscale(75%); } .docs-content .off-canvas { position: relative; } .docs-content .off-canvas .off-canvas-toggle { left: .4rem; position: absolute; top: .4rem; z-index: 1; } .docs-brand { color: #5755d9; height: 2rem; left: 1.5rem; position: fixed; top: .85rem; } .docs-brand .docs-logo { align-items: center; border-radius: .1rem; display: -ms-inline-flexbox; display: inline-flex; -ms-flex-align: center; font-size: .7rem; height: 2rem; padding: .2rem; width: auto; } .docs-brand .docs-logo:focus, .docs-brand .docs-logo:hover { text-decoration: none; } .docs-brand .docs-logo img { display: inline-block; height: auto; width: 1.6rem; } .docs-brand .docs-logo h2 { display: inline-block; font-size: .8rem; font-weight: 700; line-height: 1.5rem; margin-bottom: 0; margin-left: .5rem; margin-right: .3rem; } .docs-footer { color: #bcc3ce; padding: .5rem; } .docs-footer a { color: #66758c; } .docs-ad { background: #f7f8f9; border-radius: .1rem; display: block; margin: 2rem 0; padding: .4rem; position: relative; } .docs-ad ins { line-height: 1; vertical-align: middle; } .docs-ad .carbon-wrap .carbon-img { display: block; } .docs-ad .carbon-wrap .carbon-text { color: #66758c; display: block; font-size: .7rem; } .docs-ad .carbon-poweredby { color: #bcc3ce; font-size: .7rem; } /* Spectre Homepage style */ .section-hero { padding: 1rem .5rem; } .section-hero .docs-brand { position: absolute; top: .85rem; } .section-hero .docs-brand h2 { color: #5755d9; } .section-hero .column { padding: .4rem; } .section-ads { padding: 1rem .5rem; } .section-updates { padding: 4.5rem .5rem 2.5rem .5rem; } .section-updates .card { border: 0; margin-bottom: 1rem; } .section-features { padding: 4.5rem .5rem; } .section-features .column { padding: .4rem; } .section-footer { color: #bcc3ce; padding: 1.8rem .75rem 1rem; position: relative; z-index: 200; } .section-footer a { color: #66758c; } .grid-hero { padding-bottom: 2rem; padding-top: 6rem; } .grid-hero h1 { color: #3b4351; font-size: 1.6rem; font-weight: 600; margin-bottom: 1.5rem; } .grid-hero h2 { color: #455060; font-size: .9rem; font-weight: 400; line-height: 1.5rem; margin-bottom: 1.5rem; } .grid-hero h2 u { border-bottom: .1rem solid currentColor; padding-bottom: .05rem; text-decoration: none; } .grid-hero .card { background: none; border: 0; color: #5b687d; padding: .5rem; } .grid-hero .card .card-title { color: #5755d9; font-size: 1rem; font-weight: 700; margin-bottom: 0; } @media (max-width: 960px) { .off-canvas .off-canvas-toggle { z-index: 300; } .off-canvas .off-canvas-content { width: 100%; } .docs-sidebar .docs-brand { margin: .85rem 1.5rem; padding: 0; position: static; } .docs-sidebar .docs-nav { margin-top: 1rem; position: static; } .docs-sidebar .menu .menu-item > a { padding: .3rem .4rem; } .docs-navbar { -webkit-backdrop-filter: blur(5px); backdrop-filter: blur(5px); background: rgba(247, 248, 249, .65); left: 0; } .docs-content { min-width: auto; padding: 0 1.5rem; width: 100%; } .docs-content .s-title, .docs-content .s-subtitle { padding-top: 5rem; position: static; } .docs-content .s-title::before, .docs-content .s-subtitle::before { content: none; } .section-hero .s-brand { height: 5rem; padding: 1.5rem .5rem; text-align: center; width: 100%; } .section-hero .s-brand .s-logo { height: auto; } .section-hero .s-brand img { height: 3.2rem; width: 3.2rem; } .section-hero .s-brand h2 { display: none; } } @media (max-width: 600px) { .grid-hero h2 { font-size: .9rem; } .grid-hero .card { padding: 0; } .off-canvas .off-canvas-toggle { left: .5rem; } .docs-navbar .btns { right: .9rem; } .grid-hero .docs-brand { left: .9rem; } .docs-sidebar .docs-brand { margin: .85rem 1rem; } .docs-sidebar .docs-nav { padding: .5rem 1rem; } .docs-content { padding: 0 .5rem; } .docs-content .docs-block { padding: .4rem .1rem; } } @media (min-width: 1366px) { .docs-ad.docs-ad-sidebar { bottom: 1rem; margin: 0; position: fixed; right: 1rem; width: 7.3rem; } } .searchbox { box-sizing: border-box; display: inline-block; height: 32px !important; position: relative; visibility: visible !important; white-space: nowrap; width: 200px; } .searchbox .algolia-autocomplete { display: block; height: 100%; width: 100%; } .searchbox__wrapper { height: 100%; position: relative; width: 100%; z-index: 999; } .searchbox__input { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff !important; border: 0; border-radius: 16px; box-shadow: inset 0 0 0 1px #ccc; box-sizing: border-box; display: inline-block; font-size: 12px; height: 100%; padding: 0 26px 0 32px; transition: box-shadow .4s ease, background .4s ease; vertical-align: middle; white-space: normal; width: 100%; } .searchbox__input::-webkit-search-cancel-button, .searchbox__input::-webkit-search-decoration, .searchbox__input::-webkit-search-results-button, .searchbox__input::-webkit-search-results-decoration { display: none; } .searchbox__input:hover { box-shadow: inset 0 0 0 1px #b3b3b3; } .searchbox__input:active, .searchbox__input:focus { background: #fff; box-shadow: inset 0 0 0 1px #aaa; outline: 0; } .searchbox__input:-ms-input-placeholder { color: #aaa; } .searchbox__input::-ms-input-placeholder { color: #aaa; } .searchbox__input::placeholder { color: #aaa; } .searchbox__submit { background-color: rgba(69, 142, 225, 0); border: 0; border-radius: 16px 0 0 16px; font-size: inherit; height: 100%; left: 0; margin: 0; padding: 0; position: absolute; right: inherit; text-align: center; top: 0; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; width: 32px; } .searchbox__submit:before { content: ""; display: inline-block; height: 100%; margin-right: -4px; vertical-align: middle; } .searchbox__submit:active, .searchbox__submit:hover { cursor: pointer; } .searchbox__submit:focus { outline: 0; } .searchbox__submit svg { fill: #6d7e96; height: 14px; vertical-align: middle; width: 14px; } .searchbox__reset { background: none; border: 0; cursor: pointer; display: block; fill: rgba(0, 0, 0, .5); font-size: inherit; margin: 0; padding: 0; position: absolute; right: 8px; top: 8px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .searchbox__reset.hide { display: none; } .searchbox__reset:focus { outline: 0; } .searchbox__reset svg { display: block; height: 8px; margin: 4px; width: 8px; } .searchbox__input:valid ~ .searchbox__reset { animation-duration: .15s; animation-name: sbx-reset-in; display: block; } @keyframes sbx-reset-in { 0% { opacity: 0; transform: translate3d(-20%, 0, 0); } to { opacity: 1; transform: none; } } .algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu { left: inherit !important; right: 0 !important; } .algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before { right: 48px; } .algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu { left: 0 !important; right: inherit !important; } .algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before { left: 48px; } .algolia-autocomplete .ds-dropdown-menu { background: transparent; border: none; border-radius: 4px; box-shadow: 0 .05rem .2rem rgba(48, 55, 66, .3); height: auto; margin: 6px 0 0; max-width: 600px; min-width: 500px; padding: 0; position: relative; text-align: left; top: -6px; z-index: 999; } .algolia-autocomplete .ds-dropdown-menu .ds-suggestions { margin-top: 8px; position: relative; z-index: 1000; } .algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover { text-decoration: none; } .algolia-autocomplete .ds-dropdown-menu .ds-suggestion { cursor: pointer; } .algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple, .algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content { background-color: rgba(87, 85, 217, .05); } .algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] { background: #fff; border-radius: 4px; overflow: auto; padding: 0 8px 8px; position: relative; } .algolia-autocomplete .ds-dropdown-menu * { box-sizing: border-box; } .algolia-autocomplete .algolia-docsearch-suggestion { background: #fff; color: #303742; display: block; overflow: hidden; padding: 0 8px; position: relative; } .algolia-autocomplete .algolia-docsearch-suggestion--highlight { background: rgba(87, 85, 217, .1); color: #5755d9; padding: .1em .05em; } .algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight, .algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight { background: inherit; box-shadow: inset 0 -2px 0 0 rgba(87, 85, 217, .8); color: inherit; padding: 0 0 1px; } .algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { background: inherit; box-shadow: inset 0 -2px 0 0 rgba(87, 85, 217, .8); color: inherit; padding: 0 0 1px; } .algolia-autocomplete .algolia-docsearch-suggestion--content { cursor: pointer; display: block; float: right; padding: 5.33333px 0 5.33333px 10.66667px; position: relative; width: 70%; } .algolia-autocomplete .algolia-docsearch-suggestion--content:before { background: #f7f8f9; content: ""; display: block; height: 100%; left: -1px; position: absolute; top: 0; width: 1px; } .algolia-autocomplete .algolia-docsearch-suggestion--category-header { border-bottom: 1px solid #f7f8f9; color: #303742; display: none; font-size: 1em; margin-top: 8px; padding: 4px 0; position: relative; } .algolia-autocomplete .algolia-docsearch-suggestion--wrapper { float: left; padding: 8px 0 0; width: 100%; } .algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { color: #bcc3ce; float: left; font-size: .9em; padding: 5.33333px 10.66667px; position: relative; text-align: right; width: 30%; word-wrap: break-word; } .algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before { background: #f7f8f9; content: ""; display: block; height: 100%; position: absolute; right: 0; top: 0; width: 1px; } .algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline { display: none; } .algolia-autocomplete .algolia-docsearch-suggestion--title { color: #303742; font-size: .9em; font-weight: 700; } .algolia-autocomplete .algolia-docsearch-suggestion--text { color: #66758c; display: block; font-size: .85em; line-height: 1.2em; } .algolia-autocomplete .algolia-docsearch-suggestion--no-results { font-size: 1.2em; padding: 8px 0; text-align: center; width: 100%; } .algolia-autocomplete .algolia-docsearch-suggestion--no-results:before { display: none; } .algolia-autocomplete .algolia-docsearch-suggestion code { background-color: #ebebeb; border: none; border-radius: 3px; color: #222; font-family: Menlo, Monaco, Consolas, Courier New, monospace; font-size: 90%; padding: 1px 5px; } .algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight { background: none; } .algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header, .algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary { display: block; } .algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion { border-bottom: 1px solid #eee; margin: 0; padding: 8px; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content { padding: 0; width: 100%; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before { display: none; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header { border: none; display: block; margin: 0; padding: 0; width: 100%; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0 { font-size: .85em; opacity: .6; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1 { font-size: .85em; opacity: .6; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before { background-image: url("data:image/svg+xml;utf8,"); content: ""; display: inline-block; height: 10px; width: 10px; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper { float: left; margin: 0; padding: 0; width: 100%; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content, .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline { display: none !important; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title { color: #458ee1; font-size: .9em; font-weight: 400; margin: 0; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before { color: #458ee1; content: "#"; display: inline-block; font-weight: 700; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text { background: #f8f8f8; display: block; font-size: .85em; line-height: 1.4em; margin: 4px 0 0; opacity: .8; padding: 5.33333px 8px; } .algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { box-shadow: none; color: #3f4145; font-weight: 700; } .algolia-autocomplete .algolia-docsearch-footer { float: right; font-size: 0; height: 20px; line-height: 0; margin-top: 10.66667px; width: 134px; z-index: 2000; } .algolia-autocomplete .algolia-docsearch-footer--logo { background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='168' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z' fill='%235468FF'/%3E%3Cpath d='M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z' fill='%235D6494'/%3E%3Cpath d='M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E"); background-position: 50%; background-repeat: no-repeat; background-size: 100%; display: block; height: 100%; overflow: hidden; padding: 0 !important; text-indent: -9000px; width: 100%; } @media (min-width: 768px) { .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column { display: block; } } @media (max-width: 768px) { .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column { color: #02060c; display: inline-block; float: left; font-size: .9em; font-weight: 700; opacity: .5; padding: 0; text-align: left; width: auto; } .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before { display: none; } .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after { content: "|"; } .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content { display: inline-block; float: left; padding: 0; text-align: left; width: auto; } .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before { display: none; } } ================================================ FILE: docs/dist/spectre-exp.css ================================================ /*! Spectre.css Experimentals v0.5.9 | MIT License | github.com/picturepan2/spectre */ .form-autocomplete { position: relative; } .form-autocomplete .form-autocomplete-input { align-content: flex-start; display: -ms-flexbox; display: flex; -ms-flex-line-pack: start; -ms-flex-wrap: wrap; flex-wrap: wrap; height: auto; min-height: 1.6rem; padding: .1rem; } .form-autocomplete .form-autocomplete-input.is-focused { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-autocomplete .form-autocomplete-input .form-input { border-color: transparent; box-shadow: none; display: inline-block; -ms-flex: 1 0 auto; flex: 1 0 auto; height: 1.2rem; line-height: .8rem; margin: .1rem; width: auto; } .form-autocomplete .menu { left: 0; position: absolute; top: 100%; width: 100%; } .form-autocomplete.autocomplete-oneline .form-autocomplete-input { -ms-flex-wrap: nowrap; flex-wrap: nowrap; overflow-x: auto; } .form-autocomplete.autocomplete-oneline .chip { -ms-flex: 1 0 auto; flex: 1 0 auto; } .calendar { border: .05rem solid #dadee4; border-radius: .1rem; display: block; min-width: 280px; } .calendar .calendar-nav { align-items: center; background: #f7f8f9; border-top-left-radius: .1rem; border-top-right-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-align: center; font-size: .9rem; padding: .4rem; } .calendar .calendar-header, .calendar .calendar-body { display: -ms-flexbox; display: flex; -ms-flex-pack: center; -ms-flex-wrap: wrap; flex-wrap: wrap; justify-content: center; padding: .4rem 0; } .calendar .calendar-header .calendar-date, .calendar .calendar-body .calendar-date { -ms-flex: 0 0 14.28%; flex: 0 0 14.28%; max-width: 14.28%; } .calendar .calendar-header { background: #f7f8f9; border-bottom: .05rem solid #dadee4; color: #bcc3ce; font-size: .7rem; text-align: center; } .calendar .calendar-body { color: #66758c; } .calendar .calendar-date { border: 0; padding: .2rem; } .calendar .calendar-date .date-item { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; border: .05rem solid transparent; border-radius: 50%; color: #66758c; cursor: pointer; font-size: .7rem; height: 1.4rem; line-height: 1rem; outline: none; padding: .1rem; position: relative; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; vertical-align: middle; white-space: nowrap; width: 1.4rem; } .calendar .calendar-date .date-item.date-today { border-color: #e5e5f9; color: #5755d9; } .calendar .calendar-date .date-item:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .calendar .calendar-date .date-item:focus, .calendar .calendar-date .date-item:hover { background: #fefeff; border-color: #e5e5f9; color: #5755d9; text-decoration: none; } .calendar .calendar-date .date-item:active, .calendar .calendar-date .date-item.active { background: #4b48d6; border-color: #3634d2; color: #fff; } .calendar .calendar-date .date-item.badge::after { position: absolute; right: 3px; top: 3px; transform: translate(50%, -50%); } .calendar .calendar-date .date-item:disabled, .calendar .calendar-date .date-item.disabled, .calendar .calendar-date .calendar-event:disabled, .calendar .calendar-date .calendar-event.disabled { cursor: default; opacity: .25; pointer-events: none; } .calendar .calendar-date.prev-month .date-item, .calendar .calendar-date.prev-month .calendar-event, .calendar .calendar-date.next-month .date-item, .calendar .calendar-date.next-month .calendar-event { opacity: .25; } .calendar .calendar-range { position: relative; } .calendar .calendar-range::before { background: #f1f1fc; content: ""; height: 1.4rem; left: 0; position: absolute; right: 0; top: 50%; transform: translateY(-50%); } .calendar .calendar-range.range-start::before { left: 50%; } .calendar .calendar-range.range-end::before { right: 50%; } .calendar .calendar-range.range-start .date-item, .calendar .calendar-range.range-end .date-item { background: #4b48d6; border-color: #3634d2; color: #fff; } .calendar .calendar-range .date-item { color: #5755d9; } .calendar.calendar-lg .calendar-body { padding: 0; } .calendar.calendar-lg .calendar-body .calendar-date { border-bottom: .05rem solid #dadee4; border-right: .05rem solid #dadee4; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; height: 5.5rem; padding: 0; } .calendar.calendar-lg .calendar-body .calendar-date:nth-child(7n) { border-right: 0; } .calendar.calendar-lg .calendar-body .calendar-date:nth-last-child(-n+7) { border-bottom: 0; } .calendar.calendar-lg .date-item { align-self: flex-end; -ms-flex-item-align: end; height: 1.4rem; margin-right: .2rem; margin-top: .2rem; } .calendar.calendar-lg .calendar-range::before { top: 19px; } .calendar.calendar-lg .calendar-range.range-start::before { left: auto; width: 19px; } .calendar.calendar-lg .calendar-range.range-end::before { right: 19px; } .calendar.calendar-lg .calendar-events { flex-grow: 1; -ms-flex-positive: 1; line-height: 1; overflow-y: auto; padding: .2rem; } .calendar.calendar-lg .calendar-event { border-radius: .1rem; display: block; font-size: .7rem; margin: .1rem auto; overflow: hidden; padding: 3px 4px; text-overflow: ellipsis; white-space: nowrap; } .carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-container .carousel-item:nth-of-type(1), .carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-container .carousel-item:nth-of-type(2), .carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-container .carousel-item:nth-of-type(3), .carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-container .carousel-item:nth-of-type(4), .carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-container .carousel-item:nth-of-type(5), .carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-container .carousel-item:nth-of-type(6), .carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-container .carousel-item:nth-of-type(7), .carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-container .carousel-item:nth-of-type(8) { animation: carousel-slidein .75s ease-in-out 1; opacity: 1; z-index: 100; } .carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-nav .nav-item:nth-of-type(1), .carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-nav .nav-item:nth-of-type(2), .carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-nav .nav-item:nth-of-type(3), .carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-nav .nav-item:nth-of-type(4), .carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-nav .nav-item:nth-of-type(5), .carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-nav .nav-item:nth-of-type(6), .carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-nav .nav-item:nth-of-type(7), .carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-nav .nav-item:nth-of-type(8) { color: #f7f8f9; } .carousel { background: #f7f8f9; display: block; overflow: hidden; -webkit-overflow-scrolling: touch; position: relative; width: 100%; z-index: 1; } .carousel .carousel-container { height: 100%; left: 0; position: relative; } .carousel .carousel-container::before { content: ""; display: block; padding-bottom: 56.25%; } .carousel .carousel-container .carousel-item { animation: carousel-slideout 1s ease-in-out 1; height: 100%; left: 0; margin: 0; opacity: 0; position: absolute; top: 0; width: 100%; } .carousel .carousel-container .carousel-item:hover .item-prev, .carousel .carousel-container .carousel-item:hover .item-next { opacity: 1; } .carousel .carousel-container .item-prev, .carousel .carousel-container .item-next { background: rgba(247, 248, 249, .25); border-color: rgba(247, 248, 249, .5); color: #f7f8f9; opacity: 0; position: absolute; top: 50%; transform: translateY(-50%); transition: all .4s; z-index: 100; } .carousel .carousel-container .item-prev { left: 1rem; } .carousel .carousel-container .item-next { right: 1rem; } .carousel .carousel-nav { bottom: .4rem; display: -ms-flexbox; display: flex; -ms-flex-pack: center; justify-content: center; left: 50%; position: absolute; transform: translateX(-50%); width: 10rem; z-index: 100; } .carousel .carousel-nav .nav-item { color: rgba(247, 248, 249, .5); display: block; -ms-flex: 1 0 auto; flex: 1 0 auto; height: 1.6rem; margin: .2rem; max-width: 2.5rem; position: relative; } .carousel .carousel-nav .nav-item::before { background: currentColor; content: ""; display: block; height: .1rem; position: absolute; top: .5rem; width: 100%; } @keyframes carousel-slidein { 0% { transform: translateX(100%); } 100% { transform: translateX(0); } } @keyframes carousel-slideout { 0% { opacity: 1; transform: translateX(0); } 100% { opacity: 1; transform: translateX(-50%); } } .comparison-slider { height: 50vh; overflow: hidden; -webkit-overflow-scrolling: touch; position: relative; width: 100%; } .comparison-slider .comparison-before, .comparison-slider .comparison-after { height: 100%; left: 0; margin: 0; overflow: hidden; position: absolute; top: 0; } .comparison-slider .comparison-before img, .comparison-slider .comparison-after img { height: 100%; object-fit: cover; object-position: left center; position: absolute; width: 100%; } .comparison-slider .comparison-before { width: 100%; z-index: 1; } .comparison-slider .comparison-before .comparison-label { right: .8rem; } .comparison-slider .comparison-after { max-width: 100%; min-width: 0; z-index: 2; } .comparison-slider .comparison-after::before { background: transparent; content: ""; cursor: default; height: 100%; left: 0; position: absolute; right: .8rem; top: 0; z-index: 1; } .comparison-slider .comparison-after::after { background: currentColor; border-radius: 50%; box-shadow: 0 -5px, 0 5px; color: #fff; content: ""; height: 3px; pointer-events: none; position: absolute; right: .4rem; top: 50%; transform: translate(50%, -50%); width: 3px; } .comparison-slider .comparison-after .comparison-label { left: .8rem; } .comparison-slider .comparison-resizer { animation: first-run 1.5s 1 ease-in-out; cursor: ew-resize; height: .8rem; left: 0; max-width: 100%; min-width: .8rem; opacity: 0; outline: none; position: relative; resize: horizontal; top: 50%; transform: translateY(-50%) scaleY(30); width: 0; } .comparison-slider .comparison-label { background: rgba(48, 55, 66, .5); bottom: .8rem; color: #fff; padding: .2rem .4rem; position: absolute; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } @keyframes first-run { 0% { width: 0; } 25% { width: 2.4rem; } 50% { width: .8rem; } 75% { width: 1.2rem; } 100% { width: 0; } } .filter .filter-tag#tag-0:checked ~ .filter-nav .chip[for="tag-0"], .filter .filter-tag#tag-1:checked ~ .filter-nav .chip[for="tag-1"], .filter .filter-tag#tag-2:checked ~ .filter-nav .chip[for="tag-2"], .filter .filter-tag#tag-3:checked ~ .filter-nav .chip[for="tag-3"], .filter .filter-tag#tag-4:checked ~ .filter-nav .chip[for="tag-4"], .filter .filter-tag#tag-5:checked ~ .filter-nav .chip[for="tag-5"], .filter .filter-tag#tag-6:checked ~ .filter-nav .chip[for="tag-6"], .filter .filter-tag#tag-7:checked ~ .filter-nav .chip[for="tag-7"], .filter .filter-tag#tag-8:checked ~ .filter-nav .chip[for="tag-8"] { background: #5755d9; color: #fff; } .filter .filter-tag#tag-1:checked ~ .filter-body .filter-item:not([data-tag~="tag-1"]), .filter .filter-tag#tag-2:checked ~ .filter-body .filter-item:not([data-tag~="tag-2"]), .filter .filter-tag#tag-3:checked ~ .filter-body .filter-item:not([data-tag~="tag-3"]), .filter .filter-tag#tag-4:checked ~ .filter-body .filter-item:not([data-tag~="tag-4"]), .filter .filter-tag#tag-5:checked ~ .filter-body .filter-item:not([data-tag~="tag-5"]), .filter .filter-tag#tag-6:checked ~ .filter-body .filter-item:not([data-tag~="tag-6"]), .filter .filter-tag#tag-7:checked ~ .filter-body .filter-item:not([data-tag~="tag-7"]), .filter .filter-tag#tag-8:checked ~ .filter-body .filter-item:not([data-tag~="tag-8"]) { display: none; } .filter .filter-nav { margin: .4rem 0; } .filter .filter-body { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } .meter { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #f7f8f9; border: 0; border-radius: .1rem; display: block; height: .8rem; width: 100%; } .meter::-webkit-meter-inner-element { display: block; } .meter::-webkit-meter-bar, .meter::-webkit-meter-optimum-value, .meter::-webkit-meter-suboptimum-value, .meter::-webkit-meter-even-less-good-value { border-radius: .1rem; } .meter::-webkit-meter-bar { background: #f7f8f9; } .meter::-webkit-meter-optimum-value { background: #32b643; } .meter::-webkit-meter-suboptimum-value { background: #ffb700; } .meter::-webkit-meter-even-less-good-value { background: #e85600; } .meter::-moz-meter-bar, .meter:-moz-meter-optimum, .meter:-moz-meter-sub-optimum, .meter:-moz-meter-sub-sub-optimum { border-radius: .1rem; } .meter:-moz-meter-optimum::-moz-meter-bar { background: #32b643; } .meter:-moz-meter-sub-optimum::-moz-meter-bar { background: #ffb700; } .meter:-moz-meter-sub-sub-optimum::-moz-meter-bar { background: #e85600; } .off-canvas { display: -ms-flexbox; display: flex; -ms-flex-flow: nowrap; flex-flow: nowrap; height: 100%; position: relative; width: 100%; } .off-canvas .off-canvas-toggle { display: block; left: .4rem; position: absolute; top: .4rem; transition: none; z-index: 1; } .off-canvas .off-canvas-sidebar { background: #f7f8f9; bottom: 0; left: 0; min-width: 10rem; overflow-y: auto; position: fixed; top: 0; transform: translateX(-100%); transition: transform .25s; z-index: 200; } .off-canvas .off-canvas-content { -ms-flex: 1 1 auto; flex: 1 1 auto; height: 100%; padding: .4rem .4rem .4rem 4rem; } .off-canvas .off-canvas-overlay { background: rgba(48, 55, 66, .1); border-color: transparent; border-radius: 0; bottom: 0; display: none; height: 100%; left: 0; position: fixed; right: 0; top: 0; width: 100%; } .off-canvas .off-canvas-sidebar:target, .off-canvas .off-canvas-sidebar.active { transform: translateX(0); } .off-canvas .off-canvas-sidebar:target ~ .off-canvas-overlay, .off-canvas .off-canvas-sidebar.active ~ .off-canvas-overlay { display: block; z-index: 100; } @media (min-width: 960px) { .off-canvas.off-canvas-sidebar-show .off-canvas-toggle { display: none; } .off-canvas.off-canvas-sidebar-show .off-canvas-sidebar { -ms-flex: 0 0 auto; flex: 0 0 auto; position: relative; transform: none; } .off-canvas.off-canvas-sidebar-show .off-canvas-overlay { display: none !important; } } .parallax { display: block; height: auto; position: relative; width: auto; } .parallax .parallax-content { box-shadow: 0 1rem 2.1rem rgba(48, 55, 66, .3); height: auto; transform: perspective(1000px); transform-style: preserve-3d; transition: all .4s ease; width: 100%; } .parallax .parallax-content::before { content: ""; display: block; height: 100%; left: 0; position: absolute; top: 0; width: 100%; } .parallax .parallax-front { align-items: center; color: #fff; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-pack: center; height: 100%; justify-content: center; left: 0; position: absolute; text-align: center; text-shadow: 0 0 20px rgba(48, 55, 66, .75); top: 0; transform: translateZ(50px) scale(.95); transition: transform .4s; width: 100%; z-index: 1; } .parallax .parallax-top-left { height: 50%; left: 0; outline: none; position: absolute; top: 0; width: 50%; z-index: 100; } .parallax .parallax-top-left:focus ~ .parallax-content, .parallax .parallax-top-left:hover ~ .parallax-content { transform: perspective(1000px) rotateX(3deg) rotateY(-3deg); } .parallax .parallax-top-left:focus ~ .parallax-content::before, .parallax .parallax-top-left:hover ~ .parallax-content::before { background: linear-gradient(135deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-top-left:focus ~ .parallax-content .parallax-front, .parallax .parallax-top-left:hover ~ .parallax-content .parallax-front { transform: translate3d(4.5px, 4.5px, 50px) scale(.95); } .parallax .parallax-top-right { height: 50%; outline: none; position: absolute; right: 0; top: 0; width: 50%; z-index: 100; } .parallax .parallax-top-right:focus ~ .parallax-content, .parallax .parallax-top-right:hover ~ .parallax-content { transform: perspective(1000px) rotateX(3deg) rotateY(3deg); } .parallax .parallax-top-right:focus ~ .parallax-content::before, .parallax .parallax-top-right:hover ~ .parallax-content::before { background: linear-gradient(-135deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-top-right:focus ~ .parallax-content .parallax-front, .parallax .parallax-top-right:hover ~ .parallax-content .parallax-front { transform: translate3d(-4.5px, 4.5px, 50px) scale(.95); } .parallax .parallax-bottom-left { bottom: 0; height: 50%; left: 0; outline: none; position: absolute; width: 50%; z-index: 100; } .parallax .parallax-bottom-left:focus ~ .parallax-content, .parallax .parallax-bottom-left:hover ~ .parallax-content { transform: perspective(1000px) rotateX(-3deg) rotateY(-3deg); } .parallax .parallax-bottom-left:focus ~ .parallax-content::before, .parallax .parallax-bottom-left:hover ~ .parallax-content::before { background: linear-gradient(45deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-bottom-left:focus ~ .parallax-content .parallax-front, .parallax .parallax-bottom-left:hover ~ .parallax-content .parallax-front { transform: translate3d(4.5px, -4.5px, 50px) scale(.95); } .parallax .parallax-bottom-right { bottom: 0; height: 50%; outline: none; position: absolute; right: 0; width: 50%; z-index: 100; } .parallax .parallax-bottom-right:focus ~ .parallax-content, .parallax .parallax-bottom-right:hover ~ .parallax-content { transform: perspective(1000px) rotateX(-3deg) rotateY(3deg); } .parallax .parallax-bottom-right:focus ~ .parallax-content::before, .parallax .parallax-bottom-right:hover ~ .parallax-content::before { background: linear-gradient(-45deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-bottom-right:focus ~ .parallax-content .parallax-front, .parallax .parallax-bottom-right:hover ~ .parallax-content .parallax-front { transform: translate3d(-4.5px, -4.5px, 50px) scale(.95); } .progress { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #eef0f3; border: 0; border-radius: .1rem; color: #5755d9; height: .2rem; position: relative; width: 100%; } .progress::-webkit-progress-bar { background: transparent; border-radius: .1rem; } .progress::-webkit-progress-value { background: #5755d9; border-radius: .1rem; } .progress::-moz-progress-bar { background: #5755d9; border-radius: .1rem; } .progress:indeterminate { animation: progress-indeterminate 1.5s linear infinite; background: #eef0f3 linear-gradient(to right, #5755d9 30%, #eef0f3 30%) top left/150% 150% no-repeat; } .progress:indeterminate::-moz-progress-bar { background: transparent; } @keyframes progress-indeterminate { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } .slider { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; display: block; height: 1.2rem; width: 100%; } .slider:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); outline: none; } .slider.tooltip:not([data-tooltip])::after { content: attr(value); } .slider::-webkit-slider-thumb { -webkit-appearance: none; background: #5755d9; border: 0; border-radius: 50%; height: .6rem; margin-top: -.25rem; -webkit-transition: transform .2s; transition: transform .2s; width: .6rem; } .slider::-moz-range-thumb { background: #5755d9; border: 0; border-radius: 50%; height: .6rem; -moz-transition: transform .2s; transition: transform .2s; width: .6rem; } .slider::-ms-thumb { background: #5755d9; border: 0; border-radius: 50%; height: .6rem; -ms-transition: transform .2s; transition: transform .2s; width: .6rem; } .slider:active::-webkit-slider-thumb { transform: scale(1.25); } .slider:active::-moz-range-thumb { transform: scale(1.25); } .slider:active::-ms-thumb { transform: scale(1.25); } .slider:disabled::-webkit-slider-thumb, .slider.disabled::-webkit-slider-thumb { background: #f7f8f9; transform: scale(1); } .slider:disabled::-moz-range-thumb, .slider.disabled::-moz-range-thumb { background: #f7f8f9; transform: scale(1); } .slider:disabled::-ms-thumb, .slider.disabled::-ms-thumb { background: #f7f8f9; transform: scale(1); } .slider::-webkit-slider-runnable-track { background: #eef0f3; border-radius: .1rem; height: .1rem; width: 100%; } .slider::-moz-range-track { background: #eef0f3; border-radius: .1rem; height: .1rem; width: 100%; } .slider::-ms-track { background: #eef0f3; border-radius: .1rem; height: .1rem; width: 100%; } .slider::-ms-fill-lower { background: #5755d9; } .timeline .timeline-item { display: -ms-flexbox; display: flex; margin-bottom: 1.2rem; position: relative; } .timeline .timeline-item::before { background: #dadee4; content: ""; height: 100%; left: 11px; position: absolute; top: 1.2rem; width: 2px; } .timeline .timeline-item .timeline-left { -ms-flex: 0 0 auto; flex: 0 0 auto; } .timeline .timeline-item .timeline-content { -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 2px 0 2px .8rem; } .timeline .timeline-item .timeline-icon { align-items: center; border-radius: 50%; color: #fff; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-pack: center; height: 1.2rem; justify-content: center; text-align: center; width: 1.2rem; } .timeline .timeline-item .timeline-icon::before { border: .1rem solid #5755d9; border-radius: 50%; content: ""; display: block; height: .4rem; left: .4rem; position: absolute; top: .4rem; width: .4rem; } .timeline .timeline-item .timeline-icon.icon-lg { background: #5755d9; line-height: 1.2rem; } .timeline .timeline-item .timeline-icon.icon-lg::before { content: none; } .viewer-360 { align-items: center; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-direction: column; flex-direction: column; } .viewer-360 .viewer-slider[max="36"][value="1"] + .viewer-image { background-position-y: 0; } .viewer-360 .viewer-slider[max="36"][value="2"] + .viewer-image { background-position-y: 2.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="3"] + .viewer-image { background-position-y: 5.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="4"] + .viewer-image { background-position-y: 8.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="5"] + .viewer-image { background-position-y: 11.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="6"] + .viewer-image { background-position-y: 14.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="7"] + .viewer-image { background-position-y: 17.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="8"] + .viewer-image { background-position-y: 20%; } .viewer-360 .viewer-slider[max="36"][value="9"] + .viewer-image { background-position-y: 22.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="10"] + .viewer-image { background-position-y: 25.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="11"] + .viewer-image { background-position-y: 28.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="12"] + .viewer-image { background-position-y: 31.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="13"] + .viewer-image { background-position-y: 34.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="14"] + .viewer-image { background-position-y: 37.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="15"] + .viewer-image { background-position-y: 40%; } .viewer-360 .viewer-slider[max="36"][value="16"] + .viewer-image { background-position-y: 42.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="17"] + .viewer-image { background-position-y: 45.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="18"] + .viewer-image { background-position-y: 48.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="19"] + .viewer-image { background-position-y: 51.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="20"] + .viewer-image { background-position-y: 54.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="21"] + .viewer-image { background-position-y: 57.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="22"] + .viewer-image { background-position-y: 60%; } .viewer-360 .viewer-slider[max="36"][value="23"] + .viewer-image { background-position-y: 62.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="24"] + .viewer-image { background-position-y: 65.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="25"] + .viewer-image { background-position-y: 68.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="26"] + .viewer-image { background-position-y: 71.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="27"] + .viewer-image { background-position-y: 74.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="28"] + .viewer-image { background-position-y: 77.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="29"] + .viewer-image { background-position-y: 80%; } .viewer-360 .viewer-slider[max="36"][value="30"] + .viewer-image { background-position-y: 82.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="31"] + .viewer-image { background-position-y: 85.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="32"] + .viewer-image { background-position-y: 88.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="33"] + .viewer-image { background-position-y: 91.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="34"] + .viewer-image { background-position-y: 94.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="35"] + .viewer-image { background-position-y: 97.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="36"] + .viewer-image { background-position-y: 100%; } .viewer-360 .viewer-slider { cursor: ew-resize; -ms-flex-order: 2; margin: 1rem; order: 2; width: 60%; } .viewer-360 .viewer-image { background-position-y: 0; background-repeat: no-repeat; background-size: 100%; -ms-flex-order: 1; max-width: 100%; order: 1; } ================================================ FILE: docs/dist/spectre-icons.css ================================================ /*! Spectre.css Icons v0.5.9 | MIT License | github.com/picturepan2/spectre */ .icon { box-sizing: border-box; display: inline-block; font-size: inherit; font-style: normal; height: 1em; position: relative; text-indent: -9999px; vertical-align: middle; width: 1em; } .icon::before, .icon::after { content: ""; display: block; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); } .icon.icon-2x { font-size: 1.6rem; } .icon.icon-3x { font-size: 2.4rem; } .icon.icon-4x { font-size: 3.2rem; } .accordion .icon, .btn .icon, .toast .icon, .menu .icon { vertical-align: -10%; } .btn-lg .icon { vertical-align: -15%; } .icon-arrow-down::before, .icon-arrow-left::before, .icon-arrow-right::before, .icon-arrow-up::before, .icon-downward::before, .icon-back::before, .icon-forward::before, .icon-upward::before { border: .1rem solid currentColor; border-bottom: 0; border-right: 0; height: .65em; width: .65em; } .icon-arrow-down::before { transform: translate(-50%, -75%) rotate(225deg); } .icon-arrow-left::before { transform: translate(-25%, -50%) rotate(-45deg); } .icon-arrow-right::before { transform: translate(-75%, -50%) rotate(135deg); } .icon-arrow-up::before { transform: translate(-50%, -25%) rotate(45deg); } .icon-back::after, .icon-forward::after { background: currentColor; height: .1rem; width: .8em; } .icon-downward::after, .icon-upward::after { background: currentColor; height: .8em; width: .1rem; } .icon-back::after { left: 55%; } .icon-back::before { transform: translate(-50%, -50%) rotate(-45deg); } .icon-downward::after { top: 45%; } .icon-downward::before { transform: translate(-50%, -50%) rotate(-135deg); } .icon-forward::after { left: 45%; } .icon-forward::before { transform: translate(-50%, -50%) rotate(135deg); } .icon-upward::after { top: 55%; } .icon-upward::before { transform: translate(-50%, -50%) rotate(45deg); } .icon-caret::before { border-left: .3em solid transparent; border-right: .3em solid transparent; border-top: .3em solid currentColor; height: 0; transform: translate(-50%, -25%); width: 0; } .icon-menu::before { background: currentColor; box-shadow: 0 -.35em, 0 .35em; height: .1rem; width: 100%; } .icon-apps::before { background: currentColor; box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em; height: 3px; width: 3px; } .icon-resize-horiz::before, .icon-resize-horiz::after, .icon-resize-vert::before, .icon-resize-vert::after { border: .1rem solid currentColor; border-bottom: 0; border-right: 0; height: .45em; width: .45em; } .icon-resize-horiz::before, .icon-resize-vert::before { transform: translate(-50%, -90%) rotate(45deg); } .icon-resize-horiz::after, .icon-resize-vert::after { transform: translate(-50%, -10%) rotate(225deg); } .icon-resize-horiz::before { transform: translate(-90%, -50%) rotate(-45deg); } .icon-resize-horiz::after { transform: translate(-10%, -50%) rotate(135deg); } .icon-more-horiz::before, .icon-more-vert::before { background: currentColor; border-radius: 50%; box-shadow: -.4em 0, .4em 0; height: 3px; width: 3px; } .icon-more-vert::before { box-shadow: 0 -.4em, 0 .4em; } .icon-plus::before, .icon-minus::before, .icon-cross::before { background: currentColor; height: .1rem; width: 100%; } .icon-plus::after, .icon-cross::after { background: currentColor; height: 100%; width: .1rem; } .icon-cross::before { width: 100%; } .icon-cross::after { height: 100%; } .icon-cross::before, .icon-cross::after { transform: translate(-50%, -50%) rotate(45deg); } .icon-check::before { border: .1rem solid currentColor; border-right: 0; border-top: 0; height: .5em; transform: translate(-50%, -75%) rotate(-45deg); width: .9em; } .icon-stop { border: .1rem solid currentColor; border-radius: 50%; } .icon-stop::before { background: currentColor; height: .1rem; transform: translate(-50%, -50%) rotate(45deg); width: 1em; } .icon-shutdown { border: .1rem solid currentColor; border-radius: 50%; border-top-color: transparent; } .icon-shutdown::before { background: currentColor; content: ""; height: .5em; top: .1em; width: .1rem; } .icon-refresh::before { border: .1rem solid currentColor; border-radius: 50%; border-right-color: transparent; height: 1em; width: 1em; } .icon-refresh::after { border: .2em solid currentColor; border-left-color: transparent; border-top-color: transparent; height: 0; left: 80%; top: 20%; width: 0; } .icon-search::before { border: .1rem solid currentColor; border-radius: 50%; height: .75em; left: 5%; top: 5%; transform: translate(0, 0) rotate(45deg); width: .75em; } .icon-search::after { background: currentColor; height: .1rem; left: 80%; top: 80%; transform: translate(-50%, -50%) rotate(45deg); width: .4em; } .icon-edit::before { border: .1rem solid currentColor; height: .4em; transform: translate(-40%, -60%) rotate(-45deg); width: .85em; } .icon-edit::after { border: .15em solid currentColor; border-right-color: transparent; border-top-color: transparent; height: 0; left: 5%; top: 95%; transform: translate(0, -100%); width: 0; } .icon-delete::before { border: .1rem solid currentColor; border-bottom-left-radius: .1rem; border-bottom-right-radius: .1rem; border-top: 0; height: .75em; top: 60%; width: .75em; } .icon-delete::after { background: currentColor; box-shadow: -.25em .2em, .25em .2em; height: .1rem; top: .05rem; width: .5em; } .icon-share { border: .1rem solid currentColor; border-radius: .1rem; border-right: 0; border-top: 0; } .icon-share::before { border: .1rem solid currentColor; border-left: 0; border-top: 0; height: .4em; left: 100%; top: .25em; transform: translate(-125%, -50%) rotate(-45deg); width: .4em; } .icon-share::after { border: .1rem solid currentColor; border-bottom: 0; border-radius: 75% 0; border-right: 0; height: .5em; width: .6em; } .icon-flag::before { background: currentColor; height: 1em; left: 15%; width: .1rem; } .icon-flag::after { border: .1rem solid currentColor; border-bottom-right-radius: .1rem; border-left: 0; border-top-right-radius: .1rem; height: .65em; left: 60%; top: 35%; width: .8em; } .icon-bookmark::before { border: .1rem solid currentColor; border-bottom: 0; border-top-left-radius: .1rem; border-top-right-radius: .1rem; height: .9em; width: .8em; } .icon-bookmark::after { border: .1rem solid currentColor; border-bottom: 0; border-left: 0; border-radius: .1rem; height: .5em; transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg); width: .5em; } .icon-download, .icon-upload { border-bottom: .1rem solid currentColor; } .icon-download::before, .icon-upload::before { border: .1rem solid currentColor; border-bottom: 0; border-right: 0; height: .5em; transform: translate(-50%, -60%) rotate(-135deg); width: .5em; } .icon-download::after, .icon-upload::after { background: currentColor; height: .6em; top: 40%; width: .1rem; } .icon-upload::before { transform: translate(-50%, -60%) rotate(45deg); } .icon-upload::after { top: 50%; } .icon-copy::before { border: .1rem solid currentColor; border-bottom: 0; border-radius: .1rem; border-right: 0; height: .8em; left: 40%; top: 35%; width: .8em; } .icon-copy::after { border: .1rem solid currentColor; border-radius: .1rem; height: .8em; left: 60%; top: 60%; width: .8em; } .icon-time { border: .1rem solid currentColor; border-radius: 50%; } .icon-time::before { background: currentColor; height: .4em; transform: translate(-50%, -75%); width: .1rem; } .icon-time::after { background: currentColor; height: .3em; transform: translate(-50%, -75%) rotate(90deg); transform-origin: 50% 90%; width: .1rem; } .icon-mail::before { border: .1rem solid currentColor; border-radius: .1rem; height: .8em; width: 1em; } .icon-mail::after { border: .1rem solid currentColor; border-right: 0; border-top: 0; height: .5em; transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg); width: .5em; } .icon-people::before { border: .1rem solid currentColor; border-radius: 50%; height: .45em; top: 25%; width: .45em; } .icon-people::after { border: .1rem solid currentColor; border-radius: 50% 50% 0 0; height: .4em; top: 75%; width: .9em; } .icon-message { border: .1rem solid currentColor; border-bottom: 0; border-radius: .1rem; border-right: 0; } .icon-message::before { border: .1rem solid currentColor; border-bottom-right-radius: .1rem; border-left: 0; border-top: 0; height: .8em; left: 65%; top: 40%; width: .7em; } .icon-message::after { background: currentColor; border-radius: .1rem; height: .3em; left: 10%; top: 100%; transform: translate(0, -90%) rotate(45deg); width: .1rem; } .icon-photo { border: .1rem solid currentColor; border-radius: .1rem; } .icon-photo::before { border: .1rem solid currentColor; border-radius: 50%; height: .25em; left: 35%; top: 35%; width: .25em; } .icon-photo::after { border: .1rem solid currentColor; border-bottom: 0; border-left: 0; height: .5em; left: 60%; transform: translate(-50%, 25%) rotate(-45deg); width: .5em; } .icon-link::before, .icon-link::after { border: .1rem solid currentColor; border-radius: 5em 0 0 5em; border-right: 0; height: .5em; width: .75em; } .icon-link::before { transform: translate(-70%, -45%) rotate(-45deg); } .icon-link::after { transform: translate(-30%, -55%) rotate(135deg); } .icon-location::before { border: .1rem solid currentColor; border-radius: 50% 50% 50% 0; height: .8em; transform: translate(-50%, -60%) rotate(-45deg); width: .8em; } .icon-location::after { border: .1rem solid currentColor; border-radius: 50%; height: .2em; transform: translate(-50%, -80%); width: .2em; } .icon-emoji { border: .1rem solid currentColor; border-radius: 50%; } .icon-emoji::before { border-radius: 50%; box-shadow: -.17em -.1em, .17em -.1em; height: .15em; width: .15em; } .icon-emoji::after { border: .1rem solid currentColor; border-bottom-color: transparent; border-radius: 50%; border-right-color: transparent; height: .5em; transform: translate(-50%, -40%) rotate(-135deg); width: .5em; } ================================================ FILE: docs/dist/spectre-rtl.css ================================================ /*! Spectre.css RTL | MIT License | github.com/picturepan2/spectre */ /*! Spectre.css v0.5.9 | MIT License | github.com/picturepan2/spectre */ /* Manually forked from Normalize.css */ /* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ /** 1. Change the default font family in all browsers (opinionated). 2. Correct the line height in all browsers. 3. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS. */ /* Document ========================================================================== */ html { font-family: sans-serif; /* 1 */ -webkit-text-size-adjust: 100%; /* 3 */ -ms-text-size-adjust: 100%; /* 3 */ } /* Sections ========================================================================== */ /** Remove the margin in all browsers (opinionated). */ body { margin: 0; } /** Add the correct display in IE 9-. */ article, aside, footer, header, nav, section { display: block; } /** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */ h1 { font-size: 2em; margin: .67em 0; } /* Grouping content ========================================================================== */ /** Add the correct display in IE 9-. 1. Add the correct display in IE. */ figcaption, figure, main { /* 1 */ display: block; } /** Add the correct margin in IE 8 (removed). */ /** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */ hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ } /** 1. Correct the inheritance and scaling of font size in all browsers. (removed) 2. Correct the odd `em` font sizing in all browsers. */ /* Text-level semantics ========================================================================== */ /** 1. Remove the gray background on active links in IE 10. 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ a { background-color: transparent; /* 1 */ -webkit-text-decoration-skip: objects; /* 2 */ } /** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */ a:active, a:hover { outline-width: 0; } /** Modify default styling of address. */ address { font-style: normal; } /** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed) */ /** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ b, strong { font-weight: inherit; } /** Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { font-weight: bolder; } /** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */ code, kbd, pre, samp { font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace; /* 1 (changed) */ font-size: 1em; /* 2 */ } /** Add the correct font style in Android 4.3-. */ dfn { font-style: italic; } /** Add the correct background and color in IE 9-. (Removed) */ /** Add the correct font size in all browsers. */ small { font-size: 80%; font-weight: 400; /* (added) */ } /** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } /* Embedded content ========================================================================== */ /** Add the correct display in IE 9-. */ audio, video { display: inline-block; } /** Add the correct display in iOS 4-7. */ audio:not([controls]) { display: none; height: 0; } /** Remove the border on images inside links in IE 10-. */ img { border-style: none; } /** Hide the overflow in IE. */ svg:not(:root) { overflow: hidden; } /* Forms ========================================================================== */ /** 1. Change the font styles in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 (changed) */ font-size: inherit; /* 1 (changed) */ line-height: inherit; /* 1 (changed) */ margin: 0; /* 2 */ } /** Show the overflow in IE. 1. Show the overflow in Edge. */ button, input { /* 1 */ overflow: visible; } /** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */ button, select { /* 1 */ text-transform: none; } /** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */ button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; /* 2 */ } /** Remove the inner border and padding in Firefox. */ button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } /** Restore the focus styles unset by the previous rule (removed). */ /** Change the border, margin, and padding in all browsers (opinionated) (changed). */ fieldset { border: 0; margin: 0; padding: 0; } /** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */ legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ } /** 1. Add the correct display in IE 9-. 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ progress { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } /** Remove the default vertical scrollbar in IE. */ textarea { overflow: auto; } /** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */ [type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** Correct the cursor style of increment and decrement buttons in Chrome. */ [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } /** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /** Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Interactive ========================================================================== */ /* Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. */ details, menu { display: block; } /* Add the correct display in all browsers. */ summary { display: list-item; outline: none; } /* Scripting ========================================================================== */ /** Add the correct display in IE 9-. */ canvas { display: inline-block; } /** Add the correct display in IE. */ template { display: none; } /* Hidden ========================================================================== */ /** Add the correct display in IE 10-. */ [hidden] { display: none; } *, *::before, *::after { box-sizing: inherit; } html { box-sizing: border-box; font-size: 20px; line-height: 1.5; -webkit-tap-highlight-color: transparent; } body { background: #fff; color: #3b4351; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif; font-size: .8rem; overflow-x: hidden; text-rendering: optimizeLegibility; } a { color: #5755d9; outline: none; text-decoration: none; } a:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } a:focus, a:hover, a:active, a.active { color: #302ecd; text-decoration: underline; } a:visited { color: #807fe2; } h1, h2, h3, h4, h5, h6 { color: inherit; font-weight: 500; line-height: 1.2; margin-bottom: .5em; margin-top: 0; } .h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 500; } h1, .h1 { font-size: 2rem; } h2, .h2 { font-size: 1.6rem; } h3, .h3 { font-size: 1.4rem; } h4, .h4 { font-size: 1.2rem; } h5, .h5 { font-size: 1rem; } h6, .h6 { font-size: .8rem; } p { margin: 0 0 1.2rem; } a, ins, u { -webkit-text-decoration-skip: ink edges; text-decoration-skip: ink edges; } abbr[title] { border-bottom: .05rem dotted; cursor: help; text-decoration: none; } kbd { background: #303742; border-radius: .1rem; color: #fff; font-size: .7rem; line-height: 1.25; padding: .1rem .2rem; } mark { background: #ffe9b3; border-bottom: .05rem solid #ffd367; border-radius: .1rem; color: #3b4351; padding: .05rem .1rem 0; } blockquote { border-left: .1rem solid #dadee4; margin-left: 0; padding: .4rem .8rem; } blockquote p:last-child { margin-bottom: 0; } ul, ol { margin: .8rem 0 .8rem .8rem; padding: 0; } ul ul, ul ol, ol ul, ol ol { margin: .8rem 0 .8rem .8rem; } ul li, ol li { margin-top: .4rem; } ul { list-style: disc inside; } ul ul { list-style-type: circle; } ol { list-style: decimal inside; } ol ol { list-style-type: lower-alpha; } dl dt { font-weight: bold; } dl dd { margin: .4rem 0 .8rem 0; } html:lang(zh), html:lang(zh-Hans), .lang-zh, .lang-zh-hans { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif; } html:lang(zh-Hant), .lang-zh-hant { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", "Helvetica Neue", sans-serif; } html:lang(ja), .lang-ja { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, "Helvetica Neue", sans-serif; } html:lang(ko), .lang-ko { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Malgun Gothic", "Helvetica Neue", sans-serif; } :lang(zh) ins, :lang(zh) u, :lang(ja) ins, :lang(ja) u, .lang-cjk ins, .lang-cjk u { border-bottom: .05rem solid; text-decoration: none; } :lang(zh) del + del, :lang(zh) del + s, :lang(zh) ins + ins, :lang(zh) ins + u, :lang(zh) s + del, :lang(zh) s + s, :lang(zh) u + ins, :lang(zh) u + u, :lang(ja) del + del, :lang(ja) del + s, :lang(ja) ins + ins, :lang(ja) ins + u, :lang(ja) s + del, :lang(ja) s + s, :lang(ja) u + ins, :lang(ja) u + u, .lang-cjk del + del, .lang-cjk del + s, .lang-cjk ins + ins, .lang-cjk ins + u, .lang-cjk s + del, .lang-cjk s + s, .lang-cjk u + ins, .lang-cjk u + u { margin-left: .125em; } .table { border-collapse: collapse; border-spacing: 0; text-align: right; width: 100%; } .table.table-striped tbody tr:nth-of-type(odd) { background: #f7f8f9; } .table tbody tr.active, .table.table-striped tbody tr.active { background: #eef0f3; } .table.table-hover tbody tr:hover { background: #eef0f3; } .table.table-scroll { display: block; overflow-x: auto; padding-bottom: .75rem; white-space: nowrap; } .table td, .table th { border-bottom: .05rem solid #dadee4; padding: .6rem .4rem; } .table th { border-bottom-width: .1rem; } .btn { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; border: .05rem solid #5755d9; border-radius: .1rem; color: #5755d9; cursor: pointer; display: inline-block; font-size: .8rem; height: 1.8rem; line-height: 1.2rem; outline: none; padding: .25rem .4rem; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; white-space: nowrap; } .btn:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .btn:focus, .btn:hover { background: #f1f1fc; border-color: #4b48d6; text-decoration: none; } .btn:active, .btn.active { background: #4b48d6; border-color: #3634d2; color: #fff; text-decoration: none; } .btn:active.loading::after, .btn.active.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn[disabled], .btn:disabled, .btn.disabled { cursor: default; opacity: .5; pointer-events: none; } .btn.btn-primary { background: #5755d9; border-color: #4b48d6; color: #fff; } .btn.btn-primary:focus, .btn.btn-primary:hover { background: #4240d4; border-color: #3634d2; color: #fff; } .btn.btn-primary:active, .btn.btn-primary.active { background: #3a38d2; border-color: #302ecd; color: #fff; } .btn.btn-primary.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn.btn-success { background: #32b643; border-color: #2faa3f; color: #fff; } .btn.btn-success:focus { box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2); } .btn.btn-success:focus, .btn.btn-success:hover { background: #30ae40; border-color: #2da23c; color: #fff; } .btn.btn-success:active, .btn.btn-success.active { background: #2a9a39; border-color: #278e34; color: #fff; } .btn.btn-success.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn.btn-error { background: #e85600; border-color: #d95000; color: #fff; } .btn.btn-error:focus { box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .btn.btn-error:focus, .btn.btn-error:hover { background: #de5200; border-color: #cf4d00; color: #fff; } .btn.btn-error:active, .btn.btn-error.active { background: #c44900; border-color: #b54300; color: #fff; } .btn.btn-error.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn.btn-link { background: transparent; border-color: transparent; color: #5755d9; } .btn.btn-link:focus, .btn.btn-link:hover, .btn.btn-link:active, .btn.btn-link.active { color: #302ecd; } .btn.btn-sm { font-size: .7rem; height: 1.4rem; padding: .05rem .3rem; } .btn.btn-lg { font-size: .9rem; height: 2rem; padding: .35rem .6rem; } .btn.btn-block { display: block; width: 100%; } .btn.btn-action { padding-left: 0; padding-right: 0; width: 1.8rem; } .btn.btn-action.btn-sm { width: 1.4rem; } .btn.btn-action.btn-lg { width: 2rem; } .btn.btn-clear { background: transparent; border: 0; color: currentColor; height: 1rem; line-height: .8rem; margin-left: .2rem; margin-right: -2px; opacity: 1; padding: .1rem; text-decoration: none; width: 1rem; } .btn.btn-clear:focus, .btn.btn-clear:hover { background: rgba(247, 248, 249, .5); opacity: .95; } .btn.btn-clear::before { content: "\2715"; } .btn-group { display: -ms-inline-flexbox; display: inline-flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } .btn-group .btn { -ms-flex: 1 0 auto; flex: 1 0 auto; } .btn-group .btn:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } .btn-group .btn:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -.05rem; } .btn-group .btn:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -.05rem; } .btn-group .btn:focus, .btn-group .btn:hover, .btn-group .btn:active, .btn-group .btn.active { z-index: 1; } .btn-group.btn-group-block { display: -ms-flexbox; display: flex; } .btn-group.btn-group-block .btn { -ms-flex: 1 0 0; flex: 1 0 0; } .form-group:not(:last-child) { margin-bottom: .4rem; } fieldset { margin-bottom: .8rem; } legend { font-size: .9rem; font-weight: 500; margin-bottom: .8rem; } .form-label { display: block; line-height: 1.2rem; padding: .3rem 0; } .form-label.label-sm { font-size: .7rem; padding: .1rem 0; } .form-label.label-lg { font-size: .9rem; padding: .4rem 0; } .form-input { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; background-image: none; border: .05rem solid #bcc3ce; border-radius: .1rem; color: #3b4351; display: block; font-size: .8rem; height: 1.8rem; line-height: 1.2rem; max-width: 100%; outline: none; padding: .25rem .4rem; position: relative; transition: background .2s, border .2s, box-shadow .2s, color .2s; width: 100%; } .form-input:focus { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-input:-ms-input-placeholder { color: #bcc3ce; } .form-input::-ms-input-placeholder { color: #bcc3ce; } .form-input::placeholder { color: #bcc3ce; } .form-input.input-sm { font-size: .7rem; height: 1.4rem; padding: .05rem .3rem; } .form-input.input-lg { font-size: .9rem; height: 2rem; padding: .35rem .6rem; } .form-input.input-inline { display: inline-block; vertical-align: middle; width: auto; } .form-input[type="file"] { height: auto; } textarea.form-input, textarea.form-input.input-lg, textarea.form-input.input-sm { height: auto; } .form-input-hint { color: #bcc3ce; font-size: .7rem; margin-top: .2rem; } .has-success .form-input-hint, .is-success + .form-input-hint { color: #32b643; } .has-error .form-input-hint, .is-error + .form-input-hint { color: #e85600; } .form-select { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; border: .05rem solid #bcc3ce; border-radius: .1rem; color: inherit; font-size: .8rem; height: 1.8rem; line-height: 1.2rem; outline: none; padding: .25rem .4rem; vertical-align: middle; width: 100%; } .form-select:focus { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-select::-ms-expand { display: none; } .form-select.select-sm { font-size: .7rem; height: 1.4rem; padding: .05rem 1.1rem .05rem .3rem; } .form-select.select-lg { font-size: .9rem; height: 2rem; padding: .35rem 1.4rem .35rem .6rem; } .form-select[size], .form-select[multiple] { height: auto; padding: .25rem .4rem; } .form-select[size] option, .form-select[multiple] option { padding: .1rem .2rem; } .form-select:not([multiple]):not([size]) { background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center/.4rem .5rem; padding-right: 1.2rem; } .has-icon-left, .has-icon-right { position: relative; } .has-icon-left .form-icon, .has-icon-right .form-icon { height: .8rem; margin: 0 .25rem; position: absolute; top: 50%; transform: translateY(-50%); width: .8rem; z-index: 2; } .has-icon-left .form-icon { left: .05rem; } .has-icon-left .form-input { padding-left: 1.3rem; } .has-icon-right .form-icon { right: .05rem; } .has-icon-right .form-input { padding-right: 1.3rem; } .form-checkbox, .form-radio, .form-switch { display: block; line-height: 1.2rem; margin: .2rem 0; min-height: 1.4rem; padding: .1rem .4rem .1rem 1.2rem; position: relative; } .form-checkbox input, .form-radio input, .form-switch input { clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; position: absolute; width: 1px; } .form-checkbox input:focus + .form-icon, .form-radio input:focus + .form-icon, .form-switch input:focus + .form-icon { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-checkbox input:checked + .form-icon, .form-radio input:checked + .form-icon, .form-switch input:checked + .form-icon { background: #5755d9; border-color: #5755d9; } .form-checkbox .form-icon, .form-radio .form-icon, .form-switch .form-icon { border: .05rem solid #bcc3ce; cursor: pointer; display: inline-block; position: absolute; transition: background .2s, border .2s, box-shadow .2s, color .2s; } .form-checkbox.input-sm, .form-radio.input-sm, .form-switch.input-sm { font-size: .7rem; margin: 0; } .form-checkbox.input-lg, .form-radio.input-lg, .form-switch.input-lg { font-size: .9rem; margin: .3rem 0; } .form-checkbox .form-icon, .form-radio .form-icon { background: #fff; height: .8rem; left: 0; top: .3rem; width: .8rem; } .form-checkbox input:active + .form-icon, .form-radio input:active + .form-icon { background: #eef0f3; } .form-checkbox .form-icon { border-radius: .1rem; } .form-checkbox input:checked + .form-icon::before { background-clip: padding-box; border: .1rem solid #fff; border-left-width: 0; border-top-width: 0; content: ""; height: 9px; left: 50%; margin-left: -3px; margin-top: -6px; position: absolute; top: 50%; transform: rotate(45deg); width: 6px; } .form-checkbox input:indeterminate + .form-icon { background: #5755d9; border-color: #5755d9; } .form-checkbox input:indeterminate + .form-icon::before { background: #fff; content: ""; height: 2px; left: 50%; margin-left: -5px; margin-top: -1px; position: absolute; top: 50%; width: 10px; } .form-radio .form-icon { border-radius: 50%; } .form-radio input:checked + .form-icon::before { background: #fff; border-radius: 50%; content: ""; height: 6px; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 6px; } .form-switch { padding-left: 2rem; } .form-switch .form-icon { background: #bcc3ce; background-clip: padding-box; border-radius: .45rem; height: .9rem; left: 0; top: .25rem; width: 1.6rem; } .form-switch .form-icon::before { background: #fff; border-radius: 50%; content: ""; display: block; height: .8rem; left: 0; position: absolute; top: 0; transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s; width: .8rem; } .form-switch input:checked + .form-icon::before { left: 14px; } .form-switch input:active + .form-icon::before { background: #f7f8f9; } .input-group { display: -ms-flexbox; display: flex; } .input-group .input-group-addon { background: #f7f8f9; border: .05rem solid #bcc3ce; border-radius: .1rem; line-height: 1.2rem; padding: .25rem .4rem; white-space: nowrap; } .input-group .input-group-addon.addon-sm { font-size: .7rem; padding: .05rem .3rem; } .input-group .input-group-addon.addon-lg { font-size: .9rem; padding: .35rem .6rem; } .input-group .form-input, .input-group .form-select { -ms-flex: 1 1 auto; flex: 1 1 auto; width: 1%; } .input-group .input-group-btn { z-index: 1; } .input-group .form-input:first-child:not(:last-child), .input-group .form-select:first-child:not(:last-child), .input-group .input-group-addon:first-child:not(:last-child), .input-group .input-group-btn:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } .input-group .form-input:not(:first-child):not(:last-child), .input-group .form-select:not(:first-child):not(:last-child), .input-group .input-group-addon:not(:first-child):not(:last-child), .input-group .input-group-btn:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -.05rem; } .input-group .form-input:last-child:not(:first-child), .input-group .form-select:last-child:not(:first-child), .input-group .input-group-addon:last-child:not(:first-child), .input-group .input-group-btn:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -.05rem; } .input-group .form-input:focus, .input-group .form-select:focus, .input-group .input-group-addon:focus, .input-group .input-group-btn:focus { z-index: 2; } .input-group .form-select { width: auto; } .input-group.input-inline { display: -ms-inline-flexbox; display: inline-flex; } .has-success .form-input, .form-input.is-success, .has-success .form-select, .form-select.is-success { background: #f9fdfa; border-color: #32b643; } .has-success .form-input:focus, .form-input.is-success:focus, .has-success .form-select:focus, .form-select.is-success:focus { box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2); } .has-error .form-input, .form-input.is-error, .has-error .form-select, .form-select.is-error { background: #fffaf7; border-color: #e85600; } .has-error .form-input:focus, .form-input.is-error:focus, .has-error .form-select:focus, .form-select.is-error:focus { box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .has-error .form-checkbox .form-icon, .form-checkbox.is-error .form-icon, .has-error .form-radio .form-icon, .form-radio.is-error .form-icon, .has-error .form-switch .form-icon, .form-switch.is-error .form-icon { border-color: #e85600; } .has-error .form-checkbox input:checked + .form-icon, .form-checkbox.is-error input:checked + .form-icon, .has-error .form-radio input:checked + .form-icon, .form-radio.is-error input:checked + .form-icon, .has-error .form-switch input:checked + .form-icon, .form-switch.is-error input:checked + .form-icon { background: #e85600; border-color: #e85600; } .has-error .form-checkbox input:focus + .form-icon, .form-checkbox.is-error input:focus + .form-icon, .has-error .form-radio input:focus + .form-icon, .form-radio.is-error input:focus + .form-icon, .has-error .form-switch input:focus + .form-icon, .form-switch.is-error input:focus + .form-icon { border-color: #e85600; box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .has-error .form-checkbox input:indeterminate + .form-icon, .form-checkbox.is-error input:indeterminate + .form-icon { background: #e85600; border-color: #e85600; } .form-input:not(:-ms-input-placeholder):invalid { border-color: #e85600; } .form-input:not(:placeholder-shown):invalid { border-color: #e85600; } .form-input:not(:-ms-input-placeholder):invalid:focus { background: #fffaf7; box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .form-input:not(:placeholder-shown):invalid:focus { background: #fffaf7; box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .form-input:not(:-ms-input-placeholder):invalid + .form-input-hint { color: #e85600; } .form-input:not(:placeholder-shown):invalid + .form-input-hint { color: #e85600; } .form-input:disabled, .form-input.disabled, .form-select:disabled, .form-select.disabled { background-color: #eef0f3; cursor: not-allowed; opacity: .5; } .form-input[readonly] { background-color: #f7f8f9; } input:disabled + .form-icon, input.disabled + .form-icon { background: #eef0f3; cursor: not-allowed; opacity: .5; } .form-switch input:disabled + .form-icon::before, .form-switch input.disabled + .form-icon::before { background: #fff; } .form-horizontal { padding: .4rem 0; } .form-horizontal .form-group { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } .form-inline { display: inline-block; } .label { background: #eef0f3; border-radius: .1rem; color: #455060; display: inline-block; line-height: 1.25; padding: .1rem .2rem; } .label.label-rounded { border-radius: 5rem; padding-left: .4rem; padding-right: .4rem; } .label.label-primary { background: #5755d9; color: #fff; } .label.label-secondary { background: #f1f1fc; color: #5755d9; } .label.label-success { background: #32b643; color: #fff; } .label.label-warning { background: #ffb700; color: #fff; } .label.label-error { background: #e85600; color: #fff; } code { background: #fcf2f2; border-radius: .1rem; color: #d73e48; font-size: 85%; line-height: 1.25; padding: .1rem .2rem; } .code { border-radius: .1rem; color: #3b4351; position: relative; } .code::before { color: #bcc3ce; content: attr(data-lang); font-size: .7rem; position: absolute; right: .4rem; top: .1rem; } .code code { background: #f7f8f9; color: inherit; display: block; line-height: 1.5; overflow-x: auto; padding: 1rem; width: 100%; } .img-responsive { display: block; height: auto; max-width: 100%; } .img-fit-cover { object-fit: cover; } .img-fit-contain { object-fit: contain; } .video-responsive { display: block; overflow: hidden; padding: 0; position: relative; width: 100%; } .video-responsive::before { content: ""; display: block; padding-bottom: 56.25%; } .video-responsive iframe, .video-responsive object, .video-responsive embed { border: 0; bottom: 0; height: 100%; left: 0; position: absolute; right: 0; top: 0; width: 100%; } video.video-responsive { height: auto; max-width: 100%; } video.video-responsive::before { content: none; } .video-responsive-4-3::before { padding-bottom: 75%; } .video-responsive-1-1::before { padding-bottom: 100%; } .figure { margin: 0 0 .4rem 0; } .figure .figure-caption { color: #66758c; margin-top: .4rem; } .container { margin-left: auto; margin-right: auto; padding-left: .4rem; padding-right: .4rem; width: 100%; } .container.grid-xl { max-width: 1296px; } .container.grid-lg { max-width: 976px; } .container.grid-md { max-width: 856px; } .container.grid-sm { max-width: 616px; } .container.grid-xs { max-width: 496px; } .show-xs, .show-sm, .show-md, .show-lg, .show-xl { display: none !important; } .cols, .columns { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-left: -.4rem; margin-right: -.4rem; } .cols.col-gapless, .columns.col-gapless { margin-left: 0; margin-right: 0; } .cols.col-gapless > .column, .columns.col-gapless > .column { padding-left: 0; padding-right: 0; } .cols.col-oneline, .columns.col-oneline { -ms-flex-wrap: nowrap; flex-wrap: nowrap; overflow-x: auto; } [class~="col-"], .column { -ms-flex: 1; flex: 1; max-width: 100%; padding-left: .4rem; padding-right: .4rem; } [class~="col-"].col-12, [class~="col-"].col-11, [class~="col-"].col-10, [class~="col-"].col-9, [class~="col-"].col-8, [class~="col-"].col-7, [class~="col-"].col-6, [class~="col-"].col-5, [class~="col-"].col-4, [class~="col-"].col-3, [class~="col-"].col-2, [class~="col-"].col-1, [class~="col-"].col-auto, .column.col-12, .column.col-11, .column.col-10, .column.col-9, .column.col-8, .column.col-7, .column.col-6, .column.col-5, .column.col-4, .column.col-3, .column.col-2, .column.col-1, .column.col-auto { -ms-flex: none; flex: none; } .col-12 { width: 100%; } .col-11 { width: 91.66666667%; } .col-10 { width: 83.33333333%; } .col-9 { width: 75%; } .col-8 { width: 66.66666667%; } .col-7 { width: 58.33333333%; } .col-6 { width: 50%; } .col-5 { width: 41.66666667%; } .col-4 { width: 33.33333333%; } .col-3 { width: 25%; } .col-2 { width: 16.66666667%; } .col-1 { width: 8.33333333%; } .col-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; max-width: none; width: auto; } .col-mx-auto { margin-left: auto; margin-right: auto; } .col-ml-auto { margin-left: auto; } .col-mr-auto { margin-right: auto; } @media (max-width: 1280px) { .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl-auto { -ms-flex: none; flex: none; } .col-xl-12 { width: 100%; } .col-xl-11 { width: 91.66666667%; } .col-xl-10 { width: 83.33333333%; } .col-xl-9 { width: 75%; } .col-xl-8 { width: 66.66666667%; } .col-xl-7 { width: 58.33333333%; } .col-xl-6 { width: 50%; } .col-xl-5 { width: 41.66666667%; } .col-xl-4 { width: 33.33333333%; } .col-xl-3 { width: 25%; } .col-xl-2 { width: 16.66666667%; } .col-xl-1 { width: 8.33333333%; } .col-xl-auto { width: auto; } .hide-xl { display: none !important; } .show-xl { display: block !important; } } @media (max-width: 960px) { .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg-auto { -ms-flex: none; flex: none; } .col-lg-12 { width: 100%; } .col-lg-11 { width: 91.66666667%; } .col-lg-10 { width: 83.33333333%; } .col-lg-9 { width: 75%; } .col-lg-8 { width: 66.66666667%; } .col-lg-7 { width: 58.33333333%; } .col-lg-6 { width: 50%; } .col-lg-5 { width: 41.66666667%; } .col-lg-4 { width: 33.33333333%; } .col-lg-3 { width: 25%; } .col-lg-2 { width: 16.66666667%; } .col-lg-1 { width: 8.33333333%; } .col-lg-auto { width: auto; } .hide-lg { display: none !important; } .show-lg { display: block !important; } } @media (max-width: 840px) { .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md-auto { -ms-flex: none; flex: none; } .col-md-12 { width: 100%; } .col-md-11 { width: 91.66666667%; } .col-md-10 { width: 83.33333333%; } .col-md-9 { width: 75%; } .col-md-8 { width: 66.66666667%; } .col-md-7 { width: 58.33333333%; } .col-md-6 { width: 50%; } .col-md-5 { width: 41.66666667%; } .col-md-4 { width: 33.33333333%; } .col-md-3 { width: 25%; } .col-md-2 { width: 16.66666667%; } .col-md-1 { width: 8.33333333%; } .col-md-auto { width: auto; } .hide-md { display: none !important; } .show-md { display: block !important; } } @media (max-width: 600px) { .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm-auto { -ms-flex: none; flex: none; } .col-sm-12 { width: 100%; } .col-sm-11 { width: 91.66666667%; } .col-sm-10 { width: 83.33333333%; } .col-sm-9 { width: 75%; } .col-sm-8 { width: 66.66666667%; } .col-sm-7 { width: 58.33333333%; } .col-sm-6 { width: 50%; } .col-sm-5 { width: 41.66666667%; } .col-sm-4 { width: 33.33333333%; } .col-sm-3 { width: 25%; } .col-sm-2 { width: 16.66666667%; } .col-sm-1 { width: 8.33333333%; } .col-sm-auto { width: auto; } .hide-sm { display: none !important; } .show-sm { display: block !important; } } @media (max-width: 480px) { .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs-auto { -ms-flex: none; flex: none; } .col-xs-12 { width: 100%; } .col-xs-11 { width: 91.66666667%; } .col-xs-10 { width: 83.33333333%; } .col-xs-9 { width: 75%; } .col-xs-8 { width: 66.66666667%; } .col-xs-7 { width: 58.33333333%; } .col-xs-6 { width: 50%; } .col-xs-5 { width: 41.66666667%; } .col-xs-4 { width: 33.33333333%; } .col-xs-3 { width: 25%; } .col-xs-2 { width: 16.66666667%; } .col-xs-1 { width: 8.33333333%; } .col-xs-auto { width: auto; } .hide-xs { display: none !important; } .show-xs { display: block !important; } } .hero { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; -ms-flex-pack: justify; justify-content: space-between; padding-bottom: 4rem; padding-top: 4rem; } .hero.hero-sm { padding-bottom: 2rem; padding-top: 2rem; } .hero.hero-lg { padding-bottom: 8rem; padding-top: 8rem; } .hero .hero-body { padding: .4rem; } .navbar { align-items: stretch; display: -ms-flexbox; display: flex; -ms-flex-align: stretch; -ms-flex-pack: justify; -ms-flex-wrap: wrap; flex-wrap: wrap; justify-content: space-between; } .navbar .navbar-section { align-items: center; display: -ms-flexbox; display: flex; -ms-flex: 1 0 0; flex: 1 0 0; -ms-flex-align: center; } .navbar .navbar-section:not(:first-child):last-child { -ms-flex-pack: end; justify-content: flex-end; } .navbar .navbar-center { align-items: center; display: -ms-flexbox; display: flex; -ms-flex: 0 0 auto; flex: 0 0 auto; -ms-flex-align: center; } .navbar .navbar-brand { font-size: .9rem; text-decoration: none; } .accordion input:checked ~ .accordion-header > .icon:first-child, .accordion[open] .accordion-header > .icon:first-child { transform: rotate(90deg); } .accordion input:checked ~ .accordion-body, .accordion[open] .accordion-body { max-height: 50rem; } .accordion .accordion-header { display: block; padding: .2rem .4rem; } .accordion .accordion-header .icon { transition: transform .25s; } .accordion .accordion-body { margin-bottom: .4rem; max-height: 0; overflow: hidden; transition: max-height .25s; } summary.accordion-header::-webkit-details-marker { display: none; } .avatar { background: #5755d9; border-radius: 50%; color: rgba(255, 255, 255, .85); display: inline-block; font-size: .8rem; font-weight: 300; height: 1.6rem; line-height: 1.25; margin: 0; position: relative; vertical-align: middle; width: 1.6rem; } .avatar.avatar-xs { font-size: .4rem; height: .8rem; width: .8rem; } .avatar.avatar-sm { font-size: .6rem; height: 1.2rem; width: 1.2rem; } .avatar.avatar-lg { font-size: 1.2rem; height: 2.4rem; width: 2.4rem; } .avatar.avatar-xl { font-size: 1.6rem; height: 3.2rem; width: 3.2rem; } .avatar img { border-radius: 50%; height: 100%; position: relative; width: 100%; z-index: 1; } .avatar .avatar-icon, .avatar .avatar-presence { background: #fff; bottom: 14.64%; height: 50%; padding: .1rem; position: absolute; right: 14.64%; transform: translate(50%, 50%); width: 50%; z-index: 2; } .avatar .avatar-presence { background: #bcc3ce; border-radius: 50%; box-shadow: 0 0 0 .1rem #fff; height: .5em; width: .5em; } .avatar .avatar-presence.online { background: #32b643; } .avatar .avatar-presence.busy { background: #e85600; } .avatar .avatar-presence.away { background: #ffb700; } .avatar[data-initial]::before { color: currentColor; content: attr(data-initial); left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); z-index: 1; } .badge { position: relative; white-space: nowrap; } .badge[data-badge]::after, .badge:not([data-badge])::after { background: #5755d9; background-clip: padding-box; border-radius: .5rem; box-shadow: 0 0 0 .1rem #fff; color: #fff; content: attr(data-badge); display: inline-block; transform: translate(-.05rem, -.5rem); } .badge[data-badge]::after { font-size: .7rem; height: .9rem; line-height: 1; min-width: .9rem; padding: .1rem .2rem; text-align: center; white-space: nowrap; } .badge:not([data-badge])::after, .badge[data-badge=""]::after { height: 6px; min-width: 6px; padding: 0; width: 6px; } .badge.btn::after { position: absolute; right: 0; top: 0; transform: translate(50%, -50%); } .badge.avatar::after { position: absolute; right: 14.64%; top: 14.64%; transform: translate(50%, -50%); z-index: 100; } .breadcrumb { list-style: none; margin: .2rem 0; padding: .2rem 0; } .breadcrumb .breadcrumb-item { color: #66758c; display: inline-block; margin: 0; padding: .2rem 0; } .breadcrumb .breadcrumb-item:not(:last-child) { margin-right: .2rem; } .breadcrumb .breadcrumb-item:not(:last-child) a { color: #66758c; } .breadcrumb .breadcrumb-item:not(:first-child)::before { color: #66758c; content: "/"; padding-right: .4rem; } .bar { background: #eef0f3; border-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; height: .8rem; width: 100%; } .bar.bar-sm { height: .2rem; } .bar .bar-item { background: #5755d9; color: #fff; display: block; -ms-flex-negative: 0; flex-shrink: 0; font-size: .7rem; height: 100%; line-height: .8rem; position: relative; text-align: center; width: 0; } .bar .bar-item:first-child { border-bottom-left-radius: .1rem; border-top-left-radius: .1rem; } .bar .bar-item:last-child { border-bottom-right-radius: .1rem; border-top-right-radius: .1rem; -ms-flex-negative: 1; flex-shrink: 1; } .bar-slider { height: .1rem; margin: .4rem 0; position: relative; } .bar-slider .bar-item { left: 0; padding: 0; position: absolute; } .bar-slider .bar-item:not(:last-child):first-child { background: #eef0f3; z-index: 1; } .bar-slider .bar-slider-btn { background: #5755d9; border: 0; border-radius: 50%; height: .6rem; padding: 0; position: absolute; right: 0; top: 50%; transform: translate(50%, -50%); width: .6rem; } .bar-slider .bar-slider-btn:active { box-shadow: 0 0 0 .1rem #5755d9; } .card { background: #fff; border: .05rem solid #dadee4; border-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } .card .card-header, .card .card-body, .card .card-footer { padding: .8rem; padding-bottom: 0; } .card .card-header:last-child, .card .card-body:last-child, .card .card-footer:last-child { padding-bottom: .8rem; } .card .card-body { -ms-flex: 1 1 auto; flex: 1 1 auto; } .card .card-image { padding-top: .8rem; } .card .card-image:first-child { padding-top: 0; } .card .card-image:first-child img { border-top-left-radius: .1rem; border-top-right-radius: .1rem; } .card .card-image:last-child img { border-bottom-left-radius: .1rem; border-bottom-right-radius: .1rem; } .chip { align-items: center; background: #eef0f3; border-radius: 5rem; display: -ms-inline-flexbox; display: inline-flex; -ms-flex-align: center; font-size: 90%; height: 1.2rem; line-height: .8rem; margin: .1rem; max-width: 320px; overflow: hidden; padding: .2rem .4rem; text-decoration: none; text-overflow: ellipsis; vertical-align: middle; white-space: nowrap; } .chip.active { background: #5755d9; color: #fff; } .chip .avatar { margin-left: -.4rem; margin-right: .2rem; } .chip .btn-clear { border-radius: 50%; transform: scale(.75); } .dropdown { display: inline-block; position: relative; } .dropdown .menu { animation: slide-down .15s ease 1; display: none; left: 0; max-height: 50vh; overflow-y: auto; position: absolute; top: 100%; } .dropdown.dropdown-right .menu { left: auto; right: 0; } .dropdown.active .menu, .dropdown .dropdown-toggle:focus + .menu, .dropdown .menu:hover { display: block; } .dropdown .btn-group .dropdown-toggle:nth-last-child(2) { border-bottom-right-radius: .1rem; border-top-right-radius: .1rem; } .empty { background: #f7f8f9; border-radius: .1rem; color: #66758c; padding: 3.2rem 1.6rem; text-align: center; } .empty .empty-icon { margin-bottom: .8rem; } .empty .empty-title, .empty .empty-subtitle { margin: .4rem auto; } .empty .empty-action { margin-top: .8rem; } .menu { background: #fff; border-radius: .1rem; box-shadow: 0 .05rem .2rem rgba(48, 55, 66, .3); list-style: none; margin: 0; min-width: 180px; padding: .4rem; transform: translateY(.2rem); z-index: 300; } .menu.menu-nav { background: transparent; box-shadow: none; } .menu .menu-item { margin-top: 0; padding: 0 .4rem; position: relative; text-decoration: none; } .menu .menu-item > a { border-radius: .1rem; color: inherit; display: block; margin: 0 -.4rem; padding: .2rem .4rem; text-decoration: none; } .menu .menu-item > a:focus, .menu .menu-item > a:hover { background: #f1f1fc; color: #5755d9; } .menu .menu-item > a:active, .menu .menu-item > a.active { background: #f1f1fc; color: #5755d9; } .menu .menu-item .form-checkbox, .menu .menu-item .form-radio, .menu .menu-item .form-switch { margin: .1rem 0; } .menu .menu-item + .menu-item { margin-top: .2rem; } .menu .menu-badge { align-items: center; display: -ms-flexbox; display: flex; -ms-flex-align: center; height: 100%; position: absolute; right: 0; top: 0; } .menu .menu-badge .label { margin-right: .4rem; } .modal { align-items: center; bottom: 0; display: none; -ms-flex-align: center; -ms-flex-pack: center; justify-content: center; left: 0; opacity: 0; overflow: hidden; padding: .4rem; position: fixed; right: 0; top: 0; } .modal:target, .modal.active { display: -ms-flexbox; display: flex; opacity: 1; z-index: 400; } .modal:target .modal-overlay, .modal.active .modal-overlay { background: rgba(247, 248, 249, .75); bottom: 0; cursor: default; display: block; left: 0; position: absolute; right: 0; top: 0; } .modal:target .modal-container, .modal.active .modal-container { animation: slide-down .2s ease 1; z-index: 1; } .modal.modal-sm .modal-container { max-width: 320px; padding: 0 .4rem; } .modal.modal-lg .modal-overlay { background: #fff; } .modal.modal-lg .modal-container { box-shadow: none; max-width: 960px; } .modal-container { background: #fff; border-radius: .1rem; box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3); display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; max-height: 75vh; max-width: 640px; padding: 0 .8rem; width: 100%; } .modal-container.modal-fullheight { max-height: 100vh; } .modal-container .modal-header { color: #303742; padding: .8rem; } .modal-container .modal-body { overflow-y: auto; padding: .8rem; position: relative; } .modal-container .modal-footer { padding: .8rem; text-align: right; } .nav { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; list-style: none; margin: .2rem 0; } .nav .nav-item a { color: #66758c; padding: .2rem .4rem; text-decoration: none; } .nav .nav-item a:focus, .nav .nav-item a:hover { color: #5755d9; } .nav .nav-item.active > a { color: #505c6e; font-weight: bold; } .nav .nav-item.active > a:focus, .nav .nav-item.active > a:hover { color: #5755d9; } .nav .nav { margin-bottom: .4rem; margin-left: .8rem; } .pagination { display: -ms-flexbox; display: flex; list-style: none; margin: .2rem 0; padding: .2rem 0; } .pagination .page-item { margin: .2rem .05rem; } .pagination .page-item span { display: inline-block; padding: .2rem .2rem; } .pagination .page-item a { border-radius: .1rem; display: inline-block; padding: .2rem .4rem; text-decoration: none; } .pagination .page-item a:focus, .pagination .page-item a:hover { color: #5755d9; } .pagination .page-item.disabled a { cursor: default; opacity: .5; pointer-events: none; } .pagination .page-item.active a { background: #5755d9; color: #fff; } .pagination .page-item.page-prev, .pagination .page-item.page-next { -ms-flex: 1 0 50%; flex: 1 0 50%; } .pagination .page-item.page-next { text-align: right; } .pagination .page-item .page-item-title { margin: 0; } .pagination .page-item .page-item-subtitle { margin: 0; opacity: .5; } .panel { border: .05rem solid #dadee4; border-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } .panel .panel-header, .panel .panel-footer { -ms-flex: 0 0 auto; flex: 0 0 auto; padding: .8rem; } .panel .panel-nav { -ms-flex: 0 0 auto; flex: 0 0 auto; } .panel .panel-body { -ms-flex: 1 1 auto; flex: 1 1 auto; overflow-y: auto; padding: 0 .8rem; } .popover { display: inline-block; position: relative; } .popover .popover-container { left: 50%; opacity: 0; padding: .4rem; position: absolute; top: 0; transform: translate(-50%, -50%) scale(0); transition: transform .2s; width: 320px; z-index: 300; } .popover *:focus + .popover-container, .popover:hover .popover-container { display: block; opacity: 1; transform: translate(-50%, -100%) scale(1); } .popover.popover-right .popover-container { left: 100%; top: 50%; } .popover.popover-right *:focus + .popover-container, .popover.popover-right:hover .popover-container { transform: translate(0, -50%) scale(1); } .popover.popover-bottom .popover-container { left: 50%; top: 100%; } .popover.popover-bottom *:focus + .popover-container, .popover.popover-bottom:hover .popover-container { transform: translate(-50%, 0) scale(1); } .popover.popover-left .popover-container { left: 0; top: 50%; } .popover.popover-left *:focus + .popover-container, .popover.popover-left:hover .popover-container { transform: translate(-100%, -50%) scale(1); } .popover .card { border: 0; box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3); } .step { display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; list-style: none; margin: .2rem 0; width: 100%; } .step .step-item { -ms-flex: 1 1 0; flex: 1 1 0; margin-top: 0; min-height: 1rem; position: relative; text-align: center; } .step .step-item:not(:first-child)::before { background: #5755d9; content: ""; height: 2px; left: -50%; position: absolute; top: 9px; width: 100%; } .step .step-item a { color: #5755d9; display: inline-block; padding: 20px 10px 0; text-decoration: none; } .step .step-item a::before { background: #5755d9; border: .1rem solid #fff; border-radius: 50%; content: ""; display: block; height: .6rem; left: 50%; position: absolute; top: .2rem; transform: translateX(-50%); width: .6rem; z-index: 1; } .step .step-item.active a::before { background: #fff; border: .1rem solid #5755d9; } .step .step-item.active ~ .step-item::before { background: #dadee4; } .step .step-item.active ~ .step-item a { color: #bcc3ce; } .step .step-item.active ~ .step-item a::before { background: #dadee4; } .tab { align-items: center; border-bottom: .05rem solid #dadee4; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-wrap: wrap; flex-wrap: wrap; list-style: none; margin: .2rem 0 .15rem 0; } .tab .tab-item { margin-top: 0; } .tab .tab-item a { border-bottom: .1rem solid transparent; color: inherit; display: block; margin: 0 .4rem 0 0; padding: .4rem .2rem .3rem .2rem; text-decoration: none; } .tab .tab-item a:focus, .tab .tab-item a:hover { color: #5755d9; } .tab .tab-item.active a, .tab .tab-item a.active { border-bottom-color: #5755d9; color: #5755d9; } .tab .tab-item.tab-action { -ms-flex: 1 0 auto; flex: 1 0 auto; text-align: right; } .tab .tab-item .btn-clear { margin-top: -.2rem; } .tab.tab-block .tab-item { -ms-flex: 1 0 0; flex: 1 0 0; text-align: center; } .tab.tab-block .tab-item a { margin: 0; } .tab.tab-block .tab-item .badge[data-badge]::after { position: absolute; right: .1rem; top: .1rem; transform: translate(0, 0); } .tab:not(.tab-block) .badge { padding-right: 0; } .tile { align-content: space-between; align-items: flex-start; display: -ms-flexbox; display: flex; -ms-flex-align: start; -ms-flex-line-pack: justify; } .tile .tile-icon, .tile .tile-action { -ms-flex: 0 0 auto; flex: 0 0 auto; } .tile .tile-content { -ms-flex: 1 1 auto; flex: 1 1 auto; } .tile .tile-content:not(:first-child) { padding-left: .4rem; } .tile .tile-content:not(:last-child) { padding-right: .4rem; } .tile .tile-title, .tile .tile-subtitle { line-height: 1.2rem; } .tile.tile-centered { align-items: center; -ms-flex-align: center; } .tile.tile-centered .tile-content { overflow: hidden; } .tile.tile-centered .tile-title, .tile.tile-centered .tile-subtitle { margin-bottom: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .toast { background: rgba(48, 55, 66, .95); border: .05rem solid #303742; border-color: #303742; border-radius: .1rem; color: #fff; display: block; padding: .4rem; width: 100%; } .toast.toast-primary { background: rgba(87, 85, 217, .95); border-color: #5755d9; } .toast.toast-success { background: rgba(50, 182, 67, .95); border-color: #32b643; } .toast.toast-warning { background: rgba(255, 183, 0, .95); border-color: #ffb700; } .toast.toast-error { background: rgba(232, 86, 0, .95); border-color: #e85600; } .toast a { color: #fff; text-decoration: underline; } .toast a:focus, .toast a:hover, .toast a:active, .toast a.active { opacity: .75; } .toast .btn-clear { margin: .1rem; } .toast p:last-child { margin-bottom: 0; } .tooltip { position: relative; } .tooltip::after { background: rgba(48, 55, 66, .95); border-radius: .1rem; bottom: 100%; color: #fff; content: attr(data-tooltip); display: block; font-size: .7rem; left: 50%; max-width: 320px; opacity: 0; overflow: hidden; padding: .2rem .4rem; pointer-events: none; position: absolute; text-overflow: ellipsis; transform: translate(-50%, .4rem); transition: opacity .2s, transform .2s; white-space: pre; z-index: 300; } .tooltip:focus::after, .tooltip:hover::after { opacity: 1; transform: translate(-50%, -.2rem); } .tooltip[disabled], .tooltip.disabled { pointer-events: auto; } .tooltip.tooltip-right::after { bottom: 50%; left: 100%; transform: translate(-.2rem, 50%); } .tooltip.tooltip-right:focus::after, .tooltip.tooltip-right:hover::after { transform: translate(.2rem, 50%); } .tooltip.tooltip-bottom::after { bottom: auto; top: 100%; transform: translate(-50%, -.4rem); } .tooltip.tooltip-bottom:focus::after, .tooltip.tooltip-bottom:hover::after { transform: translate(-50%, .2rem); } .tooltip.tooltip-left::after { bottom: 50%; left: auto; right: 100%; transform: translate(.4rem, 50%); } .tooltip.tooltip-left:focus::after, .tooltip.tooltip-left:hover::after { transform: translate(-.2rem, 50%); } @keyframes loading { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @keyframes slide-down { 0% { opacity: 0; transform: translateY(-1.6rem); } 100% { opacity: 1; transform: translateY(0); } } .text-primary { color: #5755d9 !important; } a.text-primary:focus, a.text-primary:hover { color: #4240d4; } a.text-primary:visited { color: #6c6ade; } .text-secondary { color: #e5e5f9 !important; } a.text-secondary:focus, a.text-secondary:hover { color: #d1d0f4; } a.text-secondary:visited { color: #fafafe; } .text-gray { color: #bcc3ce !important; } a.text-gray:focus, a.text-gray:hover { color: #adb6c4; } a.text-gray:visited { color: #cbd0d9; } .text-light { color: #fff !important; } a.text-light:focus, a.text-light:hover { color: #f2f2f2; } a.text-light:visited { color: white; } .text-dark { color: #3b4351 !important; } a.text-dark:focus, a.text-dark:hover { color: #303742; } a.text-dark:visited { color: #455060; } .text-success { color: #32b643 !important; } a.text-success:focus, a.text-success:hover { color: #2da23c; } a.text-success:visited { color: #39c94b; } .text-warning { color: #ffb700 !important; } a.text-warning:focus, a.text-warning:hover { color: #e6a500; } a.text-warning:visited { color: #ffbe1a; } .text-error { color: #e85600 !important; } a.text-error:focus, a.text-error:hover { color: #cf4d00; } a.text-error:visited { color: #ff6003; } .bg-primary { background: #5755d9 !important; color: #fff; } .bg-secondary { background: #f1f1fc !important; } .bg-dark { background: #303742 !important; color: #fff; } .bg-gray { background: #f7f8f9 !important; } .bg-success { background: #32b643 !important; color: #fff; } .bg-warning { background: #ffb700 !important; color: #fff; } .bg-error { background: #e85600 !important; color: #fff; } .c-hand { cursor: pointer; } .c-move { cursor: move; } .c-zoom-in { cursor: zoom-in; } .c-zoom-out { cursor: zoom-out; } .c-not-allowed { cursor: not-allowed; } .c-auto { cursor: auto; } .d-block { display: block; } .d-inline { display: inline; } .d-inline-block { display: inline-block; } .d-flex { display: -ms-flexbox; display: flex; } .d-inline-flex { display: -ms-inline-flexbox; display: inline-flex; } .d-none, .d-hide { display: none !important; } .d-visible { visibility: visible; } .d-invisible { visibility: hidden; } .text-hide { background: transparent; border: 0; color: transparent; font-size: 0; line-height: 0; text-shadow: none; } .text-assistive { border: 0; clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } .divider, .divider-vert { display: block; position: relative; } .divider[data-content]::after, .divider-vert[data-content]::after { background: #fff; color: #bcc3ce; content: attr(data-content); display: inline-block; font-size: .7rem; padding: 0 .4rem; transform: translateY(-.65rem); } .divider { border-top: .05rem solid #f1f3f5; height: .05rem; margin: .4rem 0; } .divider[data-content] { margin: .8rem 0; } .divider-vert { display: block; padding: .8rem; } .divider-vert::before { border-left: .05rem solid #dadee4; bottom: .4rem; content: ""; display: block; left: 50%; position: absolute; top: .4rem; transform: translateX(-50%); } .divider-vert[data-content]::after { left: 50%; padding: .2rem 0; position: absolute; top: 50%; transform: translate(-50%, -50%); } .loading { color: transparent !important; min-height: .8rem; pointer-events: none; position: relative; } .loading::after { animation: loading 500ms infinite linear; background: transparent; border: .1rem solid #5755d9; border-radius: 50%; border-right-color: transparent; border-top-color: transparent; content: ""; display: block; height: .8rem; left: 50%; margin-left: -.4rem; margin-top: -.4rem; opacity: 1; padding: 0; position: absolute; top: 50%; width: .8rem; z-index: 1; } .loading.loading-lg { min-height: 2rem; } .loading.loading-lg::after { height: 1.6rem; margin-left: -.8rem; margin-top: -.8rem; width: 1.6rem; } .clearfix::after { clear: both; content: ""; display: table; } .float-left { float: left !important; } .float-right { float: right !important; } .p-relative { position: relative !important; } .p-absolute { position: absolute !important; } .p-fixed { position: fixed !important; } .p-sticky { position: -webkit-sticky !important; position: sticky !important; } .p-centered { display: block; float: none; margin-left: auto; margin-right: auto; } .flex-centered { align-items: center; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-pack: center; justify-content: center; } .m-0 { margin: 0 !important; } .mb-0 { margin-bottom: 0 !important; } .ml-0 { margin-left: 0 !important; } .mr-0 { margin-right: 0 !important; } .mt-0 { margin-top: 0 !important; } .mx-0 { margin-left: 0 !important; margin-right: 0 !important; } .my-0 { margin-bottom: 0 !important; margin-top: 0 !important; } .m-1 { margin: .2rem !important; } .mb-1 { margin-bottom: .2rem !important; } .ml-1 { margin-left: .2rem !important; } .mr-1 { margin-right: .2rem !important; } .mt-1 { margin-top: .2rem !important; } .mx-1 { margin-left: .2rem !important; margin-right: .2rem !important; } .my-1 { margin-bottom: .2rem !important; margin-top: .2rem !important; } .m-2 { margin: .4rem !important; } .mb-2 { margin-bottom: .4rem !important; } .ml-2 { margin-left: .4rem !important; } .mr-2 { margin-right: .4rem !important; } .mt-2 { margin-top: .4rem !important; } .mx-2 { margin-left: .4rem !important; margin-right: .4rem !important; } .my-2 { margin-bottom: .4rem !important; margin-top: .4rem !important; } .p-0 { padding: 0 !important; } .pb-0 { padding-bottom: 0 !important; } .pl-0 { padding-left: 0 !important; } .pr-0 { padding-right: 0 !important; } .pt-0 { padding-top: 0 !important; } .px-0 { padding-left: 0 !important; padding-right: 0 !important; } .py-0 { padding-bottom: 0 !important; padding-top: 0 !important; } .p-1 { padding: .2rem !important; } .pb-1 { padding-bottom: .2rem !important; } .pl-1 { padding-left: .2rem !important; } .pr-1 { padding-right: .2rem !important; } .pt-1 { padding-top: .2rem !important; } .px-1 { padding-left: .2rem !important; padding-right: .2rem !important; } .py-1 { padding-bottom: .2rem !important; padding-top: .2rem !important; } .p-2 { padding: .4rem !important; } .pb-2 { padding-bottom: .4rem !important; } .pl-2 { padding-left: .4rem !important; } .pr-2 { padding-right: .4rem !important; } .pt-2 { padding-top: .4rem !important; } .px-2 { padding-left: .4rem !important; padding-right: .4rem !important; } .py-2 { padding-bottom: .4rem !important; padding-top: .4rem !important; } .s-rounded { border-radius: .1rem; } .s-circle { border-radius: 50%; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .text-justify { text-align: justify; } .text-lowercase { text-transform: lowercase; } .text-uppercase { text-transform: uppercase; } .text-capitalize { text-transform: capitalize; } .text-normal { font-weight: normal; } .text-bold { font-weight: bold; } .text-italic { font-style: italic; } .text-large { font-size: 1.2em; } .text-small { font-size: .9em; } .text-tiny { font-size: .8em; } .text-muted { opacity: .8; } .text-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .text-clip { overflow: hidden; text-overflow: clip; white-space: nowrap; } .text-break { -webkit-hyphens: auto; -ms-hyphens: auto; hyphens: auto; word-break: break-word; word-wrap: break-word; } /*! Spectre.css Experimentals v0.5.9 | MIT License | github.com/picturepan2/spectre */ .form-autocomplete { position: relative; } .form-autocomplete .form-autocomplete-input { align-content: flex-start; display: -ms-flexbox; display: flex; -ms-flex-line-pack: start; -ms-flex-wrap: wrap; flex-wrap: wrap; height: auto; min-height: 1.6rem; padding: .1rem; } .form-autocomplete .form-autocomplete-input.is-focused { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-autocomplete .form-autocomplete-input .form-input { border-color: transparent; box-shadow: none; display: inline-block; -ms-flex: 1 0 auto; flex: 1 0 auto; height: 1.2rem; line-height: .8rem; margin: .1rem; width: auto; } .form-autocomplete .menu { left: 0; position: absolute; top: 100%; width: 100%; } .form-autocomplete.autocomplete-oneline .form-autocomplete-input { -ms-flex-wrap: nowrap; flex-wrap: nowrap; overflow-x: auto; } .form-autocomplete.autocomplete-oneline .chip { -ms-flex: 1 0 auto; flex: 1 0 auto; } .calendar { border: .05rem solid #dadee4; border-radius: .1rem; display: block; min-width: 280px; } .calendar .calendar-nav { align-items: center; background: #f7f8f9; border-top-left-radius: .1rem; border-top-right-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-align: center; font-size: .9rem; padding: .4rem; } .calendar .calendar-header, .calendar .calendar-body { display: -ms-flexbox; display: flex; -ms-flex-pack: center; -ms-flex-wrap: wrap; flex-wrap: wrap; justify-content: center; padding: .4rem 0; } .calendar .calendar-header .calendar-date, .calendar .calendar-body .calendar-date { -ms-flex: 0 0 14.28%; flex: 0 0 14.28%; max-width: 14.28%; } .calendar .calendar-header { background: #f7f8f9; border-bottom: .05rem solid #dadee4; color: #bcc3ce; font-size: .7rem; text-align: center; } .calendar .calendar-body { color: #66758c; } .calendar .calendar-date { border: 0; padding: .2rem; } .calendar .calendar-date .date-item { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; border: .05rem solid transparent; border-radius: 50%; color: #66758c; cursor: pointer; font-size: .7rem; height: 1.4rem; line-height: 1rem; outline: none; padding: .1rem; position: relative; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; vertical-align: middle; white-space: nowrap; width: 1.4rem; } .calendar .calendar-date .date-item.date-today { border-color: #e5e5f9; color: #5755d9; } .calendar .calendar-date .date-item:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .calendar .calendar-date .date-item:focus, .calendar .calendar-date .date-item:hover { background: #fefeff; border-color: #e5e5f9; color: #5755d9; text-decoration: none; } .calendar .calendar-date .date-item:active, .calendar .calendar-date .date-item.active { background: #4b48d6; border-color: #3634d2; color: #fff; } .calendar .calendar-date .date-item.badge::after { position: absolute; right: 3px; top: 3px; transform: translate(50%, -50%); } .calendar .calendar-date .date-item:disabled, .calendar .calendar-date .date-item.disabled, .calendar .calendar-date .calendar-event:disabled, .calendar .calendar-date .calendar-event.disabled { cursor: default; opacity: .25; pointer-events: none; } .calendar .calendar-date.prev-month .date-item, .calendar .calendar-date.prev-month .calendar-event, .calendar .calendar-date.next-month .date-item, .calendar .calendar-date.next-month .calendar-event { opacity: .25; } .calendar .calendar-range { position: relative; } .calendar .calendar-range::before { background: #f1f1fc; content: ""; height: 1.4rem; left: 0; position: absolute; right: 0; top: 50%; transform: translateY(-50%); } .calendar .calendar-range.range-start::before { left: 50%; } .calendar .calendar-range.range-end::before { right: 50%; } .calendar .calendar-range.range-start .date-item, .calendar .calendar-range.range-end .date-item { background: #4b48d6; border-color: #3634d2; color: #fff; } .calendar .calendar-range .date-item { color: #5755d9; } .calendar.calendar-lg .calendar-body { padding: 0; } .calendar.calendar-lg .calendar-body .calendar-date { border-bottom: .05rem solid #dadee4; border-right: .05rem solid #dadee4; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; height: 5.5rem; padding: 0; } .calendar.calendar-lg .calendar-body .calendar-date:nth-child(7n) { border-right: 0; } .calendar.calendar-lg .calendar-body .calendar-date:nth-last-child(-n+7) { border-bottom: 0; } .calendar.calendar-lg .date-item { align-self: flex-end; -ms-flex-item-align: end; height: 1.4rem; margin-right: .2rem; margin-top: .2rem; } .calendar.calendar-lg .calendar-range::before { top: 19px; } .calendar.calendar-lg .calendar-range.range-start::before { left: auto; width: 19px; } .calendar.calendar-lg .calendar-range.range-end::before { right: 19px; } .calendar.calendar-lg .calendar-events { flex-grow: 1; -ms-flex-positive: 1; line-height: 1; overflow-y: auto; padding: .2rem; } .calendar.calendar-lg .calendar-event { border-radius: .1rem; display: block; font-size: .7rem; margin: .1rem auto; overflow: hidden; padding: 3px 4px; text-overflow: ellipsis; white-space: nowrap; } .carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-container .carousel-item:nth-of-type(1), .carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-container .carousel-item:nth-of-type(2), .carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-container .carousel-item:nth-of-type(3), .carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-container .carousel-item:nth-of-type(4), .carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-container .carousel-item:nth-of-type(5), .carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-container .carousel-item:nth-of-type(6), .carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-container .carousel-item:nth-of-type(7), .carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-container .carousel-item:nth-of-type(8) { animation: carousel-slidein .75s ease-in-out 1; opacity: 1; z-index: 100; } .carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-nav .nav-item:nth-of-type(1), .carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-nav .nav-item:nth-of-type(2), .carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-nav .nav-item:nth-of-type(3), .carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-nav .nav-item:nth-of-type(4), .carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-nav .nav-item:nth-of-type(5), .carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-nav .nav-item:nth-of-type(6), .carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-nav .nav-item:nth-of-type(7), .carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-nav .nav-item:nth-of-type(8) { color: #f7f8f9; } .carousel { background: #f7f8f9; display: block; overflow: hidden; -webkit-overflow-scrolling: touch; position: relative; width: 100%; z-index: 1; } .carousel .carousel-container { height: 100%; left: 0; position: relative; } .carousel .carousel-container::before { content: ""; display: block; padding-bottom: 56.25%; } .carousel .carousel-container .carousel-item { animation: carousel-slideout 1s ease-in-out 1; height: 100%; left: 0; margin: 0; opacity: 0; position: absolute; top: 0; width: 100%; } .carousel .carousel-container .carousel-item:hover .item-prev, .carousel .carousel-container .carousel-item:hover .item-next { opacity: 1; } .carousel .carousel-container .item-prev, .carousel .carousel-container .item-next { background: rgba(247, 248, 249, .25); border-color: rgba(247, 248, 249, .5); color: #f7f8f9; opacity: 0; position: absolute; top: 50%; transform: translateY(-50%); transition: all .4s; z-index: 100; } .carousel .carousel-container .item-prev { left: 1rem; } .carousel .carousel-container .item-next { right: 1rem; } .carousel .carousel-nav { bottom: .4rem; display: -ms-flexbox; display: flex; -ms-flex-pack: center; justify-content: center; left: 50%; position: absolute; transform: translateX(-50%); width: 10rem; z-index: 100; } .carousel .carousel-nav .nav-item { color: rgba(247, 248, 249, .5); display: block; -ms-flex: 1 0 auto; flex: 1 0 auto; height: 1.6rem; margin: .2rem; max-width: 2.5rem; position: relative; } .carousel .carousel-nav .nav-item::before { background: currentColor; content: ""; display: block; height: .1rem; position: absolute; top: .5rem; width: 100%; } @keyframes carousel-slidein { 0% { transform: translateX(100%); } 100% { transform: translateX(0); } } @keyframes carousel-slideout { 0% { opacity: 1; transform: translateX(0); } 100% { opacity: 1; transform: translateX(-50%); } } .comparison-slider { height: 50vh; overflow: hidden; -webkit-overflow-scrolling: touch; position: relative; width: 100%; } .comparison-slider .comparison-before, .comparison-slider .comparison-after { height: 100%; left: 0; margin: 0; overflow: hidden; position: absolute; top: 0; } .comparison-slider .comparison-before img, .comparison-slider .comparison-after img { height: 100%; object-fit: cover; object-position: left center; position: absolute; width: 100%; } .comparison-slider .comparison-before { width: 100%; z-index: 1; } .comparison-slider .comparison-before .comparison-label { right: .8rem; } .comparison-slider .comparison-after { max-width: 100%; min-width: 0; z-index: 2; } .comparison-slider .comparison-after::before { background: transparent; content: ""; cursor: default; height: 100%; left: 0; position: absolute; right: .8rem; top: 0; z-index: 1; } .comparison-slider .comparison-after::after { background: currentColor; border-radius: 50%; box-shadow: 0 -5px, 0 5px; color: #fff; content: ""; height: 3px; pointer-events: none; position: absolute; right: .4rem; top: 50%; transform: translate(50%, -50%); width: 3px; } .comparison-slider .comparison-after .comparison-label { left: .8rem; } .comparison-slider .comparison-resizer { animation: first-run 1.5s 1 ease-in-out; cursor: ew-resize; height: .8rem; left: 0; max-width: 100%; min-width: .8rem; opacity: 0; outline: none; position: relative; resize: horizontal; top: 50%; transform: translateY(-50%) scaleY(30); width: 0; } .comparison-slider .comparison-label { background: rgba(48, 55, 66, .5); bottom: .8rem; color: #fff; padding: .2rem .4rem; position: absolute; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } @keyframes first-run { 0% { width: 0; } 25% { width: 2.4rem; } 50% { width: .8rem; } 75% { width: 1.2rem; } 100% { width: 0; } } .filter .filter-tag#tag-0:checked ~ .filter-nav .chip[for="tag-0"], .filter .filter-tag#tag-1:checked ~ .filter-nav .chip[for="tag-1"], .filter .filter-tag#tag-2:checked ~ .filter-nav .chip[for="tag-2"], .filter .filter-tag#tag-3:checked ~ .filter-nav .chip[for="tag-3"], .filter .filter-tag#tag-4:checked ~ .filter-nav .chip[for="tag-4"], .filter .filter-tag#tag-5:checked ~ .filter-nav .chip[for="tag-5"], .filter .filter-tag#tag-6:checked ~ .filter-nav .chip[for="tag-6"], .filter .filter-tag#tag-7:checked ~ .filter-nav .chip[for="tag-7"], .filter .filter-tag#tag-8:checked ~ .filter-nav .chip[for="tag-8"] { background: #5755d9; color: #fff; } .filter .filter-tag#tag-1:checked ~ .filter-body .filter-item:not([data-tag~="tag-1"]), .filter .filter-tag#tag-2:checked ~ .filter-body .filter-item:not([data-tag~="tag-2"]), .filter .filter-tag#tag-3:checked ~ .filter-body .filter-item:not([data-tag~="tag-3"]), .filter .filter-tag#tag-4:checked ~ .filter-body .filter-item:not([data-tag~="tag-4"]), .filter .filter-tag#tag-5:checked ~ .filter-body .filter-item:not([data-tag~="tag-5"]), .filter .filter-tag#tag-6:checked ~ .filter-body .filter-item:not([data-tag~="tag-6"]), .filter .filter-tag#tag-7:checked ~ .filter-body .filter-item:not([data-tag~="tag-7"]), .filter .filter-tag#tag-8:checked ~ .filter-body .filter-item:not([data-tag~="tag-8"]) { display: none; } .filter .filter-nav { margin: .4rem 0; } .filter .filter-body { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } .meter { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #f7f8f9; border: 0; border-radius: .1rem; display: block; height: .8rem; width: 100%; } .meter::-webkit-meter-inner-element { display: block; } .meter::-webkit-meter-bar, .meter::-webkit-meter-optimum-value, .meter::-webkit-meter-suboptimum-value, .meter::-webkit-meter-even-less-good-value { border-radius: .1rem; } .meter::-webkit-meter-bar { background: #f7f8f9; } .meter::-webkit-meter-optimum-value { background: #32b643; } .meter::-webkit-meter-suboptimum-value { background: #ffb700; } .meter::-webkit-meter-even-less-good-value { background: #e85600; } .meter::-moz-meter-bar, .meter:-moz-meter-optimum, .meter:-moz-meter-sub-optimum, .meter:-moz-meter-sub-sub-optimum { border-radius: .1rem; } .meter:-moz-meter-optimum::-moz-meter-bar { background: #32b643; } .meter:-moz-meter-sub-optimum::-moz-meter-bar { background: #ffb700; } .meter:-moz-meter-sub-sub-optimum::-moz-meter-bar { background: #e85600; } .off-canvas { display: -ms-flexbox; display: flex; -ms-flex-flow: nowrap; flex-flow: nowrap; height: 100%; position: relative; width: 100%; } .off-canvas .off-canvas-toggle { display: block; position: absolute; right: .4rem; top: .4rem; transition: none; z-index: 1; } .off-canvas .off-canvas-sidebar { background: #f7f8f9; bottom: 0; min-width: 10rem; overflow-y: auto; position: fixed; right: 0; top: 0; transform: translateX(100%); transition: transform .25s; z-index: 200; } .off-canvas .off-canvas-content { -ms-flex: 1 1 auto; flex: 1 1 auto; height: 100%; padding: .4rem .4rem .4rem 4rem; } .off-canvas .off-canvas-overlay { background: rgba(48, 55, 66, .1); border-color: transparent; border-radius: 0; bottom: 0; display: none; height: 100%; left: 0; position: fixed; right: 0; top: 0; width: 100%; } .off-canvas .off-canvas-sidebar:target, .off-canvas .off-canvas-sidebar.active { transform: translateX(0); } .off-canvas .off-canvas-sidebar:target ~ .off-canvas-overlay, .off-canvas .off-canvas-sidebar.active ~ .off-canvas-overlay { display: block; z-index: 100; } @media (min-width: 960px) { .off-canvas.off-canvas-sidebar-show .off-canvas-toggle { display: none; } .off-canvas.off-canvas-sidebar-show .off-canvas-sidebar { -ms-flex: 0 0 auto; flex: 0 0 auto; position: relative; transform: none; } .off-canvas.off-canvas-sidebar-show .off-canvas-overlay { display: none !important; } } .parallax { display: block; height: auto; position: relative; width: auto; } .parallax .parallax-content { box-shadow: 0 1rem 2.1rem rgba(48, 55, 66, .3); height: auto; transform: perspective(1000px); transform-style: preserve-3d; transition: all .4s ease; width: 100%; } .parallax .parallax-content::before { content: ""; display: block; height: 100%; left: 0; position: absolute; top: 0; width: 100%; } .parallax .parallax-front { align-items: center; color: #fff; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-pack: center; height: 100%; justify-content: center; left: 0; position: absolute; text-align: center; text-shadow: 0 0 20px rgba(48, 55, 66, .75); top: 0; transform: translateZ(50px) scale(.95); transition: transform .4s; width: 100%; z-index: 1; } .parallax .parallax-top-left { height: 50%; left: 0; outline: none; position: absolute; top: 0; width: 50%; z-index: 100; } .parallax .parallax-top-left:focus ~ .parallax-content, .parallax .parallax-top-left:hover ~ .parallax-content { transform: perspective(1000px) rotateX(3deg) rotateY(-3deg); } .parallax .parallax-top-left:focus ~ .parallax-content::before, .parallax .parallax-top-left:hover ~ .parallax-content::before { background: linear-gradient(135deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-top-left:focus ~ .parallax-content .parallax-front, .parallax .parallax-top-left:hover ~ .parallax-content .parallax-front { transform: translate3d(4.5px, 4.5px, 50px) scale(.95); } .parallax .parallax-top-right { height: 50%; outline: none; position: absolute; right: 0; top: 0; width: 50%; z-index: 100; } .parallax .parallax-top-right:focus ~ .parallax-content, .parallax .parallax-top-right:hover ~ .parallax-content { transform: perspective(1000px) rotateX(3deg) rotateY(3deg); } .parallax .parallax-top-right:focus ~ .parallax-content::before, .parallax .parallax-top-right:hover ~ .parallax-content::before { background: linear-gradient(-135deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-top-right:focus ~ .parallax-content .parallax-front, .parallax .parallax-top-right:hover ~ .parallax-content .parallax-front { transform: translate3d(-4.5px, 4.5px, 50px) scale(.95); } .parallax .parallax-bottom-left { bottom: 0; height: 50%; left: 0; outline: none; position: absolute; width: 50%; z-index: 100; } .parallax .parallax-bottom-left:focus ~ .parallax-content, .parallax .parallax-bottom-left:hover ~ .parallax-content { transform: perspective(1000px) rotateX(-3deg) rotateY(-3deg); } .parallax .parallax-bottom-left:focus ~ .parallax-content::before, .parallax .parallax-bottom-left:hover ~ .parallax-content::before { background: linear-gradient(45deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-bottom-left:focus ~ .parallax-content .parallax-front, .parallax .parallax-bottom-left:hover ~ .parallax-content .parallax-front { transform: translate3d(4.5px, -4.5px, 50px) scale(.95); } .parallax .parallax-bottom-right { bottom: 0; height: 50%; outline: none; position: absolute; right: 0; width: 50%; z-index: 100; } .parallax .parallax-bottom-right:focus ~ .parallax-content, .parallax .parallax-bottom-right:hover ~ .parallax-content { transform: perspective(1000px) rotateX(-3deg) rotateY(3deg); } .parallax .parallax-bottom-right:focus ~ .parallax-content::before, .parallax .parallax-bottom-right:hover ~ .parallax-content::before { background: linear-gradient(-45deg, rgba(255, 255, 255, .35) 0%, transparent 50%); } .parallax .parallax-bottom-right:focus ~ .parallax-content .parallax-front, .parallax .parallax-bottom-right:hover ~ .parallax-content .parallax-front { transform: translate3d(-4.5px, -4.5px, 50px) scale(.95); } .progress { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #eef0f3; border: 0; border-radius: .1rem; color: #5755d9; height: .2rem; position: relative; width: 100%; } .progress::-webkit-progress-bar { background: transparent; border-radius: .1rem; } .progress::-webkit-progress-value { background: #5755d9; border-radius: .1rem; } .progress::-moz-progress-bar { background: #5755d9; border-radius: .1rem; } .progress:indeterminate { animation: progress-indeterminate 1.5s linear infinite; background: #eef0f3 linear-gradient(to right, #5755d9 30%, #eef0f3 30%) top left/150% 150% no-repeat; } .progress:indeterminate::-moz-progress-bar { background: transparent; } @keyframes progress-indeterminate { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } .slider { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: transparent; display: block; height: 1.2rem; width: 100%; } .slider:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); outline: none; } .slider.tooltip:not([data-tooltip])::after { content: attr(value); } .slider::-webkit-slider-thumb { -webkit-appearance: none; background: #5755d9; border: 0; border-radius: 50%; height: .6rem; margin-top: -.25rem; -webkit-transition: transform .2s; transition: transform .2s; width: .6rem; } .slider::-moz-range-thumb { background: #5755d9; border: 0; border-radius: 50%; height: .6rem; -moz-transition: transform .2s; transition: transform .2s; width: .6rem; } .slider::-ms-thumb { background: #5755d9; border: 0; border-radius: 50%; height: .6rem; -ms-transition: transform .2s; transition: transform .2s; width: .6rem; } .slider:active::-webkit-slider-thumb { transform: scale(1.25); } .slider:active::-moz-range-thumb { transform: scale(1.25); } .slider:active::-ms-thumb { transform: scale(1.25); } .slider:disabled::-webkit-slider-thumb, .slider.disabled::-webkit-slider-thumb { background: #f7f8f9; transform: scale(1); } .slider:disabled::-moz-range-thumb, .slider.disabled::-moz-range-thumb { background: #f7f8f9; transform: scale(1); } .slider:disabled::-ms-thumb, .slider.disabled::-ms-thumb { background: #f7f8f9; transform: scale(1); } .slider::-webkit-slider-runnable-track { background: #eef0f3; border-radius: .1rem; height: .1rem; width: 100%; } .slider::-moz-range-track { background: #eef0f3; border-radius: .1rem; height: .1rem; width: 100%; } .slider::-ms-track { background: #eef0f3; border-radius: .1rem; height: .1rem; width: 100%; } .slider::-ms-fill-lower { background: #5755d9; } .timeline .timeline-item { display: -ms-flexbox; display: flex; margin-bottom: 1.2rem; position: relative; } .timeline .timeline-item::before { background: #dadee4; content: ""; height: 100%; left: 11px; position: absolute; top: 1.2rem; width: 2px; } .timeline .timeline-item .timeline-left { -ms-flex: 0 0 auto; flex: 0 0 auto; } .timeline .timeline-item .timeline-content { -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 2px 0 2px .8rem; } .timeline .timeline-item .timeline-icon { align-items: center; border-radius: 50%; color: #fff; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-pack: center; height: 1.2rem; justify-content: center; text-align: center; width: 1.2rem; } .timeline .timeline-item .timeline-icon::before { border: .1rem solid #5755d9; border-radius: 50%; content: ""; display: block; height: .4rem; left: .4rem; position: absolute; top: .4rem; width: .4rem; } .timeline .timeline-item .timeline-icon.icon-lg { background: #5755d9; line-height: 1.2rem; } .timeline .timeline-item .timeline-icon.icon-lg::before { content: none; } .viewer-360 { align-items: center; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-direction: column; flex-direction: column; } .viewer-360 .viewer-slider[max="36"][value="1"] + .viewer-image { background-position-y: 0; } .viewer-360 .viewer-slider[max="36"][value="2"] + .viewer-image { background-position-y: 2.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="3"] + .viewer-image { background-position-y: 5.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="4"] + .viewer-image { background-position-y: 8.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="5"] + .viewer-image { background-position-y: 11.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="6"] + .viewer-image { background-position-y: 14.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="7"] + .viewer-image { background-position-y: 17.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="8"] + .viewer-image { background-position-y: 20%; } .viewer-360 .viewer-slider[max="36"][value="9"] + .viewer-image { background-position-y: 22.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="10"] + .viewer-image { background-position-y: 25.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="11"] + .viewer-image { background-position-y: 28.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="12"] + .viewer-image { background-position-y: 31.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="13"] + .viewer-image { background-position-y: 34.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="14"] + .viewer-image { background-position-y: 37.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="15"] + .viewer-image { background-position-y: 40%; } .viewer-360 .viewer-slider[max="36"][value="16"] + .viewer-image { background-position-y: 42.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="17"] + .viewer-image { background-position-y: 45.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="18"] + .viewer-image { background-position-y: 48.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="19"] + .viewer-image { background-position-y: 51.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="20"] + .viewer-image { background-position-y: 54.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="21"] + .viewer-image { background-position-y: 57.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="22"] + .viewer-image { background-position-y: 60%; } .viewer-360 .viewer-slider[max="36"][value="23"] + .viewer-image { background-position-y: 62.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="24"] + .viewer-image { background-position-y: 65.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="25"] + .viewer-image { background-position-y: 68.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="26"] + .viewer-image { background-position-y: 71.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="27"] + .viewer-image { background-position-y: 74.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="28"] + .viewer-image { background-position-y: 77.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="29"] + .viewer-image { background-position-y: 80%; } .viewer-360 .viewer-slider[max="36"][value="30"] + .viewer-image { background-position-y: 82.8571428571%; } .viewer-360 .viewer-slider[max="36"][value="31"] + .viewer-image { background-position-y: 85.7142857143%; } .viewer-360 .viewer-slider[max="36"][value="32"] + .viewer-image { background-position-y: 88.5714285714%; } .viewer-360 .viewer-slider[max="36"][value="33"] + .viewer-image { background-position-y: 91.4285714286%; } .viewer-360 .viewer-slider[max="36"][value="34"] + .viewer-image { background-position-y: 94.2857142857%; } .viewer-360 .viewer-slider[max="36"][value="35"] + .viewer-image { background-position-y: 97.1428571429%; } .viewer-360 .viewer-slider[max="36"][value="36"] + .viewer-image { background-position-y: 100%; } .viewer-360 .viewer-slider { cursor: ew-resize; -ms-flex-order: 2; margin: 1rem; order: 2; width: 60%; } .viewer-360 .viewer-image { background-position-y: 0; background-repeat: no-repeat; background-size: 100%; -ms-flex-order: 1; max-width: 100%; order: 1; } ================================================ FILE: docs/dist/spectre.css ================================================ /*! Spectre.css v0.5.9 | MIT License | github.com/picturepan2/spectre */ /* Manually forked from Normalize.css */ /* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ /** 1. Change the default font family in all browsers (opinionated). 2. Correct the line height in all browsers. 3. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS. */ /* Document ========================================================================== */ html { font-family: sans-serif; /* 1 */ -webkit-text-size-adjust: 100%; /* 3 */ -ms-text-size-adjust: 100%; /* 3 */ } /* Sections ========================================================================== */ /** Remove the margin in all browsers (opinionated). */ body { margin: 0; } /** Add the correct display in IE 9-. */ article, aside, footer, header, nav, section { display: block; } /** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */ h1 { font-size: 2em; margin: .67em 0; } /* Grouping content ========================================================================== */ /** Add the correct display in IE 9-. 1. Add the correct display in IE. */ figcaption, figure, main { /* 1 */ display: block; } /** Add the correct margin in IE 8 (removed). */ /** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */ hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ } /** 1. Correct the inheritance and scaling of font size in all browsers. (removed) 2. Correct the odd `em` font sizing in all browsers. */ /* Text-level semantics ========================================================================== */ /** 1. Remove the gray background on active links in IE 10. 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ a { background-color: transparent; /* 1 */ -webkit-text-decoration-skip: objects; /* 2 */ } /** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */ a:active, a:hover { outline-width: 0; } /** Modify default styling of address. */ address { font-style: normal; } /** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed) */ /** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ b, strong { font-weight: inherit; } /** Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { font-weight: bolder; } /** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */ code, kbd, pre, samp { font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace; /* 1 (changed) */ font-size: 1em; /* 2 */ } /** Add the correct font style in Android 4.3-. */ dfn { font-style: italic; } /** Add the correct background and color in IE 9-. (Removed) */ /** Add the correct font size in all browsers. */ small { font-size: 80%; font-weight: 400; /* (added) */ } /** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } /* Embedded content ========================================================================== */ /** Add the correct display in IE 9-. */ audio, video { display: inline-block; } /** Add the correct display in iOS 4-7. */ audio:not([controls]) { display: none; height: 0; } /** Remove the border on images inside links in IE 10-. */ img { border-style: none; } /** Hide the overflow in IE. */ svg:not(:root) { overflow: hidden; } /* Forms ========================================================================== */ /** 1. Change the font styles in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 (changed) */ font-size: inherit; /* 1 (changed) */ line-height: inherit; /* 1 (changed) */ margin: 0; /* 2 */ } /** Show the overflow in IE. 1. Show the overflow in Edge. */ button, input { /* 1 */ overflow: visible; } /** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */ button, select { /* 1 */ text-transform: none; } /** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */ button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; /* 2 */ } /** Remove the inner border and padding in Firefox. */ button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } /** Restore the focus styles unset by the previous rule (removed). */ /** Change the border, margin, and padding in all browsers (opinionated) (changed). */ fieldset { border: 0; margin: 0; padding: 0; } /** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */ legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ } /** 1. Add the correct display in IE 9-. 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ progress { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } /** Remove the default vertical scrollbar in IE. */ textarea { overflow: auto; } /** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */ [type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** Correct the cursor style of increment and decrement buttons in Chrome. */ [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } /** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /** Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Interactive ========================================================================== */ /* Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. */ details, menu { display: block; } /* Add the correct display in all browsers. */ summary { display: list-item; outline: none; } /* Scripting ========================================================================== */ /** Add the correct display in IE 9-. */ canvas { display: inline-block; } /** Add the correct display in IE. */ template { display: none; } /* Hidden ========================================================================== */ /** Add the correct display in IE 10-. */ [hidden] { display: none; } *, *::before, *::after { box-sizing: inherit; } html { box-sizing: border-box; font-size: 20px; line-height: 1.5; -webkit-tap-highlight-color: transparent; } body { background: #fff; color: #3b4351; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif; font-size: .8rem; overflow-x: hidden; text-rendering: optimizeLegibility; } a { color: #5755d9; outline: none; text-decoration: none; } a:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } a:focus, a:hover, a:active, a.active { color: #302ecd; text-decoration: underline; } a:visited { color: #807fe2; } h1, h2, h3, h4, h5, h6 { color: inherit; font-weight: 500; line-height: 1.2; margin-bottom: .5em; margin-top: 0; } .h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 500; } h1, .h1 { font-size: 2rem; } h2, .h2 { font-size: 1.6rem; } h3, .h3 { font-size: 1.4rem; } h4, .h4 { font-size: 1.2rem; } h5, .h5 { font-size: 1rem; } h6, .h6 { font-size: .8rem; } p { margin: 0 0 1.2rem; } a, ins, u { -webkit-text-decoration-skip: ink edges; text-decoration-skip: ink edges; } abbr[title] { border-bottom: .05rem dotted; cursor: help; text-decoration: none; } kbd { background: #303742; border-radius: .1rem; color: #fff; font-size: .7rem; line-height: 1.25; padding: .1rem .2rem; } mark { background: #ffe9b3; border-bottom: .05rem solid #ffd367; border-radius: .1rem; color: #3b4351; padding: .05rem .1rem 0; } blockquote { border-left: .1rem solid #dadee4; margin-left: 0; padding: .4rem .8rem; } blockquote p:last-child { margin-bottom: 0; } ul, ol { margin: .8rem 0 .8rem .8rem; padding: 0; } ul ul, ul ol, ol ul, ol ol { margin: .8rem 0 .8rem .8rem; } ul li, ol li { margin-top: .4rem; } ul { list-style: disc inside; } ul ul { list-style-type: circle; } ol { list-style: decimal inside; } ol ol { list-style-type: lower-alpha; } dl dt { font-weight: bold; } dl dd { margin: .4rem 0 .8rem 0; } html:lang(zh), html:lang(zh-Hans), .lang-zh, .lang-zh-hans { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif; } html:lang(zh-Hant), .lang-zh-hant { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", "Helvetica Neue", sans-serif; } html:lang(ja), .lang-ja { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, "Helvetica Neue", sans-serif; } html:lang(ko), .lang-ko { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Malgun Gothic", "Helvetica Neue", sans-serif; } :lang(zh) ins, :lang(zh) u, :lang(ja) ins, :lang(ja) u, .lang-cjk ins, .lang-cjk u { border-bottom: .05rem solid; text-decoration: none; } :lang(zh) del + del, :lang(zh) del + s, :lang(zh) ins + ins, :lang(zh) ins + u, :lang(zh) s + del, :lang(zh) s + s, :lang(zh) u + ins, :lang(zh) u + u, :lang(ja) del + del, :lang(ja) del + s, :lang(ja) ins + ins, :lang(ja) ins + u, :lang(ja) s + del, :lang(ja) s + s, :lang(ja) u + ins, :lang(ja) u + u, .lang-cjk del + del, .lang-cjk del + s, .lang-cjk ins + ins, .lang-cjk ins + u, .lang-cjk s + del, .lang-cjk s + s, .lang-cjk u + ins, .lang-cjk u + u { margin-left: .125em; } .table { border-collapse: collapse; border-spacing: 0; text-align: left; width: 100%; } .table.table-striped tbody tr:nth-of-type(odd) { background: #f7f8f9; } .table tbody tr.active, .table.table-striped tbody tr.active { background: #eef0f3; } .table.table-hover tbody tr:hover { background: #eef0f3; } .table.table-scroll { display: block; overflow-x: auto; padding-bottom: .75rem; white-space: nowrap; } .table td, .table th { border-bottom: .05rem solid #dadee4; padding: .6rem .4rem; } .table th { border-bottom-width: .1rem; } .btn { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; border: .05rem solid #5755d9; border-radius: .1rem; color: #5755d9; cursor: pointer; display: inline-block; font-size: .8rem; height: 1.8rem; line-height: 1.2rem; outline: none; padding: .25rem .4rem; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; white-space: nowrap; } .btn:focus { box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .btn:focus, .btn:hover { background: #f1f1fc; border-color: #4b48d6; text-decoration: none; } .btn:active, .btn.active { background: #4b48d6; border-color: #3634d2; color: #fff; text-decoration: none; } .btn:active.loading::after, .btn.active.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn[disabled], .btn:disabled, .btn.disabled { cursor: default; opacity: .5; pointer-events: none; } .btn.btn-primary { background: #5755d9; border-color: #4b48d6; color: #fff; } .btn.btn-primary:focus, .btn.btn-primary:hover { background: #4240d4; border-color: #3634d2; color: #fff; } .btn.btn-primary:active, .btn.btn-primary.active { background: #3a38d2; border-color: #302ecd; color: #fff; } .btn.btn-primary.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn.btn-success { background: #32b643; border-color: #2faa3f; color: #fff; } .btn.btn-success:focus { box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2); } .btn.btn-success:focus, .btn.btn-success:hover { background: #30ae40; border-color: #2da23c; color: #fff; } .btn.btn-success:active, .btn.btn-success.active { background: #2a9a39; border-color: #278e34; color: #fff; } .btn.btn-success.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn.btn-error { background: #e85600; border-color: #d95000; color: #fff; } .btn.btn-error:focus { box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .btn.btn-error:focus, .btn.btn-error:hover { background: #de5200; border-color: #cf4d00; color: #fff; } .btn.btn-error:active, .btn.btn-error.active { background: #c44900; border-color: #b54300; color: #fff; } .btn.btn-error.loading::after { border-bottom-color: #fff; border-left-color: #fff; } .btn.btn-link { background: transparent; border-color: transparent; color: #5755d9; } .btn.btn-link:focus, .btn.btn-link:hover, .btn.btn-link:active, .btn.btn-link.active { color: #302ecd; } .btn.btn-sm { font-size: .7rem; height: 1.4rem; padding: .05rem .3rem; } .btn.btn-lg { font-size: .9rem; height: 2rem; padding: .35rem .6rem; } .btn.btn-block { display: block; width: 100%; } .btn.btn-action { padding-left: 0; padding-right: 0; width: 1.8rem; } .btn.btn-action.btn-sm { width: 1.4rem; } .btn.btn-action.btn-lg { width: 2rem; } .btn.btn-clear { background: transparent; border: 0; color: currentColor; height: 1rem; line-height: .8rem; margin-left: .2rem; margin-right: -2px; opacity: 1; padding: .1rem; text-decoration: none; width: 1rem; } .btn.btn-clear:focus, .btn.btn-clear:hover { background: rgba(247, 248, 249, .5); opacity: .95; } .btn.btn-clear::before { content: "\2715"; } .btn-group { display: -ms-inline-flexbox; display: inline-flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } .btn-group .btn { -ms-flex: 1 0 auto; flex: 1 0 auto; } .btn-group .btn:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } .btn-group .btn:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -.05rem; } .btn-group .btn:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -.05rem; } .btn-group .btn:focus, .btn-group .btn:hover, .btn-group .btn:active, .btn-group .btn.active { z-index: 1; } .btn-group.btn-group-block { display: -ms-flexbox; display: flex; } .btn-group.btn-group-block .btn { -ms-flex: 1 0 0; flex: 1 0 0; } .form-group:not(:last-child) { margin-bottom: .4rem; } fieldset { margin-bottom: .8rem; } legend { font-size: .9rem; font-weight: 500; margin-bottom: .8rem; } .form-label { display: block; line-height: 1.2rem; padding: .3rem 0; } .form-label.label-sm { font-size: .7rem; padding: .1rem 0; } .form-label.label-lg { font-size: .9rem; padding: .4rem 0; } .form-input { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; background-image: none; border: .05rem solid #bcc3ce; border-radius: .1rem; color: #3b4351; display: block; font-size: .8rem; height: 1.8rem; line-height: 1.2rem; max-width: 100%; outline: none; padding: .25rem .4rem; position: relative; transition: background .2s, border .2s, box-shadow .2s, color .2s; width: 100%; } .form-input:focus { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-input:-ms-input-placeholder { color: #bcc3ce; } .form-input::-ms-input-placeholder { color: #bcc3ce; } .form-input::placeholder { color: #bcc3ce; } .form-input.input-sm { font-size: .7rem; height: 1.4rem; padding: .05rem .3rem; } .form-input.input-lg { font-size: .9rem; height: 2rem; padding: .35rem .6rem; } .form-input.input-inline { display: inline-block; vertical-align: middle; width: auto; } .form-input[type="file"] { height: auto; } textarea.form-input, textarea.form-input.input-lg, textarea.form-input.input-sm { height: auto; } .form-input-hint { color: #bcc3ce; font-size: .7rem; margin-top: .2rem; } .has-success .form-input-hint, .is-success + .form-input-hint { color: #32b643; } .has-error .form-input-hint, .is-error + .form-input-hint { color: #e85600; } .form-select { -webkit-appearance: none; -moz-appearance: none; appearance: none; background: #fff; border: .05rem solid #bcc3ce; border-radius: .1rem; color: inherit; font-size: .8rem; height: 1.8rem; line-height: 1.2rem; outline: none; padding: .25rem .4rem; vertical-align: middle; width: 100%; } .form-select:focus { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-select::-ms-expand { display: none; } .form-select.select-sm { font-size: .7rem; height: 1.4rem; padding: .05rem 1.1rem .05rem .3rem; } .form-select.select-lg { font-size: .9rem; height: 2rem; padding: .35rem 1.4rem .35rem .6rem; } .form-select[size], .form-select[multiple] { height: auto; padding: .25rem .4rem; } .form-select[size] option, .form-select[multiple] option { padding: .1rem .2rem; } .form-select:not([multiple]):not([size]) { background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center/.4rem .5rem; padding-right: 1.2rem; } .has-icon-left, .has-icon-right { position: relative; } .has-icon-left .form-icon, .has-icon-right .form-icon { height: .8rem; margin: 0 .25rem; position: absolute; top: 50%; transform: translateY(-50%); width: .8rem; z-index: 2; } .has-icon-left .form-icon { left: .05rem; } .has-icon-left .form-input { padding-left: 1.3rem; } .has-icon-right .form-icon { right: .05rem; } .has-icon-right .form-input { padding-right: 1.3rem; } .form-checkbox, .form-radio, .form-switch { display: block; line-height: 1.2rem; margin: .2rem 0; min-height: 1.4rem; padding: .1rem .4rem .1rem 1.2rem; position: relative; } .form-checkbox input, .form-radio input, .form-switch input { clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; position: absolute; width: 1px; } .form-checkbox input:focus + .form-icon, .form-radio input:focus + .form-icon, .form-switch input:focus + .form-icon { border-color: #5755d9; box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); } .form-checkbox input:checked + .form-icon, .form-radio input:checked + .form-icon, .form-switch input:checked + .form-icon { background: #5755d9; border-color: #5755d9; } .form-checkbox .form-icon, .form-radio .form-icon, .form-switch .form-icon { border: .05rem solid #bcc3ce; cursor: pointer; display: inline-block; position: absolute; transition: background .2s, border .2s, box-shadow .2s, color .2s; } .form-checkbox.input-sm, .form-radio.input-sm, .form-switch.input-sm { font-size: .7rem; margin: 0; } .form-checkbox.input-lg, .form-radio.input-lg, .form-switch.input-lg { font-size: .9rem; margin: .3rem 0; } .form-checkbox .form-icon, .form-radio .form-icon { background: #fff; height: .8rem; left: 0; top: .3rem; width: .8rem; } .form-checkbox input:active + .form-icon, .form-radio input:active + .form-icon { background: #eef0f3; } .form-checkbox .form-icon { border-radius: .1rem; } .form-checkbox input:checked + .form-icon::before { background-clip: padding-box; border: .1rem solid #fff; border-left-width: 0; border-top-width: 0; content: ""; height: 9px; left: 50%; margin-left: -3px; margin-top: -6px; position: absolute; top: 50%; transform: rotate(45deg); width: 6px; } .form-checkbox input:indeterminate + .form-icon { background: #5755d9; border-color: #5755d9; } .form-checkbox input:indeterminate + .form-icon::before { background: #fff; content: ""; height: 2px; left: 50%; margin-left: -5px; margin-top: -1px; position: absolute; top: 50%; width: 10px; } .form-radio .form-icon { border-radius: 50%; } .form-radio input:checked + .form-icon::before { background: #fff; border-radius: 50%; content: ""; height: 6px; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 6px; } .form-switch { padding-left: 2rem; } .form-switch .form-icon { background: #bcc3ce; background-clip: padding-box; border-radius: .45rem; height: .9rem; left: 0; top: .25rem; width: 1.6rem; } .form-switch .form-icon::before { background: #fff; border-radius: 50%; content: ""; display: block; height: .8rem; left: 0; position: absolute; top: 0; transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s; width: .8rem; } .form-switch input:checked + .form-icon::before { left: 14px; } .form-switch input:active + .form-icon::before { background: #f7f8f9; } .input-group { display: -ms-flexbox; display: flex; } .input-group .input-group-addon { background: #f7f8f9; border: .05rem solid #bcc3ce; border-radius: .1rem; line-height: 1.2rem; padding: .25rem .4rem; white-space: nowrap; } .input-group .input-group-addon.addon-sm { font-size: .7rem; padding: .05rem .3rem; } .input-group .input-group-addon.addon-lg { font-size: .9rem; padding: .35rem .6rem; } .input-group .form-input, .input-group .form-select { -ms-flex: 1 1 auto; flex: 1 1 auto; width: 1%; } .input-group .input-group-btn { z-index: 1; } .input-group .form-input:first-child:not(:last-child), .input-group .form-select:first-child:not(:last-child), .input-group .input-group-addon:first-child:not(:last-child), .input-group .input-group-btn:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } .input-group .form-input:not(:first-child):not(:last-child), .input-group .form-select:not(:first-child):not(:last-child), .input-group .input-group-addon:not(:first-child):not(:last-child), .input-group .input-group-btn:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -.05rem; } .input-group .form-input:last-child:not(:first-child), .input-group .form-select:last-child:not(:first-child), .input-group .input-group-addon:last-child:not(:first-child), .input-group .input-group-btn:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -.05rem; } .input-group .form-input:focus, .input-group .form-select:focus, .input-group .input-group-addon:focus, .input-group .input-group-btn:focus { z-index: 2; } .input-group .form-select { width: auto; } .input-group.input-inline { display: -ms-inline-flexbox; display: inline-flex; } .has-success .form-input, .form-input.is-success, .has-success .form-select, .form-select.is-success { background: #f9fdfa; border-color: #32b643; } .has-success .form-input:focus, .form-input.is-success:focus, .has-success .form-select:focus, .form-select.is-success:focus { box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2); } .has-error .form-input, .form-input.is-error, .has-error .form-select, .form-select.is-error { background: #fffaf7; border-color: #e85600; } .has-error .form-input:focus, .form-input.is-error:focus, .has-error .form-select:focus, .form-select.is-error:focus { box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .has-error .form-checkbox .form-icon, .form-checkbox.is-error .form-icon, .has-error .form-radio .form-icon, .form-radio.is-error .form-icon, .has-error .form-switch .form-icon, .form-switch.is-error .form-icon { border-color: #e85600; } .has-error .form-checkbox input:checked + .form-icon, .form-checkbox.is-error input:checked + .form-icon, .has-error .form-radio input:checked + .form-icon, .form-radio.is-error input:checked + .form-icon, .has-error .form-switch input:checked + .form-icon, .form-switch.is-error input:checked + .form-icon { background: #e85600; border-color: #e85600; } .has-error .form-checkbox input:focus + .form-icon, .form-checkbox.is-error input:focus + .form-icon, .has-error .form-radio input:focus + .form-icon, .form-radio.is-error input:focus + .form-icon, .has-error .form-switch input:focus + .form-icon, .form-switch.is-error input:focus + .form-icon { border-color: #e85600; box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .has-error .form-checkbox input:indeterminate + .form-icon, .form-checkbox.is-error input:indeterminate + .form-icon { background: #e85600; border-color: #e85600; } .form-input:not(:-ms-input-placeholder):invalid { border-color: #e85600; } .form-input:not(:placeholder-shown):invalid { border-color: #e85600; } .form-input:not(:-ms-input-placeholder):invalid:focus { background: #fffaf7; box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .form-input:not(:placeholder-shown):invalid:focus { background: #fffaf7; box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); } .form-input:not(:-ms-input-placeholder):invalid + .form-input-hint { color: #e85600; } .form-input:not(:placeholder-shown):invalid + .form-input-hint { color: #e85600; } .form-input:disabled, .form-input.disabled, .form-select:disabled, .form-select.disabled { background-color: #eef0f3; cursor: not-allowed; opacity: .5; } .form-input[readonly] { background-color: #f7f8f9; } input:disabled + .form-icon, input.disabled + .form-icon { background: #eef0f3; cursor: not-allowed; opacity: .5; } .form-switch input:disabled + .form-icon::before, .form-switch input.disabled + .form-icon::before { background: #fff; } .form-horizontal { padding: .4rem 0; } .form-horizontal .form-group { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; } .form-inline { display: inline-block; } .label { background: #eef0f3; border-radius: .1rem; color: #455060; display: inline-block; line-height: 1.25; padding: .1rem .2rem; } .label.label-rounded { border-radius: 5rem; padding-left: .4rem; padding-right: .4rem; } .label.label-primary { background: #5755d9; color: #fff; } .label.label-secondary { background: #f1f1fc; color: #5755d9; } .label.label-success { background: #32b643; color: #fff; } .label.label-warning { background: #ffb700; color: #fff; } .label.label-error { background: #e85600; color: #fff; } code { background: #fcf2f2; border-radius: .1rem; color: #d73e48; font-size: 85%; line-height: 1.25; padding: .1rem .2rem; } .code { border-radius: .1rem; color: #3b4351; position: relative; } .code::before { color: #bcc3ce; content: attr(data-lang); font-size: .7rem; position: absolute; right: .4rem; top: .1rem; } .code code { background: #f7f8f9; color: inherit; display: block; line-height: 1.5; overflow-x: auto; padding: 1rem; width: 100%; } .img-responsive { display: block; height: auto; max-width: 100%; } .img-fit-cover { object-fit: cover; } .img-fit-contain { object-fit: contain; } .video-responsive { display: block; overflow: hidden; padding: 0; position: relative; width: 100%; } .video-responsive::before { content: ""; display: block; padding-bottom: 56.25%; } .video-responsive iframe, .video-responsive object, .video-responsive embed { border: 0; bottom: 0; height: 100%; left: 0; position: absolute; right: 0; top: 0; width: 100%; } video.video-responsive { height: auto; max-width: 100%; } video.video-responsive::before { content: none; } .video-responsive-4-3::before { padding-bottom: 75%; } .video-responsive-1-1::before { padding-bottom: 100%; } .figure { margin: 0 0 .4rem 0; } .figure .figure-caption { color: #66758c; margin-top: .4rem; } .container { margin-left: auto; margin-right: auto; padding-left: .4rem; padding-right: .4rem; width: 100%; } .container.grid-xl { max-width: 1296px; } .container.grid-lg { max-width: 976px; } .container.grid-md { max-width: 856px; } .container.grid-sm { max-width: 616px; } .container.grid-xs { max-width: 496px; } .show-xs, .show-sm, .show-md, .show-lg, .show-xl { display: none !important; } .cols, .columns { display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; margin-left: -.4rem; margin-right: -.4rem; } .cols.col-gapless, .columns.col-gapless { margin-left: 0; margin-right: 0; } .cols.col-gapless > .column, .columns.col-gapless > .column { padding-left: 0; padding-right: 0; } .cols.col-oneline, .columns.col-oneline { -ms-flex-wrap: nowrap; flex-wrap: nowrap; overflow-x: auto; } [class~="col-"], .column { -ms-flex: 1; flex: 1; max-width: 100%; padding-left: .4rem; padding-right: .4rem; } [class~="col-"].col-12, [class~="col-"].col-11, [class~="col-"].col-10, [class~="col-"].col-9, [class~="col-"].col-8, [class~="col-"].col-7, [class~="col-"].col-6, [class~="col-"].col-5, [class~="col-"].col-4, [class~="col-"].col-3, [class~="col-"].col-2, [class~="col-"].col-1, [class~="col-"].col-auto, .column.col-12, .column.col-11, .column.col-10, .column.col-9, .column.col-8, .column.col-7, .column.col-6, .column.col-5, .column.col-4, .column.col-3, .column.col-2, .column.col-1, .column.col-auto { -ms-flex: none; flex: none; } .col-12 { width: 100%; } .col-11 { width: 91.66666667%; } .col-10 { width: 83.33333333%; } .col-9 { width: 75%; } .col-8 { width: 66.66666667%; } .col-7 { width: 58.33333333%; } .col-6 { width: 50%; } .col-5 { width: 41.66666667%; } .col-4 { width: 33.33333333%; } .col-3 { width: 25%; } .col-2 { width: 16.66666667%; } .col-1 { width: 8.33333333%; } .col-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; max-width: none; width: auto; } .col-mx-auto { margin-left: auto; margin-right: auto; } .col-ml-auto { margin-left: auto; } .col-mr-auto { margin-right: auto; } @media (max-width: 1280px) { .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl-auto { -ms-flex: none; flex: none; } .col-xl-12 { width: 100%; } .col-xl-11 { width: 91.66666667%; } .col-xl-10 { width: 83.33333333%; } .col-xl-9 { width: 75%; } .col-xl-8 { width: 66.66666667%; } .col-xl-7 { width: 58.33333333%; } .col-xl-6 { width: 50%; } .col-xl-5 { width: 41.66666667%; } .col-xl-4 { width: 33.33333333%; } .col-xl-3 { width: 25%; } .col-xl-2 { width: 16.66666667%; } .col-xl-1 { width: 8.33333333%; } .col-xl-auto { width: auto; } .hide-xl { display: none !important; } .show-xl { display: block !important; } } @media (max-width: 960px) { .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg-auto { -ms-flex: none; flex: none; } .col-lg-12 { width: 100%; } .col-lg-11 { width: 91.66666667%; } .col-lg-10 { width: 83.33333333%; } .col-lg-9 { width: 75%; } .col-lg-8 { width: 66.66666667%; } .col-lg-7 { width: 58.33333333%; } .col-lg-6 { width: 50%; } .col-lg-5 { width: 41.66666667%; } .col-lg-4 { width: 33.33333333%; } .col-lg-3 { width: 25%; } .col-lg-2 { width: 16.66666667%; } .col-lg-1 { width: 8.33333333%; } .col-lg-auto { width: auto; } .hide-lg { display: none !important; } .show-lg { display: block !important; } } @media (max-width: 840px) { .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md-auto { -ms-flex: none; flex: none; } .col-md-12 { width: 100%; } .col-md-11 { width: 91.66666667%; } .col-md-10 { width: 83.33333333%; } .col-md-9 { width: 75%; } .col-md-8 { width: 66.66666667%; } .col-md-7 { width: 58.33333333%; } .col-md-6 { width: 50%; } .col-md-5 { width: 41.66666667%; } .col-md-4 { width: 33.33333333%; } .col-md-3 { width: 25%; } .col-md-2 { width: 16.66666667%; } .col-md-1 { width: 8.33333333%; } .col-md-auto { width: auto; } .hide-md { display: none !important; } .show-md { display: block !important; } } @media (max-width: 600px) { .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm-auto { -ms-flex: none; flex: none; } .col-sm-12 { width: 100%; } .col-sm-11 { width: 91.66666667%; } .col-sm-10 { width: 83.33333333%; } .col-sm-9 { width: 75%; } .col-sm-8 { width: 66.66666667%; } .col-sm-7 { width: 58.33333333%; } .col-sm-6 { width: 50%; } .col-sm-5 { width: 41.66666667%; } .col-sm-4 { width: 33.33333333%; } .col-sm-3 { width: 25%; } .col-sm-2 { width: 16.66666667%; } .col-sm-1 { width: 8.33333333%; } .col-sm-auto { width: auto; } .hide-sm { display: none !important; } .show-sm { display: block !important; } } @media (max-width: 480px) { .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs-auto { -ms-flex: none; flex: none; } .col-xs-12 { width: 100%; } .col-xs-11 { width: 91.66666667%; } .col-xs-10 { width: 83.33333333%; } .col-xs-9 { width: 75%; } .col-xs-8 { width: 66.66666667%; } .col-xs-7 { width: 58.33333333%; } .col-xs-6 { width: 50%; } .col-xs-5 { width: 41.66666667%; } .col-xs-4 { width: 33.33333333%; } .col-xs-3 { width: 25%; } .col-xs-2 { width: 16.66666667%; } .col-xs-1 { width: 8.33333333%; } .col-xs-auto { width: auto; } .hide-xs { display: none !important; } .show-xs { display: block !important; } } .hero { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; -ms-flex-pack: justify; justify-content: space-between; padding-bottom: 4rem; padding-top: 4rem; } .hero.hero-sm { padding-bottom: 2rem; padding-top: 2rem; } .hero.hero-lg { padding-bottom: 8rem; padding-top: 8rem; } .hero .hero-body { padding: .4rem; } .navbar { align-items: stretch; display: -ms-flexbox; display: flex; -ms-flex-align: stretch; -ms-flex-pack: justify; -ms-flex-wrap: wrap; flex-wrap: wrap; justify-content: space-between; } .navbar .navbar-section { align-items: center; display: -ms-flexbox; display: flex; -ms-flex: 1 0 0; flex: 1 0 0; -ms-flex-align: center; } .navbar .navbar-section:not(:first-child):last-child { -ms-flex-pack: end; justify-content: flex-end; } .navbar .navbar-center { align-items: center; display: -ms-flexbox; display: flex; -ms-flex: 0 0 auto; flex: 0 0 auto; -ms-flex-align: center; } .navbar .navbar-brand { font-size: .9rem; text-decoration: none; } .accordion input:checked ~ .accordion-header > .icon:first-child, .accordion[open] .accordion-header > .icon:first-child { transform: rotate(90deg); } .accordion input:checked ~ .accordion-body, .accordion[open] .accordion-body { max-height: 50rem; } .accordion .accordion-header { display: block; padding: .2rem .4rem; } .accordion .accordion-header .icon { transition: transform .25s; } .accordion .accordion-body { margin-bottom: .4rem; max-height: 0; overflow: hidden; transition: max-height .25s; } summary.accordion-header::-webkit-details-marker { display: none; } .avatar { background: #5755d9; border-radius: 50%; color: rgba(255, 255, 255, .85); display: inline-block; font-size: .8rem; font-weight: 300; height: 1.6rem; line-height: 1.25; margin: 0; position: relative; vertical-align: middle; width: 1.6rem; } .avatar.avatar-xs { font-size: .4rem; height: .8rem; width: .8rem; } .avatar.avatar-sm { font-size: .6rem; height: 1.2rem; width: 1.2rem; } .avatar.avatar-lg { font-size: 1.2rem; height: 2.4rem; width: 2.4rem; } .avatar.avatar-xl { font-size: 1.6rem; height: 3.2rem; width: 3.2rem; } .avatar img { border-radius: 50%; height: 100%; position: relative; width: 100%; z-index: 1; } .avatar .avatar-icon, .avatar .avatar-presence { background: #fff; bottom: 14.64%; height: 50%; padding: .1rem; position: absolute; right: 14.64%; transform: translate(50%, 50%); width: 50%; z-index: 2; } .avatar .avatar-presence { background: #bcc3ce; border-radius: 50%; box-shadow: 0 0 0 .1rem #fff; height: .5em; width: .5em; } .avatar .avatar-presence.online { background: #32b643; } .avatar .avatar-presence.busy { background: #e85600; } .avatar .avatar-presence.away { background: #ffb700; } .avatar[data-initial]::before { color: currentColor; content: attr(data-initial); left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); z-index: 1; } .badge { position: relative; white-space: nowrap; } .badge[data-badge]::after, .badge:not([data-badge])::after { background: #5755d9; background-clip: padding-box; border-radius: .5rem; box-shadow: 0 0 0 .1rem #fff; color: #fff; content: attr(data-badge); display: inline-block; transform: translate(-.05rem, -.5rem); } .badge[data-badge]::after { font-size: .7rem; height: .9rem; line-height: 1; min-width: .9rem; padding: .1rem .2rem; text-align: center; white-space: nowrap; } .badge:not([data-badge])::after, .badge[data-badge=""]::after { height: 6px; min-width: 6px; padding: 0; width: 6px; } .badge.btn::after { position: absolute; right: 0; top: 0; transform: translate(50%, -50%); } .badge.avatar::after { position: absolute; right: 14.64%; top: 14.64%; transform: translate(50%, -50%); z-index: 100; } .breadcrumb { list-style: none; margin: .2rem 0; padding: .2rem 0; } .breadcrumb .breadcrumb-item { color: #66758c; display: inline-block; margin: 0; padding: .2rem 0; } .breadcrumb .breadcrumb-item:not(:last-child) { margin-right: .2rem; } .breadcrumb .breadcrumb-item:not(:last-child) a { color: #66758c; } .breadcrumb .breadcrumb-item:not(:first-child)::before { color: #66758c; content: "/"; padding-right: .4rem; } .bar { background: #eef0f3; border-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; height: .8rem; width: 100%; } .bar.bar-sm { height: .2rem; } .bar .bar-item { background: #5755d9; color: #fff; display: block; -ms-flex-negative: 0; flex-shrink: 0; font-size: .7rem; height: 100%; line-height: .8rem; position: relative; text-align: center; width: 0; } .bar .bar-item:first-child { border-bottom-left-radius: .1rem; border-top-left-radius: .1rem; } .bar .bar-item:last-child { border-bottom-right-radius: .1rem; border-top-right-radius: .1rem; -ms-flex-negative: 1; flex-shrink: 1; } .bar-slider { height: .1rem; margin: .4rem 0; position: relative; } .bar-slider .bar-item { left: 0; padding: 0; position: absolute; } .bar-slider .bar-item:not(:last-child):first-child { background: #eef0f3; z-index: 1; } .bar-slider .bar-slider-btn { background: #5755d9; border: 0; border-radius: 50%; height: .6rem; padding: 0; position: absolute; right: 0; top: 50%; transform: translate(50%, -50%); width: .6rem; } .bar-slider .bar-slider-btn:active { box-shadow: 0 0 0 .1rem #5755d9; } .card { background: #fff; border: .05rem solid #dadee4; border-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } .card .card-header, .card .card-body, .card .card-footer { padding: .8rem; padding-bottom: 0; } .card .card-header:last-child, .card .card-body:last-child, .card .card-footer:last-child { padding-bottom: .8rem; } .card .card-body { -ms-flex: 1 1 auto; flex: 1 1 auto; } .card .card-image { padding-top: .8rem; } .card .card-image:first-child { padding-top: 0; } .card .card-image:first-child img { border-top-left-radius: .1rem; border-top-right-radius: .1rem; } .card .card-image:last-child img { border-bottom-left-radius: .1rem; border-bottom-right-radius: .1rem; } .chip { align-items: center; background: #eef0f3; border-radius: 5rem; display: -ms-inline-flexbox; display: inline-flex; -ms-flex-align: center; font-size: 90%; height: 1.2rem; line-height: .8rem; margin: .1rem; max-width: 320px; overflow: hidden; padding: .2rem .4rem; text-decoration: none; text-overflow: ellipsis; vertical-align: middle; white-space: nowrap; } .chip.active { background: #5755d9; color: #fff; } .chip .avatar { margin-left: -.4rem; margin-right: .2rem; } .chip .btn-clear { border-radius: 50%; transform: scale(.75); } .dropdown { display: inline-block; position: relative; } .dropdown .menu { animation: slide-down .15s ease 1; display: none; left: 0; max-height: 50vh; overflow-y: auto; position: absolute; top: 100%; } .dropdown.dropdown-right .menu { left: auto; right: 0; } .dropdown.active .menu, .dropdown .dropdown-toggle:focus + .menu, .dropdown .menu:hover { display: block; } .dropdown .btn-group .dropdown-toggle:nth-last-child(2) { border-bottom-right-radius: .1rem; border-top-right-radius: .1rem; } .empty { background: #f7f8f9; border-radius: .1rem; color: #66758c; padding: 3.2rem 1.6rem; text-align: center; } .empty .empty-icon { margin-bottom: .8rem; } .empty .empty-title, .empty .empty-subtitle { margin: .4rem auto; } .empty .empty-action { margin-top: .8rem; } .menu { background: #fff; border-radius: .1rem; box-shadow: 0 .05rem .2rem rgba(48, 55, 66, .3); list-style: none; margin: 0; min-width: 180px; padding: .4rem; transform: translateY(.2rem); z-index: 300; } .menu.menu-nav { background: transparent; box-shadow: none; } .menu .menu-item { margin-top: 0; padding: 0 .4rem; position: relative; text-decoration: none; } .menu .menu-item > a { border-radius: .1rem; color: inherit; display: block; margin: 0 -.4rem; padding: .2rem .4rem; text-decoration: none; } .menu .menu-item > a:focus, .menu .menu-item > a:hover { background: #f1f1fc; color: #5755d9; } .menu .menu-item > a:active, .menu .menu-item > a.active { background: #f1f1fc; color: #5755d9; } .menu .menu-item .form-checkbox, .menu .menu-item .form-radio, .menu .menu-item .form-switch { margin: .1rem 0; } .menu .menu-item + .menu-item { margin-top: .2rem; } .menu .menu-badge { align-items: center; display: -ms-flexbox; display: flex; -ms-flex-align: center; height: 100%; position: absolute; right: 0; top: 0; } .menu .menu-badge .label { margin-right: .4rem; } .modal { align-items: center; bottom: 0; display: none; -ms-flex-align: center; -ms-flex-pack: center; justify-content: center; left: 0; opacity: 0; overflow: hidden; padding: .4rem; position: fixed; right: 0; top: 0; } .modal:target, .modal.active { display: -ms-flexbox; display: flex; opacity: 1; z-index: 400; } .modal:target .modal-overlay, .modal.active .modal-overlay { background: rgba(247, 248, 249, .75); bottom: 0; cursor: default; display: block; left: 0; position: absolute; right: 0; top: 0; } .modal:target .modal-container, .modal.active .modal-container { animation: slide-down .2s ease 1; z-index: 1; } .modal.modal-sm .modal-container { max-width: 320px; padding: 0 .4rem; } .modal.modal-lg .modal-overlay { background: #fff; } .modal.modal-lg .modal-container { box-shadow: none; max-width: 960px; } .modal-container { background: #fff; border-radius: .1rem; box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3); display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; max-height: 75vh; max-width: 640px; padding: 0 .8rem; width: 100%; } .modal-container.modal-fullheight { max-height: 100vh; } .modal-container .modal-header { color: #303742; padding: .8rem; } .modal-container .modal-body { overflow-y: auto; padding: .8rem; position: relative; } .modal-container .modal-footer { padding: .8rem; text-align: right; } .nav { display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; list-style: none; margin: .2rem 0; } .nav .nav-item a { color: #66758c; padding: .2rem .4rem; text-decoration: none; } .nav .nav-item a:focus, .nav .nav-item a:hover { color: #5755d9; } .nav .nav-item.active > a { color: #505c6e; font-weight: bold; } .nav .nav-item.active > a:focus, .nav .nav-item.active > a:hover { color: #5755d9; } .nav .nav { margin-bottom: .4rem; margin-left: .8rem; } .pagination { display: -ms-flexbox; display: flex; list-style: none; margin: .2rem 0; padding: .2rem 0; } .pagination .page-item { margin: .2rem .05rem; } .pagination .page-item span { display: inline-block; padding: .2rem .2rem; } .pagination .page-item a { border-radius: .1rem; display: inline-block; padding: .2rem .4rem; text-decoration: none; } .pagination .page-item a:focus, .pagination .page-item a:hover { color: #5755d9; } .pagination .page-item.disabled a { cursor: default; opacity: .5; pointer-events: none; } .pagination .page-item.active a { background: #5755d9; color: #fff; } .pagination .page-item.page-prev, .pagination .page-item.page-next { -ms-flex: 1 0 50%; flex: 1 0 50%; } .pagination .page-item.page-next { text-align: right; } .pagination .page-item .page-item-title { margin: 0; } .pagination .page-item .page-item-subtitle { margin: 0; opacity: .5; } .panel { border: .05rem solid #dadee4; border-radius: .1rem; display: -ms-flexbox; display: flex; -ms-flex-direction: column; flex-direction: column; } .panel .panel-header, .panel .panel-footer { -ms-flex: 0 0 auto; flex: 0 0 auto; padding: .8rem; } .panel .panel-nav { -ms-flex: 0 0 auto; flex: 0 0 auto; } .panel .panel-body { -ms-flex: 1 1 auto; flex: 1 1 auto; overflow-y: auto; padding: 0 .8rem; } .popover { display: inline-block; position: relative; } .popover .popover-container { left: 50%; opacity: 0; padding: .4rem; position: absolute; top: 0; transform: translate(-50%, -50%) scale(0); transition: transform .2s; width: 320px; z-index: 300; } .popover *:focus + .popover-container, .popover:hover .popover-container { display: block; opacity: 1; transform: translate(-50%, -100%) scale(1); } .popover.popover-right .popover-container { left: 100%; top: 50%; } .popover.popover-right *:focus + .popover-container, .popover.popover-right:hover .popover-container { transform: translate(0, -50%) scale(1); } .popover.popover-bottom .popover-container { left: 50%; top: 100%; } .popover.popover-bottom *:focus + .popover-container, .popover.popover-bottom:hover .popover-container { transform: translate(-50%, 0) scale(1); } .popover.popover-left .popover-container { left: 0; top: 50%; } .popover.popover-left *:focus + .popover-container, .popover.popover-left:hover .popover-container { transform: translate(-100%, -50%) scale(1); } .popover .card { border: 0; box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3); } .step { display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; list-style: none; margin: .2rem 0; width: 100%; } .step .step-item { -ms-flex: 1 1 0; flex: 1 1 0; margin-top: 0; min-height: 1rem; position: relative; text-align: center; } .step .step-item:not(:first-child)::before { background: #5755d9; content: ""; height: 2px; left: -50%; position: absolute; top: 9px; width: 100%; } .step .step-item a { color: #5755d9; display: inline-block; padding: 20px 10px 0; text-decoration: none; } .step .step-item a::before { background: #5755d9; border: .1rem solid #fff; border-radius: 50%; content: ""; display: block; height: .6rem; left: 50%; position: absolute; top: .2rem; transform: translateX(-50%); width: .6rem; z-index: 1; } .step .step-item.active a::before { background: #fff; border: .1rem solid #5755d9; } .step .step-item.active ~ .step-item::before { background: #dadee4; } .step .step-item.active ~ .step-item a { color: #bcc3ce; } .step .step-item.active ~ .step-item a::before { background: #dadee4; } .tab { align-items: center; border-bottom: .05rem solid #dadee4; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-wrap: wrap; flex-wrap: wrap; list-style: none; margin: .2rem 0 .15rem 0; } .tab .tab-item { margin-top: 0; } .tab .tab-item a { border-bottom: .1rem solid transparent; color: inherit; display: block; margin: 0 .4rem 0 0; padding: .4rem .2rem .3rem .2rem; text-decoration: none; } .tab .tab-item a:focus, .tab .tab-item a:hover { color: #5755d9; } .tab .tab-item.active a, .tab .tab-item a.active { border-bottom-color: #5755d9; color: #5755d9; } .tab .tab-item.tab-action { -ms-flex: 1 0 auto; flex: 1 0 auto; text-align: right; } .tab .tab-item .btn-clear { margin-top: -.2rem; } .tab.tab-block .tab-item { -ms-flex: 1 0 0; flex: 1 0 0; text-align: center; } .tab.tab-block .tab-item a { margin: 0; } .tab.tab-block .tab-item .badge[data-badge]::after { position: absolute; right: .1rem; top: .1rem; transform: translate(0, 0); } .tab:not(.tab-block) .badge { padding-right: 0; } .tile { align-content: space-between; align-items: flex-start; display: -ms-flexbox; display: flex; -ms-flex-align: start; -ms-flex-line-pack: justify; } .tile .tile-icon, .tile .tile-action { -ms-flex: 0 0 auto; flex: 0 0 auto; } .tile .tile-content { -ms-flex: 1 1 auto; flex: 1 1 auto; } .tile .tile-content:not(:first-child) { padding-left: .4rem; } .tile .tile-content:not(:last-child) { padding-right: .4rem; } .tile .tile-title, .tile .tile-subtitle { line-height: 1.2rem; } .tile.tile-centered { align-items: center; -ms-flex-align: center; } .tile.tile-centered .tile-content { overflow: hidden; } .tile.tile-centered .tile-title, .tile.tile-centered .tile-subtitle { margin-bottom: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .toast { background: rgba(48, 55, 66, .95); border: .05rem solid #303742; border-color: #303742; border-radius: .1rem; color: #fff; display: block; padding: .4rem; width: 100%; } .toast.toast-primary { background: rgba(87, 85, 217, .95); border-color: #5755d9; } .toast.toast-success { background: rgba(50, 182, 67, .95); border-color: #32b643; } .toast.toast-warning { background: rgba(255, 183, 0, .95); border-color: #ffb700; } .toast.toast-error { background: rgba(232, 86, 0, .95); border-color: #e85600; } .toast a { color: #fff; text-decoration: underline; } .toast a:focus, .toast a:hover, .toast a:active, .toast a.active { opacity: .75; } .toast .btn-clear { margin: .1rem; } .toast p:last-child { margin-bottom: 0; } .tooltip { position: relative; } .tooltip::after { background: rgba(48, 55, 66, .95); border-radius: .1rem; bottom: 100%; color: #fff; content: attr(data-tooltip); display: block; font-size: .7rem; left: 50%; max-width: 320px; opacity: 0; overflow: hidden; padding: .2rem .4rem; pointer-events: none; position: absolute; text-overflow: ellipsis; transform: translate(-50%, .4rem); transition: opacity .2s, transform .2s; white-space: pre; z-index: 300; } .tooltip:focus::after, .tooltip:hover::after { opacity: 1; transform: translate(-50%, -.2rem); } .tooltip[disabled], .tooltip.disabled { pointer-events: auto; } .tooltip.tooltip-right::after { bottom: 50%; left: 100%; transform: translate(-.2rem, 50%); } .tooltip.tooltip-right:focus::after, .tooltip.tooltip-right:hover::after { transform: translate(.2rem, 50%); } .tooltip.tooltip-bottom::after { bottom: auto; top: 100%; transform: translate(-50%, -.4rem); } .tooltip.tooltip-bottom:focus::after, .tooltip.tooltip-bottom:hover::after { transform: translate(-50%, .2rem); } .tooltip.tooltip-left::after { bottom: 50%; left: auto; right: 100%; transform: translate(.4rem, 50%); } .tooltip.tooltip-left:focus::after, .tooltip.tooltip-left:hover::after { transform: translate(-.2rem, 50%); } @keyframes loading { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @keyframes slide-down { 0% { opacity: 0; transform: translateY(-1.6rem); } 100% { opacity: 1; transform: translateY(0); } } .text-primary { color: #5755d9 !important; } a.text-primary:focus, a.text-primary:hover { color: #4240d4; } a.text-primary:visited { color: #6c6ade; } .text-secondary { color: #e5e5f9 !important; } a.text-secondary:focus, a.text-secondary:hover { color: #d1d0f4; } a.text-secondary:visited { color: #fafafe; } .text-gray { color: #bcc3ce !important; } a.text-gray:focus, a.text-gray:hover { color: #adb6c4; } a.text-gray:visited { color: #cbd0d9; } .text-light { color: #fff !important; } a.text-light:focus, a.text-light:hover { color: #f2f2f2; } a.text-light:visited { color: white; } .text-dark { color: #3b4351 !important; } a.text-dark:focus, a.text-dark:hover { color: #303742; } a.text-dark:visited { color: #455060; } .text-success { color: #32b643 !important; } a.text-success:focus, a.text-success:hover { color: #2da23c; } a.text-success:visited { color: #39c94b; } .text-warning { color: #ffb700 !important; } a.text-warning:focus, a.text-warning:hover { color: #e6a500; } a.text-warning:visited { color: #ffbe1a; } .text-error { color: #e85600 !important; } a.text-error:focus, a.text-error:hover { color: #cf4d00; } a.text-error:visited { color: #ff6003; } .bg-primary { background: #5755d9 !important; color: #fff; } .bg-secondary { background: #f1f1fc !important; } .bg-dark { background: #303742 !important; color: #fff; } .bg-gray { background: #f7f8f9 !important; } .bg-success { background: #32b643 !important; color: #fff; } .bg-warning { background: #ffb700 !important; color: #fff; } .bg-error { background: #e85600 !important; color: #fff; } .c-hand { cursor: pointer; } .c-move { cursor: move; } .c-zoom-in { cursor: zoom-in; } .c-zoom-out { cursor: zoom-out; } .c-not-allowed { cursor: not-allowed; } .c-auto { cursor: auto; } .d-block { display: block; } .d-inline { display: inline; } .d-inline-block { display: inline-block; } .d-flex { display: -ms-flexbox; display: flex; } .d-inline-flex { display: -ms-inline-flexbox; display: inline-flex; } .d-none, .d-hide { display: none !important; } .d-visible { visibility: visible; } .d-invisible { visibility: hidden; } .text-hide { background: transparent; border: 0; color: transparent; font-size: 0; line-height: 0; text-shadow: none; } .text-assistive { border: 0; clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } .divider, .divider-vert { display: block; position: relative; } .divider[data-content]::after, .divider-vert[data-content]::after { background: #fff; color: #bcc3ce; content: attr(data-content); display: inline-block; font-size: .7rem; padding: 0 .4rem; transform: translateY(-.65rem); } .divider { border-top: .05rem solid #f1f3f5; height: .05rem; margin: .4rem 0; } .divider[data-content] { margin: .8rem 0; } .divider-vert { display: block; padding: .8rem; } .divider-vert::before { border-left: .05rem solid #dadee4; bottom: .4rem; content: ""; display: block; left: 50%; position: absolute; top: .4rem; transform: translateX(-50%); } .divider-vert[data-content]::after { left: 50%; padding: .2rem 0; position: absolute; top: 50%; transform: translate(-50%, -50%); } .loading { color: transparent !important; min-height: .8rem; pointer-events: none; position: relative; } .loading::after { animation: loading 500ms infinite linear; background: transparent; border: .1rem solid #5755d9; border-radius: 50%; border-right-color: transparent; border-top-color: transparent; content: ""; display: block; height: .8rem; left: 50%; margin-left: -.4rem; margin-top: -.4rem; opacity: 1; padding: 0; position: absolute; top: 50%; width: .8rem; z-index: 1; } .loading.loading-lg { min-height: 2rem; } .loading.loading-lg::after { height: 1.6rem; margin-left: -.8rem; margin-top: -.8rem; width: 1.6rem; } .clearfix::after { clear: both; content: ""; display: table; } .float-left { float: left !important; } .float-right { float: right !important; } .p-relative { position: relative !important; } .p-absolute { position: absolute !important; } .p-fixed { position: fixed !important; } .p-sticky { position: -webkit-sticky !important; position: sticky !important; } .p-centered { display: block; float: none; margin-left: auto; margin-right: auto; } .flex-centered { align-items: center; display: -ms-flexbox; display: flex; -ms-flex-align: center; -ms-flex-pack: center; justify-content: center; } .m-0 { margin: 0 !important; } .mb-0 { margin-bottom: 0 !important; } .ml-0 { margin-left: 0 !important; } .mr-0 { margin-right: 0 !important; } .mt-0 { margin-top: 0 !important; } .mx-0 { margin-left: 0 !important; margin-right: 0 !important; } .my-0 { margin-bottom: 0 !important; margin-top: 0 !important; } .m-1 { margin: .2rem !important; } .mb-1 { margin-bottom: .2rem !important; } .ml-1 { margin-left: .2rem !important; } .mr-1 { margin-right: .2rem !important; } .mt-1 { margin-top: .2rem !important; } .mx-1 { margin-left: .2rem !important; margin-right: .2rem !important; } .my-1 { margin-bottom: .2rem !important; margin-top: .2rem !important; } .m-2 { margin: .4rem !important; } .mb-2 { margin-bottom: .4rem !important; } .ml-2 { margin-left: .4rem !important; } .mr-2 { margin-right: .4rem !important; } .mt-2 { margin-top: .4rem !important; } .mx-2 { margin-left: .4rem !important; margin-right: .4rem !important; } .my-2 { margin-bottom: .4rem !important; margin-top: .4rem !important; } .p-0 { padding: 0 !important; } .pb-0 { padding-bottom: 0 !important; } .pl-0 { padding-left: 0 !important; } .pr-0 { padding-right: 0 !important; } .pt-0 { padding-top: 0 !important; } .px-0 { padding-left: 0 !important; padding-right: 0 !important; } .py-0 { padding-bottom: 0 !important; padding-top: 0 !important; } .p-1 { padding: .2rem !important; } .pb-1 { padding-bottom: .2rem !important; } .pl-1 { padding-left: .2rem !important; } .pr-1 { padding-right: .2rem !important; } .pt-1 { padding-top: .2rem !important; } .px-1 { padding-left: .2rem !important; padding-right: .2rem !important; } .py-1 { padding-bottom: .2rem !important; padding-top: .2rem !important; } .p-2 { padding: .4rem !important; } .pb-2 { padding-bottom: .4rem !important; } .pl-2 { padding-left: .4rem !important; } .pr-2 { padding-right: .4rem !important; } .pt-2 { padding-top: .4rem !important; } .px-2 { padding-left: .4rem !important; padding-right: .4rem !important; } .py-2 { padding-bottom: .4rem !important; padding-top: .4rem !important; } .s-rounded { border-radius: .1rem; } .s-circle { border-radius: 50%; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .text-justify { text-align: justify; } .text-lowercase { text-transform: lowercase; } .text-uppercase { text-transform: uppercase; } .text-capitalize { text-transform: capitalize; } .text-normal { font-weight: normal; } .text-bold { font-weight: bold; } .text-italic { font-style: italic; } .text-large { font-size: 1.2em; } .text-small { font-size: .9em; } .text-tiny { font-size: .8em; } .text-muted { opacity: .8; } .text-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .text-clip { overflow: hidden; text-overflow: clip; white-space: nowrap; } .text-break { -webkit-hyphens: auto; -ms-hyphens: auto; hyphens: auto; word-break: break-word; word-wrap: break-word; } ================================================ FILE: docs/elements/buttons.html ================================================ Buttons - Elements - Spectre.css CSS Framework

Buttons

Buttons include simple button styles for actions in different types and sizes.

Add the btn class to <a>, <input> or <button> elements for a default button. There are classes btn-primary and btn-link for predefined primary and link buttons.

<button class="btn">default button</button>
<button class="btn btn-primary">primary button</button>
<button class="btn btn-link">link button</button>

Button colors

Add the btn-success or btn-error class for success (green) or error (red) button color. If you need more button colors, please use button mixins to create your own button color variants.

<button class="btn btn-success">success button</button>
<button class="btn btn-error">error button</button>

Button sizes

Add the btn-sm or btn-lg class for small or large button size. Also, you can add the btn-block class for a full-width button.

<button class="btn btn-lg">large button</button>
<button class="btn btn-sm">small button</button>

<button class="btn btn-block">block button</button>

<button class="btn btn-primary btn-lg"><i class="icon icon-arrow-left"></i> large</button>
<button class="btn btn-primary"><i class="icon icon-arrow-left"></i> normal</button>
<button class="btn btn-primary btn-sm"><i class="icon icon-arrow-left"></i> small</button>

Please note that you could use the btn-action class for a square button, or add another s-circle class for a round button, which is often used as a Float Action Button (FAB).

<button class="btn btn-action"><i class="icon icon-arrow-left"></i></button>
<button class="btn btn-action s-circle"><i class="icon icon-arrow-left"></i></button>

Button states

Add the active class for active button state style.

Add the disabled class or the disabled attribute for disabled button state style.

<!-- buttons with disabled state -->
<button class="btn disabled" tabindex="-1">disabled button</button>
<button class="btn" disabled tabindex="-1">disabled button</button>

A button with the loading class can show loading indicator.

<!-- buttons with loading state -->
<button class="btn loading">button</button>
<button class="btn btn-primary loading">primary button</button>

Button groups

If you want to use buttons as a group, add the btn-group class to the container. You can add the btn-group-block class for a full-width button group.

<div class="btn-group btn-group-block">
  <button class="btn">first button</button>
  <button class="btn">second button</button>
  <button class="btn">third button</button>
</div> 
================================================ FILE: docs/elements/code.html ================================================ Code - Elements - Spectre.css CSS Framework

Code

Code is used for styling inline and multiline code snippets.

Inline code

<!-- inline code -->
<code>code</code>

For inline code, you can use the <code> element.

Code snippet

For multiline code snippet blocks, you can use <pre> with the code class as a container, and add <code> inside it. The data-lang attribute is rendered as the language name in the top right.

<!-- code snippets -->
<button class="btn">
  Submit
</button>
<pre class="code" data-lang="HTML"><code><span class="com">&lt;!-- code snippets --&gt;</span>
&lt;<span class="tag">button</span> <span class="atn">class</span>=<span class="atv">&quot;btn&quot;</span>&gt;
  Submit
&lt;<span class="tag">/button</span>&gt;
</code></pre>
================================================ FILE: docs/elements/forms.html ================================================ Forms - Elements - Spectre.css CSS Framework

Forms

Forms provide the most common control styles used in forms, including input, textarea, select, checkbox, radio and switch.

Form input

<!-- form input control -->
<div class="form-group">
  <label class="form-label" for="input-example-1">Name</label>
  <input class="form-input" type="text" id="input-example-1" placeholder="Name">
</div>

Form textarea

<!-- form textarea control -->
<div class="form-group">
  <label class="form-label" for="input-example-3">Message</label>
  <textarea class="form-input" id="input-example-3" placeholder="Textarea" rows="3"></textarea>
</div>

Form select

<!-- form select control -->
<div class="form-group">
  <select class="form-select">
    <option>Choose an option</option>
    <option>Slack</option>
    <option>Skype</option>
    <option>Hipchat</option>
  </select>
</div>

Form radio

<!-- form radio control -->
<div class="form-group">
  <label class="form-label">Gender</label>
  <label class="form-radio">
    <input type="radio" name="gender" checked>
    <i class="form-icon"></i> Male
  </label>
  <label class="form-radio">
    <input type="radio" name="gender">
    <i class="form-icon"></i> Female
  </label>
</div>

Form switch

<!-- form switch control -->
<div class="form-group">
  <label class="form-switch">
    <input type="checkbox">
    <i class="form-icon"></i> Send me emails with news and tips
  </label>
</div>

Form checkbox

<!-- form checkbox control -->
<div class="form-group">
  <label class="form-checkbox">
    <input type="checkbox">
    <i class="form-icon"></i> Remember me
  </label>
</div>

You can change checkbox to indeterminate state by setting the indeterminate property of input checkboxes to true.

Inline forms

You can add the form-inline class to the form components to make them inline in one row.

<div class="form-group">
  <label class="form-radio form-inline">
    <input type="radio" name="gender" checked=""><i class="form-icon"></i> Male
  </label>
  <label class="form-radio form-inline">
    <input type="radio" name="gender"><i class="form-icon"></i> Female
  </label>
</div>

<div class="form-group">
  <label class="form-checkbox form-inline">
    <input type="checkbox"><i class="form-icon"></i> Checkbox 1
  </label>
  <label class="form-checkbox form-inline">
    <input type="checkbox" checked=""><i class="form-icon"></i> Checkbox 2
  </label>
</div>

Horizontal forms

If you want to have a horizontal form, add the form-horizontal class to the <form> container. And add the col-<1-12> and col-xs/sm/lg/xl-<1-12> class to the child elements for responsive form row layout.

<form class="form-horizontal">
  <div class="form-group">
    <div class="col-3 col-sm-12">
      <label class="form-label" for="input-example-1">Name</label>
    </div>
    <div class="col-9 col-sm-12">
      <input class="form-input" type="text" id="input-example-1" placeholder="Name">
    </div>
  </div>
  <!-- form structure -->
</form>

Form sizes

For smaller or larger input and select controls, you could add the input-sm/input-lg, select-sm/select-lg and label-sm/label-lg classes to the elements.

You can add the input-sm/input-lg classes to the input-checkbox, input-radio and input-switch to have different sizes.

Form icons

Spectre Forms components has Spectre Icons support.

Add a wrapper with the has-icon-left/has-icon-right class to <input> element. And add the icon with form-icon class next to the <input>.

<!-- form input with Spectre icon -->
<div class="has-icon-left">
  <input type="text" class="form-input" placeholder="...">
  <i class="form-icon icon icon-check"></i>
</div>

You can use the loading class for loading or posting state.

<!-- form input with loading icon -->
<div class="has-icon-right">
  <input type="text" class="form-input" placeholder="...">
  <i class="form-icon loading"></i>
</div>

Input types

Input groups

slack.com/
slack.com/
slack.com/

If you want to attach text and button along with an input, add the input-group class to the input container. And add the input-group-addon class to the text element and input-group-btn to the button element.

<!-- normal input group -->
<div class="input-group">
  <span class="input-group-addon">...</span>
  <input type="text" class="form-input" placeholder="...">
</div>

<!-- large input group -->
<div class="input-group">
  <span class="input-group-addon addon-lg">...</span>
  <input type="text" class="form-input input-lg" placeholder="...">
</div>

<!-- normal input group with button -->
<div class="input-group">
  <span class="input-group-addon">...</span>
  <input type="text" class="form-input" placeholder="...">
  <button class="btn btn-primary input-group-btn">Submit</button>
</div>

Form validation styles

Input

The name is valid.

Passwords must have at least 8 characters.

Select

The option is invalid.

The option is available.

Checkbox, Radio and Switch (Error state only)

To use form validation styles, you can either add is-success or is-error class to the controls or add has-success or has-error class to parent elements. Use the form-input-hint class to provide form validation success and error messages.

<form>
  <!-- form validation class: has-success -->
  <div class="form-group has-success">
    <label class="form-label" for="input-example-1">Name</label>
    <input class="form-input" type="text" id="input-example-1" placeholder="...">
    <p class="form-input-hint">The name is invalid.</p>
  </div>

  <!-- form validation class: is-success -->
  <div class="form-group">
    <label class="form-label" for="input-example-1">Name</label>
    <input class="form-input is-success" type="text" id="input-example-1" placeholder="...">
    <p class="form-input-hint">The name is invalid.</p>
  </div>

  <!-- form validation example for checkbox, radio and switch -->
  <div class="form-group">
    <label class="form-checkbox is-error">
      <input type="checkbox">
      <i class="form-icon"></i> Remember me
    </label>
  </div>
</form>

You can use input pattern attribute to validate the value as well.

<!-- pattern validation example for Email -->
<input class="form-input" type="email" placeholder="Email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,14}$">

<!-- pattern validation example for password (8 or more characters that are of at least one number, and one uppercase and lowercase letter) -->
<input class="form-input" type="password" placeholder="Password" pattern="^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$">

Form disabled styles

Add the disabled attribute to the element or <fieldset> for a disabled form components style.

<form action="#forms">
  <fieldset disabled>
    <div class="form-group">
      <label class="form-label" for="input-example-19">Name</label>
      <input class="form-input" type="text" id="input-example-19" placeholder="Name">
    </div>
    <div class="form-group">
      <label class="form-label">Gender</label>
      <label class="form-radio">
        <input type="radio" name="gender" disabled>
        <i class="form-icon"></i> Male
      </label>
      <label class="form-radio">
        <input type="radio" name="gender" disabled>
        <i class="form-icon"></i> Female
      </label>
    </div>
    <div class="form-group">
      <select class="form-select" disabled>
        <option>Choose an option</option>
        <option>Slack</option>
        <option>Skype</option>
        <option>Hipchat</option>
      </select>
    </div>
    <div class="form-group">
      <label class="form-switch">
        <input type="checkbox" disabled>
        <i class="form-icon"></i> Send me emails with news and tips
      </label>
    </div>
    <div class="form-group">
      <label class="form-label" for="input-example-20">Message</label>
      <textarea class="form-input" id="input-example-20" placeholder="Textarea" rows="3" disabled></textarea>
    </div>
    <div class="form-group">
      <label class="form-checkbox">
        <input type="checkbox" disabled>
        <i class="form-icon"></i> Remember me
      </label>
    </div>
  </fieldset>
================================================ FILE: docs/elements/icons.html ================================================ Icons - Elements - Spectre.css CSS Framework

Icons.css

CSS ONLY

Spectre.css Icons will be moved to a new GitHub Repo while Spectre will only include basic icons.

Icons.css are single-element, responsive and pure CSS icons. You can include spectre-icons.css located in the dist folder to your web <head> to have these CSS icons.

Navigation icons

icon-arrow-up

icon-arrow-right

icon-arrow-down

icon-arrow-left

icon-upward

icon-forward

icon-downward

icon-back

icon-caret

icon-menu

icon-apps

icon-more-horiz

icon-more-vert

Action icons

icon-resize-horiz

icon-resize-vert

icon-plus

icon-minus

icon-cross

icon-check

icon-stop

icon-shutdown

icon-refresh

icon-search

icon-flag

icon-bookmark

icon-edit

icon-delete

icon-share

icon-download

icon-upload

icon-copy

Object icons

icon-mail

icon-people

icon-message

icon-photo

icon-time

icon-location

icon-link

icon-emoji

<i class="icon icon-menu"></i>

Icon sizes

Use icon-2x, icon-3x and icon-4x classes to increase icon sizes. You can set font-size to have different icon sizes.

icon-2x (32px)

icon-3x (48px)

icon-4x (64px)

<i class="icon icon-2x icon-mail"></i>
================================================ FILE: docs/elements/labels.html ================================================ Labels - Elements - Spectre.css CSS Framework

Labels

Labels are formatted text tags for highlighted, informative information.

default labelprimary labelsecondary labelsuccess labelwarning labelerror label

Add the label class to <span> or <small> elements. You can add another class label-primary, label-secondary, label-success, label-warning and label-error for colored labels.

<!-- normal labels -->
<span class="label">default label</span>
<span class="label label-primary">primary label</span>

Rounded labels

default labelprimary label

Add the label-rounded class to have rounded labels.

<!-- rounded labels -->
<span class="label label-rounded label-primary">primary label</span>
================================================ FILE: docs/elements/media.html ================================================ Media - Elements - Spectre.css CSS Framework

Media

Media includes responsive images, figures and video classes.

Images

Add the img-responsive class to <img> elements. The images will scale with the parent sizes.

macOS El Capitan Wallpaper
<img src="img/osx-el-capitan.jpg" class="img-responsive ..." alt="...">

Add the img-fit-contain or img-fit-cover class to <img> or <video> elements. The media will crop itself to fit inside the element (and you don't need another container). This feature can replace the classic background image trick. Microsoft Edge support is shipped with Build Number 16299+.

macOS Yosemite Wallpaper
img-fit-contain
macOS Yosemite Wallpaper
img-fit-cover
<img src="img/osx-el-capitan.jpg" class="img-fit-contain ..." alt="...">
<img src="img/osx-el-capitan.jpg" class="img-fit-cover ..." alt="...">

Figure

You can use the element <figure> for an image with a caption. Add the figure class to <figure> element. The images with the img-responsive class will be responsive. And the included class figure-caption will provide basic style for caption. Also, you can use text-left, text-center and text-right for caption alignment.

macOS Yosemite Wallpaper
macOS Yosemite wallpaper
<figure class="figure">
  <img class="img-responsive ..." src="img/osx-yosemite-2.jpg" alt="macOS Yosemite Wallpaper">
  <figcaption class="figure-caption text-center">macOS Yosemite wallpaper</figcaption>
</figure>

Video

For responsive video, add a container with the video-responsive class. Insert any YouTube, Youku or other iframe/embed video inside the container. The ratio is 16:9 by default. You may add video-responsive-4-3 for 4:3 ratio video container or video-responsive-1-1 for 1:1 ratio.

For responsive <video> elements, you can add the video-responsive class directly.

<div class="video-responsive video-responsive-4-3">
  <iframe src="..." width="..." height="..." frameborder="0" allowfullscreen></iframe>
</div>

<video class="video-responsive" src="...">...</video>
================================================ FILE: docs/elements/tables.html ================================================ Tables - Elements - Spectre.css CSS Framework

Tables

Tables include default styles for tables and data sets.

Name Genre Release date
The Shawshank Redemption Crime, Drama 14 October 1994
The Godfather Crime, Drama 24 March 1972
Schindler's List Biography, Drama, History 4 February 1994
Se7en Crime, Drama, Mystery 22 September 1995

Add the table class to any <table> element. The class will add padding, border and emphasized table header.

<table class="table">
  <thead>
    <tr>
      <th>name</th>
      <th>genre</th>
      <th>release date</th>
    </tr>
  </thead>
  <tbody>
    <tr class="active">
      <td>The Shawshank Redemption</td>
      <td>Crime, Drama</td>
      <td>14 October 1994</td>
    </tr>
  </tbody>
</table>

Striped tables

Name Genre Release date
The Shawshank Redemption Crime, Drama 14 October 1994
The Godfather Crime, Drama 24 March 1972
Schindler's List Biography, Drama, History 4 February 1994
Se7en Crime, Drama, Mystery 22 September 1995

Use the table-striped class to <table> to add zebra striped style. For hoverable table rows, you can add the table-hover class to enable hover style.

Use the active class to make <tr> element highlighted.

<table class="table table-striped table-hover">
  <thead>
    <tr>
      <th>name</th>
      <th>genre</th>
      <th>release date</th>
    </tr>
  </thead>
  <tbody>
    <tr class="active">
      <td>The Shawshank Redemption</td>
      <td>Crime, Drama</td>
      <td>14 October 1994</td>
    </tr>
  </tbody>
</table>

Scrollable tables

Name Rating Duration Genre Release date Director
The Shawshank Redemption R 2h 22min Crime, Drama 14 October 1994 Frank Darabont
The Godfather R 2h 55min Crime, Drama 24 March 1972 Francis Ford Coppola
Schindler's List R 3h 15min Biography, Drama, History 4 February 1994 Steven Spielberg
Se7en R 2h 7min Crime, Drama, Mystery 22 September 1995 David Fincher

Add the table-scroll class to <table> to have a horizontally scrollable table.

<table class="table table-scroll">
  ...
</table>
================================================ FILE: docs/elements/typography.html ================================================ Typography - Elements - Spectre.css CSS Framework

Typography

Typography sets default styles for headings, paragraphs, semantic text, blockquote and lists elements.

Headings

H1 Heading 40px

H2 Heading 32px

H3 Heading 28px

H4 Heading 24px

H5 Heading 20px
H6 Heading 16px
<h1>H1 Heading</h1>
<h1>H1 Heading <small class="label">40px</small></h1>
<span class="h1">H1 Heading</span>

Paragraphs

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent risus leo, dictum in vehicula sit amet, feugiat tempus tellus. Duis quis sodales risus. Etiam euismod ornare consequat.

Climb leg rub face on everything give attitude nap all day for under the bed. Chase mice attack feet but rub face on everything hopped up on goofballs.

<p>Lorem ipsum dolor sit amet, ...</p>
<p>...</p>

Semantic text elements

I18Nabbr
Boldstrongb
Citationcite
Hello World!code
Deleteddel
Emphasisem
Italici
Insertedins
Ctrl + Skbd
Highlightedmark
kanji ruby
Strikethroughs
Samplesamp
Text Subscriptedsub
Text Superscriptedsup
time
Underlineu
x = y + 2var

Optimized for East Asian fonts

你好, こんにちは, 안녕하세요

Chinese (Simplified)

革命不是请客吃饭,不是做文章,不是绘画绣花,不能那样雅致,那样从容不迫,“文质彬彬”,那样“温良恭俭让”。革命就是暴动,是一个阶级推翻一个阶级的暴烈的行动。

Chinese (Tranditional)

山不在高,有仙則名;水不在深,有龍則靈。斯是陋室,惟吾德馨。苔痕上階綠,草色入簾青;談笑有鴻儒,往來無白丁。可以調素琴,閱金經。無絲竹之亂耳,無案牘之勞形。南陽諸葛廬,西蜀子雲亭。孔子云:「何陋之有?」

Japanese

祇園精舎の鐘の声、諸行無常の響きあり。沙羅双樹の花の色、盛者必衰の理をあらはす。おごれる人も久しからず。ただ春の夜の夢のごとし。たけき者も遂にはほろびぬ、ひとへ‌​に風の前の塵に同じ。

Korean

나라말이 중국과 달라, 한문・한자와 서로 통하지 아니하므로, 어리석은 백성들이 말하고자 하는 바가 있어도, 끝내 제 뜻을 펴지 못하는 사람이 많다. 내가 이를 불쌍히 여겨, 새로 스물 여덟 글자를 만드니, 사람마다 하여금 쉽게 익혀, 날마다 씀에 편하게 하고자 할 따름이다.

Add the lang attribute to the <html> element or use the class lang-zh, lang-zh-hans, lang-zh-hant, lang-ja or lang-ko to have better Asian CJK (Chinese, Japanese and Korean) font support.

<html lang="zh-Hans">……</html>

<p class="lang-zh-hans">革命不是请客吃饭,不是做文章……</p>
<p class="lang-ja">祇園精舎の鐘の声、諸行無常の響きあり……</p>
<p class="lang-ko">나라말이 중국과 달라, 한문・한자와 서로 통하지 아니하므로……</p>

And you can use the lang-cjk class or the lang attribute to add spacing between underlines and strike-through text for better Chinese and Japanese readability.

祇園精舎の鐘の声、諸行無常の響きあり。

祇園精舎の鐘の声、諸行無常の響きあり。

<p class="lang-cjk"><u>祇園</u><u>精舎</u>の鐘の声、諸行無常の響きあり。……</p>
<p lang="ja"><del>祇園</del><del>精舎</del>の鐘の声、諸行無常の響きあり。……</p>

Fonts

Spectre sets the most common and best font-family for each OS with fallback support in old systems. There are also fonts targeted East Asian typography.

/* Western typography targeted */
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
/* Monospace typography targeted */
font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace;

/* Chinese (lang="zh" and lang="zh-Hans") targeted */
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif;
/* Chinese (lang="zh-Hant") targeted */
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", "Helvetica Neue", sans-serif;
/* Japanese (lang="ja") targeted */
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, "Helvetica Neue", sans-serif;
/* Korean (lang="ko") targeted */
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Malgun Gothic", "Helvetica Neue", sans-serif;

Blockquote

The advance of technology is based on making it fit in so that you don't really even notice it, so it's part of everyday life.

- Bill Gates
<blockquote>
  <p>The advance of technology is based on making it fit in so that you don't really even notice it, so it's part of everyday life. </p>
  <cite>- Bill Gates</cite>
</blockquote>

Lists

  • list item 1
  • list item 2
    • list item 2.1
    • list item 2.2
    • list item 2.3
  • list item 3
  1. list item 1
  2. list item 2
    1. list item 2.1
    2. list item 2.2
    3. list item 2.3
  3. list item 3
description list term 1
description list description 1
description list term 2
description list description 2
description list term 3
description list description 3
<!-- unordered list -->
<ul>
  <li>list item 1</li>
  <li>list item 2
    <ul>
      <li>list item 2.1</li>
      <li>list item 2.2</li>
      <li>list item 2.3</li>
    </ul>
  </li>
  <li>list item 3</li>
</ul>

<!-- description list -->
<dl>
  <dt>description list term</dt>
  <dd>description list description</dd>
</dl>
================================================ FILE: docs/elements.html ================================================ Elements - Spectre.css CSS Framework

Elements

Spectre.css is a lightweight, responsive and modern CSS framework for faster and extensible development.

Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.

Typography
Headings, paragraphs, semantic text, blockquote and lists elements
Tables
Tables and data sets
Buttons
Simple button styles for actions in different types and sizes
Forms
Input, textarea, select, checkbox, radio and switch
Icons
Single-element, responsive and pure CSS icons
Labels
Formatted text tags for highlighted, informative information
Code
Inline and multiline code snippets
Media
Responsive images, figures and video
================================================ FILE: docs/examples/starter.html ================================================ Starter Page Example - Spectre.css CSS Framework

Starter Page Example

================================================ FILE: docs/experimentals/autocomplete.html ================================================ Autocomplete - Experimentals - Spectre.css CSS Framework

Autocomplete

Autocomplete form component provides suggestions while you type. It is often used for tags and contacts input.

Bruce Banner
AvatarThor Odinson
AvatarSteve Rogers
Tony Stark
Natasha Romanoff
Bruce BannerThor OdinsonThor Odinson

Add a container element with the form-autocomplete class. There are 2 parts of it, one is form-autocomplete-input, another is menu component. You may add the is-focused class to form-autocomplete-input to make it appear as focus state.

Spectre.css does NOT include JavaScript code, you will need to implement your JS to interact with the autocomplete. The autocomplete HTML structure is exampled below.

Bruce Banner
AvatarThor Odinson
AvatarSteve Rogers
Tony Stark
Natasha Romanoff
<div class="form-autocomplete">
  <!-- autocomplete input container -->
  <div class="form-autocomplete-input form-input">

    <!-- autocomplete chips -->
    <div class="chip">
      <img src="img/avatar-1.png" class="avatar avatar-sm" alt="Thor Odinson">
      Thor Odinson
      <a href="#" class="btn btn-clear" aria-label="Close" role="button"></a>
    </div>

    <!-- autocomplete real input box -->
    <input class="form-input" type="text" placeholder="typing here">
  </div>

  <!-- autocomplete suggestion list -->
  <ul class="menu">
    <!-- menu list items -->
    <li class="menu-item">
      <a href="#">
        <div class="tile tile-centered">
          <div class="tile-icon">
            ...
          </div>
          <div class="tile-content">
            ...
          </div>
        </div>
      </a>
    </li>
  </ul>
</div>
================================================ FILE: docs/experimentals/calendars.html ================================================ Calendars - Experimentals - Spectre.css CSS Framework

Calendars

Calendars are designed for date or date range picker and events display. It is made with flex layout.

Sun
Mon
Tue
Wed
Thu
Fri
Sat
<div class="calendar">
  <!-- calendar navbar -->
  <div class="calendar-nav navbar">
    <button class="btn btn-action btn-link btn-lg">
      <i class="icon icon-arrow-left"></i>
    </button>
    <div class="navbar-primary">March 2017</div>
    <button class="btn btn-action btn-link btn-lg">
      <i class="icon icon-arrow-right"></i>
    </button>
  </div>

  <div class="calendar-container">
    <div class="calendar-header">
      <div class="calendar-date">Sun</div>
      <div class="calendar-date">Mon</div>
      <div class="calendar-date">Tue</div>
      <div class="calendar-date">Wed</div>
      <div class="calendar-date">Thu</div>
      <div class="calendar-date">Fri</div>
      <div class="calendar-date">Sat</div>
    </div>

    <div class="calendar-body">
      <!-- calendar previous month -->
      <div class="calendar-date prev-month">
        <button class="date-item">26</button>
      </div>
      ...
      <div class="calendar-date prev-month">
        <button class="date-item">28</button>
      </div>

      <!-- calendar current month -->
      <div class="calendar-date">
        <button class="date-item">1</button>
      </div>
      <div class="calendar-date">
        <button class="date-item">2</button>
      </div>
      <div class="calendar-date">
        <button class="date-item">3</button>
      </div>
      <!-- calendar date: today -->
      <div class="calendar-date">
        <button class="date-item date-today">4</button>
      </div>
      <!-- calendar date: tooltip -->
      <div class="calendar-date tooltip" data-tooltip="You have appointments">
        <button class="date-item">5</button>
      </div>
      <!-- calendar date: not available -->
      <div class="calendar-date tooltip" data-tooltip="Not available">
        <button class="date-item" disabled="">6</button>
      </div>

      <!-- calendar range -->
      <div class="calendar-date calendar-range range-start">
        <button class="date-item">7</button>
      </div>
      <div class="calendar-date calendar-range">
        <button class="date-item">8</button>
      </div>
      <div class="calendar-date calendar-range range-end">
        <button class="date-item">9</button>
      </div>
      ...
      <div class="calendar-date">
        <button class="date-item">31</button>
      </div>

      <!-- calendar next month -->
      <div class="calendar-date next-month">
        <button class="date-item">1</button>
      </div>
    </div>
  </div>
</div>

Calendars sizes

Sun
Mon
Tue
Wed
Thu
Fri
Sat
<div class="calendar calendar-lg">
  <!-- calendar navbar structure -->

  <div class="calendar-container">
    <!-- calendar header structure -->

    <div class="calendar-body">
      <!-- calendar date with events -->
      <div class="calendar-date">
        <button class="date-item active">20</button>
        <div class="calendar-events">
          <a class="calendar-event bg-success text-light" href="#calendars">Spring Equinox</a>
        </div>
      </div>
    </div>
  </div>
</div>
================================================ FILE: docs/experimentals/carousels.html ================================================ Carousels - Experimentals - Spectre.css CSS Framework

Carousels

CSS ONLY

Carousels are slideshows for cycling images. It is built in pure CSS.

The default image number of Carousels is 8. You can add more images by changing the variable $carousel-number in _carousels.scss and re-compiling the CSS.

<div class="carousel">
  <!-- carousel locator -->
  <input class="carousel-locator" id="slide-1" type="radio" name="carousel-radio" hidden="" checked="">
  <input class="carousel-locator" id="slide-2" type="radio" name="carousel-radio" hidden="">
  <input class="carousel-locator" id="slide-3" type="radio" name="carousel-radio" hidden="">
  <input class="carousel-locator" id="slide-4" type="radio" name="carousel-radio" hidden="">
  
  <!-- carousel container -->
  <div class="carousel-container">
    <!-- carousel item -->
    <figure class="carousel-item">
      <label class="item-prev btn btn-action btn-lg" for="slide-4"><i class="icon icon-arrow-left"></i></label>
      <label class="item-next btn btn-action btn-lg" for="slide-2"><i class="icon icon-arrow-right"></i></label>
      <img class="img-responsive rounded" src="img/osx-yosemite.jpg" alt="macOS Yosemite Wallpaper">
    </figure>
    <figure class="carousel-item">
      <label class="item-prev btn btn-action btn-lg" for="slide-1"><i class="icon icon-arrow-left"></i></label>
      <label class="item-next btn btn-action btn-lg" for="slide-3"><i class="icon icon-arrow-right"></i></label>
      <img class="img-responsive rounded" src="img/osx-yosemite-2.jpg" alt="macOS Yosemite Wallpaper">
    </figure>
    <figure class="carousel-item">
      <label class="item-prev btn btn-action btn-lg" for="slide-2"><i class="icon icon-arrow-left"></i></label>
      <label class="item-next btn btn-action btn-lg" for="slide-4"><i class="icon icon-arrow-right"></i></label>
      <img class="img-responsive rounded" src="img/osx-el-capitan.jpg" alt="macOS El Capitan Wallpaper">
    </figure>
    <figure class="carousel-item">
      <label class="item-prev btn btn-action btn-lg" for="slide-3"><i class="icon icon-arrow-left"></i></label>
      <label class="item-next btn btn-action btn-lg" for="slide-1"><i class="icon icon-arrow-right"></i></label>
      <img class="img-responsive rounded" src="img/osx-el-capitan-2.jpg" alt="macOS El Capitan Wallpaper">
    </figure>
  </div>
  <!-- carousel navigation -->
  <div class="carousel-nav">
    <label class="nav-item text-hide c-hand" for="slide-1">1</label>
    <label class="nav-item text-hide c-hand" for="slide-2">2</label>
    <label class="nav-item text-hide c-hand" for="slide-3">3</label>
    <label class="nav-item text-hide c-hand" for="slide-4">4</label>
  </div>
</div>
================================================ FILE: docs/experimentals/comparison.html ================================================ Comparison sliders - Experimentals - Spectre.css CSS Framework

Comparison sliders

CSS ONLY

Comparison Sliders are sliders for comparing two images. It is built in pure CSS.

macOS Sierra Wallpaper
Before
macOS Sierra Wallpaper
After
<div class="comparison-slider">
  <figure class="comparison-before">
    <!-- image (before) -->
    <div class="comparison-label">Before</div>
  </figure>

  <figure class="comparison-after">
    <!-- image (after) -->
    <div class="comparison-label">After</div>
    <textarea class="comparison-resizer" readonly></textarea>
  </figure>
</div>
================================================ FILE: docs/experimentals/filters.html ================================================ Filters - Experimentals - Spectre.css CSS Framework

Filters

CSS ONLY

Filters are CSS only content filters.

Fallout 4
Roleplaying
Halo 5
Shooter
Quantum Break
Action
Forza Horizon 3
Sports
Final Fantasy XV
Roleplaying
NBA 2K17
Sports
Battlefield 1
Shooter
GTA V
Action
FIFA 17
Sports
Overwatch
Shooter
Titanfall 2
Shooter
Gears of Wars 4
Shooter

Filters use tag-1 to tag-8 to flag different tags. tag-0 is reserved for clearing filter (or showing all). You can overwrite $filter-number in _filters.scss to have more filters.

<div class="filter">
  <input type="radio" id="tag-0" class="filter-tag" name="filter-radio" hidden checked>
  <input type="radio" id="tag-1" class="filter-tag" name="filter-radio" hidden>
  <input type="radio" id="tag-2" class="filter-tag" name="filter-radio" hidden>

  <div class="filter-nav">
    <label class="chip" for="tag-0">All</label>
    <label class="chip" for="tag-1">Action</label>
    <label class="chip" for="tag-2">Roleplaying</label>
  </div>

  <div class="filter-body">
    <div class="filter-item card" data-tag="tag-1">
      <!-- Filter item content -->
    </div>
    <div class="filter-item card" data-tag="tag-2">
      <!-- Filter item content -->
    </div>
    <!-- Filter items -->
  </div>
</div>
================================================ FILE: docs/experimentals/meters.html ================================================ Meters - Experimentals - Spectre.css CSS Framework

Meters

Meters represent the value within the known range.

<!-- Meter is green when low < value < high -->
<meter class="meter" value="20" min="0" max="100"></meter>
<meter class="meter" value="60" min="0" max="100" low="30" high="80"></meter>
<!-- Meter is yellow when value < low  or high < value -->
<meter class="meter" value="85" min="0" max="100" low="30" high="80"></meter>
<!-- Meter is red when value < low < high < optimum or optimum < low < high < value -->
<meter class="meter" value="20" optimum="90" min="0" max="100" low="30" high="80"></meter>
================================================ FILE: docs/experimentals/off-canvas.html ================================================ Off-canvas - Experimentals - Spectre.css CSS Framework

Off-canvas

CSS ONLY

The Off-canvas is a navigation layout that the sidebar can slide in and out of the viewport. It is built in pure CSS.

By default, the off-canvas menu is collapsed whenever the window width is. But you can add the off-canvas-sidebar-show class to the off-canvas to make the sidebar expanded when the window width is larger than or equal to 960px.

Lorem ipsum

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent risus leo, dictum in vehicula sit amet, feugiat tempus tellus. Duis quis sodales risus. Etiam euismod ornare consequat.

Climb leg rub face on everything give attitude nap all day for under the bed. Chase mice attack feet but rub face on everything hopped up on goofballs.

You can open the sidebar by adding the class active to off-canvas-sidebar. And remove the active to close it.

<div class="off-canvas">
  <!-- off-screen toggle button -->
  <a class="off-canvas-toggle btn btn-primary btn-action" href="#sidebar-id">
    <i class="icon icon-menu"></i>
  </a>

  <div id="sidebar-id" class="off-canvas-sidebar">
    <!-- off-screen sidebar -->
  </div>

  <a class="off-canvas-overlay" href="#close"></a>

  <div class="off-canvas-content">
    <!-- off-screen content -->
  </div>
</div>
================================================ FILE: docs/experimentals/parallax.html ================================================ Parallax - Experimentals - Spectre.css CSS Framework

Parallax

CSS ONLY

The Parallax acts like Apple TV/tvOS hover parallax effect. It is built in pure CSS.

tvOS parallax demo

macOS Yosemite Wallpaper
<div class="parallax">
  <div class="parallax-top-left" tabindex="1"></div>
  <div class="parallax-top-right" tabindex="2"></div>
  <div class="parallax-bottom-left" tabindex="3"></div>
  <div class="parallax-bottom-right" tabindex="4"></div>
  <div class="parallax-content">
    <div class="parallax-front">
      <h2>tvOS parallax demo</h2>
    </div>
    <div class="parallax-back">
      <img src="img/osx-el-capitan.jpg" class="img-responsive rounded" ...>
    </div>
  </div>
</div>
================================================ FILE: docs/experimentals/progress.html ================================================ Progress - Experimentals - Spectre.css CSS Framework

Progress

The Progress indicates the progress completion of a task.

<progress class="progress" value="25" max="100"></progress>
<progress class="progress" max="100"></progress>
================================================ FILE: docs/experimentals/sliders.html ================================================ Sliders - Experimentals - Spectre.css CSS Framework

Sliders

The Sliders are for selecting values from ranges.

You can add the class tooltip to have tooltip labels. If no data-tooltip is set, the value will be used instead.

<!-- Sliders -->
<input class="slider" type="range" min="0" max="100" value="50">
<!-- Sliders with tooltips -->
<input class="slider tooltip" type="range" min="0" max="100" value="50" oninput="this.setAttribute('value', this.value);">
================================================ FILE: docs/experimentals/timelines.html ================================================ Timelines - Experimentals - Spectre.css CSS Framework

Timelines

The Timelines are ordered sequences of activities.

March 2016

Initial commit

February 2017

New Documents experience

Bars: represent the progress of a task

Steps: progress indicators of a sequence of task steps

Tiles: repeatable or embeddable information blocks

March 2017

Icons: single-element, responsive and pure CSS icons

Popovers: small overlay content containers

Calendars: date or date range picker and events display

Carousels: slideshows for cycling images

<div class="timeline">
  <div class="timeline-item" id="timeline-example-1">
    <div class="timeline-left">
      <a class="timeline-icon" href="#timeline-example-1"></a>
    </div>
    <div class="timeline-content">
      <!-- tiles structure -->
    </div>
  </div>

  <div class="timeline-item" id="timeline-example-2">
    <div class="timeline-left">
      <a class="timeline-icon icon-lg" href="#timeline-example-2">
        <i class="icon icon-check"></i>
      </a>
    </div>
    <div class="timeline-content">
      <!-- tiles structure -->
    </div>
  </div>
  ...
</div>
================================================ FILE: docs/experimentals/viewer-360.html ================================================ 360-Degree Viewer - Experimentals - Spectre.css CSS Framework

360-Degree Viewer

CSS ONLY

360-Degree Viewer is an interactive product photo viewer. It is built in pure CSS.

Photo credits: Microsoft Surface Pro 6

Photo credits: Microsoft Xbox One X

You will need to use your own product image sprite (all angle of photos in one image) and set the attribute max to the image numbers to use this component.

<div class="viewer-360">
  <input class="viewer-slider slider" type="range" min="1" max="36" value="1" oninput="this.setAttribute('value', this.value);">
  <figure class="viewer-image" style="background-image:url('...');"></figure>
</div>

The default image numbers in CSS are 36. You can copy the mixin and add more numbers in _viewer-360.scss and re-compiling the CSS.

@include viewer-slider-size(36);
@include viewer-slider-size(30);
================================================ FILE: docs/experimentals.html ================================================ Experimentals - Spectre.css CSS Framework

Experimentals

The Experimentals include experimental elements and features, mostly are not yet ready for wide use. These elements and components are limited inside spectre-exp.scss before browsers fully support them. Sometimes, there are some specific browsers targeted components.

360-Degree Viewer
Interactive 360-degree product photo viewer
Autocomplete
Form component provides suggestions while you type
Calendars
Date or date range picker and events display based on Flexbox
Carousels
Pure CSS slideshows for cycling images
Comparison sliders
Pure CSS sliders for comparing two images
Filters
CSS only content filters
Meters
Representing the value within the known range
Off-canvas
Navigation layout that sidebars can slide in and out of the viewport
Parallax
Pure CSS Apple TV/tvOS hover parallax effect
Progress
Indicating the progress completion of a task
Sliders
Selecting values from ranges
Timelines
Ordered sequences of activities
================================================ FILE: docs/getting-started/browsers.html ================================================ Browsers - Getting started - Spectre.css CSS Framework

Browser support

Spectre uses Autoprefixer to make most styles compatible with earlier browsers and Normalize.css for CSS resets. Spectre is designed for modern browsers. For best compatibility, these browsers are recommended:

  • Chrome LAST 4
  • Microsoft Edge LAST 4
  • Firefox Extended Support Release
  • Safari LAST 4
  • Opera LAST 4
  • Internet Explorer 10+

Spectre supports Internet Explorer 10+, but some HTML5 and CSS3 features are not perfectly supported by Internet Explorer.

================================================ FILE: docs/getting-started/custom.html ================================================ Custom - Getting started - Spectre.css CSS Framework

Custom version

You can customize your version of Spectre.css by editing Sass files in /src directory or removing unneeded components from .scss source files.

Sass Source Code

If you are looking for Less version of Spectre.css, please switch to Less branch.

Less Branch

Compiling CSS

Spectre uses Gulp for compiling CSS. Firstly you need to install NPM, which is used to manage Gulp and other dependencies.

Then, you can build the CSS file from the command line:

  1. Navigate to the root directory of Spectre.
  2. Run npm install. NPM will install all dev dependencies as listed in package.json.
  3. When completed, run gulp build task to compile Sass to CSS and minify files.
  4. You can find compiled CSS files in /dist directory.

All available Gulp tasks:

  • gulp build - compile Sass to CSS and minify files (default)
  • gulp docs - compile Docs related files
  • gulp watch - watch file changes and re-compile CSS files

Importing Sass

It is recommended to customize Spectre by importing Sass source files to your projects. In this way, you can keep Spectre up to date without conflicts, since Spectre code and your custom code are separate.

  • First, create your own project and install Spectre via NPM or other package managers.
  • Then create your project-name.scss file in the root folder. You can use project-name.scss to define your variables.
  • Compile the Sass file to CSS to get the custom version of Spectre.
// Example of project-name.scss
// Define variables to override default ones
$primary-color: #2e5bec;
$dark-color: #3e396b;

// Import full Spectre source code
@import "node_modules/spectre.css/src/spectre";

Alternatively, you can create custom _variables.scss and import it to project-name.scss.

// Example of project-name.scss
@import "variables";

// Import only the needed components
@import "node_modules/spectre.css/src/buttons";
@import "node_modules/spectre.css/src/forms";

Folder structure

spectre/
├── dist/                           // Build folder
│   ├── spectre-exp.css
│   ├── spectre-exp.min.css
│   ├── spectre-icons.css
│   ├── spectre-icons.min.css
│   ├── spectre.css
│   └── spectre.min.css
│
├── docs/
│   ├── dist/                       // Pre-built CSS folder
│   │   ├── spectre-exp.css
│   │   ├── spectre-exp.min.css
│   │   ├── spectre-icons.css
│   │   ├── spectre-icons.min.css
│   │   ├── spectre.css
│   │   └── spectre.min.css
|   ├── css/                        // Docs CSS files
│   │   └── docs.css
|   ├── src/
│   │   ├── scss                    // Docs Sass files
│   │   │   └── docs.scss
│   │   ├── index.pug               // Docs Pug files
│   │   └── ...
│   ├── examples/                   // Example tempalte
│   │   └── starter.html
│   ├── ../
│   ├── index.html
│   └── ...
│
├── src/                            // Source Sass files
│   ├── spectre.scss
│   ├── spectre-icons.scss
│   ├── spectre-exp.scss
│   ├── _mixins.scss
│   ├── _variables.scss
│   └── ...
│
├── gulpfile.js
├── package.json
└── ...

Variables

Spectre.css is designed with consistent design language. You can use your own variables to create your new or match existing design. All variables in _variables.scss include !default flag. You can redefine the variables to override the values.

Variables - Colors

#5755d9
Primary
#f1f1fc
Secondary
#32b643
Success
#ffb700
Warning
#e85600
Error
#303742
Dark
#66758c
Gray dark
#bcc3ce
Gray
#f7f8f9
Gray light
#fff
Light

Variables - Button mixins

There are 2 button variant mixins in _mixins.scss to generate different color variants.

  • @mixin button-variant($color: $primary-color);
  • @mixin button-outline-variant($color: $primary-color);
<!-- filled button with the success color -->
.btn-success {
  @include button-variant($success-color);
}

<!-- outlined button with the success color -->
.btn-outline-success {
  @include button-outline-variant($success-color);
}

Variables - Sizes

The default REM (root em) size in Spectre.css is 20px.

Please note in the Chinese/Japanese/Korean version, Chrome uses 12px as default minimum font size. That is why Spectre sets rem default html font size to 20px, which is relatively easy to calculate.

Spectre uses 4px as the unit size. Sizes of components are based on the unit size.

Variables - Custom prefix

There is also a way to add custom prefix to all CSS classes. You can use gulp-css-prefix plugin and add a new Gulp task to enable it.

npm install gulp-css-prefix

To add spectre- to all classes, you can add the Gulp task to gulpfile.js file.

var cssPrefix = require('gulp-css-prefix');

function prefix() {
  return gulp
    .src('./dist/*.css')
    .pipe(cssPrefix('spectre-'))
    .pipe(gulp.dest('./dist'));
}

exports.prefix = prefix;

After you compile your version of Spectre in the /dist, run gulp prefix in the directory of Spectre.

================================================ FILE: docs/getting-started/installation.html ================================================ Installation - Getting started - Spectre.css CSS Framework

Installation

There are 5 ways to get started with Spectre CSS framework in your projects. You can either install manually, from CDN or use package managers.

Install manually

Download the compiled and minified Spectre CSS file (core ~10KB min+gzip):

Download Spectre.css

Include spectre.css located in /dist in your website or Web app . Also, you can add spectre-icons.css and spectre-exp.css accordingly.

<link rel="stylesheet" href="spectre.min.css">
<link rel="stylesheet" href="spectre-exp.min.css">
<link rel="stylesheet" href="spectre-icons.min.css">

Install from CDN

Alternatively, you can use the unpkg or cdnjs CDN to load compiled Spectre.css.

<link rel="stylesheet" href="https://unpkg.com/spectre.css/dist/spectre.min.css">
<link rel="stylesheet" href="https://unpkg.com/spectre.css/dist/spectre-exp.min.css">
<link rel="stylesheet" href="https://unpkg.com/spectre.css/dist/spectre-icons.min.css">

Install with NPM

npm install spectre.css --save

Install with Yarn

yarn add spectre.css

Install from Bower

bower install spectre.css --save
================================================ FILE: docs/getting-started/whatsnew.html ================================================ What's New - Getting started - Spectre.css CSS Framework

What's new

Spectre.css Changelog

v0.5.8 #
  • IMPORTANT: Moving
  • Add Auto width column #541
  • Add more Menu badge support #545
  • Improve 360-Degree Viewer
  • Fix gulp issue #547
  • Fix the errors in the Docs #538
v0.5.7 #
  • Add pure CSS 360-Degree Viewer
  • Improve Docs SEO
  • Change Carousels image number to variable #428
  • Fix Form textarea height issue
v0.5.6 #
  • Add Docs Search #509 #291
  • Add Copy icon
  • Add Hero layout #380
  • Add multiline Tooltips #500
  • Replace transition: all; #526
  • Fix #511 issue
  • Fix sidebar background height for short docs pages
v0.5.5 #
  • IMPORTANT: New Docs
  • Add Changelog to What's New section
  • Fix chip vertical scrollbar #521
  • Fix circle -> s-circle #489
  • Fix code font-family issue for asian languages #476
v0.5.4 #
  • IMPORTANT: Change naming of position utilities to avoid conflicts
  • Update dark color variable
  • Fix sidebar hash link bug #482
  • Fix browser support typo #469
  • Fix code typo #460
  • Fix GitHub button z-index bug #458
  • Fix Bar background color issue by adding !important to color utilities
  • Fix chip bug when content is too long #506
  • Fix multiple select height bug #508
v0.5.3 #
  • Add dark text color to utilities
  • Add error state to the indeterminate checkbox
  • Add inline forms
  • Add more code examples
  • Fix errors in the Docs
v0.5.2 #
  • IMPORTANT: Move Docs to Pug templates
  • Add more Docs examples
  • Add visited link style
  • Add 100% modal height class #391
  • Fix off-canvas-overlay bug #392
  • Fix margin and padding values #431
  • Fix Accordion example #438
  • Fix a bug of input addons width on mobile devices #449
  • Separate Simplified Chinese (zh/zh-Hans) from Traditional (zh-Hant)
v0.5.1 #

IMPORTANT: Move Autocomplete to the Experimentals

  • Add form checkbox, radio and switch support to Menus
  • Add responsive horizontal form support #375
  • Add Favicons in the docs #398
  • Fix Off-canvas z-index problem #361
  • Fix icons disappearing on group classes on focus
  • Fix Deprecation Warning #396 #356
  • Initial commit of RTL support (not finished)
v0.5.0 #
  • IMPORTANT: Restore /dist folder
  • Add Grid nesting example #353
  • Add Form control sizes support
  • Update Off-canvas default behavior and new option available #347
  • Split Mixins
  • Fix Navbar last-child align right bug #346
  • Fix modal doc typo
  • Fix docs examples #348
v0.4.7 #
  • Add new button colors (success and error) #227 #241 #342
  • Add overflow-scrolling: touch; CSS for better scrolling
  • Add touch support to Parallax image hover effect
  • Update the Modal example code
  • Fix form horizontal layout spacing
v0.4.6 #
  • Add new Sliders example #328
  • Add Table with horizontal scroll support #333
  • Update Calendar event style which makes use of color utilities #326
  • Define $parallax-fade-color as default variable #332
  • Fix the Docs content mistake
  • Fix breadcrumb-item extra spacing #337
  • Fix comparison slider image responsive bug #338
v0.4.5 #
  • Rewrite Off-canvas component
  • Add active support to the Off-canvas #308
  • Update the Docs pages
v0.4.4 #
  • IMPORTANT: Increase default font sizes to 16px #271
  • Add version number to CSS #288 #289
v0.4.3 #
  • Add Icon Sizes #284
  • Add Large Modals #293
  • Update primary color to #5755d9
  • Change Tooltips white-space to pre #292
  • Encode SVG Data URI (thanks to @mariodev) #297 #298
  • Improve Buttons and Forms small and large variables
  • Improve Filters code
  • Improve gulpfile and package
  • Add Importing Sass Docs
v0.4.2 #
  • Add Off-screen experimental
  • Fix Docs rendering bug in Safari
v0.4.1 #
  • Add default modifier to all variables
  • Add address reset which changes font-style to normal
  • Add Details and Summary Accordions support
  • Fix responsive video
  • Update the Docs
v0.4.0 #
  • Switch from Less to Sass
  • Add Cursor utilities
v0.3.2 #
  • Add label-rounded classes
  • Add Avatars presence status code
  • Add Typography Fonts Docs
  • Add Button variant mixins
  • Update Autocomplete style
  • Update Autoprefixer rules
  • Update label mixin and code mono font family
v0.3.1 #

IMPORTANT: The default root font-size has been changed to 20px, please update your rem numbers if you're using the custom sizes. Learn more.

  • Fix margin and padding utilities bug
  • Add grid offset
  • Rename Display utilities class names
  • Move Panels and Empty states to Components from Layout
  • Fix Docs bugs and cleanup codes
v0.2.15 #
  • BIG Update to the Docs experience, completely rewritten and improved #240
  • Add Text and Background colors utilities #205 #219
  • Add Install from CDN option #191
  • Add unit size (4px) and unit size variables
  • Add Responsive container (max width container) #222
  • Add error and success states to checkbox, radio and switch #246
  • Fix Rem unit issue in East Asian Chrome #110
  • Fix icon direction bug #218
  • Fix Dropdown menu max items/height #226
v0.2.14 #
  • Add vertical divider
  • Add Form icon support
  • Add Accordions
  • Add anchor links to Docs
  • Add new container grid size
  • Fix link error and typo
v0.2.13 #
  • Add Timelines code
  • Add input readonly style
  • Change Gulp building process and ignore /dist
  • Change naming danger to error
  • Change label-variant mixin
  • Fix dropdown-toggle border radius in button groups
  • Fix Calendars date item width bug under Firefox
v0.2.12 #
  • Add pure CSS Comparison Sliders
  • Add pure CSS content Filters
  • Add Avatars badge support
  • Add more icons
  • Change :focus support
  • Change Docs image sizes and add object-fit support
  • Update Navbar code
  • Fix typos, Modals bugs
v0.2.11 #
  • Add pure CSS Popovers
  • Add pure CSS Icons
  • Add Slider bars
  • Add tvOS Parallax effect text layer
  • Update shadow mixin
v0.2.10 #
  • Add Shadows and Z-index variables
  • Add Divider text
  • Improve color variables
  • Cleanup components code
  • Remove the Responsive Resizer tool (Moved to https://github.com/picturepan2/responsive-resizer)
v0.2.9 #
  • Add Panels layout: flexible view container layout with auto-expand content section
  • Update Navbar layout
  • Update docs and examples
v0.2.8 #
  • Add Carousels previous and next buttons
  • Improve disabled state for forms
  • Improve calendar events style
  • Improve Sliders disabled style
  • Improve Autocomplete menu position
  • Merge Menus and Dropdowns
v0.2.7 #
  • Add Calendars experimental support
  • Add tabindex note to the dropdowns docs
  • Add shrink-to-fit=no to head meta
  • Add Colors docs and update colors
  • Fix wrong shadow colors with form-select
  • Fix grid-480
v0.2.6 #
  • Add Carousels initial experimental version
  • Add Spectre.css Twitter account (@spectrecss) link
  • Improve Docs experience and navbar
  • Fix the bug of form input focus colors
v0.2.5 #
  • Improve color variables completely
  • Add Menu badges
  • Add Responsive visibility (show-x)
  • Add Parallax effect (pure CSS)
  • Fix elements and components
  • Update empty state layout code
v0.2.4 [#] (https://github.com/picturepan2/spectre/releases/tag/v0.2.4)
  • ADD: Meters element experimental support
  • ADD: Progress indeterminate animation
  • ADD: Text-decoration-skip support
  • CHG: Split Codes and improve docs codes
  • FIX: Steps with tooltips z-index bug
v0.2.3 #
  • Bars component
  • Badges for buttons
  • Experimentals CSS and docs
  • Sliders experimental component
  • A number of fixes as usual
v0.2.1 #

I have updated the whole Spectre.css documents experience and bumped the version to v0.2.x. The new Docs can be viewed at https://picturepan2.github.io/spectre/. Here are the new things added:

  • New Docs experience with better navigations and better mobile off-canvas menu
  • New components: Tiles, Steps and Navs (part of Navigation)
  • Improvements: Action button, Autocomplete, Pagination, Tabs, Breadcrumbs, Badges, Cards, new Progress experimental support
  • Improvements: better focus style
  • Fixes
v0.0.1 - March 2016

Initial commit

Thank you. ♥

Releases

================================================ FILE: docs/getting-started.html ================================================ Getting started - Spectre.css CSS Framework

Getting started

Spectre.css is a lightweight, responsive and modern CSS framework for faster and extensible development.

Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.

Installation
How to install and use Spectre.css
Custom version
Customize your version of Spectre.css
Browser support
Browser compatibility and support
What's new
Changelog and release notes
Accessibility
Coming soon
================================================ FILE: docs/index.html ================================================ Spectre.css CSS Framework

SPECTRE.CSS

A Lightweight, Responsive and Modern CSS Framework

DocsGitHub

Latest version:

Lightweight
Lightweight (~10KB gzipped) starting point for your projects
Responsive
Flexbox-based, responsive and mobile-friendly layout
Modern
Elegantly designed and developed elements and components

Introduction

Spectre.css is a lightweight, responsive and modern CSS framework for faster and extensible development.

Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.

Spectre Twitter
For the latest announcements and updates, follow on Twitter: @spectrecss.
PayPal Donate
Spectre.css is completely free to use. If you enjoy it, please consider donating for the further development.
Sponsor via Patreon
Your name or company logo will be put on Spectre Docs homepage.
================================================ FILE: docs/layout/grid.html ================================================ Flexbox grid - Layout - Spectre.css CSS Framework

Flexbox grid

Layout includes flexbox based responsive grid system with 12 columns.

col-12 (100%)
col-9 (75%)
col-6 (50%)
col-3 (25%)
<!-- flexbox grid example -->
<div class="container">
  <div class="columns">
    <div class="column col-6">col-6</div>
    <div class="column col-3">col-3</div>
    <div class="column col-2">col-2</div>
    <div class="column col-1">col-1</div>
  </div>
</div>

Add the columns class to a container with the container class. And add any element you want with the column class inside the container. These columns will take up the space equally. You can specify the width of each column by adding class col-<1-12>.

Gapless grid

And you can add the col-gapless class to the columns to have gapless columns.

col-6 (gapless)
col-6 (gapless)
<!-- gapless columns -->
<div class="columns col-gapless">
  <div class="column col-6">col-6</div>
  <div class="column col-6">col-6</div>
</div>

By default, Spectre grid has multi-line flexbox enabled. You can add the col-oneline class to columns to make all its child columns positioned in the same single row.

col-8
col-8
<!-- one line columns -->
<div class="columns col-oneline">
  <div class="column col-8">col-8</div>
  <div class="column col-8">col-8</div>
</div>

Grid nesting

To nest grids, add the new columns and column structure within an existing column.

col-6
col-6
col-6
col-6
<!-- grid nesting example -->
<div class="container">
  <div class="columns">
    <div class="column col-6">col-6
      <div class="columns">
        <div class="column col-6">col-6</div>
        <div class="column col-6">col-6</div>
      </div>
    </div>
    <div class="column col-6">col-6</div>
  </div>
</div>

Column offset

The Flexbox grid provides margin auto utilities to set offset. There are col-mx-auto, col-ml-auto and col-mr-auto to set margins between columns without using empty columns.

col-2
col-4 col-mx-auto
col-2
col-4 col-ml-auto
col-4 col-ml-auto
col-2
col-4 col-mx-auto
col-2
col-4 col-mr-auto
col-2
col-4 col-mx-auto
<!-- grid offset example -->
<div class="container">
  <div class="columns">
    <div class="column col-4 col-mr-auto">col-4 col-mr-auto</div>
    <div class="column col-2">col-2</div>
  </div>
</div>

Auto width column

You can add the col-auto class to the column to have auto width columns. There are col-xl-auto, col-lg-auto, col-md-auto, col-sm-auto and col-xs-auto to set auto width in different viewport sizes.

col-auto
col
col-lg-auto
col
<!-- auto width column example -->
<div class="container">
  <div class="columns">
    <div class="column col-auto">col-auto</div>
    <div class="column">col</div>
  </div>
</div>

<div class="container">
  <div class="columns">
    <div class="column col-lg-auto col-6">col-lg-auto</div>
    <div class="column">col</div>
  </div>
</div>
================================================ FILE: docs/layout/hero.html ================================================ Hero - Layout - Spectre.css CSS Framework

Hero

The Hero container shows key featured content or information.

Hero title

This is a hero example

<div class="hero bg-gray">
  <div class="hero-body">
    <h1>Hero title</h1>
    <p>This is a hero example</p>
  </div>
</div>

Use hero-sm and hero-lg to the hero container for smaller and larger padding.

Hero title

This is a hero example

Hero title

This is a hero example

================================================ FILE: docs/layout/navbar.html ================================================ Navbar - Layout - Spectre.css CSS Framework
================================================ FILE: docs/layout/responsive.html ================================================ Responsive - Layout - Spectre.css CSS Framework

Responsive

Spectre provides a neat responsive layout grid system and responsive visibility utilities.

col-10
col-lg-8
col-lg-8
col-md-6
col-md-6
col-sm-4
col-sm-4
col-2
col-lg-4
col-lg-4
col-md-6
col-md-6
col-sm-8
col-sm-8

There are col-xs-<1-12>, col-sm-<1-12>, col-md-<1-12>, col-lg-<1-12> and col-xl-<1-12> available for flexible grid across mobile, tablet and desktop viewport usage.

  • col-xs-<1-12> apply to window width smaller than or equal to 480px.
  • col-sm-<1-12> apply to window width smaller than or equal to 600px.
  • col-md-<1-12> apply to window width smaller than or equal to 840px.
  • col-lg-<1-12> apply to window width smaller than or equal to 960px.
  • col-xl-<1-12> apply to window width smaller than or equal to 1280px.
  • col-<1-12> apply to all window width, including the width wider than 1280px.
<div class="container">
  <div class="columns">
    <div class="column col-xs-6">col-xs-6</div>
    <div class="column col-xs-3">col-xs-3</div>
    <div class="column col-xs-3">col-xs-3</div>
  </div>
</div>

Responsive container

The responsive layout also provides fixed-width containers. Use grid-xs(480px), grid-sm(600px), grid-md(840px), grid-lg(960px) or grid-xl(1280px) to the container for a fixed-width container with the specific max-width.

<!-- 100% width container with max-width set to grid-lg (960px) -->
<div class="container grid-lg">
  <div class="columns">
    ...
  </div>
</div>

Responsive visibility

The responsive visibility utilities help show and hide elements on specific viewport sizes.

size-xs size-sm size-md size-lg size-xl
hide-xs
hide-sm
hide-md
hide-lg
hide-xl

For hiding elements on specific viewport sizes, there are classes hide-xs, hide-sm, hide-md, hide-lg and hide-xl available.

  • hide-xs hides elements when the window width is smaller than or equal to 480px.
  • hide-sm hides elements when the window width is smaller than or equal to 600px.
  • hide-md hides elements when the window width is smaller than or equal to 840px.
  • hide-lg hides elements when the window width is smaller than or equal to 960px.
  • hide-xl hides elements when the window width is smaller than or equal to 1280px.
size-xs size-sm size-md size-lg size-xl
show-xs
show-sm
show-md
show-lg
show-xl

For showing elements on specific viewport sizes, there are classes show-xs, show-sm, show-md, show-lg and show-xl available.

  • show-xs shows elements when the window width is smaller than or equal to 480px.
  • show-sm shows elements when the window width is smaller than or equal to 600px.
  • show-md shows elements when the window width is smaller than or equal to 840px.
  • show-lg shows elements when the window width is smaller than or equal to 960px.
  • show-xl shows elements when the window width is smaller than or equal to 1280px.

Responsive Resizer

Spectre also has a responsive web test tool Responsive Resizer. You can clone the GitHub Repo to use it locally or use it online.

Responsive Resizer

================================================ FILE: docs/layout.html ================================================ Layout - Spectre.css CSS Framework

Layout

Spectre.css is a lightweight, responsive and modern CSS framework for faster and extensible development.

Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.

Flexbox grid
Flexbox based responsive grid system with 12 columns
Responsive
Responsive layout grid system and responsive visibility utilities
Hero
Container for key featured content or information
Navbar
Layout container that appears in the header of apps and websites
================================================ FILE: docs/rtl.html ================================================ Spectre RTL (Right-to-left) - Spectre.css CSS Framework

Introduction

Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.

Installation

There are 5 ways to get started with Spectre CSS framework in your projects. You can either install manually, from CDN or use package managers.

Install manually

Download the compiled and minified Spectre CSS file (core ~10KB min+gzip):

Download Spectre.css

Include spectre.css located in /dist in your website or Web app <head>. Also, you can add spectre-icons.css and spectre-exp.css accordingly.

================================================ FILE: docs/src/_layout/_ad-c.pug ================================================ ================================================ FILE: docs/src/_layout/_ad-g.pug ================================================ block ad-adsense .docs-ad .hide-md.text-center script(async='', src='https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js') // GitHub-lg ins.adsbygoogle.mx-auto(style='display:inline-block;width:728px;height:90px', data-ad-client='ca-pub-2225124559530218', data-ad-slot='9894180784') script. (adsbygoogle = window.adsbygoogle || []).push({}); .show-md.text-center // GitHub-sm ins.adsbygoogle(style='display:inline-block;width:300px;height:250px', data-ad-client='ca-pub-2225124559530218', data-ad-slot='9278881734') script. (adsbygoogle = window.adsbygoogle || []).push({}); ================================================ FILE: docs/src/_layout/_docs-layout.pug ================================================ extends _layout.pug include _mixins.pug block content .docs-container.off-canvas.off-canvas-sidebar-show .docs-navbar a.off-canvas-toggle.btn.btn-link.btn-action(href='#sidebar') i.icon.icon-menu .btns.d-flex input.docs-search.form-input(type="text" placeholder="Search Docs") a.btn.ml-1(href='https://www.paypal.me/picturepan2' target='_blank') PayPal a.btn.btn-primary.ml-1(href='https://github.com/picturepan2/spectre' target='_blank') GitHub #sidebar.docs-sidebar.off-canvas-sidebar .docs-brand if slug != parent a.docs-logo(href='../index.html') img(src='../img/spectre-logo.svg' alt='Spectre.css CSS Framework') h2 SPECTRE small.label.label-secondary.text-bold DOCS else a.docs-logo(href='index.html') img(src='img/spectre-logo.svg' alt='Spectre.css CSS Framework') h2 SPECTRE small.label.label-secondary.text-bold DOCS .docs-nav .accordion-container +docs-accordion( 'getting-started', 'Getting started', {url: 'installation', name: 'Installation'}, {url: 'custom', name: 'Custom version'}, {url: 'browsers', name: 'Browser support'}, {url: 'whatsnew', name: 'What\'s new'} ) +docs-accordion( 'elements', 'Elements', {url: 'typography', name: 'Typography'}, {url: 'tables', name: 'Tables'}, {url: 'buttons', name: 'Buttons'}, {url: 'forms', name: 'Forms'}, {url: 'icons', name: 'Icons.css'}, {url: 'labels', name: 'Labels'}, {url: 'code', name: 'Code'}, {url: 'media', name: 'Media'} ) +docs-accordion( 'layout', 'Layout', {url: 'grid', name: 'Flexbox grid'}, {url: 'responsive', name: 'Responsive'}, {url: 'hero', name: 'Hero'}, {url: 'navbar', name: 'Navbar'} ) +docs-accordion( 'components', 'Components', {url: 'accordions', name: 'Accordions'}, {url: 'avatars', name: 'Avatars'}, {url: 'badges', name: 'Badges'}, {url: 'bars', name: 'Bars'}, {url: 'breadcrumbs', name: 'Breadcrumbs'}, {url: 'cards', name: 'Cards'}, {url: 'chips', name: 'Chips'}, {url: 'empty', name: 'Empty states'}, {url: 'menu', name: 'Menu'}, {url: 'modals', name: 'Modals'}, {url: 'nav', name: 'Nav'}, {url: 'pagination', name: 'Pagination'}, {url: 'panels', name: 'Panels'}, {url: 'popovers', name: 'Popovers'}, {url: 'steps', name: 'Steps'}, {url: 'tabs', name: 'Tabs'}, {url: 'tiles', name: 'Tiles'}, {url: 'toasts', name: 'Toasts'}, {url: 'tooltips', name: 'Tooltips'} ) +docs-accordion( 'utilities', 'Utilities', {url: 'colors', name: 'Colors'}, {url: 'cursors', name: 'Cursors'}, {url: 'display', name: 'Display'}, {url: 'divider', name: 'Divider'}, {url: 'loading', name: 'Loading'}, {url: 'position', name: 'Position'}, {url: 'shapes', name: 'Shapes'}, {url: 'text', name: 'Text'} ) +docs-accordion( 'experimentals', 'Experimentals', {url: 'viewer-360', name: '360-Degree Viewer'}, {url: 'autocomplete', name: 'Autocomplete'}, {url: 'calendars', name: 'Calendars'}, {url: 'carousels', name: 'Carousels'}, {url: 'comparison', name: 'Comparison sliders'}, {url: 'filters', name: 'Filters'}, {url: 'meters', name: 'Meters'}, {url: 'off-canvas', name: 'Off-canvas'}, {url: 'parallax', name: 'Parallax'}, {url: 'progress', name: 'Progress'}, {url: 'sliders', name: 'Sliders'}, {url: 'timelines', name: 'Timelines'} ) a.off-canvas-overlay(href='#close') .off-canvas-content #content.docs-content block docs-content script(type="text/javascript" src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js") script. docsearch({ apiKey: 'bede06373c5a1fa3c1bbe8401e24c653', indexName: 'picturepan2_spectre', inputSelector: '.docs-search', debug: true }); ================================================ FILE: docs/src/_layout/_example-layout.pug ================================================ block variables - var slug = '' - var parent = '' - var title = 'Spectre.css - A Lightweight, Responsive and Modern CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' doctype html html(lang='en') head title= title meta(charset='utf-8') meta(name='robots' content='index, follow') meta(name='viewport' content='width=device-width, initial-scale=1.0, shrink-to-fit=no') meta(http-equiv='x-ua-compatible' content='ie=edge') meta(name='description' content= description) link(rel='shortcut icon' href='../img/favicons/favicon.ico') link(rel='icon' href='../img/favicons/favicon.png') link(rel='stylesheet' href='../dist/spectre.min.css') link(rel='stylesheet' href='../dist/spectre-icons.min.css') link(rel='stylesheet' href='../dist/spectre-exp.min.css') link(rel='stylesheet' href='../dist/docs.min.css') body block content script. (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-2702768-8', 'auto'); ga('send', 'pageview'); ================================================ FILE: docs/src/_layout/_footer.pug ================================================ #copyright.docs-footer.container.grid-lg p a(href='https://github.com/picturepan2/spectre' target='_blank') GitHub | · a(href='https://twitter.com/spectrecss' target='_blank') Twitter | · a(href='https://www.paypal.me/picturepan2' target='_blank') PayPal Donate | · a(href='https://www.patreon.com/spectrecss' target='_blank') Patreon Sponsor | · Version span.version p | Designed and built with span.text-error ♥ | by a(href='https://twitter.com/picturepan2' target='_blank') Yan Zhu | . Licensed under the a(href='https://github.com/picturepan2/spectre/blob/master/LICENSE' target='_blank') MIT License | . ================================================ FILE: docs/src/_layout/_layout.pug ================================================ block global - var domain = 'https://picturepan2.github.io/spectre/' - var url = domain block variables - var slug = '' - var parent = '' - var title = 'Spectre.css - A Lightweight, Responsive and Modern CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' if slug == parent if slug == 'index' - var url = domain else - var url = domain + slug + '.html' else - var url = domain + parent + '/' + slug + '.html' doctype html html(lang='en') head title= title meta(charset='utf-8') meta(name='robots' content='index, follow') meta(name='viewport' content='width=device-width, initial-scale=1.0, shrink-to-fit=no') meta(http-equiv='x-ua-compatible' content='ie=edge') meta(name='description' content= description) meta(name='author' content='Yan Zhu') meta(property='og:url' content= url) meta(property='og:title' content= title) meta(property='og:description' content= description) meta(name='twitter:card' content='summary') meta(name='twitter:site' content='@spectrecss') meta(name='twitter:creator' content='@picturepan2') if slug != parent link(rel='shortcut icon' href='../img/favicons/favicon.ico') link(rel='icon' href='../img/favicons/favicon.png') link(rel='stylesheet' href='../dist/spectre.min.css') link(rel='stylesheet' href='../dist/spectre-icons.min.css') link(rel='stylesheet' href='../dist/spectre-exp.min.css') link(rel='stylesheet' href='../dist/docs.min.css') else link(rel='shortcut icon' href='img/favicons/favicon.ico') link(rel='icon' href='img/favicons/favicon.png') link(rel='stylesheet' href='dist/spectre.min.css') link(rel='stylesheet' href='dist/spectre-icons.min.css') link(rel='stylesheet' href='dist/spectre-exp.min.css') link(rel='stylesheet' href='dist/docs.min.css') link(rel='canonical' href= url) body block content script. (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-2702768-8', 'auto'); ga('send', 'pageview'); ================================================ FILE: docs/src/_layout/_mixins.pug ================================================ mixin docs-accordion(id, name, ...pages) .accordion input(id='accordion-' + id type='checkbox' name='docs-accordion-checkbox' hidden='' checked=(parent === id ? true : false)) label.accordion-header.c-hand(for='accordion-' + id)= name .accordion-body ul.menu.menu-nav each page in pages li.menu-item if slug != parent a(href='../' + id + '/' + page.url + '.html')= page.name else a(href=id + '/' + page.url + '.html')= page.name mixin docs-heading(id, name) .container(id=id) h3.s-title | #{name} a.anchor(href='#'+id aria-hidden='true') # if block block mixin docs-subheading(id, name) h4.s-subtitle(id=id) | #{name} a.anchor(href='#'+id aria-hidden='true') # ================================================ FILE: docs/src/components/accordions.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'accordions' - var parent = 'components' - var title = 'Accordions - Components - Spectre.css CSS Framework' - var description = 'Accordions are used to toggle sections of content. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('accordions', 'Accordions') include ../_layout/_ad-g.pug p Accordions are used to toggle sections of content. .docs-demo.columns .column.col-6.col-md-12 .accordion input#accordion-1(type="radio" name="accordion-radio" hidden="" checked="") label.accordion-header.c-hand(for="accordion-1") i.icon.icon-arrow-right.mr-1 | Elements .accordion-body ul.menu.menu-nav li.menu-item a(href="#accordions") Element 1 li.menu-item a(href="#accordions") Element 2 .accordion input#accordion-2(type="radio" name="accordion-radio" hidden="") label.accordion-header.c-hand(for="accordion-2") i.icon.icon-arrow-right.mr-1 | Layout .accordion-body ul.menu.menu-nav li.menu-item a(href="#accordions") Layout 1 li.menu-item a(href="#accordions") Layout 2 .accordion input#accordion-3(type="radio" name="accordion-radio" hidden="") label.accordion-header.c-hand(for="accordion-3") i.icon.icon-arrow-right.mr-1 | Components .accordion-body ul.menu.menu-nav li.menu-item a(href="#accordions") Component 1 li.menu-item a(href="#accordions") Component 2 .column.col-6.col-md-12 .accordion input#accordion-4(type="checkbox" name="accordion-checkbox" hidden="" checked="") label.accordion-header.c-hand(for="accordion-4") | Elements .accordion-body ul.menu.menu-nav li.menu-item a(href="#accordions") Element 1 li.menu-item a(href="#accordions") Element 2 .accordion input#accordion-5(type="checkbox" name="accordion-checkbox" hidden="") label.accordion-header.c-hand(for="accordion-5") | Layout .accordion-body ul.menu.menu-nav li.menu-item a(href="#accordions") Layout 1 li.menu-item a(href="#accordions") Layout 2 .accordion input#accordion-6(type="checkbox" name="accordion-checkbox" hidden="") label.accordion-header.c-hand(for="accordion-6") | Components .accordion-body ul.menu.menu-nav li.menu-item a(href="#accordions") Component 1 li.menu-item a(href="#accordions") Component 2 pre.code(data-lang='HTML') code :highlight(lang="html")
p | Alternatively, you can use #[code details] and #[code summary] instead of #[code input] radio or checkbox trick. | Add the #[code open] attribute to #[code details] to expand it. | Microsoft Edge support is #[a(href="https://developer.microsoft.com/en-us/microsoft-edge/platform/status/detailssummary/" target="_blank") under consideration]. pre.code(data-lang='HTML') code :highlight(lang="html")
Title
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/avatars.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'avatars' - var parent = 'components' - var title = 'Avatars - Components - Spectre.css CSS Framework' - var description = 'Avatars are user profile pictures. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('avatars', 'Avatars') include ../_layout/_ad-g.pug p Avatars are user profile pictures. .docs-demo.columns .column.col-6.col-xs-12 figure.avatar.avatar-xl.mr-2 img(src="../img/avatar-1.png" alt="Avatar XL") figure.avatar.avatar-lg.mr-2 img(src="../img/avatar-2.png" alt="Avatar LG") figure.avatar.mr-2 img(src="../img/avatar-3.png" alt="Avatar") figure.avatar.avatar-sm.mr-2 img(src="../img/avatar-4.png" alt="Avatar SM") figure.avatar.avatar-xs.mr-2 img(src="../img/avatar-5.png" alt="Avatar XS") .column.col-6.col-xs-12 figure.avatar.avatar-xl.mr-2(data-initial="YZ") figure.avatar.avatar-lg.mr-2(data-initial="YZ") figure.avatar.mr-2(data-initial="YZ") figure.avatar.avatar-sm.mr-2(data-initial="YZ") figure.avatar.avatar-xs.mr-2(data-initial="YZ") p | Add the #[code avatar] class to #{''} element. | There are 4 additional sizes available, including #[code avatar-xl](64px), #[code avatar-lg](48px), #[code avatar-sm](24px), and #[code avatar-xs](16px). | By default, the avatar size is 32px. p | For users who don't have profile pictures, you may use their initials for avatars. | Add the #[code avatar] class and avatar size class to #{'
'} element. | The #[code data-initial] attribute is the name appear inside the avatar. pre.code(data-lang='HTML') code :highlight(lang="html")
...
...
+docs-subheading('avatars-icons', 'Avatar icons') .docs-demo.columns .column.col-6.col-xs-12 figure.avatar.avatar-xl.mr-2 img(src="../img/avatar-1.png" alt="Avatar") img.avatar-icon(src="../img/avatar-2.png" alt="Avatar") figure.avatar.avatar-lg.mr-2 img(src="../img/avatar-2.png" alt="Avatar") img.avatar-icon(src="../img/avatar-3.png" alt="Avatar") figure.avatar.mr-2 img(src="../img/avatar-3.png" alt="Avatar") img.avatar-icon(src="../img/avatar-4.png" alt="Avatar") figure.avatar.avatar-sm.mr-2 img(src="../img/avatar-4.png" alt="Avatar") img.avatar-icon(src="../img/avatar-5.png" alt="Avatar") figure.avatar.avatar-xs img(src="../img/avatar-5.png" alt="Avatar") img.avatar-icon(src="../img/avatar-1.png" alt="Avatar") pre.code(data-lang='HTML') code :highlight(lang="html")
... ...
+docs-subheading('avatars-presence', 'Avatar presence') .docs-demo.columns .column.col-6.col-xs-12 figure.avatar.avatar-xl.mr-2(data-initial="YZ") i.avatar-presence.online figure.avatar.avatar-lg.mr-2(data-initial="YZ") i.avatar-presence.busy figure.avatar.mr-2(data-initial="YZ") i.avatar-presence.away figure.avatar.avatar-sm.mr-2(data-initial="YZ") i.avatar-presence.offline figure.avatar.avatar-xs.mr-2(data-initial="YZ") i.avatar-presence.online p | Avatars support presence indicators. | You can add an #{''} element with the #[code avatar-presence] class, and add #[code online], #[code busy] or #[code away] class for different status colors. | The default is gray which means offline. pre.code(data-lang='HTML') code :highlight(lang="html")
...
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/badges.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'badges' - var parent = 'components' - var title = 'Badges - Components - Spectre.css CSS Framework' - var description = 'Badges are often used as unread number indicators. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('badges', 'Badges') include ../_layout/_ad-g.pug p Badges are often used as unread number indicators. .docs-demo.columns .column.col-3.col-xs-6 span.badge(data-badge="") | Notifications .column.col-3.col-xs-6 span.badge(data-badge="8") | Notifications .column.col-3.col-xs-6 span.badge(data-badge="88") | Notifications .column.col-3.col-xs-6 span.badge(data-badge="888") | Notifications p | Add the #[code badge] class to non self closing elements. | And add the #[code data-badge] attribute to define the content of a badge. | The badge will appear in the top-right direction of the element. p | If there is no #[code data-badge] or the attribute is not specified, the badge will appear as a dot. .docs-demo.columns .column.col-sm-12 button.btn.badge(data-badge="") Button button.btn.badge(data-badge="8") Button .column.col-sm-12 button.btn.btn-primary.badge(data-badge="") Button button.btn.btn-primary.badge(data-badge="8") Button .column.col-sm-12 figure.avatar.avatar-xl.badge(data-badge="8" data-initial="YZ") img(src="../img/avatar-1.png" alt="YZ") figure.avatar.avatar-lg.badge(data-badge="8" data-initial="YZ") img(src="../img/avatar-2.png" alt="YZ") figure.avatar.badge(data-badge="8" data-initial="YZ") img(src="../img/avatar-3.png" alt="YZ") p | Badges support #[code button] and #[code avatars] elements as well. pre.code(data-lang='HTML') code :highlight(lang="html") Notifications Notifications
YZ
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/bars.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'bars' - var parent = 'components' - var title = 'Bars - Components - Spectre.css CSS Framework' - var description = 'Bars represent the progress of a task or the value within the known range.Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('bars', 'Bars') include ../_layout/_ad-g.pug p | Bars represent the progress of a task or the value within the known range. | Bars are custom components for displaying HTML5 #{''}, #{''} and input range elements. .docs-demo.columns .column.col-8.col-xs-12 .bar.bar-sm .bar-item.tooltip(data-tooltip="25%" role="progressbar" style="width:25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100") .column.col-8.col-xs-12 .bar .bar-item.tooltip(data-tooltip="50%" role="progressbar" style="width:50%;") .column.col-8.col-xs-12 .bar .bar-item.tooltip(data-tooltip="25%" role="progressbar" style="width:25%;") 25% .bar-item.tooltip(data-tooltip="15%" role="progressbar" style="width:15%;background:#817fe3;") 15% .bar-item.tooltip(data-tooltip="10%" role="progressbar" style="width:10%;background:#aaa9eb;") 10% .bar-item.tooltip(data-tooltip="15%" role="progressbar" style="width:15%;") 15% p | Add a container element with the #[code bar] class. | And add child elements with the #[code bar-item] class. | The width percentage value is needed for every #[code bar-item]. p | There is the #[code bar-sm] class for thinner Bars. | Also, you could use #[a(href="#tooltips") Tooltips] for any #[code bar-item]. pre.code(data-lang='HTML') code :highlight(lang="html")
25%
15%
+docs-subheading('bars-slider', 'Slider bars') .docs-demo.columns .column.col-8.col-xs-12 .bar.bar-slider .bar-item(role="progressbar" style="width:50%;") button.bar-slider-btn.btn.tooltip(data-tooltip="50%" role="slider") .column.col-8.col-xs-12 .bar.bar-slider .bar-item(role="progressbar" style="width:15%;") button.bar-slider-btn.btn.tooltip(data-tooltip="25%" role="slider") .bar-item(role="progressbar" style="width:65%;") button.bar-slider-btn.btn.tooltip(data-tooltip="65%" role="slider") p | You can add the #[code bar-slider] class to the Bars container. | And add child elements with the #[code bar-item] class and #[code bar-slider-btn] inside bar-item. | You need to set the #[code bar-item] width manually to have the slider point. p | If there are two #[code bar-item] divs in one bar-slider, you will have a range slider. pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/breadcrumbs.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'breadcrumbs' - var parent = 'components' - var title = 'Breadcrumbs - Components - Spectre.css CSS Framework' - var description = 'Breadcrumbs are used as navigational hierarchies to indicate current location. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('breadcrumbs', 'Breadcrumbs') include ../_layout/_ad-g.pug p Breadcrumbs are used as navigational hierarchies to indicate current location. .docs-demo.columns .column.col-12 ul.breadcrumb li.breadcrumb-item a.tooltip(href="#breadcrumbs" data-tooltip="Home") Home li.breadcrumb-item a.tooltip(href="#breadcrumbs" data-tooltip="Settings") Settings .column.col-12 ul.breadcrumb li.breadcrumb-item a.tooltip(href="#breadcrumbs" data-tooltip="Home") Home li.breadcrumb-item a.tooltip(href="#breadcrumbs" data-tooltip="Settings") Settings li.breadcrumb-item a.tooltip(href="#breadcrumbs" data-tooltip="Change avatar") Change avatar .column.col-12 ul.breadcrumb li.breadcrumb-item a.tooltip(href="#breadcrumbs" data-tooltip="Home") Home li.breadcrumb-item a.tooltip(href="#breadcrumbs" data-tooltip="Settings") Settings li.breadcrumb-item | Search result: a.tooltip(href="#breadcrumbs" data-tooltip="Search result: Spectre") Spectre p | Add a container element with the #[code breadcrumb] class. | And add child elements with the #[code breadcrumb-item] class. pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/cards.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'cards' - var parent = 'components' - var title = 'Cards - Components - Spectre.css CSS Framework' - var description = 'Cards are flexible content containers. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('cards', 'Cards') include ../_layout/_ad-g.pug p Cards are flexible content containers. .docs-demo.columns .column.col-6.col-xs-12 .card .card-image img.img-responsive(src="../img/osx-el-capitan.jpg" alt="OS X El Capitan") .card-header .card-title.h5 Microsoft .card-subtitle.text-gray Software and hardware .card-body | Empower every person and every organization on the planet to achieve more. .card-footer a.btn.btn-primary(href="#cards") Do .column.col-6.col-xs-12 .card .card-header .card-title.h5 Apple .card-subtitle.text-gray Hardware and software .card-image img.img-responsive(src="../img/osx-yosemite.jpg" alt="OS X Yosemite") .card-body | To make a contribution to the world by making tools for the mind that advance humankind. .card-footer .btn-group.btn-group-block button.btn.btn-primary Buy button.btn Buy button.btn Buy .column.col-6.col-xs-12 .card .card-image img.img-responsive(src="../img/macos-sierra-2.jpg" alt="macOS Sierra") .card-header button.btn.btn-primary.float-right i.icon.icon-plus .card-title.h5 Google I/O .card-subtitle.text-gray Software and hardware .card-body | An immersive, three-day experience focused on exploring the next generation of technology, mobile and beyond. .column.col-6.col-xs-12 .card .card-image img.img-responsive(src="../img/osx-el-capitan-2.jpg" alt="OS X El Capitan") .card-footer a.btn.btn-primary(href="#cards") Buy a.btn.btn-link(href="#cards") Share .card-body strong Surface Studio | . Turn your desk into a Studio. Surface Studio is designed for the creative process. .column.col-6.col-xs-12 .card .card-header .card-title.h5 Apple .card-subtitle.text-gray Hardware and software .card-body | To make a contribution to the world by making tools for the mind that advance humankind. .card-image img.img-responsive(src="../img/macos-sierra.jpg" alt="macOS Sierra") .column.col-6.col-xs-12 .card .card-header .card-title.h5 Google .card-subtitle.text-gray Software and hardware .card-body | Organize the world’s information and make it universally accessible and useful. .card-image img.img-responsive(src="../img/osx-yosemite-2.jpg" alt="OS X Yosemite") .card-footer a.btn.btn-primary(href="#cards") Search a.btn.btn-link(href="#cards") Share p | Add a container element with the #[code card] class. | And add child elements with the #[code card-image], #[code card-header], #[code card-body] and/or #[code card-footer] classes. | The #[code card-image] can be placed in any position. pre.code(data-lang='HTML') code :highlight(lang="html")
...
...
...
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/chips.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'chips' - var parent = 'components' - var title = 'Chips - Components - Spectre.css CSS Framework' - var description = 'Chips are complex entities in small blocks. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('chips', 'Chips') include ../_layout/_ad-g.pug p Chips are complex entities in small blocks. .docs-demo.columns .column.col-12 span.chip | Crime span.chip | Drama span.chip | Biography a.btn.btn-clear(href="#" aria-label="Close" role="button") span.chip | Mystery a.btn.btn-clear(href="#" aria-label="Close" role="button") .column.col-12 .chip figure.avatar.avatar-sm(data-initial="TS" style="background-color: #5755d9;") | Tony Stark .chip img.avatar.avatar-sm(src="../img/avatar-1.png" alt="Thor Odinson") | Thor Odinson .chip img.avatar.avatar-sm(src="../img/avatar-4.png" alt="Steve Rogers") | Steve Rogers p | Add a container element with the #[code chip] class. | And add child text element, buttons or avatars with the #[code avatar] class. pre.code(data-lang='HTML') code :highlight(lang="html") Crime Biography
Yan Zhu
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/empty.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'empty' - var parent = 'components' - var title = 'Empty states - Components - Spectre.css CSS Framework' - var description = 'Empty states/blank slates are commonly used as placeholders for first time use, empty data and error screens. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('empty', 'Empty states') include ../_layout/_ad-g.pug p | Empty states/blank slates are commonly used as placeholders for first time use, empty data and error screens. .docs-demo.columns .column.col-12 .empty .empty-icon i.icon.icon-3x.icon-mail p.empty-title.h5 You have no new messages p.empty-subtitle Click the button to start a conversation .empty-action button.btn.btn-primary Send a message .column.col-12 .empty .empty-icon i.icon.icon-3x.icon-mail p.empty-title.h5 You've successfully signed up p.empty-subtitle Click the button to invite your friends .empty-action button.btn.btn-primary Invite your friends .empty-action button.btn.btn-link Skip .column.col-12 .empty .empty-icon i.icon.icon-3x.icon-people p.empty-title.h5 You are not following anyone p.empty-subtitle Start to meet new friends .empty-action.input-group.input-inline input.form-input(type="text" placeholder="") button.btn.btn-primary.input-group-btn Search p | An empty state component can include icons, messages (title and subtitle messages) and action buttons or any combination of those elements. | Add #[code empty-icon], #[code empty-title], #[code empty-subtitle] or #[code empty-action] to the elements. | HTML structure is exampled below. pre.code(data-lang='HTML') code :highlight(lang="html")

You have no new messages

Click the button to start a conversation.

include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/menu.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'menu' - var parent = 'components' - var title = 'Menu - Components - Spectre.css CSS Framework' - var description = 'Menus are vertical list of links or buttons for actions and navigation. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('menu', 'Menu') include ../_layout/_ad-g.pug p Menus are vertical list of links or buttons for actions and navigation. .docs-demo.columns .column.col-4.col-xs-12 ul.menu li.menu-item .tile.tile-centered .tile-icon img.avatar(src="../img/avatar-4.png" alt="Avatar") .tile-content | Steve Rogers li.divider li.menu-item a.active(href="#menus") | My profile .menu-badge label.form-checkbox input(type="checkbox") i.form-icon | Public li.menu-item a(href="#menus") | Settings .menu-badge label.label.label-primary 2 li.menu-item a(href="#menus") | Logout .column.col-4.col-xs-12 ul.menu li.divider(data-content="LINKS") li.menu-item a(href="#menus") Slack li.menu-item a(href="#menus") Hipchat li.menu-item a(href="#menus") Skype .column.col-4.col-xs-12 ul.menu li.menu-item label.form-checkbox input(type="checkbox" checked="") i.form-icon | form-checkbox li.menu-item label.form-radio input(type="radio" checked="") i.form-icon | form-radio li.menu-item label.form-switch input(type="checkbox" checked="") i.form-icon | form-switch p | Add a container element with the #[code menu] class. | And add child elements with the #[code menu-item] class. | You can separate menu items with a #[code divider]. | Spectre.css does not include JavaScript code, you will need to implement your JS to interact with the menus. p | Menus also have #[a(href="../elements/forms.html" target="_blank") Form controls] (checkbox, radio and checkbox) support. pre.code(data-lang='HTML') code :highlight(lang="html") +docs-subheading('menu-dropdown', 'Dropdown menu') p The dropdown is a combination of buttons and menus. .docs-demo.columns .column.col-xs-12 .dropdown .btn-group a.btn.btn-primary dropdown button a.btn.btn-primary.dropdown-toggle(tabindex="0") i.icon.icon-caret ul.menu li.menu-item a(href="#dropdowns") | Slack li.menu-item a(href="#dropdowns") | Hipchat li.menu-item a(href="#dropdowns") | Skype .column.col-xs-12 .dropdown a.btn.btn-link.dropdown-toggle(tabindex="0") | dropdown button i.icon.icon-caret ul.menu li.menu-item a(href="#dropdowns") | Slack li.menu-item a(href="#dropdowns") | Hipchat li.menu-item a(href="#dropdowns") | Skype p | Dropdown menus component is built entirely in CSS. It is triggered by #[code :focus] event. p | Add a container element with the #[code dropdown] class. | And add a focusable element with the #[code dropdown-toggle] class for the button and a #[code menu] component right next to it. | You also need to add #[code tabindex] to make the buttons focusable. p | If the dropdown is close to the right edge of the browser, you can add the #[code dropdown-right] class to the container to prevent it appearing off screen. .docs-demo.columns .column.col-xs-12.text-right .dropdown.dropdown-right a.btn.btn-primary.dropdown-toggle(tabindex="0") | dropdown button i.icon.icon-caret ul.menu.text-left li.menu-item a(href="#dropdowns") Slack li.menu-item a(href="#dropdowns") Hipchat li.menu-item a(href="#dropdowns") Skype p | Also, you can implement your JS to interact with the dropdown menus by adding the #[code active] class to the #[code dropdown] container. pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/modals.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'modals' - var parent = 'components' - var title = 'Modals - Components - Spectre.css CSS Framework' - var description = 'Modals are flexible dialog prompts. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('modals', 'Modals') include ../_layout/_ad-g.pug p Modals are flexible dialog prompts. .docs-demo.columns .column a.btn.btn-primary(href="#example-modal-1") Open Modal #example-modal-1.modal a.modal-overlay(href="#modals" aria-label="Close") .modal-container(role="document") .modal-header a.btn.btn-clear.float-right(href="#modals" aria-label="Close") .modal-title.h5 Modal title .modal-body .content p This is the content inside the modal. h4 Lorem ipsum p | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent risus leo, dictum in vehicula sit amet, feugiat tempus tellus. Duis quis sodales risus. Etiam euismod ornare consequat. p | Climb leg rub face on everything give attitude nap all day for under the bed. Chase mice attack feet but rub face on everything hopped up on goofballs. h4 Cupcake ipsum p | Jelly-o sesame snaps halvah croissant oat cake cookie. Cheesecake bear claw topping. Chupa chups apple pie carrot cake chocolate cake caramels. p | De braaaiiiins apocalypsi gorger omero prefrontal cortex undead survivor fornix dictum mauris. Hi brains mindless mortuis limbic cortex soulless creaturas optic nerve. h4 Candy ipsum p | Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar. p | Caerphilly swiss fromage frais. Brie cheese and wine fromage frais chalk and cheese danish fontina smelly cheese who moved my cheese cow. .modal-footer button.btn.btn-primary Share a.btn.btn-link(href="#modals") Close p | Add a container element with the #[code modal] class. | And add a real container #[code modal-container] and overlay #[code modal-overlay] inside it. | You can add child elements with the #[code modal-header], #[code modal-body] and #[code modal-footer] - any or all of them. p | Spectre.css does not include JavaScript code, you will need to implement your JS to interact with modals. | To make a modal appear, add the #[code active] class to the #[code modal] container. pre.code(data-lang='HTML') code :highlight(lang="html") +docs-subheading('modals-sizes', 'Modal sizes') .docs-demo.columns .column.col-6.col-xs-12 a.btn.btn-primary(href="#example-modal-2") Open small size Modal #example-modal-2.modal.modal-sm a.modal-overlay(href="#modals-sizes" aria-label="Close") .modal-container(role="document") .modal-header a.btn.btn-clear.float-right(href="#modals-sizes" aria-label="Close") .modal-title.h5 Modal title .modal-body .content form .form-group label.form-label(for="input-example-7") Name input#input-example-7.form-input(type="text" placeholder="Name") .form-group label.form-label Gender label.form-radio input(type="radio" name="gender") i.form-icon | Male label.form-radio input(type="radio" name="gender" checked="") i.form-icon | Female .modal-footer button.btn.btn-primary Submit a.btn.btn-link(href="#modals-sizes" aria-label="Close") Close p | Use the #[code modal-sm] class for a smaller modal dialog. | The container max width is #[code 320px]. .docs-demo.columns .column a.btn.btn-primary(href="#example-modal-3") Open large size Modal #example-modal-3.modal.modal-lg a.modal-overlay(href="#modals-sizes" aria-label="Close") .modal-container(role="document") .modal-header a.btn.btn-clear.float-right(href="#modals-sizes" aria-label="Close") .modal-title.h5 Modal title .modal-body .content p This is the content inside the modal. h4 Lorem ipsum p | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent risus leo, dictum in vehicula sit amet, feugiat tempus tellus. Duis quis sodales risus. Etiam euismod ornare consequat. p | Climb leg rub face on everything give attitude nap all day for under the bed. Chase mice attack feet but rub face on everything hopped up on goofballs. h4 Cupcake ipsum p | Jelly-o sesame snaps halvah croissant oat cake cookie. Cheesecake bear claw topping. Chupa chups apple pie carrot cake chocolate cake caramels. p | De braaaiiiins apocalypsi gorger omero prefrontal cortex undead survivor fornix dictum mauris. Hi brains mindless mortuis limbic cortex soulless creaturas optic nerve. h4 Candy ipsum p | Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas. Dramatically maintain clicks-and-mortar. p | Caerphilly swiss fromage frais. Brie cheese and wine fromage frais chalk and cheese danish fontina smelly cheese who moved my cheese cow. .modal-footer button.btn.btn-primary Share a.btn.btn-link(href="#modals-sizes") Close p | Use the #[code modal-lg] class for a full size modal. | The container max width is #[code 960px]. pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/nav.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'nav' - var parent = 'components' - var title = 'Nav - Components - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('nav', 'Nav') include ../_layout/_ad-g.pug .docs-demo.columns .column.col-6.col-xs-12 ul.nav li.nav-item a(href="#nav") Elements li.nav-item.active a(href="#nav") Layout ul.nav li.nav-item a(href="#nav") Flexbox grid li.nav-item a(href="#nav") Responsive li.nav-item a(href="#nav") Navbar li.nav-item a(href="#nav") Empty states li.nav-item a(href="#nav") Components li.nav-item a(href="#nav") Utilities p | Add a container element with the #[code nav] class. | And add child elements with the #[code nav-item] class. | The #[code nav-item] with the #[code active] class will be highlighted. pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/pagination.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'pagination' - var parent = 'components' - var title = 'Pagination - Components - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('pagination', 'Pagination') include ../_layout/_ad-g.pug .docs-demo.columns .column.col-xs-12 ul.pagination li.page-item a(href="#pagination") Prev li.page-item a(href="#pagination") 1 li.page-item span ... li.page-item a(href="#pagination") 4 li.page-item.active a(href="#pagination") 5 li.page-item a(href="#pagination") 6 li.page-item span ... li.page-item a(href="#pagination") 9 li.page-item a(href="#pagination") Next .column.col-xs-12 ul.pagination li.page-item.disabled a(href="#pagination" tabindex="-1") Prev li.page-item.active a(href="#pagination") 1 li.page-item a(href="#pagination") 2 li.page-item a(href="#pagination") 3 li.page-item span ... li.page-item a(href="#pagination") 9 li.page-item a(href="#pagination") Next p | Add a container element with the #[code pagination] class. | And add child elements with the #[code page-item] class. | The #[code page-item] with the #[code active] class will be highlighted. | You can add the #[code disabled] class to the #[code page-item] to have unclickable page links. pre.code(data-lang='HTML') code :highlight(lang="html") .docs-demo.columns .column.col-12 ul.pagination li.page-item.page-prev a(href="#pagination") .page-item-subtitle Previous .page-item-title.h5 Getting started li.page-item.page-next a(href="#pagination") .page-item-subtitle Next .page-item-title.h5 Layout p You could use previous and next pagination to navigate. pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/panels.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'panels' - var parent = 'components' - var title = 'Panels - Components - Spectre.css CSS Framework' - var description = 'Panels are flexible view container with auto-expand content section. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('panels', 'Panels') include ../_layout/_ad-g.pug p Panels are flexible view container with auto-expand content section. .docs-demo.columns .column.col-6.col-xs-12 .panel .panel-header.text-center figure.avatar.avatar-lg img(src="../img/avatar-2.png" alt="Avatar") .panel-title.h5.mt-10 Bruce Banner .panel-subtitle THE HULK nav.panel-nav ul.tab.tab-block li.tab-item.active a(href="#panels") | Profile li.tab-item a(href="#panels") | Files li.tab-item a(href="#panels") | Tasks .panel-body .tile.tile-centered .tile-content .tile-title.text-bold E-mail .tile-subtitle bruce.banner@hulk.com .tile-action button.btn.btn-link.btn-action.btn-lg.tooltip.tooltip-left(data-tooltip="Edit E-mail") i.icon.icon-edit .tile.tile-centered .tile-content .tile-title.text-bold Skype .tile-subtitle bruce.banner .tile-action button.btn.btn-link.btn-action.btn-lg i.icon.icon-edit .tile.tile-centered .tile-content .tile-title.text-bold Location .tile-subtitle Dayton, Ohio .tile-action button.btn.btn-link.btn-action.btn-lg i.icon.icon-edit .panel-footer button.btn.btn-primary.btn-block Save .column.col-6.col-xs-12 .panel .panel-header .panel-title.h6 Comments .panel-body .tile .tile-icon figure.avatar img(src="../img/avatar-1.png" alt="Avatar") .tile-content p.tile-title.text-bold Thor Odinson p.tile-subtitle | Earth's Mightiest Heroes joined forces to take on threats that were too big for any one hero to tackle... .tile .tile-icon figure.avatar img(src="../img/avatar-2.png" alt="Avatar") .tile-content p.tile-title.text-bold Bruce Banner p.tile-subtitle The Strategic Homeland Intervention, Enforcement, and Logistics Division... .tile .tile-icon figure.avatar(data-initial="TS") .tile-content p.tile-title.text-bold Tony Stark p.tile-subtitle | Earth's Mightiest Heroes joined forces to take on threats that were too big for any one hero to tackle... .tile .tile-icon figure.avatar img(src="../img/avatar-4.png" alt="Avatar") .tile-content p.tile-title.text-bold Steve Rogers p.tile-subtitle The Strategic Homeland Intervention, Enforcement, and Logistics Division... .tile .tile-icon figure.avatar img(src="../img/avatar-3.png" alt="Avatar") .tile-content p.tile-title.text-bold Natasha Romanoff p.tile-subtitle | Earth's Mightiest Heroes joined forces to take on threats that were too big for any one hero to tackle... .panel-footer .input-group input.form-input(type="text" placeholder="Hello") button.btn.btn-primary.input-group-btn Send p | Add a container element with the #[code panel] class. | And add child elements with the #[code panel-header], #[code panel-nav], #[code panel-body] and/or #[code panel-footer] classes. | The #[code panel-body] can be auto expanded and vertically scrollable. pre.code(data-lang='HTML') code :highlight(lang="html")
Comments
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/popovers.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'popovers' - var parent = 'components' - var title = 'Popovers - Components - Spectre.css CSS Framework' - var description = 'Popovers are small overlay content containers. Popovers component is built entirely in CSS. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('popovers', 'Popovers') include ../_layout/_ad-g.pug p Popovers are small overlay content containers. Popovers component is built entirely in CSS. .docs-demo.columns .column.col-3.col-sm-6 .popover a.btn.btn-primary(href="#popovers") | top popover .popover-container .card .card-header .card-title.h5 Apple .card-subtitle.text-gray Software and hardware .card-body | To make a contribution to the world by making tools for the mind that advance humankind. .card-footer button.btn.btn-primary Buy .column.col-3.col-sm-6 .popover.popover-right a.btn.btn-primary(href="#popovers") | right popover .popover-container .card .card-header .card-title.h5 Apple .card-subtitle.text-gray Software and hardware .card-body | To make a contribution to the world by making tools for the mind that advance humankind. .card-footer button.btn.btn-primary Buy .column.col-3.col-sm-6 .popover.popover-bottom a.btn.btn-primary(href="#popovers") | bottom popover .popover-container .card .card-header .card-title.h5 Apple .card-subtitle.text-gray Software and hardware .card-body | To make a contribution to the world by making tools for the mind that advance humankind. .card-footer button.btn.btn-primary Buy .column.col-3.col-sm-6 .popover.popover-left a.btn.btn-primary(href="#popovers") | left popover .popover-container .card .card-header .card-title.h5 Apple .card-subtitle.text-gray Software and hardware .card-body | To make a contribution to the world by making tools for the mind that advance humankind. .card-footer button.btn.btn-primary Buy p | Wrap an element by a container with the #[code popover] class. | And add a container with the #[code popover-container] next to the element. | You can use #[a(href="#cards") Cards] component inside the #[code popover-container]. p | Also, you can add the #[code popover-right], #[code popover-bottom] or #[code popover-left] class to define the position. | By default, the popovers appear above the element. pre.code(data-lang='HTML') code :highlight(lang="html")
...
...
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/steps.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'steps' - var parent = 'components' - var title = 'Steps - Components - Spectre.css CSS Framework' - var description = 'Steps are progress indicators of a sequence of task steps. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('steps', 'Steps') include ../_layout/_ad-g.pug p Steps are progress indicators of a sequence of task steps. .docs-demo.columns .column.col-12 ul.step li.step-item a.tooltip(href="#steps" data-tooltip="Step 1 Tooltip") li.step-item.active a.tooltip(href="#steps" data-tooltip="Step 2 Tooltip") li.step-item a.tooltip(href="#steps" data-tooltip="Step 3 Tooltip") li.step-item a.tooltip(href="#steps" data-tooltip="Step 4 Tooltip") .column.col-12 ul.step li.step-item a.tooltip(href="#steps" data-tooltip="Step 1 Tooltip") Step 1 li.step-item a.tooltip(href="#steps" data-tooltip="Step 2 Tooltip") Step 2 li.step-item.active a.tooltip(href="#steps" data-tooltip="Step 3 Tooltip") Step 3 li.step-item a.tooltip(href="#steps" data-tooltip="Step 4 Tooltip") Step 4 p | Add a container element with the #[code step] class. | And add child elements with the #[code step-item] class. | The #[code step-item] with the #[code active] class will be highlighted and indicate the current state of progress. pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/tabs.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'tabs' - var parent = 'components' - var title = 'Tabs - Components - Spectre.css CSS Framework' - var description = 'Tabs enable quick switch between different views. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('tabs', 'Tabs') include ../_layout/_ad-g.pug p Tabs enable quick switch between different views. .docs-demo.columns .column.col-6.col-sm-12 ul.tab li.tab-item.active a(href="#tabs") | Music li.tab-item a(href="#tabs") | Playlists li.tab-item a(href="#tabs") | Radio li.tab-item a(href="#tabs") | Store .column.col-6.col-sm-12 ul.tab.tab-block li.tab-item.active a(href="#tabs") | Music li.tab-item a(href="#tabs") | Playlists li.tab-item a(href="#tabs") | Radio p | Add a container element with the #[code tab] class. | And add child elements with the #[code tab-item] class. | You can add the #[code tab-block] class for a full-width tab. | The #[code tab-item] or its child #{''} with the #[code active] class will be highlighted. pre.code(data-lang='HTML') code :highlight(lang="html") .docs-demo.columns .column.col-sm-12 ul.tab li.tab-item.active a.badge(href="#tabs" data-badge="999") | Music li.tab-item a(href="#tabs") | Playlists li.tab-item a(href="#tabs") | Radio .column.col-sm-12 ul.tab.tab-block li.tab-item.active a.badge(href="#tabs" data-badge="9") | Music li.tab-item a.badge(href="#tabs" data-badge="99") | Playlists li.tab-item a(href="#tabs") | Radio p | If you need #[code badges] on tabs, you can add badge class to the element within #[code tab-item]. pre.code(data-lang='HTML') code :highlight(lang="html") .docs-demo.columns .column.col-12 ul.tab li.tab-item.active a(href="#tabs") | Music span.btn.btn-clear li.tab-item a(href="#tabs") | Playlists li.tab-item a(href="#tabs") | Radio li.tab-item a(href="#tabs") | Store li.tab-item.tab-action .input-group.input-inline input.form-input.input-sm(type="text") button.btn.btn-primary.btn-sm.input-group-btn Search p | You could add a search box or buttons inside a tab. | Add the #[code tab-action] class to the #[code tab-item]. pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/tiles.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'tiles' - var parent = 'components' - var title = 'Tiles - Components - Spectre.css CSS Framework' - var description = 'Tiles are repeatable or embeddable information blocks. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('tiles', 'Tiles') include ../_layout/_ad-g.pug p Tiles are repeatable or embeddable information blocks. .docs-demo.columns .column.col-9.col-sm-12 .tile .tile-icon figure.avatar.avatar-lg img(src="../img/avatar-3.png" alt="Avatar") .tile-content p.tile-title The Avengers p.tile-subtitle | Earth's Mightiest Heroes joined forces to take on threats that were too big for any one hero to tackle... .tile-action button.btn.btn-primary Join button.btn Contact .column.col-9.col-sm-12 .tile .tile-icon figure.avatar.avatar-lg img(src="../img/avatar-2.png" alt="Avatar") .tile-content p.tile-title The S.H.I.E.L.D. p.tile-subtitle The Strategic Homeland Intervention, Enforcement, and Logistics Division... p button.btn.btn-primary.btn-sm Join button.btn.btn-sm Contact p | Add a container with the #[code tile] class. | And add child elements with the #[code tile-icon], #[code tile-content] or/and #[code tile-action] classes. | The #[code tile-icon] and #[code tile-action] are optional. p | There are #[code tile-title] and #[code tile-subtitle] classes for title and subtitle text styles. pre.code(data-lang='HTML') code :highlight(lang="html")

The Avengers

Earth's Mightiest Heroes joined forces to take on threats that were too big for any one hero to tackle...

+docs-subheading('tiles-compact', 'Compact tiles') p | There is compact version of Tiles component, which is often used as contact and file info blocks. p | Add the #[code tile-centered] class to the container #[code tile]. | The #[code tile-icon], #[code tile-content] and #[code tile-action] will be vertically centered. .docs-demo.columns .column.col-6.col-md-9.col-xs-12 .tile.tile-centered .tile-icon .example-tile-icon i.icon.icon-mail.centered .tile-content .tile-title spectre-docs.pdf small.tile-subtitle.text-gray 14MB · Public · 1 Jan, 2017 .tile-action button.btn.btn-link.btn-action i.icon.icon-more-vert pre.code(data-lang='HTML') code :highlight(lang="html")
spectre-docs.pdf
14MB · Public · 1 Jan, 2017
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/toasts.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'toasts' - var parent = 'components' - var title = 'Toasts - Components - Spectre.css CSS Framework' - var description = 'Toasts are used to show alert or information to users. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('toasts', 'Toasts') include ../_layout/_ad-g.pug p Toasts are used to show alert or information to users. .docs-demo.columns .column.col-9.col-sm-12 .toast button.btn.btn-clear.float-right h6 Toast Title p | Lorem ipsum dolor sit amet, consectetur adipiscing elit. .column.col-9.col-sm-12 .toast.toast-primary button.btn.btn-clear.float-right p | Lorem ipsum dolor sit amet, consectetur adipiscing elit. p | Add a container element with the #[code toast] class. | You can add any text within the container, and even icons. | You may also add a close button with the #[code btn-clear] class if you need. pre.code(data-lang='HTML') code :highlight(lang="html")
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
.docs-demo.columns .column.col-sm-12 .toast.toast-success button.btn.btn-clear.float-right p | Toast success .column.col-sm-12 .toast.toast-warning button.btn.btn-clear.float-right p | Toast warning .column.col-sm-12 .toast.toast-error button.btn.btn-clear.float-right p | Toast error p | And you can add the #[code toast-primary], #[code toast-success], #[code toast-warning] or #[code toast-error] class for additional toast colors. pre.code(data-lang='HTML') code :highlight(lang="html")
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components/tooltips.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'tooltips' - var parent = 'components' - var title = 'Tooltips - Components - Spectre.css CSS Framework' - var description = 'Tooltips provide context information labels that appear on hover and focus. Tooltips component is built entirely in CSS. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('tooltips', 'Tooltips') include ../_layout/_ad-g.pug p Tooltips provide context information labels that appear on hover and focus. Tooltips component is built entirely in CSS. .docs-demo.columns.text-center .column.col-xs-12 button.btn.btn-primary.tooltip(data-tooltip="Top Tooltip Text") top tooltip .column.col-xs-12 button.btn.btn-primary.tooltip.tooltip-right(data-tooltip="Right Tooltip Text") right tooltip .column.col-xs-12 button.btn.btn-primary.tooltip.tooltip-bottom(data-tooltip="Bottom Tooltip Text") bottom tooltip .column.col-xs-12 button.btn.btn-primary.tooltip.tooltip-left(data-tooltip="Left Tooltip Text\nMultiline") left tooltip p | Add the #[code tooltip] class and the #[code data-tooltip] attribute, which contains the tooltip content, to non self closing elements. p | And add the #[code tooltip-right], #[code tooltip-bottom] or #[code tooltip-left] class to define the position of a tooltip. | By default, the tooltip appears above the element. pre.code(data-lang='HTML') code :highlight(lang="html") +docs-subheading('tooltips-multiline', 'Multiline tooltips') .docs-demo.columns .column.col-12 button.btn.btn-primary.tooltip(data-tooltip="First Line Tooltip Text \n Second Line Tooltip Text \n Third Line Tooltip Text") multiline tooltip p | Add the #[code \n] string between any text for multiline tooltips. pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/components.pug ================================================ extends _layout/_docs-layout.pug block variables - var slug = 'components' - var parent = 'components' - var title = 'Components - Spectre.css CSS Framework' - var description = 'Accordions, Avatars, Badges, Bars, Breadcrumbs, Cards, Chips, Empty states, Menu, Modals, Nav, Pagination, Panels, Popovers, teps, Tabs, TIles, Toasts, Tooltips' block docs-content +docs-heading('components', 'Components') include _layout/_ad-g.pug p strong Spectre.css | is a lightweight, responsive and modern CSS framework for faster and extensible development. p | Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language. .docs-demo.columns .column.col-6.col-xs-12 .card .card-header .card-title.h5 Accordions .card-body | Used to toggle sections of content .card-footer a.btn.btn-primary(href="components/accordions.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Avatars .card-body | User profile pictures .card-footer a.btn.btn-primary(href="components/avatars.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Badges .card-body | Used as unread number indicators .card-footer a.btn.btn-primary(href="components/badges.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Bars .card-body | Progress of a task or the value within the known range .card-footer a.btn.btn-primary(href="components/bars.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Breadcrumbs .card-body | Navigational hierarchies to indicate current location .card-footer a.btn.btn-primary(href="components/breadcrumbs.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Cards .card-body | Flexible content containers .card-footer a.btn.btn-primary(href="components/cards.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Chips .card-body | Complex entities in small blocks .card-footer a.btn.btn-primary(href="components/chips.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Empty states .card-body | Navigational hierarchies to indicate current location .card-footer a.btn.btn-primary(href="components/empty.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Menu .card-body | Vertical list of links or buttons for actions and navigation .card-footer a.btn.btn-primary(href="components/menu.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Modals .card-body | Flexible dialog prompts .card-footer a.btn.btn-primary(href="components/modals.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Nav .card-body | Vertical list of links .card-footer a.btn.btn-primary(href="components/nav.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Pagination .card-body | Vertical list of links or buttons for actions and navigation .card-footer a.btn.btn-primary(href="components/pagination.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Panels .card-body | Flexible view container with auto-expand content section .card-footer a.btn.btn-primary(href="components/panels.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Popovers .card-body | Small overlay content containers .card-footer a.btn.btn-primary(href="components/popovers.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Steps .card-body | Progress indicators of a sequence of task steps .card-footer a.btn.btn-primary(href="components/steps.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Tabs .card-body | Switch between different views .card-footer a.btn.btn-primary(href="components/tabs.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Tiles .card-body | Repeatable or embeddable information blocks .card-footer a.btn.btn-primary(href="components/tiles.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Toasts .card-body | Progress indicators of a sequence of task steps .card-footer a.btn.btn-primary(href="components/toasts.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Tooltips .card-body | Context information labels that appear on hover and focus .card-footer a.btn.btn-primary(href="components/tooltips.html") View include _layout/_ad-c.pug include _layout/_footer.pug ================================================ FILE: docs/src/elements/buttons.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'buttons' - var parent = 'elements' - var title = 'Buttons - Elements - Spectre.css CSS Framework' - var description = 'Buttons include simple button styles for actions in different types and sizes. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('buttons', 'Buttons') include ../_layout/_ad-g.pug p Buttons include simple button styles for actions in different types and sizes. .docs-demo.columns .column.col-12 button.btn default button button.btn.btn-primary primary button button.btn.btn-link link button p | Add the #[code btn] class to #{''}, #{''} or #{' +docs-subheading('buttons-colors', 'Button colors') .docs-demo.columns .column.col-12 button.btn.btn-success success button button.btn.btn-error error button p | Add the #[code btn-success] or #[code btn-error] class for success (green) or error (red) button color. | If you need more button colors, please use a(href="../getting-started/custom.html#variables-buttons") button mixins | to create your own button color variants. pre.code(data-lang='HTML') code :highlight(lang="html") +docs-subheading('buttons-sizes', 'Button sizes') .docs-demo.columns .column.col-12 button.btn.btn-primary.btn-lg | large i.icon.icon-arrow-down button.btn.btn-primary.btn-lg large button .column.col-12 button.btn.btn-primary | normal i.icon.icon-arrow-down button.btn.btn-primary normal button .column.col-12 button.btn.btn-primary.btn-sm | small i.icon.icon-arrow-down button.btn.btn-primary.btn-sm small button p | Add the #[code btn-sm] or #[code btn-lg] class for small or large button size. | Also, you can add the #[code btn-block] class for a full-width button. pre.code(data-lang='HTML') code :highlight(lang="html") p | Please note that you could use the #[code btn-action] class for a square button, or add another #[code s-circle] class for a round button, which is often used as a Float Action Button (FAB). .docs-demo.columns .column.col-xs-12 button.btn.btn-action.btn-primary.btn-lg i.icon.icon-menu button.btn.btn-action.btn-primary i.icon.icon-menu button.btn.btn-action.btn-primary.btn-sm i.icon.icon-menu .column.col-xs-12 button.btn.btn-action.btn-primary.btn-lg.s-circle i.icon.icon-arrow-up button.btn.btn-action.btn-primary.s-circle i.icon.icon-arrow-up button.btn.btn-action.btn-primary.btn-sm.s-circle i.icon.icon-arrow-up pre.code(data-lang='HTML') code :highlight(lang="html") +docs-subheading('buttons-states', 'Button states') p | Add the #[code active] class for active button state style. .docs-demo.columns .column.col-12 button.btn.active default active button.btn.btn-primary.active primary active button.btn.btn-link.active link active p | Add the #[code disabled] class or the #[code disabled] attribute for disabled button state style. .docs-demo.columns .column.col-12 button.btn.disabled(tabindex="-1") default disabled button.btn.btn-primary(disabled="" tabindex="-1") primary disabled button.btn.btn-link(disabled="" tabindex="-1") link disabled pre.code(data-lang='HTML') code :highlight(lang="html") p | A button with the #[code loading] class can show loading indicator. .docs-demo.columns .column.col-12 button.btn.loading default button button.btn.btn-primary.loading primary button button.btn.btn-link.loading link button pre.code(data-lang='HTML') code :highlight(lang="html") +docs-subheading('buttons-groups', 'Button groups') .docs-demo.columns .column.col-6.col-md-12 .btn-group button.btn first button button.btn second button button.btn third button .column.col-6.col-md-12 .btn-group.btn-group-block button.btn.btn-primary first button button.btn.btn-primary second button button.btn.btn-primary third button .column.col-6.col-md-12 .btn-group button.btn.btn-sm.active first button button.btn.btn-sm second button button.btn.btn-sm third button .column.col-6.col-md-12 .btn-group.btn-group-block button.btn.btn-primary.btn-sm.active first button button.btn.btn-primary.btn-sm second button button.btn.btn-primary.btn-sm third button p | If you want to use buttons as a group, add the #[code btn-group] class to the container. | You can add the #[code btn-group-block] class for a full-width button group. pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/elements/code.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'code' - var parent = 'elements' - var title = 'Code - Elements - Spectre.css CSS Framework' - var description = 'Code is used for styling inline and multiline code snippets. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('code', 'Code') include ../_layout/_ad-g.pug p Code is used for styling inline and multiline code snippets. +docs-subheading('code-inline', 'Inline code') pre.code(data-lang='HTML') code :highlight(lang="html") code p | For inline code, you can use the #{''} element. +docs-subheading('code-snippet', 'Code snippet') p | For multiline code snippet blocks, you can use #{'
'} with the #[code code] class as a container, and add #{''} inside it.
      | The #[code data-lang] attribute is rendered as the language name in the top right.

    pre.code(data-lang='HTML')
      code
        :highlight(lang="html")
          
          

    pre.code(data-lang='HTML')
      code
        :highlight(lang="html")
          
<!-- code snippets -->
          <button class="btn">
            Submit
          </button>
          
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/elements/forms.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'forms' - var parent = 'elements' - var title = 'Forms - Elements - Spectre.css CSS Framework' - var description = 'Forms provide the most common control styles used in forms, including input, textarea, select, checkbox, radio and switch. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('forms', 'Forms') include ../_layout/_ad-g.pug p | Forms provide the most common control styles used in forms, including input, textarea, select, checkbox, radio and switch. +docs-subheading('forms-input', 'Form input') .docs-demo.columns .column.col-6.col-xs-12 .form-group label.form-label(for="input-example-1") Name input#input-example-1.form-input(type="text" placeholder="Name") .form-group label.form-label(for="input-example-2") Email input#input-example-2.form-input(type="email" placeholder="Email") pre.code(data-lang='HTML') code :highlight(lang="html")
+docs-subheading('forms-textarea', 'Form textarea') .docs-demo.columns .column.col-6.col-xs-12 .form-group label.form-label(for="input-example-3") Message textarea#input-example-3.form-input(placeholder="Textarea" rows="3") pre.code(data-lang='HTML') code :highlight(lang="html")
+docs-subheading('forms-select', 'Form select') .docs-demo.columns .column.col-6.col-xs-12 .form-group select.form-select option Choose an option option Slack option Skype option Hipchat .form-group select.form-select(multiple="") option Choose an option option Slack option Skype option Hipchat pre.code(data-lang='HTML') code :highlight(lang="html")
+docs-subheading('forms-radio', 'Form radio') .docs-demo.columns .column.col-6.col-xs-12 form .form-group label.form-label Gender label.form-radio input(type="radio" name="gender" checked="") i.form-icon | Male label.form-radio input(type="radio" name="gender") i.form-icon | Female pre.code(data-lang='HTML') code :highlight(lang="html")
+docs-subheading('forms-switch', 'Form switch') .docs-demo.columns .column.col-6.col-xs-12 .form-group label.form-switch input(type="checkbox") i.form-icon | Send me emails with news and tips .form-group label.form-switch input(type="checkbox" checked="") i.form-icon | Send me emails with news and tips pre.code(data-lang='HTML') code :highlight(lang="html")
+docs-subheading('forms-checkbox', 'Form checkbox') .docs-demo.columns .column.col-6.col-xs-12 .form-group label.form-checkbox input(type="checkbox") i.form-icon | Remember me .form-group label.form-checkbox input(type="checkbox" checked="") i.form-icon | Remember me pre.code(data-lang='HTML') code :highlight(lang="html")
.docs-demo.columns .column .form-group label.form-checkbox input#docs-demo-checkbox(type="checkbox") i.form-icon | Select all script. document.getElementById("docs-demo-checkbox").indeterminate = true; p | You can change checkbox to indeterminate state by setting the #[code indeterminate] property of input checkboxes to #[code true]. +docs-subheading('forms-inline', 'Inline forms') .docs-demo.columns .column.col-6.col-xs-12 form .form-group label.form-radio.form-inline input(type="radio" name="gender" checked="") i.form-icon | Male label.form-radio.form-inline input(type="radio" name="gender") i.form-icon | Female .form-group label.form-checkbox.form-inline input(type="checkbox") i.form-icon | Checkbox 1 label.form-checkbox.form-inline input(type="checkbox" checked="") i.form-icon | Checkbox 2 p | You can add the #[code form-inline] class to the form components to make them inline in one row. pre.code(data-lang='HTML') code :highlight(lang="html")
+docs-subheading('forms-horizontal', 'Horizontal forms') p | If you want to have a horizontal form, add the #[code form-horizontal] class to the #{'
'} container. | And add the #[code col-<1-12>] and #[code col-xs/sm/lg/xl-<1-12>] class to the child elements for responsive form row layout. .docs-demo.columns .column.col-9.col-sm-12 form.form-horizontal(action="#forms") .form-group .col-3.col-sm-12 label.form-label(for="input-example-4") Name .col-9.col-sm-12 input#input-example-4.form-input(type="text" placeholder="Name") .form-group .col-3.col-sm-12 label.form-label(for="input-example-5") Email .col-9.col-sm-12 input#input-example-5.form-input(type="email" placeholder="Email") .form-group .col-3.col-sm-12 label.form-label Gender .col-9.col-sm-12 label.form-radio input(type="radio" name="gender") i.form-icon | Male label.form-radio input(type="radio" name="gender" checked="") i.form-icon | Female .form-group .col-3.col-sm-12 label.form-label Source .col-9.col-sm-12 select.form-select(multiple="") option Slack option Skype option Hipchat .form-group .col-9.col-sm-12.col-ml-auto label.form-switch input(type="checkbox") i.form-icon | Send me emails with news and tips .form-group .col-3.col-sm-12 label.form-label(for="input-example-6") Message .col-9.col-sm-12 textarea#input-example-6.form-input(placeholder="Textarea" rows="3") .form-group .col-9.col-sm-12.col-ml-auto label.form-checkbox input(type="checkbox") i.form-icon | Remember me pre.code(data-lang='HTML') code :highlight(lang="html")
+docs-subheading('forms-sizes', 'Form sizes') p | For smaller or larger input and select controls, you could add the #[code input-sm]/#[code input-lg], #[code select-sm]/#[code select-lg] and #[code label-sm]/#[code label-lg] classes to the elements. .docs-demo.columns .column.col-4.col-xs-12 label.form-label.label-sm Label .column.col-4.col-xs-12 input.form-input.input-sm(type="text" placeholder="Name") .column.col-4.col-xs-12 select.form-select.select-sm option Choose an option option Slack option Skype option Hipchat .column.col-4.col-xs-12 label.form-label.label-lg Label .column.col-4.col-xs-12 input.form-input.input-lg(type="text" placeholder="Name") .column.col-4.col-xs-12 select.form-select.select-lg option Choose an option option Slack option Skype option Hipchat p | You can add the #[code input-sm]/#[code input-lg] classes to the input-checkbox, input-radio and input-switch to have different sizes. +docs-subheading('forms-icons', 'Form icons') p | Spectre Forms components has a(href="icons.html") Spectre Icons | support. p | Add a wrapper with the #[code has-icon-left]/#[code has-icon-right] class to #{''} element. | And add the icon with #[code form-icon] class next to the #{''}. .docs-demo.columns .column.col-4.col-xs-12 .has-icon-left input.form-input.input-sm(type="text" placeholder="Name") i.form-icon.icon.icon-arrow-right .column.col-4.col-xs-12 .has-icon-left.tooltip(data-tooltip="Lorem ipsum dolor sit amet") input.form-input(type="text" placeholder="Name") i.form-icon.icon.icon-arrow-right .column.col-4.col-xs-12 .has-icon-left input.form-input.input-lg(type="text" placeholder="Name") i.form-icon.icon.icon-arrow-right .column.col-4.col-xs-12 .has-icon-right input.form-input.input-sm(type="text" placeholder="Name") i.form-icon.icon.icon-check .column.col-4.col-xs-12 .has-icon-right input.form-input(type="text" placeholder="Name") i.form-icon.icon.icon-check .column.col-4.col-xs-12 .has-icon-right input.form-input.input-lg(type="text" placeholder="Name") i.form-icon.icon.icon-check pre.code(data-lang='HTML') code :highlight(lang="html")
p | You can use the #[code loading] class for loading or posting state. .docs-demo.columns .column.col-4.col-xs-12 .has-icon-right input.form-input.input-sm(type="text" placeholder="Name") i.form-icon.loading .column.col-4.col-xs-12 .has-icon-right input.form-input(type="text" placeholder="Name") i.form-icon.loading .column.col-4.col-xs-12 .has-icon-right input.form-input.input-lg(type="text" placeholder="Name") i.form-icon.loading pre.code(data-lang='HTML') code :highlight(lang="html")
+docs-subheading('forms-input', 'Input types') .docs-demo.columns .column.col-9.col-sm-12 form.form-horizontal(action="#forms") .form-group .col-3 label.form-label(for="input-example-8") Email .col-9 input#input-example-8.form-input(type="email" placeholder="Email" value="spectre@example.com" pattern="[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$") .form-group .col-3 label.form-label(for="input-example-9") URL .col-9 input#input-example-9.form-input(type="url" placeholder="URL" value="https://github.com/picturepan2/spectre") .form-group .col-3 label.form-label(for="input-example-10") Search .col-9 input#input-example-10.form-input(type="search" placeholder="Search") .form-group .col-3 label.form-label(for="input-example-11") Tel .col-9 input#input-example-11.form-input(type="tel" placeholder="Tel" value="1-(888)-888-8888") .form-group .col-3 label.form-label(for="input-example-12") Password .col-9 input#input-example-12.form-input(type="password" placeholder="Password" value="123456789") .form-group .col-3 label.form-label(for="input-example-13") Number .col-9 input#input-example-13.form-input(type="number" placeholder="00" value="66") .form-group .col-3 label.form-label(for="input-example-14") Date .col-9 input#input-example-14.form-input(type="date" value="2016-12-31") .form-group .col-3 label.form-label(for="input-example-15") Color .col-9 input#input-example-15.form-input(type="color" value="#5755d9") .form-group .col-3 label.form-label(for="input-example-16") File .col-9 input#input-example-16.form-input(type="file") +docs-subheading('forms-input-groups', 'Input groups') .docs-demo.columns .column.col-6.col-xs-12 .input-group input.form-input.input-sm(type="text" placeholder="username") select.form-select.select-sm option Slack option Skype option Hipchat .column.col-6.col-xs-12 .input-group span.input-group-addon.addon-sm slack.com/ input.form-input.input-sm(type="text" placeholder="site name") button.btn.btn-primary.input-group-btn.btn-sm Submit .column.col-6.col-xs-12 .input-group input.form-input(type="text" placeholder="username") select.form-select option Slack option Skype option Hipchat .column.col-6.col-xs-12 .input-group span.input-group-addon slack.com/ input.form-input(type="text" placeholder="site name") button.btn.btn-primary.input-group-btn Submit .column.col-6.col-xs-12 .input-group label.form-switch input(type="checkbox") i.form-icon input.form-input(type="text" placeholder="name") .column.col-6.col-xs-12 .input-group label.form-checkbox input(type="checkbox") i.form-icon input.form-input(type="text" placeholder="name") .column.col-6.col-xs-12 .input-group input.form-input.input-lg(type="text" placeholder="username") select.form-select.select-lg option Slack option Skype option Hipchat .column.col-6.col-xs-12 .input-group span.input-group-addon.addon-lg slack.com/ input.form-input.input-lg(type="text" placeholder="site name") button.btn.btn-primary.input-group-btn.btn-lg Submit p | If you want to attach text and button along with an input, add the #[code input-group] class to the input container. | And add the #[code input-group-addon] class to the text element and #[code input-group-btn] to the button element. pre.code(data-lang='HTML') code :highlight(lang="html")
...
...
...
+docs-subheading('forms-validation', 'Form validation styles') .docs-demo.columns .column.col-9.col-sm-12 fieldset legend Input .form-group label.form-label(for="input-example-17") Name input#input-example-17.form-input.is-success(type="text" placeholder="Name") p.form-input-hint The name is valid. .form-group.has-error label.form-label(for="input-example-18") Password input#input-example-18.form-input(type="password" placeholder="Password") p.form-input-hint Passwords must have at least 8 characters. fieldset legend Select .form-group select.form-select.is-error option Choose an option option Slack option Skype option Hipchat p.form-input-hint The option is invalid. .form-group.has-success select.form-select option Choose an option option Slack option Skype option Hipchat p.form-input-hint The option is available. fieldset legend Checkbox, Radio and Switch (Error state only) .form-group label.form-checkbox.is-error input(type="checkbox" checked="") i.form-icon | I'm not a robot. .form-group.has-error label.form-radio input(type="radio" name="gender" checked="") i.form-icon | Male label.form-radio input(type="radio" name="gender") i.form-icon | Female .form-group label.form-switch.is-error input(type="checkbox" checked="") i.form-icon | Send me emails with news and tips p | To use form validation styles, you can either add #[code is-success] or #[code is-error] class to the controls or add #[code has-success] or #[code has-error] class to parent elements. | Use the #[code form-input-hint] class to provide form validation success and error messages. pre.code(data-lang='HTML') code :highlight(lang="html")

The name is invalid.

The name is invalid.

.docs-demo.columns .column.col-9.col-sm-12 .form-group label.form-label(for="input-example-21") Email input#input-example-21.form-input(type="text" placeholder="Email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,14}$") .form-group label.form-label(for="input-example-22") Password input#input-example-22.form-input(type="password" placeholder="Password" pattern="^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$") p | You can use input #[code pattern] attribute to validate the value as well. pre.code(data-lang='HTML') code :highlight(lang="html") +docs-subheading('forms-disabled', 'Form disabled styles') p | Add the #[code disabled] attribute to the element or #{'
'} for a disabled form components style. .docs-demo.columns .column.col-6.col-xs-12 form(action="#forms") fieldset(disabled="") .form-group label.form-label(for="input-example-19") Name input#input-example-19.form-input(type="text" placeholder="Name") .form-group label.form-label Gender label.form-radio input(type="radio" name="gender" disabled="") i.form-icon | Male label.form-radio input(type="radio" name="gender" disabled="") i.form-icon | Female .form-group select.form-select(disabled="") option Choose an option option Slack option Skype option Hipchat .form-group label.form-switch input(type="checkbox" disabled="") i.form-icon | Send me emails with news and tips .form-group label.form-label(for="input-example-20") Message textarea#input-example-20.form-input(placeholder="Textarea" rows="3" disabled="") .form-group label.form-checkbox input(type="checkbox" disabled="") i.form-icon | Remember me pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/elements/icons.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'icons' - var parent = 'elements' - var title = 'Icons - Elements - Spectre.css CSS Framework' - var description = 'Icons are single-element, responsive and pure CSS icons. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('icons', 'Icons.css') p small.label.label-secondary CSS ONLY include ../_layout/_ad-g.pug .docs-demo.columns .column .toast.toast-primary | Spectre.css Icons will be moved to a new a(href="https://github.com/picturepan2/icons.css" target="_blank") GitHub Repo | while Spectre will only include basic icons. p | Icons.css are single-element, responsive and pure CSS icons. | You can include #[code spectre-icons.css] located in the #[code dist] folder to your web #{''} to have these CSS icons. +docs-subheading('icons-navigation', 'Navigation icons') .docs-demo.columns .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-arrow-up p icon-arrow-up .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-arrow-right p icon-arrow-right .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-arrow-down p icon-arrow-down .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-arrow-left p icon-arrow-left .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-upward p icon-upward .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-forward p icon-forward .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-downward p icon-downward .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-back p icon-back .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-caret p icon-caret .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-menu p icon-menu .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-apps p icon-apps .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-more-horiz p icon-more-horiz .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-more-vert p icon-more-vert +docs-subheading('icons-action', 'Action icons') .docs-demo.columns .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-resize-horiz p icon-resize-horiz .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-resize-vert p icon-resize-vert .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-plus p icon-plus .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-minus p icon-minus .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-cross p icon-cross .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-check p icon-check .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-stop p icon-stop .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-shutdown p icon-shutdown .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-refresh p icon-refresh .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-search p icon-search .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-flag p icon-flag .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-bookmark p icon-bookmark .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-edit p icon-edit .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-delete p icon-delete .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-share p icon-share .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-download p icon-download .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-upload p icon-upload .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-copy p icon-copy +docs-subheading('icons-object', 'Object icons') .docs-demo.columns .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-mail p icon-mail .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-people p icon-people .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-message p icon-message .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-photo p icon-photo .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-time p icon-time .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-location p icon-location .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-link p icon-link .column.col-3.col-md-6 button.btn.btn-primary.btn-action.btn-lg i.icon.icon-emoji p icon-emoji pre.code(data-lang='HTML') code :highlight(lang="html") +docs-subheading('icons-sizes', 'Icon sizes') p | Use #[code icon-2x], #[code icon-3x] and #[code icon-4x] classes to increase icon sizes. | You can set #[code font-size] to have different icon sizes. .docs-demo.columns .column.col-3.col-md-6 p i.icon.icon-2x.icon-mail p icon-2x (32px) .column.col-3.col-md-6 p i.icon.icon-3x.icon-mail p icon-3x (48px) .column.col-3.col-md-6 p i.icon.icon-4x.icon-mail p icon-4x (64px) pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/elements/labels.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'labels' - var parent = 'elements' - var title = 'Labels - Elements - Spectre.css CSS Framework' - var description = 'Labels are formatted text tags for highlighted, informative information. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('labels', 'Labels') include ../_layout/_ad-g.pug p Labels are formatted text tags for highlighted, informative information. .docs-demo.columns .column span.label.mr-1 default label span.label.label-primary.mr-1 primary label span.label.label-secondary.mr-1 secondary label span.label.label-success.mr-1 success label span.label.label-warning.mr-1 warning label span.label.label-error error label p | Add the #[code label] class to #{''} or #{''} elements. | You can add another class #[code label-primary], #[code label-secondary], #[code label-success], #[code label-warning] and #[code label-error] for colored labels. pre.code(data-lang='HTML') code :highlight(lang="html") default label primary label +docs-subheading('labels-rounded', 'Rounded labels') .docs-demo.columns .column span.label.label-rounded.mr-1 default label span.label.label-rounded.label-primary primary label p | Add the #[code label-rounded] class to have rounded labels. pre.code(data-lang='HTML') code :highlight(lang="html") primary label include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/elements/media.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'media' - var parent = 'elements' - var title = 'Media - Elements - Spectre.css CSS Framework' - var description = 'Media includes responsive images, figures and video classes. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('media', 'Media') include ../_layout/_ad-g.pug p Media includes responsive images, figures and video classes. +docs-subheading('media-images', 'Images') p | Add the #[code img-responsive] class to #{''} elements. The images will scale with the parent sizes. .docs-demo.columns .column.col-12 img.img-responsive.rounded(src="../img/osx-el-capitan.jpg" alt="macOS El Capitan Wallpaper") pre.code(data-lang='HTML') code :highlight(lang="html") ... p | Add the #[code img-fit-contain] or #[code img-fit-cover] class to #{''} or #{'
'} for an image with a caption. | Add the #[code figure] class to #{'
'} element. | The images with the #[code img-responsive] class will be responsive. | And the included class #[code figure-caption] will provide basic style for caption. | Also, you can use #[code text-left], #[code text-center] and #[code text-right] for caption alignment. .docs-demo.columns .column.col-12 figure.figure img.img-responsive.rounded(src="../img/osx-yosemite-2.jpg" alt="macOS Yosemite Wallpaper") figcaption.figure-caption.text-center macOS Yosemite wallpaper pre.code(data-lang='HTML') code :highlight(lang="html")
macOS Yosemite Wallpaper
macOS Yosemite wallpaper
+docs-subheading('media-video', 'Video') p | For responsive video, add a container with the #[code video-responsive] class. | Insert any YouTube, Youku or other iframe/embed video inside the container. | The ratio is 16:9 by default. | You may add #[code video-responsive-4-3] for 4:3 ratio video container or #[code video-responsive-1-1] for 1:1 ratio. .docs-demo.columns .column.col-12 .video-responsive iframe(width="560" height="315" src="https://www.youtube.com/embed/7DbslbKsQSk" allowfullscreen="") p | For responsive #{'
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/calendars.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'calendars' - var parent = 'experimentals' - var title = 'Calendars - Experimentals - Spectre.css CSS Framework' - var description = 'Calendars are designed for date or date range picker and events display. It is made with flex layout. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('calendars', 'Calendars') include ../_layout/_ad-g.pug p | Calendars are designed for date or date range picker and events display. It is made with flex layout. .docs-demo.columns .column.col-4.col-md-12 .calendar .calendar-nav.navbar button.btn.btn-action.btn-link.btn-lg i.icon.icon-arrow-left .navbar-primary March 2017 button.btn.btn-action.btn-link.btn-lg i.icon.icon-arrow-right .calendar-container .calendar-header .calendar-date Sun .calendar-date Mon .calendar-date Tue .calendar-date Wed .calendar-date Thu .calendar-date Fri .calendar-date Sat .calendar-body .calendar-date.prev-month button.date-item 26 .calendar-date.prev-month button.date-item 27 .calendar-date.prev-month button.date-item 28 .calendar-date button.date-item 1 .calendar-date button.date-item 2 .calendar-date button.date-item 3 .calendar-date.tooltip(data-tooltip="Today") button.date-item.date-today 4 .calendar-date.tooltip(data-tooltip="Not available") button.date-item(disabled="") 5 .calendar-date button.date-item 6 .calendar-date button.date-item 7 .calendar-date.tooltip(data-tooltip="You have appointments") button.date-item.badge 8 .calendar-date button.date-item 9 .calendar-date button.date-item 10 .calendar-date button.date-item 11 .calendar-date button.date-item 12 .calendar-date button.date-item 13 .calendar-date button.date-item 14 .calendar-date button.date-item 15 .calendar-date.calendar-range.range-start button.date-item 16 .calendar-date.calendar-range button.date-item 17 .calendar-date.calendar-range button.date-item 18 .calendar-date.calendar-range button.date-item 19 .calendar-date.calendar-range.range-end button.date-item 20 .calendar-date button.date-item 21 .calendar-date button.date-item 22 .calendar-date button.date-item 23 .calendar-date button.date-item 24 .calendar-date button.date-item 25 .calendar-date button.date-item 26 .calendar-date button.date-item 27 .calendar-date button.date-item 28 .calendar-date button.date-item 29 .calendar-date button.date-item 30 .calendar-date button.date-item 31 .calendar-date.next-month button.date-item 1 pre.code(data-lang='HTML') code :highlight(lang="html")
Sun
Mon
Tue
Wed
Thu
Fri
Sat
...
...
+docs-subheading('calendars-sizes', 'Calendars sizes') .docs-demo.columns .column.col-12 .calendar.calendar-lg .calendar-nav.navbar button.btn.btn-action.btn-link.btn-lg i.icon.icon-arrow-left .navbar-primary March 2017 button.btn.btn-action.btn-link.btn-lg i.icon.icon-arrow-right .calendar-container .calendar-header .calendar-date Sun .calendar-date Mon .calendar-date Tue .calendar-date Wed .calendar-date Thu .calendar-date Fri .calendar-date Sat .calendar-body .calendar-date.prev-month button.date-item 26 .calendar-date.prev-month button.date-item 27 .calendar-events a.calendar-event.bg-error.text-light(href="#calendars") Zhonghe Festival .calendar-date.prev-month button.date-item 28 .calendar-date button.date-item 1 .calendar-date button.date-item 2 .calendar-date button.date-item 3 .calendar-date.tooltip(data-tooltip="Today") button.date-item.date-today 4 .calendar-date button.date-item(disabled="") 5 .calendar-date button.date-item 6 .calendar-date button.date-item 7 .calendar-date.tooltip(data-tooltip="You have appointments") button.date-item.badge 8 .calendar-events a.calendar-event.bg-primary.text-light(href="#calendars") Product launch event a.calendar-event.bg-error.text-light(href="#calendars") International Women's Day .calendar-date button.date-item 9 .calendar-date button.date-item 10 .calendar-date button.date-item 11 .calendar-date button.date-item 12 .calendar-events a.calendar-event.bg-error.text-light(href="#calendars") Arbor Day .calendar-date button.date-item 13 .calendar-date button.date-item 14 .calendar-date button.date-item 15 .calendar-date.calendar-range.range-start button.date-item 16 .calendar-date.calendar-range button.date-item 17 .calendar-date.calendar-range button.date-item 18 .calendar-date.calendar-range button.date-item 19 .calendar-date.calendar-range.range-end button.date-item 20 .calendar-events a.calendar-event.bg-success.text-light(href="#calendars") Spring Equinox .calendar-date button.date-item 21 .calendar-date button.date-item 22 .calendar-date button.date-item 23 .calendar-date button.date-item 24 .calendar-date button.date-item 25 .calendar-date button.date-item 26 .calendar-date button.date-item 27 .calendar-date button.date-item 28 .calendar-date button.date-item 29 .calendar-date button.date-item 30 .calendar-date button.date-item 31 .calendar-date.next-month.disabled button.date-item 1 .calendar-events a.calendar-event.bg-error.text-light(href="#calendars") April Fools' Day pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/carousels.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'carousels' - var parent = 'experimentals' - var title = 'Carousels - Experimentals - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('carousels', 'Carousels') p small.label.label-secondary CSS ONLY include ../_layout/_ad-g.pug p Carousels are slideshows for cycling images. It is built in pure CSS. .docs-demo.columns .column.col-12 .carousel input#slide-1.carousel-locator(type="radio" name="carousel-radio" hidden="" checked="") input#slide-2.carousel-locator(type="radio" name="carousel-radio" hidden="") input#slide-3.carousel-locator(type="radio" name="carousel-radio" hidden="") input#slide-4.carousel-locator(type="radio" name="carousel-radio" hidden="") .carousel-container figure.carousel-item label.item-prev.btn.btn-action.btn-lg(for="slide-4") i.icon.icon-arrow-left label.item-next.btn.btn-action.btn-lg(for="slide-2") i.icon.icon-arrow-right img.img-responsive.rounded(src="../img/osx-yosemite.jpg" alt="macOS Yosemite Wallpaper") figure.carousel-item label.item-prev.btn.btn-action.btn-lg(for="slide-1") i.icon.icon-arrow-left label.item-next.btn.btn-action.btn-lg(for="slide-3") i.icon.icon-arrow-right img.img-responsive.rounded(src="../img/osx-yosemite-2.jpg" alt="macOS Yosemite Wallpaper") figure.carousel-item label.item-prev.btn.btn-action.btn-lg(for="slide-2") i.icon.icon-arrow-left label.item-next.btn.btn-action.btn-lg(for="slide-4") i.icon.icon-arrow-right img.img-responsive.rounded(src="../img/osx-el-capitan.jpg" alt="macOS El Capitan Wallpaper") figure.carousel-item label.item-prev.btn.btn-action.btn-lg(for="slide-3") i.icon.icon-arrow-left label.item-next.btn.btn-action.btn-lg(for="slide-1") i.icon.icon-arrow-right img.img-responsive.rounded(src="../img/osx-el-capitan-2.jpg" alt="macOS El Capitan Wallpaper") .carousel-nav label.nav-item.text-hide.c-hand(for="slide-1") 1 label.nav-item.text-hide.c-hand(for="slide-2") 2 label.nav-item.text-hide.c-hand(for="slide-3") 3 label.nav-item.text-hide.c-hand(for="slide-4") 4 p | The default image number of Carousels is #[code 8]. You can add more images by changing the variable #[code $carousel-number] in #[code _carousels.scss] and re-compiling the CSS. pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/comparison.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'comparison' - var parent = 'experimentals' - var title = 'Comparison sliders - Experimentals - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('comparison', 'Comparison sliders') p small.label.label-secondary CSS ONLY include ../_layout/_ad-g.pug p | Comparison Sliders are sliders for comparing two images. It is built in pure CSS. .docs-demo.columns .column.col-12 .comparison-slider figure.comparison-before img.rounded(src="../img/macos-sierra-2.jpg" alt="macOS Sierra Wallpaper") .comparison-label Before figure.comparison-after img.filter-grayscale.rounded(src="../img/macos-sierra-2.jpg" alt="macOS Sierra Wallpaper") .comparison-label After textarea.comparison-resizer(readonly="") pre.code(data-lang='HTML') code :highlight(lang="html")
Before
After
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/filters.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'filters' - var parent = 'experimentals' - var title = 'Filters - Experimentals - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('filters', 'Filters') p small.label.label-secondary CSS ONLY include ../_layout/_ad-g.pug p Filters are CSS only content filters. .docs-demo.columns .column.col-12 .filter input#tag-0.filter-tag(type="radio" name="filter-radio" hidden="" checked="") input#tag-1.filter-tag(type="radio" name="filter-radio" hidden="") input#tag-2.filter-tag(type="radio" name="filter-radio" hidden="") input#tag-3.filter-tag(type="radio" name="filter-radio" hidden="") input#tag-4.filter-tag(type="radio" name="filter-radio" hidden="") .filter-nav label.chip(for="tag-0") All label.chip(for="tag-1") Action label.chip(for="tag-2") Roleplaying label.chip(for="tag-3") Shooter label.chip(for="tag-4") Sports .filter-body.columns .column.col-4.filter-item(data-tag="tag-2") .card .card-header .card-title.text-bold Fallout 4 .card-subtitle.text-gray Roleplaying .column.col-4.filter-item(data-tag="tag-3") .card .card-header .card-title.text-bold Halo 5 .card-subtitle.text-gray Shooter .column.col-4.filter-item(data-tag="tag-1") .card .card-header .card-title.text-bold Quantum Break .card-subtitle.text-gray Action .column.col-4.filter-item(data-tag="tag-4") .card .card-header .card-title.text-bold Forza Horizon 3 .card-subtitle.text-gray Sports .column.col-4.filter-item(data-tag="tag-2") .card .card-header .card-title.text-bold Final Fantasy XV .card-subtitle.text-gray Roleplaying .column.col-4.filter-item(data-tag="tag-4") .card .card-header .card-title.text-bold NBA 2K17 .card-subtitle.text-gray Sports .column.col-4.filter-item(data-tag="tag-3") .card .card-header .card-title.text-bold Battlefield 1 .card-subtitle.text-gray Shooter .column.col-4.filter-item(data-tag="tag-1") .card .card-header .card-title.text-bold GTA V .card-subtitle.text-gray Action .column.col-4.filter-item(data-tag="tag-4") .card .card-header .card-title.text-bold FIFA 17 .card-subtitle.text-gray Sports .column.col-4.filter-item(data-tag="tag-3") .card .card-header .card-title.text-bold Overwatch .card-subtitle.text-gray Shooter .column.col-4.filter-item(data-tag="tag-3") .card .card-header .card-title.text-bold Titanfall 2 .card-subtitle.text-gray Shooter .column.col-4.filter-item(data-tag="tag-3") .card .card-header .card-title.text-bold Gears of Wars 4 .card-subtitle.text-gray Shooter p | Filters use #[code tag-1] to #[code tag-8] to flag different tags. | #[code tag-0] is reserved for clearing filter (or showing all). | You can overwrite #[code $filter-number] in #[code _filters.scss] to have more filters. pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/meters.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'meters' - var parent = 'experimentals' - var title = 'Meters - Experimentals - Spectre.css CSS Framework' - var description = 'Meters represent the value within the known range. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('meters', 'Meters') include ../_layout/_ad-g.pug p Meters represent the value within the known range. .docs-demo.columns .column.col-3.col-xs-12 meter.meter(value="20" min="0" max="100") .column.col-3.col-xs-12 meter.meter(value="60" min="0" low="30" optimum="60" high="80" max="100") .column.col-3.col-xs-12 meter.meter(value="85" min="0" low="30" high="80" max="100") .column.col-3.col-xs-12 meter.meter(value="20" min="0" low="30" optimum="90" high="80" max="100") pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/off-canvas.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'off-canvas' - var parent = 'experimentals' - var title = 'Off-canvas - Experimentals - Spectre.css CSS Framework' - var description = 'The Off-canvas is a navigation layout that the sidebar can slide in and out of the viewport. It is built in pure CSS. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('off-canvas', 'Off-canvas') p small.label.label-secondary CSS ONLY include ../_layout/_ad-g.pug p | The Off-canvas is a navigation layout that the sidebar can slide in and out of the viewport. It is built in pure CSS. p | By default, the off-canvas menu is collapsed whenever the window width is. | But you can add the #[code off-canvas-sidebar-show] class to the #[code off-canvas] to make the sidebar expanded when the window width is larger than or equal to #[strong 960px]. .docs-demo.columns .column .off-canvas.off-canvas-sidebar-show a.off-canvas-toggle.btn.btn-primary.btn-action(href="#sidebar-demo") i.icon.icon-menu #sidebar-demo.off-canvas-sidebar.flex-centered span Sidebar a.off-canvas-overlay(href="#close") .off-canvas-content .content h4 Lorem ipsum p | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent risus leo, dictum in vehicula sit amet, feugiat tempus tellus. Duis quis sodales risus. Etiam euismod ornare consequat. p | Climb leg rub face on everything give attitude nap all day for under the bed. Chase mice attack feet but rub face on everything hopped up on goofballs. p | You can open the sidebar by adding the class #[code active] to #[code off-canvas-sidebar]. | And remove the #[code active] to close it. pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/parallax.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'parallax' - var parent = 'experimentals' - var title = 'Parallax - Experimentals - Spectre.css CSS Framework' - var description = 'The Parallax component acts like Apple TV/tvOS hover parallax effect. It is built in pure CSS. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('parallax', 'Parallax') p small.label.label-secondary CSS ONLY include ../_layout/_ad-g.pug p | The Parallax acts like Apple TV/tvOS hover parallax effect. It is built in pure CSS. .docs-demo.columns .column.col-sm-12.col-8.col-mx-auto .parallax .parallax-top-left(tabindex="1") .parallax-top-right(tabindex="2") .parallax-bottom-left(tabindex="3") .parallax-bottom-right(tabindex="4") .parallax-content .parallax-front h2 tvOS parallax demo .parallax-back img.img-responsive.rounded(src="../img/osx-yosemite-2.jpg" alt="macOS Yosemite Wallpaper") pre.code(data-lang='HTML') code :highlight(lang="html")

tvOS parallax demo

include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/progress.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'progress' - var parent = 'experimentals' - var title = 'Progress - Experimentals - Spectre.css CSS Framework' - var description = 'The Progress indicates the progress completion of a task. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('progress', 'Progress') include ../_layout/_ad-g.pug p The Progress indicates the progress completion of a task. .docs-demo.columns .column.col-3.col-xs-12 progress.progress(value="75" max="100") .column.col-3.col-xs-12 progress.progress(value="50" max="100") .column.col-3.col-xs-12 progress.progress(value="25" max="100") .column.col-3.col-xs-12 progress.progress(max="100") pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/sliders.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'sliders' - var parent = 'experimentals' - var title = 'Sliders - Experimentals - Spectre.css CSS Framework' - var description = 'The Sliders are for selecting values from ranges. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('sliders', 'Sliders') include ../_layout/_ad-g.pug p The Sliders are for selecting values from ranges. p | You can add the class #[code tooltip] to have tooltip labels. | If no #[code data-tooltip] is set, the #[code value] will be used instead. .docs-demo.columns .column.col-6.col-xs-12 input.slider.tooltip(type="range" min="0" max="100" value="50" oninput="this.setAttribute('value', this.value);") .column.col-6.col-xs-12 input.slider(type="range" min="0" max="100" value="50" disabled="") pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/timelines.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'timelines' - var parent = 'experimentals' - var title = 'Timelines - Experimentals - Spectre.css CSS Framework' - var description = 'The Timelines are ordered sequences of activities. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('timelines', 'Timelines') include ../_layout/_ad-g.pug p The Timelines are ordered sequences of activities. .docs-demo.columns .column.col-9.col-sm-12 .timeline #timeline-example-1.timeline-item .timeline-left a.timeline-icon.tooltip(href="#timeline-example-1" data-tooltip="March 2016") .timeline-content .tile .tile-content p.tile-subtitle March 2016 p.tile-title Initial commit #timeline-example-2.timeline-item .timeline-left a.timeline-icon.icon-lg.tooltip(href="#timeline-example-2" data-tooltip="February 2017") i.icon.icon-check .timeline-content .tile .tile-content p.tile-subtitle February 2017 p.tile-title New Documents experience p.tile-title a(href="components.html#bars") Bars | : represent the progress of a task p.tile-title a(href="components.html#steps") Steps | : progress indicators of a sequence of task steps p.tile-title a(href="components.html#tiles") Tiles | : repeatable or embeddable information blocks .tile-action button.btn View #timeline-example-3.timeline-item .timeline-left a.timeline-icon.icon-lg.tooltip(href="#timeline-example-3" data-tooltip="March 2017") i.icon.icon-check .timeline-content .tile .tile-content p.tile-subtitle March 2017 p.tile-title a(href="elements.html#icons") Icons | : single-element, responsive and pure CSS icons p.tile-title a(href="components.html#popovers") Popovers | : small overlay content containers p.tile-title a(href="experimentals.html#calendars") Calendars | : date or date range picker and events display p.tile-title a(href="experimentals.html#carousels") Carousels | : slideshows for cycling images .tile-action button.btn View pre.code(data-lang='HTML') code :highlight(lang="html")
...
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals/viewer-360.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'viewer-360' - var parent = 'experimentals' - var title = '360-Degree Viewer - Experimentals - Spectre.css CSS Framework' - var description = '360-Degree Viewer is an interactive product photo viewer. It is built in pure CSS. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('viewer-360', '360-Degree Viewer') p small.label.label-secondary CSS ONLY include ../_layout/_ad-g.pug p | 360-Degree Viewer is an interactive product photo viewer. It is built in pure CSS. .docs-demo.columns .column.col-12 .viewer-360 input.viewer-slider.slider(type="range" min="1" max="36" value="1" oninput="this.setAttribute('value', this.value);") figure.viewer-image(style="background-image:url('https://i.loli.net/2018/11/25/5bfa45b4b3f27.jpg');padding-bottom:37.5%;width:100%;") p.text-center | Photo credits: a(href="https://microsoft.msafflnk.net/c/1272791/433017/7593?u=https://www.microsoft.com/en-us/p/surface-pro-6/8zcnc665slq5" target="_blank") Microsoft Surface Pro 6 .docs-demo.columns .column.col-12 .viewer-360 input.viewer-slider.slider(type="range" min="1" max="36" value="1" oninput="this.setAttribute('value', this.value);") figure.viewer-image(style="background-image:url('https://i.loli.net/2018/11/26/5bfc0ab4a5a4f.jpg');padding-bottom:37.5%;width:100%;") p.text-center | Photo credits: a(href="https://microsoft.msafflnk.net/c/1272791/433017/7593?u=https://www.microsoft.com/en-us/p/surface-studio-2/8SBJXM0M58T4" target="_blank") Microsoft Xbox One X p | You will need to use your own product image sprite (all angle of photos in one image) and set the attribute #[code max] to the image numbers to use this component. pre.code(data-lang='HTML') code :highlight(lang="html")
p | The default image numbers in CSS are #[code 36]. You can copy the mixin and add more numbers in #[code _viewer-360.scss] and re-compiling the CSS. pre.code(data-lang='SCSS') code :highlight(lang="scss") @include viewer-slider-size(36); @include viewer-slider-size(30); include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/experimentals.pug ================================================ extends _layout/_docs-layout.pug block variables - var slug = 'experimentals' - var parent = 'experimentals' - var title = 'Experimentals - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('experimentals', 'Experimentals') include _layout/_ad-g.pug p | The Experimentals include experimental elements and features, mostly are not yet ready for wide use. | These elements and components are limited inside #[code spectre-exp.scss] before browsers fully support them. | Sometimes, there are some specific browsers targeted components. .docs-demo.columns .column.col-6.col-xs-12 .card .card-header .card-title.h5 360-Degree Viewer .card-body | Interactive 360-degree product photo viewer .card-footer a.btn.btn-primary(href="experimentals/autocomplete.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Autocomplete .card-body | Form component provides suggestions while you type .card-footer a.btn.btn-primary(href="experimentals/autocomplete.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Calendars .card-body | Date or date range picker and events display based on Flexbox .card-footer a.btn.btn-primary(href="experimentals/calendars.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Carousels .card-body | Pure CSS slideshows for cycling images .card-footer a.btn.btn-primary(href="experimentals/carousels.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Comparison sliders .card-body | Pure CSS sliders for comparing two images .card-footer a.btn.btn-primary(href="experimentals/comparison.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Filters .card-body | CSS only content filters .card-footer a.btn.btn-primary(href="experimentals/filters.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Meters .card-body | Representing the value within the known range .card-footer a.btn.btn-primary(href="experimentals/meters.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Off-canvas .card-body | Navigation layout that sidebars can slide in and out of the viewport .card-footer a.btn.btn-primary(href="experimentals/off-canvas.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Parallax .card-body | Pure CSS Apple TV/tvOS hover parallax effect .card-footer a.btn.btn-primary(href="experimentals/parallax.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Progress .card-body | Indicating the progress completion of a task .card-footer a.btn.btn-primary(href="experimentals/progress.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Sliders .card-body | Selecting values from ranges .card-footer a.btn.btn-primary(href="experimentals/sliders.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Timelines .card-body | Ordered sequences of activities .card-footer a.btn.btn-primary(href="experimentals/timelines.html") View include _layout/_ad-c.pug include _layout/_footer.pug ================================================ FILE: docs/src/getting-started/browsers.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'browsers' - var parent = 'getting-started' - var title = 'Browsers - Getting started - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('browsers', 'Browser support') include ../_layout/_ad-g.pug p | Spectre uses a(href='https://github.com/postcss/autoprefixer', target='_blank') Autoprefixer | to make most styles compatible with earlier browsers and a(href='https://necolas.github.io/normalize.css/', target='_blank') Normalize.css | for CSS resets. Spectre is designed for modern browsers. For best compatibility, these browsers are recommended: ul li | Chrome small.label.label-success LAST 4 li | Microsoft Edge small.label.label-success LAST 4 li | Firefox small.label.label-success.text-uppercase Extended Support Release li | Safari small.label.label-success LAST 4 li | Opera small.label.label-success LAST 4 li Internet Explorer 10+ p | Spectre supports Internet Explorer 10+, but some HTML5 and CSS3 features are not perfectly supported by Internet Explorer. include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/getting-started/custom.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'custom' - var parent = 'getting-started' - var title = 'Custom - Getting started - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('custom', 'Custom version') include ../_layout/_ad-g.pug p | You can customize your version of Spectre.css by editing Sass files in code /src | directory or removing unneeded components from code .scss | source files. p a.btn.btn-primary(href='https://github.com/picturepan2/spectre/', target='_blank') Sass Source Code p | If you are looking for Less version of Spectre.css, please switch to code Less | branch. p a.btn(href='https://github.com/picturepan2/spectre/tree/less', target='_blank') Less Branch +docs-subheading('compiling', 'Compiling CSS') p | Spectre uses a(href='http://gulpjs.com/', target='_blank') Gulp | for compiling CSS. Firstly you need to a(href='https://www.npmjs.com/get-npm', target='_blank') install NPM | , which is used to manage Gulp and other dependencies. p Then, you can build the CSS file from the command line: ol li Navigate to the root directory of Spectre. li | Run code npm install | . NPM will install all dev dependencies as listed in package.json. li | When completed, run code gulp build | task to compile Sass to CSS and minify files. li | You can find compiled CSS files in code /dist | directory. p All available Gulp tasks: ul li code gulp build | - compile Sass to CSS and minify files (default) li code gulp docs | - compile Docs related files li code gulp watch | - watch file changes and re-compile CSS files +docs-subheading('importing', 'Importing Sass') p | It is recommended to customize Spectre by importing Sass source files to your projects. In this way, you can keep Spectre up to date without conflicts, since Spectre code and your custom code are separate. ul li | First, create your own project and install Spectre via a(href='#installation') NPM or other package managers | . li | Then create your code project-name.scss | file in the root folder. You can use code project-name.scss | to define your variables. li Compile the Sass file to CSS to get the custom version of Spectre. //- importing pre.code(data-lang='Sass') code :highlight(lang="scss") // Example of project-name.scss // Define variables to override default ones $primary-color: #2e5bec; $dark-color: #3e396b; // Import full Spectre source code @import "node_modules/spectre.css/src/spectre"; p | Alternatively, you can create custom code _variables.scss | and import it to code project-name.scss | . //- custom variables pre.code(data-lang='Sass') code :highlight(lang="scss") // Example of project-name.scss @import "variables"; // Import only the needed components @import "node_modules/spectre.css/src/buttons"; @import "node_modules/spectre.css/src/forms"; +docs-subheading('folders', 'Folder structure') //- folder structure pre.code code :highlight spectre/ ├── dist/ // Build folder │ ├── spectre-exp.css │ ├── spectre-exp.min.css │ ├── spectre-icons.css │ ├── spectre-icons.min.css │ ├── spectre.css │ └── spectre.min.css │ ├── docs/ │ ├── dist/ // Pre-built CSS folder │ │ ├── spectre-exp.css │ │ ├── spectre-exp.min.css │ │ ├── spectre-icons.css │ │ ├── spectre-icons.min.css │ │ ├── spectre.css │ │ └── spectre.min.css | ├── css/ // Docs CSS files │ │ └── docs.css | ├── src/ │ │ ├── scss // Docs Sass files │ │ │ └── docs.scss │ │ ├── index.pug // Docs Pug files │ │ └── ... │ ├── examples/ // Example tempalte │ │ └── starter.html │ ├── ../ │ ├── index.html │ └── ... │ ├── src/ // Source Sass files │ ├── spectre.scss │ ├── spectre-icons.scss │ ├── spectre-exp.scss │ ├── _mixins.scss │ ├── _variables.scss │ └── ... │ ├── gulpfile.js ├── package.json └── ... +docs-subheading('variables', 'Variables') p | Spectre.css is designed with consistent design language. You can use your own variables to create your new or match existing design. All variables in code _variables.scss | include code !default | flag. You can redefine the variables to override the values. +docs-subheading('variables-colors', 'Variables - Colors') .columns .column.col-2.col-md-6 .docs-color(style='background:#5755d9;color:#fff;') .color-title #5755d9 .color-subtitle Primary .column.col-2.col-md-6 .docs-color(style='background:#f1f1fc;color:#5755d9;') .color-title #f1f1fc .color-subtitle Secondary .columns .column.col-2.col-md-6 .docs-color(style='background:#32b643;color:#fff;') .color-title #32b643 .color-subtitle Success .column.col-2.col-md-6 .docs-color(style='background:#ffb700;color:#fff;') .color-title #ffb700 .color-subtitle Warning .column.col-2.col-md-6 .docs-color(style='background:#e85600;color:#fff;') .color-title #e85600 .color-subtitle Error .columns .column.col-2.col-md-6 .docs-color(style='background:#303742;color:#fff;') .color-title #303742 .color-subtitle Dark .column.col-2.col-md-6 .docs-color(style='background:#66758c;color:#fff;') .color-title #66758c .color-subtitle Gray dark .column.col-2.col-md-6 .docs-color(style='background:#bcc3ce;color:#fff;') .color-title #bcc3ce .color-subtitle Gray .column.col-2.col-md-6 .docs-color(style='background:#f7f8f9;color:#66758c;') .color-title #f7f8f9 .color-subtitle Gray light .column.col-2.col-md-6 .docs-color(style='background:#fff;color:#bcc3ce;') .color-title #fff .color-subtitle Light +docs-subheading('variables-buttons', 'Variables - Button mixins') p | There are 2 button variant mixins in code _mixins.scss | to generate different color variants. ul li | @mixin button-variant( code $color | : $primary-color); li | @mixin button-outline-variant( code $color | : $primary-color); //- button mixins pre.code(data-lang='Sass') code :highlight(lang="scss") .btn-success { @include button-variant($success-color); } .btn-outline-success { @include button-outline-variant($success-color); } +docs-subheading('variables-sizes', 'Variables - Sizes') p | The default REM (root em) size in Spectre.css is code 20px | . p | Please note in the Chinese/Japanese/Korean version, Chrome uses 12px as default minimum font size. That is why Spectre sets rem default html font size to code 20px | , which is relatively easy to calculate. p | Spectre uses code 4px | as the unit size. Sizes of components are based on the unit size. +docs-subheading('variables-custom-prefix', 'Variables - Custom prefix') p | There is also a way to add custom prefix to all CSS classes. You can use a(href='https://www.npmjs.com/package/gulp-css-prefix', target='_blank') gulp-css-prefix | plugin and add a new Gulp task to enable it. //- custom prefix pre.code(data-lang='Bash') code :highlight(lang="Bash") npm install gulp-css-prefix p | To add code spectre- | to all classes, you can add the Gulp task to code gulpfile.js | file. //- custom prefix pre.code code :highlight(lang="JavaScript") var cssPrefix = require('gulp-css-prefix'); function prefix() { return gulp .src('./dist/*.css') .pipe(cssPrefix('spectre-')) .pipe(gulp.dest('./dist')); } exports.prefix = prefix; p | After you compile your version of Spectre in the /dist, run code gulp prefix | in the directory of Spectre. include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/getting-started/installation.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'installation' - var parent = 'getting-started' - var title = 'Installation - Getting started - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('installation', 'Installation') include ../_layout/_ad-g.pug p | There are 5 ways to get started with Spectre CSS framework in your projects. You can either install manually, from CDN or use package managers. +docs-subheading('install-manually', 'Install manually') p | Download the compiled and minified a(href='https://github.com/picturepan2/spectre/releases', target='_blank') Spectre CSS file | (core ~10KB min+gzip): p a.btn.btn-primary(href='https://github.com/picturepan2/spectre/releases', target='_blank') Download Spectre.css p | Include code spectre.css | located in strong /dist | in your website or Web app . Also, you can add code spectre-icons.css | and code spectre-exp.css | accordingly. //- install manually pre.code(data-lang='HTML') code :highlight(lang="html") +docs-subheading('install-cdn', 'Install from CDN') p | Alternatively, you can use the a(href='https://unpkg.com/', target='_blank') unpkg | or a(href='https://cdnjs.com/libraries/spectre.css', target='_blank') cdnjs | CDN to load compiled Spectre.css. //- install from CDN pre.code(data-lang='HTML') code :highlight(lang="html") +docs-subheading('install-npm', 'Install with NPM') //- install with npm pre.code.c-select-all(data-lang='Bash') code :highlight(lang="Bash") npm install spectre.css --save +docs-subheading('install-yarn', 'Install with Yarn') //- install with yarn pre.code.c-select-all(data-lang='Bash') code :highlight(lang="bash") yarn add spectre.css +docs-subheading('install-bower', 'Install from Bower') //- install with bower pre.code.c-select-all(data-lang='Bash') code :highlight(lang="bash") bower install spectre.css --save include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/getting-started/whatsnew.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'whatsnew' - var parent = 'getting-started' - var title = 'What\'s New - Getting started - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('whatsnew', 'What\'s new') include ../_layout/_ad-g.pug include:markdown-it ../../../CHANGELOG.md p a.btn.btn-primary(href='https://github.com/picturepan2/spectre/releases', target='_blank') Releases include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/getting-started.pug ================================================ extends _layout/_docs-layout.pug block variables - var slug = 'getting-started' - var parent = 'getting-started' - var title = 'Getting started - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('getting-started', 'Getting started') include _layout/_ad-g.pug p strong Spectre.css | is a lightweight, responsive and modern CSS framework for faster and extensible development. p | Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language. .docs-demo.columns .column.col-6.col-xs-12 .card .card-header .card-title.h5 Installation .card-body | How to install and use Spectre.css .card-footer a.btn.btn-primary(href="getting-started/installation.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Custom version .card-body | Customize your version of Spectre.css .card-footer a.btn.btn-primary(href="getting-started/custom.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Browser support .card-body | Browser compatibility and support .card-footer a.btn.btn-primary(href="getting-started/browsers.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 What's new .card-body | Changelog and release notes .card-footer a.btn.btn-primary(href="getting-started/whatsnew.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Accessibility .card-body.text-gray | Coming soon include _layout/_ad-c.pug include _layout/_footer.pug ================================================ FILE: docs/src/index.pug ================================================ extends _layout/_layout.pug block variables - var slug = 'index' - var parent = 'index' - var title = 'Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block content .section.section-hero.bg-gray #overview.grid-hero.container.grid-lg.text-center .docs-brand a.docs-logo(href='index.html') img(src='img/spectre-logo.svg' alt='Spectre.css CSS Framework') h2 SPECTRE h1 SPECTRE.CSS h2 | A #[u Lightweight], #[u Responsive] and #[u Modern] CSS Framework p a.btn.btn-primary.btn-lg.mr-2(href='getting-started.html') Docs a.btn.btn-primary.btn-lg(href='https://github.com/picturepan2/spectre' target='_blank') GitHub p.text-gray | Latest version: span.version .columns .column.col-4.col-xs-12 .card.text-center .card-header span.card-title Lightweight .card-body | Lightweight (~10KB gzipped) starting point for your projects .column.col-4.col-xs-12 .card.text-center .card-header span.card-title Responsive .card-body | Flexbox-based, responsive and mobile-friendly layout .column.col-4.col-xs-12 .card.text-center .card-header span.card-title Modern .card-body | Elegantly designed and developed elements and components .section.section-ads.bg-gray include _layout/_ad-g.pug .section.section-features.bg-primary.text-light.text-center .container.grid-lg h2 Introduction .columns .column.col-10.col-sm-12.col-mx-auto.text-left p.text-secondary strong Spectre.css | is a lightweight, responsive and modern CSS framework for faster and extensible development. p.text-secondary | Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language. .column.col-10.col-sm-12.col-mx-auto a.btn.btn-lg(href='getting-started/installation.html') Install Spectre.css .section.section-updates.bg-gray .container.grid-lg .columns .column.col-4.col-xs-12 .card .card-header .card-title.h6 Spectre Twitter .card-body | For the latest announcements and updates, follow on Twitter: a(href='https://twitter.com/spectrecss' target='_blank') @spectrecss | . .card-footer a.btn.btn-primary(href='https://twitter.com/spectrecss' target='_blank') Follow .column.col-4.col-xs-12 .card .card-header .card-title.h6 PayPal Donate .card-body | Spectre.css is completely free to use. If you enjoy it, please consider donating for the further development. .card-footer a.btn.btn-primary(href='https://www.paypal.me/picturepan2' target='_blank') Donate .column.col-4.col-xs-12 .card .card-header .card-title.h6 Sponsor via Patreon .card-body | Your name or company logo will be put on Spectre Docs homepage. .card-footer a.btn.btn-primary(href='https://www.patreon.com/spectrecss' target='_blank') Sponsor .section.section-ads.bg-gray include _layout/_ad-c.pug footer.section.section-footer include _layout/_footer.pug ================================================ FILE: docs/src/layout/grid.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'grid' - var parent = 'layout' - var title = 'Flexbox grid - Layout - Spectre.css CSS Framework' - var description = 'Layout includes flexbox based responsive grid system with 12 columns. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('grid', 'Flexbox grid') include ../_layout/_ad-g.pug p | Layout includes flexbox based responsive grid system with 12 columns. .docs-demo.columns .column .bg-primary.text-secondary.docs-block .column .bg-secondary.text-primary.docs-block .column .bg-primary.text-secondary.docs-block .column .bg-secondary.text-primar.docs-block .column .bg-primary.text-secondary.docs-block .column .bg-secondary.text-primar.docs-block .column .bg-primary.text-secondary.docs-block .column .bg-secondary.text-primar.docs-block .column .bg-primary.text-secondary.docs-block .column .bg-secondary.text-primar.docs-block .column .bg-primary.text-secondary.docs-block .column .bg-secondary.text-primar.docs-block .columns .column.col-12 .bg-gray.docs-block col-12 (100%) .columns .column.col-9 .bg-gray.docs-block col-9 (75%) .columns .column.col-6 .bg-gray.docs-block col-6 (50%) .columns .column.col-3 .bg-gray.docs-block col-3 (25%) pre.code(data-lang='HTML') code :highlight(lang="html")
col-6
col-3
col-2
col-1
p | Add the #[code columns] class to a container with the #[code container] class. | And add any element you want with the #[code column] class inside the container. These columns will take up the space equally. | You can specify the width of each column by adding class #[code col-<1-12>]. +docs-subheading('grid-gapless', 'Gapless grid') p | And you can add the #[code col-gapless] class to the #[code columns] to have gapless columns. .docs-demo.columns.col-gapless .column.col-6 .bg-gray.docs-block col-6 (gapless) .column.col-6 .bg-secondary.text-primary.docs-block col-6 (gapless) pre.code(data-lang='HTML') code :highlight(lang="html")
col-6
col-6
p | By default, Spectre grid has multi-line flexbox enabled. You can add the #[code col-oneline] class to #[code columns] to make all its child columns positioned in the same single row. .docs-demo.columns.col-oneline .column.col-8 .bg-gray.docs-block col-8 .column.col-8 .bg-gray.docs-block col-8 pre.code(data-lang='HTML') code :highlight(lang="html")
col-8
col-8
+docs-subheading('grid-nesting', 'Grid nesting') p | To nest grids, add the new #[code columns] and #[code column] structure within an existing column. .docs-demo.columns .column.col-6 .bg-gray.docs-block col-6 .columns .column.col-6 .bg-secondary.text-primary.docs-block col-6 .column.col-6 .bg-secondary.text-primary.docs-block col-6 .column.col-6 .bg-gray.docs-block col-6 pre.code(data-lang='HTML') code :highlight(lang="html")
col-6
col-6
col-6
col-6
+docs-subheading('grid-offset', 'Column offset') p | The Flexbox grid provides margin auto utilities to set offset. | There are #[code col-mx-auto], #[code col-ml-auto] and #[code col-mr-auto] to set margins between columns without using empty columns. .columns.text-center .column.col-2 .bg-gray.docs-block col-2 .column.col-4.col-mx-auto .bg-secondary.text-primary.docs-block col-4 col-mx-auto .columns.text-center .column.col-2 .bg-gray.docs-block col-2 .column.col-4.col-ml-auto .bg-secondary.text-primary.docs-block col-4 col-ml-auto .columns.text-center .column.col-4.col-ml-auto .bg-secondary.text-primary.docs-block col-4 col-ml-auto .column.col-2 .bg-gray.docs-block col-2 .columns.text-center .column.col-4.col-mx-auto .bg-secondary.text-primary.docs-block col-4 col-mx-auto .column.col-2 .bg-gray.docs-block col-2 .columns.text-center .column.col-4.col-mr-auto .bg-secondary.text-primary.docs-block col-4 col-mr-auto .column.col-2 .bg-gray.docs-block col-2 .columns.text-center .column.col-4.col-mx-auto .bg-secondary.text-primary.docs-block col-4 col-mx-auto pre.code(data-lang='HTML') code :highlight(lang="html")
col-4 col-mr-auto
col-2
+docs-subheading('column-auto', 'Auto width column') p | You can add the #[code col-auto] class to the #[code column] to have auto width columns. | There are #[code col-xl-auto], #[code col-lg-auto], #[code col-md-auto], #[code col-sm-auto] and #[code col-xs-auto] to set auto width in different viewport sizes. .columns .column.col-auto .bg-secondary.text-primary.docs-block col-auto .column .bg-gray.docs-block col .columns .column.col-lg-auto.col-6 .bg-secondary.text-primary.docs-block col-lg-auto .column .bg-gray.docs-block col pre.code(data-lang='HTML') code :highlight(lang="html")
col-auto
col
col-lg-auto
col
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/layout/hero.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'hero' - var parent = 'layout' - var title = 'Hero - Layout - Spectre.css CSS Framework' - var description = 'The Hero container shows key featured content or information. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('hero', 'Hero') include ../_layout/_ad-g.pug p | The Hero container shows key featured content or information. .docs-demo.columns .column .hero.bg-gray .hero-body h1 Hero title p This is a hero example pre.code(data-lang='HTML') code :highlight(lang="html")

Hero title

This is a hero example

p | Use code hero-sm | and code hero-lg | to the hero container for smaller and larger padding. .docs-demo.columns .column .hero.hero-sm.bg-dark .hero-body h1 Hero title p This is a hero example .docs-demo.columns .column .hero.hero-lg.bg-primary .hero-body h1 Hero title p This is a hero example include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/layout/navbar.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'navbar' - var parent = 'layout' - var title = 'Navbar - Layout - Spectre.css CSS Framework' - var description = 'Navbar is a layout container that appears in the header of apps and websites. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('navbar', 'Navbar') include ../_layout/_ad-g.pug p Navbar is a layout container that appears in the header of apps and websites. .docs-demo.columns .column .navbar .navbar-section a.navbar-brand.text-bold.mr-2(href="#navbar") SPECTRE.CSS a.btn.btn-link(href="#navbar") Docs a.btn.btn-link(href="https://github.com/picturepan2/spectre") GitHub .navbar-section .input-group.input-inline input.form-input(type="text" placeholder="search") button.btn.btn-primary.input-group-btn Search p | The navbar component can include logo brand, nav links and buttons, search box or any combination of those elements. | Each section with the #[code navbar-section] class will be evenly distributed in the container. pre.code(data-lang='HTML') code :highlight(lang="html") p | You can use #[code navbar-center] class to have a centered section. .docs-demo.columns .column.col-12 .navbar .navbar-section a.btn.btn-link(href="#navbar") Docs a.btn.btn-link(href="#navbar") Examples .navbar-center img(src="../img/spectre-logo.svg" alt="Spectre.css") .navbar-section a.btn.btn-link(href="https://twitter.com/spectrecss") Twitter a.btn.btn-link(href="https://github.com/picturepan2/spectre") GitHub pre.code(data-lang='HTML') code :highlight(lang="html") include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/layout/responsive.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'responsive' - var parent = 'layout' - var title = 'Responsive - Layout - Spectre.css CSS Framework' - var description = 'Responsive layout grid system and responsive visibility utilities. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('responsive', 'Responsive') include ../_layout/_ad-g.pug p Spectre provides a neat responsive layout grid system and responsive visibility utilities. .docs-demo.columns .column.col-10.col-lg-8.col-md-6.col-sm-4 .bg-gray.docs-block .text-primary col-10 .text-dark.hide-lg col-lg-8 .text-primary.show-lg col-lg-8 .text-dark.hide-md col-md-6 .text-primary.show-md col-md-6 .text-dark.hide-sm col-sm-4 .text-primary.show-sm col-sm-4 .column.col-2.col-lg-4.col-md-6.col-sm-8 .bg-gray.docs-block .text-primary col-2 .text-dark.hide-lg col-lg-4 .text-primary.show-lg col-lg-4 .text-dark.hide-md col-md-6 .text-primary.show-md col-md-6 .text-dark.hide-sm col-sm-8 .text-primary.show-sm col-sm-8 p | There are #[code col-xs-<1-12>], #[code col-sm-<1-12>], #[code col-md-<1-12>], #[code col-lg-<1-12>] and #[code col-xl-<1-12>] available for flexible grid across mobile, tablet and desktop viewport usage. ul li | #[code col-xs-<1-12>] apply to window width smaller than or equal to #[strong 480px]. li | #[code col-sm-<1-12>] apply to window width smaller than or equal to #[strong 600px]. li | #[code col-md-<1-12>] apply to window width smaller than or equal to #[strong 840px]. li | #[code col-lg-<1-12>] apply to window width smaller than or equal to #[strong 960px]. li | #[code col-xl-<1-12>] apply to window width smaller than or equal to #[strong 1280px]. li | #[code col-<1-12>] apply to all window width, including the width wider than #[strong 1280px]. pre.code(data-lang='HTML') code :highlight(lang="html")
col-xs-6
col-xs-3
col-xs-3
+docs-subheading('responsive-container', 'Responsive container') p | The responsive layout also provides fixed-width containers. | Use #[code grid-xs](480px), #[code grid-sm](600px), #[code grid-md](840px), #[code grid-lg](960px) or #[code grid-xl](1280px) to the container for a fixed-width container with the specific max-width. pre.code(data-lang='HTML') code :highlight(lang="html")
...
+docs-subheading('responsive-visibility', 'Responsive visibility') p The responsive visibility utilities help show and hide elements on specific viewport sizes. .docs-demo.columns .column.col-12 table.docs-table.table.table-striped.text-center thead tr th th size-xs th size-sm th size-md th size-lg th size-xl tbody tr td.text-left hide-xs td .bg-secondary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot tr td.text-left hide-sm td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot tr td.text-left hide-md td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot tr td.text-left hide-lg td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-primary.docs-dot tr td.text-left hide-xl td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot p | For hiding elements on specific viewport sizes, there are classes #[code hide-xs], #[code hide-sm], #[code hide-md], #[code hide-lg] and #[code hide-xl] available. ul li | #[code hide-xs] hides elements when the window width is smaller than or equal to #[strong 480px]. li | #[code hide-sm] hides elements when the window width is smaller than or equal to #[strong 600px]. li | #[code hide-md] hides elements when the window width is smaller than or equal to #[strong 840px]. li | #[code hide-lg] hides elements when the window width is smaller than or equal to #[strong 960px]. li | #[code hide-xl] hides elements when the window width is smaller than or equal to #[strong 1280px]. .docs-demo.columns .column.col-12 table.docs-table.table.table-striped.text-center thead tr th th size-xs th size-sm th size-md th size-lg th size-xl tbody tr td.text-left show-xs td .bg-primary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot tr td.text-left show-sm td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot tr td.text-left show-md td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-secondary.docs-dot td .bg-secondary.docs-dot tr td.text-left show-lg td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-secondary.docs-dot tr td.text-left show-xl td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot td .bg-primary.docs-dot p | For showing elements on specific viewport sizes, there are classes #[code show-xs], #[code show-sm], #[code show-md], #[code show-lg] and #[code show-xl] available. ul li | #[code show-xs] shows elements when the window width is smaller than or equal to #[strong 480px]. li | #[code show-sm] shows elements when the window width is smaller than or equal to #[strong 600px]. li | #[code show-md] shows elements when the window width is smaller than or equal to #[strong 840px]. li | #[code show-lg] shows elements when the window width is smaller than or equal to #[strong 960px]. li | #[code show-xl] shows elements when the window width is smaller than or equal to #[strong 1280px]. +docs-subheading('responsive-resizer', 'Responsive Resizer') p | Spectre also has a responsive web test tool Responsive Resizer. | You can clone the a(href="https://github.com/picturepan2/responsive-resizer" target="_blank") GitHub Repo | to use it locally or use it online. p a.btn.btn-primary(href="https://picturepan2.github.io/responsive-resizer/" target="_blank") Responsive Resizer include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/layout.pug ================================================ extends _layout/_docs-layout.pug block variables - var slug = 'layout' - var parent = 'layout' - var title = 'Layout - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('layout', 'Layout') include _layout/_ad-g.pug p strong Spectre.css | is a lightweight, responsive and modern CSS framework for faster and extensible development. p | Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language. .docs-demo.columns .column.col-6.col-xs-12 .card .card-header .card-title.h5 Flexbox grid .card-body | Flexbox based responsive grid system with 12 columns .card-footer a.btn.btn-primary(href="layout/grid.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Responsive .card-body | Responsive layout grid system and responsive visibility utilities .card-footer a.btn.btn-primary(href="layout/responsive.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Hero .card-body | Container for key featured content or information .card-footer a.btn.btn-primary(href="layout/hero.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Navbar .card-body | Layout container that appears in the header of apps and websites .card-footer a.btn.btn-primary(href="layout/navbar.html") View include _layout/_ad-c.pug include _layout/_footer.pug ================================================ FILE: docs/src/scss/docs.scss ================================================ /*! Spectre.css Docs | MIT License | github.com/picturepan2/spectre */ // Core variables and mixins @import "../../../src/variables"; @import "../../../src/mixins"; .version::after { content: "#{$version}"; } .off-canvas { .off-canvas-toggle { font-size: 1rem; left: 1.5rem; position: fixed; top: 1rem; } .off-canvas-sidebar { width: 12rem; } .off-canvas-content { padding: 0; } } .docs-container { min-height: 100vh; } .docs-navbar { height: 3.8rem; position: fixed; right: 0; top: 0; z-index: $zindex-1; .btns { position: absolute; right: 1.5rem; top: 1rem; width: 14rem; } .algolia-autocomplete { flex: 1 1 auto; } } .docs-sidebar { .docs-nav { bottom: 1.5rem; overflow-y: auto; padding: .5rem 1.5rem; position: fixed; top: 3.5rem; width: 12rem; -webkit-overflow-scrolling: touch; } .accordion { margin-bottom: .75rem; input { & ~ .accordion-header { color: lighten($dark-color, 10%); font-size: .65rem; font-weight: 600; text-transform: uppercase; } &:checked { & ~ .accordion-header { color: lighten($dark-color, 15%); } } } .menu { .menu-item { font-size: .7rem; padding-left: 1rem; & > a { background: transparent; color: $gray-color-dark; display: inline-block; } } } } } .docs-content { flex: 1 1 auto; padding: 0 4rem; width: calc(100vw - 12rem); & > .container { margin-left: 0; max-width: 800px; padding-bottom: 1.5rem; } .anchor { color: $primary-color-light; display: none; margin-left: .2rem; padding: 0 .2rem; &:focus, &:hover { display: inline; text-decoration: none; } } .s-title, .s-subtitle { line-height: 1.8rem; margin-bottom: 0; padding-bottom: 1rem; padding-top: 1rem; position: static; @supports (position: sticky) { position: sticky; top: 0; z-index: $zindex-1 - 1; &::before { background: $light-color; bottom: 0; content: ""; display: block; left: -10px; position: absolute; right: -10px; top: -5px; z-index: -$zindex-0; } } &:hover { .anchor { display: inline; } } & + .docs-note { margin-top: .4rem; } } .docs-demo { padding-bottom: 1rem; padding-top: 1rem; .card { box-shadow: 0 .25rem 1rem rgba($dark-color, .15); border: 0; height: 100%; } } .column { padding: $layout-spacing; } .docs-block { border-radius: $border-radius; padding: $unit-2; &.bg-gray { background: $bg-color-dark; } } .docs-shape { height: 4.8rem; line-height: 1.2rem; padding: 1.8rem 0; width: 4.8rem; } .docs-dot { border-radius: 50%; display: inline-block; height: .5rem; padding: 0; width: .5rem; } .docs-table { th, td { padding: .75rem .25rem; } } .docs-color { border-radius: $border-radius; margin: .25rem 0; padding: 5rem .5rem .5rem; .color-subtitle { font-size: $font-size-sm; opacity: .75; } } .code { .hljs-tag { color: lighten($body-font-color, 10%); } .hljs-comment { color: $gray-color; } .hljs-title, .hljs-class, .hljs-string, .hljs-number { color: $primary-color; } .hljs-name, .hljs-attribute, .hljs-variable, .hljs-keyword, .hljs-built_in { color: $code-color; } .hljs-value, .hljs-hexcolor { color: lighten($body-font-color, 10%); } } .c-select-all { user-select: all; } .panel { height: 75vh; .tile { margin: .75rem 0; } } .parallax { margin: 2rem auto; } .form-autocomplete .menu { position: static; } .example-tile-icon { align-content: space-around; align-items: center; background: $primary-color; border-radius: $border-radius; color: $light-color; display: flex; font-size: 1.2rem; height: 2rem; width: 2rem; .icon { margin: auto; } } .comparison-slider { height: auto; padding-bottom: 56.2222%; .filter-grayscale { filter: grayscale(75%); } } .off-canvas { position: relative; .off-canvas-toggle { left: $layout-spacing; position: absolute; top: $layout-spacing; z-index: $zindex-0; } } } .docs-brand { color: $primary-color; height: 2rem; left: 1.5rem; position: fixed; top: .85rem; .docs-logo { align-items: center; border-radius: $border-radius; display: inline-flex; font-size: .7rem; height: 2rem; padding: .2rem; width: auto; &:focus, &:hover { text-decoration: none; } img { display: inline-block; height: auto; width: 1.6rem; } h2 { display: inline-block; font-size: .8rem; font-weight: 700; line-height: 1.5rem; margin-bottom: 0; margin-left: .5rem; margin-right: .3rem; } } } .docs-footer { color: $gray-color; padding: .5rem; a { color: $gray-color-dark; } } .docs-ad { background: $bg-color; border-radius: $border-radius; display: block; margin: 2rem 0; padding: $layout-spacing; position: relative; ins { line-height: 1; vertical-align: middle; } .carbon-wrap { .carbon-img { display: block; } .carbon-text { color: $gray-color-dark; display: block; font-size: $font-size-sm; } } .carbon-poweredby { color: $gray-color; font-size: $font-size-sm; } } /* Spectre Homepage style */ .section-hero { padding: 1rem .5rem; .docs-brand { position: absolute; top: .85rem; h2 { color: $primary-color; } } .column { padding: $layout-spacing; } } .section-ads { padding: 1rem .5rem; } .section-updates { padding: 4.5rem .5rem 2.5rem .5rem; .card { border: 0; margin-bottom: 1rem; } } .section-features { padding: 4.5rem .5rem; .column { padding: $layout-spacing; } } .section-footer { color: $gray-color; padding: 1.8rem .75rem 1rem; position: relative; z-index: 200; a { color: $gray-color-dark; } } .grid-hero { padding-bottom: 2rem; padding-top: 6rem; h1 { color: $body-font-color; font-size: 1.6rem; font-weight: 600; margin-bottom: 1.5rem; } h2 { color: lighten($body-font-color, 5%); font-size: .9rem; font-weight: 400; line-height: 1.5rem; margin-bottom: 1.5rem; u { border-bottom: $border-width-lg solid currentColor; padding-bottom: $unit-o; text-decoration: none; } } .card { background: none; border: 0; color: lighten($body-font-color, 15%); padding: .5rem; .card-title { color: $primary-color; font-size: 1rem; font-weight: 700; margin-bottom: 0; } } } @media (max-width: 960px) { .off-canvas { .off-canvas-toggle { z-index: $zindex-3; } .off-canvas-content { width: 100%; } } .docs-sidebar { .docs-brand { margin: .85rem 1.5rem; padding: 0; position: static; } .docs-nav { margin-top: 1rem; position: static; } .menu .menu-item > a { padding: .3rem .4rem; } } .docs-navbar { backdrop-filter: blur(5px); background: rgba($bg-color, .65); left: 0; } .docs-content { min-width: auto; padding: 0 1.5rem; width: 100%; .s-title, .s-subtitle { padding-top: 5rem; position: static; &::before { content: none; } } } .section-hero { .s-brand { height: 5rem; padding: 1.5rem .5rem; text-align: center; width: 100%; .s-logo { height: auto; } img { height: 3.2rem; width: 3.2rem; } h2 { display: none; } } } } @media (max-width: 600px) { .grid-hero { h2 { font-size: .9rem; } .card { padding: 0; } } .off-canvas { .off-canvas-toggle { left: .5rem; } } .docs-navbar { .btns { right: .9rem; } } .grid-hero { .docs-brand { left: .9rem; } } .docs-sidebar { .docs-brand { margin: .85rem 1rem; } .docs-nav { padding: .5rem 1rem; } } .docs-content { padding: 0 .5rem; .docs-block { padding: $unit-2 $unit-h; } } } @media (min-width: 1366px) { .docs-ad { &.docs-ad-sidebar { bottom: 1rem; margin: 0; position: fixed; right: 1rem; width: 7.3rem; } } } // Docs search .searchbox { display: inline-block; position: relative; width: 200px; height: 32px!important; white-space: nowrap; box-sizing: border-box; visibility: visible!important; .algolia-autocomplete { display:block; width:100%; height:100%; } } .searchbox__wrapper { width: 100%; height: 100%; z-index: 999; position: relative; } .searchbox__input { display: inline-block; box-sizing: border-box; transition: box-shadow .4s ease, background .4s ease; border: 0; border-radius: 16px; box-shadow: inset 0 0 0 1px #ccc; background: #fff !important; padding: 0 26px 0 32px; width: 100%; height: 100%; vertical-align: middle; white-space: normal; font-size: 12px; appearance: none; &::-webkit-search-cancel-button, &::-webkit-search-decoration, &::-webkit-search-results-button, &::-webkit-search-results-decoration { display: none; } &:hover { box-shadow: inset 0 0 0 1px #b3b3b3; } &:active, &:focus { outline: 0; box-shadow: inset 0 0 0 1px #aaa; background: #fff; } &::placeholder { color: #aaa; } } .searchbox__submit { position: absolute; top: 0; margin: 0; border: 0; border-radius: 16px 0 0 16px; background-color: rgba(69,142,225,0); padding: 0; width: 32px; height: 100%; vertical-align: middle; text-align: center; font-size: inherit; user-select: none; right: inherit; left: 0; &:before { display: inline-block; margin-right: -4px; height: 100%; vertical-align: middle; content: ""; } &:active, &:hover { cursor: pointer; } &:focus { outline: 0; } svg { width: 14px; height: 14px; vertical-align: middle; fill: #6d7e96; } } .searchbox__reset { display: block; position: absolute; top: 8px; right: 8px; margin: 0; border: 0; background: none; cursor: pointer; padding: 0; font-size: inherit; user-select: none; fill: rgba(0,0,0,.5); &.hide { display: none; } &:focus { outline: 0; } svg { display: block; margin: 4px; width: 8px; height: 8px; } } .searchbox__input:valid ~ .searchbox__reset { display: block; animation-name: sbx-reset-in; animation-duration: .15s; } @keyframes sbx-reset-in { 0%{ transform: translate3d(-20%, 0, 0); opacity: 0; } to{ transform: none; opacity: 1; } } .algolia-autocomplete { &.algolia-autocomplete-right .ds-dropdown-menu { right: 0 !important; left: inherit !important; &:before { right: 48px; } } &.algolia-autocomplete-left .ds-dropdown-menu { left: 0 !important; right: inherit !important; &:before { left: 48px; } } .ds-dropdown-menu { top: -6px; border-radius: 4px; margin: 6px 0 0; padding: 0; text-align: left; height: auto; position: relative; background: transparent; border: none; z-index: 999; max-width: 600px; min-width: 500px; @include shadow-variant(.05rem); .ds-suggestions { position: relative; z-index: 1000; margin-top: 8px; a:hover { text-decoration: none; } } .ds-suggestion { cursor: pointer; &.ds-cursor .algolia-docsearch-suggestion { &.suggestion-layout-simple, &:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content { background-color: rgba($primary-color, .05); } } } [class^=ds-dataset-] { position: relative; background: #fff; border-radius: 4px; overflow: auto; padding: 0 8px 8px; } * { box-sizing: border-box; } } .algolia-docsearch-suggestion { display: block; position: relative; padding: 0 8px; background: #fff; color: $dark-color; overflow: hidden; } .algolia-docsearch-suggestion--highlight { color: $primary-color; background: rgba($primary-color, .1); padding: 0.1em 0.05em; } .algolia-docsearch-suggestion--category-header { .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight, .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight { padding: 0 0 1px; background: inherit; box-shadow: inset 0 -2px 0 0 rgba($primary-color, .8); color: inherit; } } .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { padding: 0 0 1px; background: inherit; box-shadow: inset 0 -2px 0 0 rgba($primary-color, .8); color: inherit; } .algolia-docsearch-suggestion--content { display: block; float: right; width: 70%; position: relative; padding: 5.33333px 0 5.33333px 10.66667px; cursor: pointer; &:before { content: ""; position: absolute; display: block; top: 0; height: 100%; width: 1px; background: $gray-color-light; left: -1px; } } .algolia-docsearch-suggestion--category-header { position: relative; border-bottom: 1px solid $gray-color-light; display: none; margin-top: 8px; padding: 4px 0; font-size: 1em; color: $dark-color; } .algolia-docsearch-suggestion--wrapper { width: 100%; float: left; padding: 8px 0 0; } .algolia-docsearch-suggestion--subcategory-column { float: left; width: 30%; text-align: right; position: relative; padding: 5.33333px 10.66667px; color: $gray-color; font-size: .9em; word-wrap: break-word; &:before { content: ""; position: absolute; display: block; top: 0; height: 100%; width: 1px; background: $gray-color-light; right: 0; } } .algolia-docsearch-suggestion--subcategory-inline { display: none; } .algolia-docsearch-suggestion--title { color: $dark-color; font-size: .9em; font-weight: 700; } .algolia-docsearch-suggestion--text { display: block; line-height: 1.2em; font-size: .85em; color: $gray-color-dark; } .algolia-docsearch-suggestion--no-results { width: 100%; padding: 8px 0; text-align: center; font-size: 1.2em; &:before { display: none; } } .algolia-docsearch-suggestion { code { padding: 1px 5px; font-size: 90%; border: none; color: #222; background-color: #ebebeb; border-radius: 3px; font-family: Menlo, Monaco, Consolas, Courier New, monospace; .algolia-docsearch-suggestion--highlight { background: none; } } &.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header, &.algolia-docsearch-suggestion__secondary { display: block; } } .suggestion-layout-simple { &.algolia-docsearch-suggestion { border-bottom: 1px solid #eee; padding: 8px; margin: 0; } .algolia-docsearch-suggestion--content { width: 100%; padding: 0; &:before { display: none; } } .algolia-docsearch-suggestion--category-header { margin: 0; padding: 0; display: block; width: 100%; border: none; } .algolia-docsearch-suggestion--category-header-lvl0 { opacity: .6; font-size: 0.85em; } .algolia-docsearch-suggestion--category-header-lvl1 { opacity: .6; font-size: 0.85em; &:before { background-image: url('data:image/svg+xml;utf8,'); content: ""; width: 10px; height: 10px; display: inline-block; } } .algolia-docsearch-suggestion--wrapper { width: 100%; float: left; margin: 0; padding: 0; } .algolia-docsearch-suggestion--duplicate-content, .algolia-docsearch-suggestion--subcategory-inline { display: none !important; } .algolia-docsearch-suggestion--title { margin: 0; color: #458ee1; font-size: .9em; font-weight: 400; &:before { content: "#"; font-weight: 700; color: #458ee1; display: inline-block; } } .algolia-docsearch-suggestion--text { margin: 4px 0 0; display: block; line-height: 1.4em; padding: 5.33333px 8px; background: #f8f8f8; font-size: .85em; opacity: 0.8; .algolia-docsearch-suggestion--highlight { color: #3f4145; font-weight: 700; box-shadow: none; } } } .algolia-docsearch-footer { width: 134px; height: 20px; z-index: 2000; margin-top: 10.66667px; float: right; font-size: 0; line-height: 0; } .algolia-docsearch-footer--logo { background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='168' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z' fill='%235468FF'/%3E%3Cpath d='M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z' fill='%235D6494'/%3E%3Cpath d='M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: 50%; background-size: 100%; overflow: hidden; text-indent: -9000px; padding: 0 !important; width: 100%; height: 100%; display: block; } } @media (min-width: 768px) { .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column { display: block; } } @media (max-width: 768px) { .algolia-autocomplete .algolia-docsearch-suggestion { .algolia-docsearch-suggestion--subcategory-column { display: inline-block; width: auto; float: left; padding: 0; color: #02060c; font-size: .9em; font-weight: 700; text-align: left; opacity: 0.5; &:before { display: none; } &:after { content: "|"; } } .algolia-docsearch-suggestion--content { display: inline-block; width: auto; text-align: left; float: left; padding: 0; &:before { display: none; } } } } ================================================ FILE: docs/src/scss/spectre-rtl.scss ================================================ /*! Spectre.css RTL | MIT License | github.com/picturepan2/spectre */ $rtl: true; // Import Spectre @import "../../../src/spectre"; @import "../../../src/spectre-exp"; ================================================ FILE: docs/src/utilities/colors.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'colors' - var parent = 'utilities' - var title = 'Color utilities - Utilities - Spectre.css CSS Framework' - var description = 'Color utilities are used for changing colors for text, link and background. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('colors', 'Color utilities') include ../_layout/_ad-g.pug p Color utilities are used for changing colors for text, link and background. +docs-subheading('colors-text', 'Text colors') .docs-demo.columns .column.col-12 p span.text-primary primary color p span.text-secondary secondary color p span.text-dark dark color p span.text-gray gray color p span.text-light.bg-dark.p-1.rounded light color p span.text-success success color p span.text-warning warning color p span.text-error error color pre.code(data-lang='HTML') code :highlight(lang="html") primary color secondary color dark color gray color light color success color warning color error color .docs-demo.columns .column.col-12 p a.text-primary.p-1(href="#colors") primary link p a.text-secondary.p-1(href="#colors") secondary link p a.text-dark.p-1(href="#colors") dark link p a.text-gray.p-1(href="#colors") gray link p a.text-light.bg-dark.p-1.rounded(href="#colors") light link p a.text-success.p-1(href="#colors") success link p a.text-warning.p-1(href="#colors") warning link p a.text-error.p-1(href="#colors") error link pre.code(data-lang='HTML') code :highlight(lang="html") primary color secondary color dark color gray color light color success color warning color error color +docs-subheading('colors-background', 'Background colors') .docs-demo.columns .column.col-12 p span.bg-primary.p-1.rounded primary bg p span.bg-secondary.text-primary.p-1.rounded secondary bg p span.bg-dark.p-1.rounded dark bg p span.bg-gray.p-1.rounded gray bg p span.bg-success.p-1.rounded success bg p span.bg-warning.p-1.rounded warning bg p span.bg-error.p-1.rounded error bg pre.code(data-lang='HTML') code :highlight(lang="html")
primary bg
secondary bg
dark bg
gray bg
success bg
warning bg
error bg
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/utilities/cursors.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'cursors' - var parent = 'utilities' - var title = 'Cursor utilities - Utilities - Spectre.css CSS Framework' - var description = 'Cursor utilities specify which mouse cursor to display when mouseover. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('cursors', 'Cursor utilities') include ../_layout/_ad-g.pug p Cursor utilities specify which mouse cursor to display when mouseover. .docs-demo.columns .column.col-4 .bg-gray.docs-block.c-hand c-hand .column.col-4 .bg-gray.docs-block.c-move c-move .column.col-4 .bg-gray.docs-block.c-zoom-in c-zoom-in .column.col-4 .bg-gray.docs-block.c-zoom-out c-zoom-out .column.col-4 .bg-gray.docs-block.c-not-allowed c-not-allowed .column.col-4 .bg-gray.docs-block.c-auto c-auto pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/utilities/display.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'display' - var parent = 'utilities' - var title = 'Display utilities - Utilities - Spectre.css CSS Framework' - var description = 'Display utilities are used for display and hidden things. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('display', 'Display utilities') include ../_layout/_ad-g.pug p Display utilities are used for display and hidden things. pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/utilities/divider.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'divider' - var parent = 'utilities' - var title = 'Divider - Utilities - Spectre.css CSS Framework' - var description = 'The Divider is used for separating elements. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('divider', 'Divider') include ../_layout/_ad-g.pug p The Divider is used for separating elements. .docs-demo.columns .column .divider .docs-demo.columns .column | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent risus leo, dictum in vehicula sit amet, feugiat tempus tellus. .divider.text-center(data-content="OR") | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent risus leo, dictum in vehicula sit amet, feugiat tempus tellus. .docs-demo.columns .column form .form-group label.form-label(for="input-example-1") Email input#input-example-1.form-input(type="text" placeholder="Email") .form-group label.form-label(for="input-example-2") Password input#input-example-2.form-input(type="password" placeholder="Password") .form-group label.form-checkbox input(type="checkbox") i.form-icon | Remember me .form-group button.btn.btn-primary Sign in .divider-vert(data-content="OR") .column form .form-group label.form-label(for="input-example-3") Email input#input-example-3.form-input(type="text" placeholder="Email") .form-group button.btn.btn-primary.btn-block Sign up button.btn.btn-link.btn-block Learn more pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/utilities/loading.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'loading' - var parent = 'utilities' - var title = 'Loading - Utilities - Spectre.css CSS Framework' - var description = 'Loading indicator is used for loading or updating. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('loading', 'Loading') include ../_layout/_ad-g.pug p | Loading indicator is used for loading or updating. | You can add the #[code loading] class to a container for loading status. .docs-demo.columns .column.col-12.text-center .loading p | Add the #[code loading-lg] class for large size. .docs-demo.columns .column.col-12.text-center .loading.loading-lg pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/utilities/position.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'position' - var parent = 'utilities' - var title = 'Position utilities - Utilities - Spectre.css CSS Framework' - var description = 'Position utilities are used for useful layout and position things, including clearfix, float, position and margin/padding utilities. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('position', 'Position utilities') include ../_layout/_ad-g.pug p | Position utilities are used for useful layout and position things, including clearfix, float, position and margin/padding utilities. pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/utilities/shapes.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'shapes' - var parent = 'utilities' - var title = 'Shape utilities - Utilities - Spectre.css CSS Framework' - var description = 'Shape utilities are used for changing element shapes. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('shapes', 'Shape utilities') include ../_layout/_ad-g.pug p Shape utilities are used for changing element shapes. .docs-demo.columns .column.col-6.text-center .bg-primary.text-light.docs-shape.s-rounded.centered | s-rounded .column.col-6.text-center .bg-primary.text-light.docs-shape.s-circle.centered | s-circle pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/utilities/text.pug ================================================ extends ../_layout/_docs-layout.pug block variables - var slug = 'text' - var parent = 'utilities' - var title = 'Text utilities - Utilities - Spectre.css CSS Framework' - var description = 'Text utilities are used for text alignment, styles and overflow things. Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development.' block docs-content +docs-heading('text', 'Text utilities') include ../_layout/_ad-g.pug p Text utilities are used for text alignment, styles and overflow things. pre.code(data-lang='HTML') code :highlight(lang="html")
include ../_layout/_ad-c.pug include ../_layout/_footer.pug ================================================ FILE: docs/src/utilities.pug ================================================ extends _layout/_docs-layout.pug block variables - var slug = 'utilities' - var parent = 'utilities' - var title = 'Utilities - Spectre.css CSS Framework' - var description = 'Spectre.css CSS Framework is a lightweight, responsive and modern CSS framework for faster and extensible development. Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.' block docs-content +docs-heading('utilities', 'Utilities') include _layout/_ad-g.pug p strong Spectre.css | is a lightweight, responsive and modern CSS framework for faster and extensible development. p | Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language. .docs-demo.columns .column.col-6.col-xs-12 .card .card-header .card-title.h5 Color utilities .card-body | Colors for text, link and background .card-footer a.btn.btn-primary(href="utilities/colors.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Cursor utilities .card-body | Mouse cursor to display when mouseover .card-footer a.btn.btn-primary(href="utilities/cursors.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Display utilities .card-body | Display and hidden things .card-footer a.btn.btn-primary(href="utilities/display.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Divider .card-body | Separating elements .card-footer a.btn.btn-primary(href="utilities/divider.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Loading .card-body | Indicating loading or updating state .card-footer a.btn.btn-primary(href="utilities/loading.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Position utilities .card-body | Useful layout and position things .card-footer a.btn.btn-primary(href="utilities/position.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Shape utilities .card-body | Changing element shapes .card-footer a.btn.btn-primary(href="utilities/shapes.html") View .column.col-6.col-xs-12 .card .card-header .card-title.h5 Text utilities .card-body | Text alignment, styles and overflow things .card-footer a.btn.btn-primary(href="utilities/text.html") View include _layout/_ad-c.pug include _layout/_footer.pug ================================================ FILE: docs/utilities/colors.html ================================================ Color utilities - Utilities - Spectre.css CSS Framework

Color utilities

Color utilities are used for changing colors for text, link and background.

Text colors

primary color

secondary color

dark color

gray color

light color

success color

warning color

error color

<span class="text-primary">primary color</span>
<span class="text-secondary">secondary color</span>
<span class="text-dark">dark color</span>
<span class="text-gray">gray color</span>
<span class="text-light">light color</span>
<span class="text-success">success color</span>
<span class="text-warning">warning color</span>
<span class="text-error">error color</span>
<a class="text-primary" href="#">primary color</a>
<a class="text-secondary" href="#">secondary color</a>
<a class="text-dark" href="#">dark color</a>
<a class="text-gray" href="#">gray color</a>
<a class="text-light" href="#">light color</a>
<a class="text-success" href="#">success color</a>
<a class="text-warning" href="#">warning color</a>
<a class="text-error" href="#">error color</a>

Background colors

primary bg

secondary bg

dark bg

gray bg

success bg

warning bg

error bg

<div class="bg-primary">primary bg</div>
<div class="bg-secondary">secondary bg</div>
<div class="bg-dark">dark bg</div>
<div class="bg-gray">gray bg</div>
<div class="bg-success">success bg</div>
<div class="bg-warning">warning bg</div>
<div class="bg-error">error bg</div>
================================================ FILE: docs/utilities/cursors.html ================================================ Cursor utilities - Utilities - Spectre.css CSS Framework

Cursor utilities

Cursor utilities specify which mouse cursor to display when mouseover.

c-hand
c-move
c-zoom-in
c-zoom-out
c-not-allowed
c-auto
<!-- cursor: hand; -->
<div class="c-hand"></div>
<!-- cursor: move; -->
<div class="c-move"></div>
<!-- cursor: zoom-in; -->
<div class="c-zoom-in"></div>
<!-- cursor: zoom-out; -->
<div class="c-zoom-out"></div>
<!-- cursor: not-allowed; -->
<div class="c-not-allowed"></div>
<!-- cursor: auto; -->
<div class="c-auto"></div>
================================================ FILE: docs/utilities/display.html ================================================ Display utilities - Utilities - Spectre.css CSS Framework

Display utilities

Display utilities are used for display and hidden things.

<!-- display: block; -->
<div class="d-block"></div>
<!-- display: inline; -->
<div class="d-inline"></div>
<!-- display: inline-block; -->
<div class="d-inline-block"></div>
<!-- display: flex; -->
<div class="d-flex"></div>
<!-- display: inline-flex; -->
<div class="d-inline-flex"></div>
<!-- display: none; -->
<div class="d-none"></div>
<div class="d-hide"></div>
<!-- visibility: visible; -->
<div class="d-visible"></div>
<!-- visibility: hidden; -->
<div class="d-invisible"></div>
<!-- hide text contents -->
<div class="text-hide"></div>
<!-- assistive text for screen reader -->
<div class="text-assistive"></div>
================================================ FILE: docs/utilities/divider.html ================================================ Divider - Utilities - Spectre.css CSS Framework

Divider

The Divider is used for separating elements.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent risus leo, dictum in vehicula sit amet, feugiat tempus tellus.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent risus leo, dictum in vehicula sit amet, feugiat tempus tellus.
<!-- divider element -->
<div class="divider"></div>
<!-- divider element with text -->
<div class="divider text-center" data-content="OR"></div>

<!-- vertical divider element with text -->
<div class="columns">
  <div class="column">
    <!-- column content -->
  </div>
  <div class="divider-vert" data-content="OR"></div>
  <div class="column">
    <!-- column content -->
  </div>
</div>
================================================ FILE: docs/utilities/loading.html ================================================ Loading - Utilities - Spectre.css CSS Framework

Loading

Loading indicator is used for loading or updating. You can add the loading class to a container for loading status.

Add the loading-lg class for large size.

<!-- loading element -->
<div class="loading"></div>
<div class="loading loading-lg"></div>
================================================ FILE: docs/utilities/position.html ================================================ Position utilities - Utilities - Spectre.css CSS Framework

Position utilities

Position utilities are used for useful layout and position things, including clearfix, float, position and margin/padding utilities.

<!-- clear float -->
<div class="clearfix"></div>
<!-- float: left and right -->
<div class="float-left"></div>
<div class="float-right"></div>
<!-- position: relative, absolute, fixed and sticky -->
<div class="p-relative"></div>
<div class="p-absolute"></div>
<div class="p-fixed"></div>
<div class="p-sticky"></div>
<!-- centered block -->
<div class="p-centered"></div>

<!-- m-1 {margin: 4px;} m-2 {margin: 8px;} -->
<div class="m-1"></div>
<div class="m-2"></div>
<!-- margin in 4 directions. mt-1 {margin-top: 4px;} mt-2 {margin-top: 8px;} -->
<div class="mt-1"></div>
<div class="mt-2"></div>
<!-- mx-1 {margin-left: 4px; margin-right: 4px;} -->
<div class="mx-1"></div>
<div class="mx-2"></div>
<div class="my-1"></div>
<div class="my-2"></div>
<!-- p-1 {padding: 4px;} p-2 {padding: 8px;} -->
<div class="p-1"></div>
<div class="p-2"></div>
<!-- padding in 4 directions. pt-1 {padding-top: 4px;} pt-2 {padding-top: 8px;} -->
<div class="pt-1"></div>
<div class="pt-2"></div>
<!-- px-1 {padding-left: 4px; padding-right: 4px;} -->
<div class="px-1"></div>
<div class="px-2"></div>
<div class="py-1"></div>
<div class="py-2"></div>
================================================ FILE: docs/utilities/shapes.html ================================================ Shape utilities - Utilities - Spectre.css CSS Framework

Shape utilities

Shape utilities are used for changing element shapes.

s-rounded
s-circle
<!-- rounded element -->
<div class="s-rounded"></div>
<!-- circle element -->
<div class="s-circle"></div>
================================================ FILE: docs/utilities/text.html ================================================ Text utilities - Utilities - Spectre.css CSS Framework

Text utilities

Text utilities are used for text alignment, styles and overflow things.

<!-- left-aligned text -->
<div class="text-left"></div>
<!-- center-aligned text -->
<div class="text-center"></div>
<!-- right-aligned text -->
<div class="text-right"></div>
<!-- justified text -->
<div class="text-justify"></div>

<!-- Lowercased text -->
<div class="text-lowercase"></div>
<!-- Uppercased text -->
<div class="text-uppercase"></div>
<!-- Capitalized text -->
<div class="text-capitalize"></div>

<!-- Normal weight text -->
<div class="text-normal"></div>
<!-- Bold text -->
<div class="text-bold"></div>
<!-- Italicized text -->
<div class="text-italic"></div>
<!-- Muted text -->
<div class="text-muted"></div>
<!-- Larger text (120%) -->
<div class="text-large"></div>
<!-- Smaller text (90%) -->
<div class="text-small"></div>
<!-- Tiny text (80%) -->
<div class="text-tiny"></div>


<!-- Overflow behavior: display an ellipsis to represent clipped text -->
<div class="text-ellipsis"></div>
<!-- Overflow behavior: truncate the text -->
<div class="text-clip"></div>
<!-- Text may be broken at arbitrary points -->
<div class="text-break"></div>
================================================ FILE: docs/utilities.html ================================================ Utilities - Spectre.css CSS Framework

Utilities

Spectre.css is a lightweight, responsive and modern CSS framework for faster and extensible development.

Spectre provides basic styles for typography and elements, flexbox based responsive layout system, pure CSS components and utilities with best practice coding and consistent design language.

Color utilities
Colors for text, link and background
Cursor utilities
Mouse cursor to display when mouseover
Display utilities
Display and hidden things
Divider
Separating elements
Loading
Indicating loading or updating state
Position utilities
Useful layout and position things
Shape utilities
Changing element shapes
Text utilities
Text alignment, styles and overflow things
================================================ FILE: gulpfile.js ================================================ const gulp = require("gulp"); const { parallel } = require("gulp"); const sass = require('gulp-sass'); const cleancss = require('gulp-clean-css'); const csscomb = require('gulp-csscomb'); const rename = require('gulp-rename'); const pug = require('gulp-pug'); const autoprefixer = require('gulp-autoprefixer'); function build() { return gulp .src('./src/*.scss') .pipe(sass({outputStyle: 'compact', precision: 10}) .on('error', sass.logError) ) .pipe(autoprefixer()) .pipe(csscomb()) .pipe(gulp.dest('./dist')) .pipe(cleancss()) .pipe(rename({ suffix: '.min' })) .pipe(gulp.dest('./dist')); } function docs_css() { return gulp .src(['./src/*.scss', './docs/src/scss/*.scss']) .pipe(sass({outputStyle: 'compact', precision: 10}) .on('error', sass.logError) ) .pipe(autoprefixer()) .pipe(csscomb()) .pipe(gulp.dest('./docs/dist')) .pipe(cleancss()) .pipe(rename({ suffix: '.min' })) .pipe(gulp.dest('./docs/dist')); } function docs_pug() { return gulp .src('docs/src/**/!(_)*.pug') .pipe(pug({ pretty: true })) .pipe(gulp.dest('./docs/')); } function watch() { gulp.watch('./**/*.scss', parallel(build, docs_css)); gulp.watch('./**/*.pug', docs_pug); } exports.watch = watch; exports.build = build; exports.docs = parallel(docs_pug, docs_css); exports.default = build; ================================================ FILE: package.json ================================================ { "name": "spectre.css", "version": "0.5.9", "homepage": "http://picturepan2.github.io/spectre", "author": "Yan Zhu ", "description": "Spectre.css: A lightweight, responsive and modern CSS framework", "main": "dist/spectre.css", "repository": { "type": "git", "url": "https://github.com/picturepan2/spectre.git" }, "license": "MIT", "keywords": [ "css", "framework", "flexbox", "responsive", "mobile-friendly", "front-end", "sass", "modern" ], "bugs": { "url": "https://github.com/picturepan2/spectre/issues" }, "devDependencies": { "gulp": "^4.0.2", "gulp-autoprefixer": "^7.0.1", "gulp-clean-css": "^4.3.0", "gulp-csscomb": "^3.1.0", "gulp-pug": "^4.0.1", "gulp-rename": "^2.0.0", "gulp-sass": "^4.1.0", "jstransformer-highlight": "^2.0.0", "jstransformer-markdown-it": "^2.1.0" }, "browserslist": [ "last 4 Chrome versions", "Edge >= 12", "Firefox ESR", "last 4 Safari versions", "last 4 Opera versions", "Explorer >= 10" ] } ================================================ FILE: src/_accordions.scss ================================================ // Accordions .accordion { input:checked ~, &[open] { & .accordion-header > { .icon:first-child { transform: rotate(90deg); } } & .accordion-body { max-height: 50rem; } } .accordion-header { display: block; padding: $unit-1 $unit-2; .icon { transition: transform .25s; } } .accordion-body { margin-bottom: $layout-spacing; max-height: 0; overflow: hidden; transition: max-height .25s; } } // Remove default details marker in Webkit summary.accordion-header { &::-webkit-details-marker { display: none; } } ================================================ FILE: src/_animations.scss ================================================ // Animations @keyframes loading { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @keyframes slide-down { 0% { opacity: 0; transform: translateY(-$unit-8); } 100% { opacity: 1; transform: translateY(0); } } ================================================ FILE: src/_asian.scss ================================================ // Optimized for East Asian CJK html:lang(zh), html:lang(zh-Hans), .lang-zh, .lang-zh-hans { font-family: $cjk-zh-hans-font-family; } html:lang(zh-Hant), .lang-zh-hant { font-family: $cjk-zh-hant-font-family; } html:lang(ja), .lang-ja { font-family: $cjk-jp-font-family; } html:lang(ko), .lang-ko { font-family: $cjk-ko-font-family; } :lang(zh), :lang(ja), .lang-cjk { ins, u { border-bottom: $border-width solid; text-decoration: none; } del + del, del + s, ins + ins, ins + u, s + del, s + s, u + ins, u + u { margin-left: .125em; } } ================================================ FILE: src/_autocomplete.scss ================================================ // Autocomplete .form-autocomplete { position: relative; .form-autocomplete-input { align-content: flex-start; display: flex; flex-wrap: wrap; height: auto; min-height: $unit-8; padding: $unit-h; &.is-focused { @include control-shadow(); border-color: $primary-color; } .form-input { border-color: transparent; box-shadow: none; display: inline-block; flex: 1 0 auto; height: $unit-6; line-height: $unit-4; margin: $unit-h; width: auto; } } .menu { left: 0; position: absolute; top: 100%; width: 100%; } &.autocomplete-oneline { .form-autocomplete-input { flex-wrap: nowrap; overflow-x: auto; } .chip { flex: 1 0 auto; } } } ================================================ FILE: src/_avatars.scss ================================================ // Avatars .avatar { @include avatar-base(); background: $primary-color; border-radius: 50%; color: rgba($light-color, .85); display: inline-block; font-weight: 300; line-height: 1.25; margin: 0; position: relative; vertical-align: middle; &.avatar-xs { @include avatar-base($unit-4); } &.avatar-sm { @include avatar-base($unit-6); } &.avatar-lg { @include avatar-base($unit-12); } &.avatar-xl { @include avatar-base($unit-16); } img { border-radius: 50%; height: 100%; position: relative; width: 100%; z-index: $zindex-0; } .avatar-icon, .avatar-presence { background: $bg-color-light; bottom: 14.64%; height: 50%; padding: $border-width-lg; position: absolute; right: 14.64%; transform: translate(50%, 50%); width: 50%; z-index: $zindex-0 + 1; } .avatar-presence { background: $gray-color; box-shadow: 0 0 0 $border-width-lg $light-color; border-radius: 50%; height: .5em; width: .5em; &.online { background: $success-color; } &.busy { background: $error-color; } &.away { background: $warning-color; } } &[data-initial]::before { color: currentColor; content: attr(data-initial); left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); z-index: $zindex-0; } } ================================================ FILE: src/_badges.scss ================================================ // Badges .badge { position: relative; white-space: nowrap; &[data-badge], &:not([data-badge]) { &::after { background: $primary-color; background-clip: padding-box; border-radius: .5rem; box-shadow: 0 0 0 .1rem $bg-color-light; color: $light-color; content: attr(data-badge); display: inline-block; transform: translate(-.05rem, -.5rem); } } &[data-badge] { &::after { font-size: $font-size-sm; height: .9rem; line-height: 1; min-width: .9rem; padding: .1rem .2rem; text-align: center; white-space: nowrap; } } &:not([data-badge]), &[data-badge=""] { &::after { height: 6px; min-width: 6px; padding: 0; width: 6px; } } // Badges for Buttons &.btn { &::after { position: absolute; top: 0; right: 0; transform: translate(50%, -50%); } } // Badges for Avatars &.avatar { &::after { position: absolute; top: 14.64%; right: 14.64%; transform: translate(50%, -50%); z-index: $zindex-1; } } } ================================================ FILE: src/_bars.scss ================================================ // Bars .bar { background: $bg-color-dark; border-radius: $border-radius; display: flex; flex-wrap: nowrap; height: $unit-4; width: 100%; &.bar-sm { height: $unit-1; } // TODO: attr() support .bar-item { background: $primary-color; color: $light-color; display: block; font-size: $font-size-sm; flex-shrink: 0; line-height: $unit-4; height: 100%; position: relative; text-align: center; width: 0; &:first-child { border-bottom-left-radius: $border-radius; border-top-left-radius: $border-radius; } &:last-child { border-bottom-right-radius: $border-radius; border-top-right-radius: $border-radius; flex-shrink: 1; } } } // Slider bar .bar-slider { height: $border-width-lg; margin: $layout-spacing 0; position: relative; .bar-item { left: 0; padding: 0; position: absolute; &:not(:last-child):first-child { background: $bg-color-dark; z-index: $zindex-0; } } .bar-slider-btn { background: $primary-color; border: 0; border-radius: 50%; height: $unit-3; padding: 0; position: absolute; right: 0; top: 50%; transform: translate(50%, -50%); width: $unit-3; &:active { box-shadow: 0 0 0 .1rem $primary-color; } } } ================================================ FILE: src/_base.scss ================================================ // Base *, *::before, *::after { box-sizing: inherit; } html { box-sizing: border-box; font-size: $html-font-size; line-height: $html-line-height; -webkit-tap-highlight-color: transparent; } body { background: $body-bg; color: $body-font-color; font-family: $body-font-family; font-size: $font-size; overflow-x: hidden; text-rendering: optimizeLegibility; } a { color: $link-color; outline: none; text-decoration: none; &:focus { @include control-shadow(); } &:focus, &:hover, &:active, &.active { color: $link-color-dark; text-decoration: underline; } &:visited { color: $link-color-light; } } ================================================ FILE: src/_breadcrumbs.scss ================================================ // Breadcrumbs .breadcrumb { list-style: none; margin: $unit-1 0; padding: $unit-1 0; .breadcrumb-item { color: $gray-color-dark; display: inline-block; margin: 0; padding: $unit-1 0; &:not(:last-child) { margin-right: $unit-1; a { color: $gray-color-dark; } } &:not(:first-child) { &::before { color: $gray-color-dark; content: "/"; padding-right: $unit-2; } } } } ================================================ FILE: src/_buttons.scss ================================================ // Buttons .btn { appearance: none; background: $bg-color-light; border: $border-width solid $primary-color; border-radius: $border-radius; color: $primary-color; cursor: pointer; display: inline-block; font-size: $font-size; height: $control-size; line-height: $line-height; outline: none; padding: $control-padding-y $control-padding-x; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; user-select: none; vertical-align: middle; white-space: nowrap; &:focus { @include control-shadow(); } &:focus, &:hover { background: $secondary-color; border-color: $primary-color-dark; text-decoration: none; } &:active, &.active { background: $primary-color-dark; border-color: darken($primary-color-dark, 5%); color: $light-color; text-decoration: none; &.loading { &::after { border-bottom-color: $light-color; border-left-color: $light-color; } } } &[disabled], &:disabled, &.disabled { cursor: default; opacity: .5; pointer-events: none; } // Button Primary &.btn-primary { background: $primary-color; border-color: $primary-color-dark; color: $light-color; &:focus, &:hover { background: darken($primary-color-dark, 2%); border-color: darken($primary-color-dark, 5%); color: $light-color; } &:active, &.active { background: darken($primary-color-dark, 4%); border-color: darken($primary-color-dark, 7%); color: $light-color; } &.loading { &::after { border-bottom-color: $light-color; border-left-color: $light-color; } } } // Button Colors &.btn-success { @include button-variant($success-color); } &.btn-error { @include button-variant($error-color); } // Button Link &.btn-link { background: transparent; border-color: transparent; color: $link-color; &:focus, &:hover, &:active, &.active { color: $link-color-dark; } } // Button Sizes &.btn-sm { font-size: $font-size-sm; height: $control-size-sm; padding: $control-padding-y-sm $control-padding-x-sm; } &.btn-lg { font-size: $font-size-lg; height: $control-size-lg; padding: $control-padding-y-lg $control-padding-x-lg; } // Button Block &.btn-block { display: block; width: 100%; } // Button Action &.btn-action { width: $control-size; padding-left: 0; padding-right: 0; &.btn-sm { width: $control-size-sm; } &.btn-lg { width: $control-size-lg; } } // Button Clear &.btn-clear { background: transparent; border: 0; color: currentColor; height: $unit-5; line-height: $unit-4; margin-left: $unit-1; margin-right: -2px; opacity: 1; padding: $unit-h; text-decoration: none; width: $unit-5; &:focus, &:hover { background: rgba($bg-color, .5); opacity: .95; } &::before { content: "\2715"; } } } // Button groups .btn-group { display: inline-flex; flex-wrap: wrap; .btn { flex: 1 0 auto; &:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } &:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -$border-width; } &:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -$border-width; } &:focus, &:hover, &:active, &.active { z-index: $zindex-0; } } &.btn-group-block { display: flex; .btn { flex: 1 0 0; } } } ================================================ FILE: src/_calendars.scss ================================================ // Calendars .calendar { border: $border-width solid $border-color; border-radius: $border-radius; display: block; min-width: 280px; .calendar-nav { align-items: center; background: $bg-color; border-top-left-radius: $border-radius; border-top-right-radius: $border-radius; display: flex; font-size: $font-size-lg; padding: $layout-spacing; } .calendar-header, .calendar-body { display: flex; flex-wrap: wrap; justify-content: center; padding: $layout-spacing 0; .calendar-date { flex: 0 0 14.28%; // 7 calendar-items each row max-width: 14.28%; } } .calendar-header { background: $bg-color; border-bottom: $border-width solid $border-color; color: $gray-color; font-size: $font-size-sm; text-align: center; } .calendar-body { color: $gray-color-dark; } .calendar-date { border: 0; padding: $unit-1; .date-item { appearance: none; background: transparent; border: $border-width solid transparent; border-radius: 50%; color: $gray-color-dark; cursor: pointer; font-size: $font-size-sm; height: $unit-7; line-height: $unit-5; outline: none; padding: $unit-h; position: relative; text-align: center; text-decoration: none; transition: background .2s, border .2s, box-shadow .2s, color .2s; vertical-align: middle; white-space: nowrap; width: $unit-7; &.date-today { border-color: $secondary-color-dark; color: $primary-color; } &:focus { @include control-shadow(); } &:focus, &:hover { background: $secondary-color-light; border-color: $secondary-color-dark; color: $primary-color; text-decoration: none; } &:active, &.active { background: $primary-color-dark; border-color: darken($primary-color-dark, 5%); color: $light-color; } // Calendar badge support &.badge { &::after { position: absolute; top: 3px; right: 3px; transform: translate(50%, -50%); } } } .date-item, .calendar-event { &:disabled, &.disabled { cursor: default; opacity: .25; pointer-events: none; } } &.prev-month, &.next-month { .date-item, .calendar-event { opacity: .25; } } } .calendar-range { position: relative; &::before { background: $secondary-color; content: ""; height: $unit-7; left: 0; position: absolute; right: 0; top: 50%; transform: translateY(-50%); } &.range-start { &::before { left: 50%; } } &.range-end { &::before { right: 50%; } } &.range-start, &.range-end { .date-item { background: $primary-color-dark; border-color: darken($primary-color-dark, 5%); color: $light-color; } } .date-item { color: $primary-color; } } // Calendars size &.calendar-lg { .calendar-body { padding: 0; .calendar-date { border-bottom: $border-width solid $border-color; border-right: $border-width solid $border-color; display: flex; flex-direction: column; height: 5.5rem; padding: 0; &:nth-child(7n) { border-right: 0; } &:nth-last-child(-n+7) { border-bottom: 0; } } } .date-item { align-self: flex-end; height: $unit-7; margin-right: $layout-spacing-sm; margin-top: $layout-spacing-sm; } .calendar-range { &::before { top: 19px; } &.range-start { &::before { left: auto; width: 19px; } } &.range-end { &::before { right: 19px; } } } .calendar-events { flex-grow: 1; line-height: 1; overflow-y: auto; padding: $layout-spacing-sm; } .calendar-event { border-radius: $border-radius; font-size: $font-size-sm; display: block; margin: $unit-h auto; overflow: hidden; padding: 3px 4px; text-overflow: ellipsis; white-space: nowrap; } } } ================================================ FILE: src/_cards.scss ================================================ // Cards .card { background: $bg-color-light; border: $border-width solid $border-color; border-radius: $border-radius; display: flex; flex-direction: column; .card-header, .card-body, .card-footer { padding: $layout-spacing-lg; padding-bottom: 0; &:last-child { padding-bottom: $layout-spacing-lg; } } .card-body { flex: 1 1 auto; } .card-image { padding-top: $layout-spacing-lg; &:first-child { padding-top: 0; img { border-top-left-radius: $border-radius; border-top-right-radius: $border-radius; } } &:last-child { img { border-bottom-left-radius: $border-radius; border-bottom-right-radius: $border-radius; } } } } ================================================ FILE: src/_carousels.scss ================================================ // Carousels // The number of carousel images $carousel-number: 8; %carousel-image-checked { animation: carousel-slidein .75s ease-in-out 1; opacity: 1; z-index: $zindex-1; } %carousel-nav-checked { color: $gray-color-light; } .carousel { background: $bg-color; display: block; overflow: hidden; position: relative; width: 100%; -webkit-overflow-scrolling: touch; z-index: $zindex-0; .carousel-container { height: 100%; left: 0; position: relative; &::before { content: ""; display: block; padding-bottom: 56.25%; } .carousel-item { animation: carousel-slideout 1s ease-in-out 1; height: 100%; left: 0; margin: 0; opacity: 0; position: absolute; top: 0; width: 100%; &:hover { .item-prev, .item-next { opacity: 1; } } } .item-prev, .item-next { background: rgba($gray-color-light, .25); border-color: rgba($gray-color-light, .5); color: $gray-color-light; opacity: 0; position: absolute; top: 50%; transition: all .4s; transform: translateY(-50%); z-index: $zindex-1; } .item-prev { left: 1rem; } .item-next { right: 1rem; } } .carousel-locator { @for $i from 1 through ($carousel-number) { &:nth-of-type(#{$i}):checked ~ .carousel-container .carousel-item:nth-of-type(#{$i}) { @extend %carousel-image-checked; } } @for $i from 1 through ($carousel-number) { &:nth-of-type(#{$i}):checked ~ .carousel-nav .nav-item:nth-of-type(#{$i}) { @extend %carousel-nav-checked; } } } .carousel-nav { bottom: $layout-spacing; display: flex; justify-content: center; left: 50%; position: absolute; transform: translateX(-50%); width: 10rem; z-index: $zindex-1; .nav-item { color: rgba($gray-color-light, .5); display: block; flex: 1 0 auto; height: $unit-8; margin: $unit-1; max-width: 2.5rem; position: relative; &::before { background: currentColor; content: ""; display: block; height: $unit-h; position: absolute; top: .5rem; width: 100%; } } } } @keyframes carousel-slidein { 0% { transform: translateX(100%); } 100% { transform: translateX(0); } } @keyframes carousel-slideout { 0% { opacity: 1; transform: translateX(0); } 100% { opacity: 1; transform: translateX(-50%); } } ================================================ FILE: src/_chips.scss ================================================ // Chips .chip { align-items: center; background: $bg-color-dark; border-radius: 5rem; display: inline-flex; font-size: 90%; height: $unit-6; line-height: $unit-4; margin: $unit-h; max-width: $control-width-sm; overflow: hidden; padding: $unit-1 $unit-2; text-decoration: none; text-overflow: ellipsis; vertical-align: middle; white-space: nowrap; &.active { background: $primary-color; color: $light-color; } .avatar { margin-left: -$unit-2; margin-right: $unit-1; } .btn-clear { border-radius: 50%; transform: scale(.75); } } ================================================ FILE: src/_codes.scss ================================================ // Codes code { @include label-base(); @include label-variant($code-color, lighten($code-color, 42.5%)); font-size: 85%; } .code { border-radius: $border-radius; color: $body-font-color; position: relative; &::before { color: $gray-color; content: attr(data-lang); font-size: $font-size-sm; position: absolute; right: $layout-spacing; top: $unit-h; } code { background: $bg-color; color: inherit; display: block; line-height: 1.5; overflow-x: auto; padding: 1rem; width: 100%; } } ================================================ FILE: src/_comparison-sliders.scss ================================================ // Image comparison slider // Credit: http://codepen.io/solipsistacp/pen/Gpmaq .comparison-slider { height: 50vh; overflow: hidden; position: relative; width: 100%; -webkit-overflow-scrolling: touch; .comparison-before, .comparison-after { height: 100%; left: 0; margin: 0; overflow: hidden; position: absolute; top: 0; img { height: 100%; object-fit: cover; object-position: left center; position: absolute; width: 100%; } } .comparison-before { width: 100%; z-index: 1; .comparison-label { right: $unit-4; } } .comparison-after { max-width: 100%; min-width: 0; z-index: 2; &::before { background: transparent; content: ""; cursor: default; height: 100%; left: 0; position: absolute; right: $unit-4; top: 0; z-index: $zindex-0; } &::after { background: currentColor; border-radius: 50%; box-shadow: 0 -5px, 0 5px; color: $light-color; content: ""; height: 3px; pointer-events: none; position: absolute; right: $unit-2; top: 50%; transform: translate(50%, -50%); width: 3px; } .comparison-label { left: $unit-4; } } .comparison-resizer { animation: first-run 1.5s 1 ease-in-out; cursor: ew-resize; height: $unit-4; left: 0; max-width: 100%; min-width: $unit-4; opacity: 0; outline: none; position: relative; resize: horizontal; top: 50%; transform: translateY(-50%) scaleY(30); width: 0; } .comparison-label { background: rgba($dark-color, .5); bottom: $unit-4; color: $light-color; padding: $unit-1 $unit-2; position: absolute; user-select: none; } } @keyframes first-run { 0% { width: 0; } 25% { width: $unit-12; } 50% { width: $unit-4; } 75% { width: $unit-6; } 100% { width: 0; } } ================================================ FILE: src/_dropdowns.scss ================================================ // Dropdown .dropdown { display: inline-block; position: relative; .menu { animation: slide-down .15s ease 1; display: none; left: 0; max-height: 50vh; overflow-y: auto; position: absolute; top: 100%; } &.dropdown-right { .menu { left: auto; right: 0; } } &.active .menu, .dropdown-toggle:focus + .menu, .menu:hover { display: block; } // Fix dropdown-toggle border radius in button groups .btn-group { .dropdown-toggle:nth-last-child(2) { border-bottom-right-radius: $border-radius; border-top-right-radius: $border-radius; } } } ================================================ FILE: src/_empty.scss ================================================ // Empty states (or Blank slates) .empty { background: $bg-color; border-radius: $border-radius; color: $gray-color-dark; text-align: center; padding: $unit-16 $unit-8; .empty-icon { margin-bottom: $layout-spacing-lg; } .empty-title, .empty-subtitle { margin: $layout-spacing auto; } .empty-action { margin-top: $layout-spacing-lg; } } ================================================ FILE: src/_filters.scss ================================================ // Filters // The number of filter options $filter-number: 8 !default; %filter-checked-nav { background: $primary-color; color: $light-color; } %filter-checked-body { display: none; } .filter { .filter-nav { margin: $layout-spacing 0; } .filter-body { display: flex; flex-wrap: wrap; } .filter-tag { @for $i from 0 through ($filter-number) { &#tag-#{$i}:checked ~ .filter-nav .chip[for="tag-#{$i}"] { @extend %filter-checked-nav; } } @for $i from 1 through ($filter-number) { &#tag-#{$i}:checked ~ .filter-body .filter-item:not([data-tag~="tag-#{$i}"]) { @extend %filter-checked-body; } } } } ================================================ FILE: src/_forms.scss ================================================ // Forms .form-group { &:not(:last-child) { margin-bottom: $layout-spacing; } } fieldset { margin-bottom: $layout-spacing-lg; } legend { font-size: $font-size-lg; font-weight: 500; margin-bottom: $layout-spacing-lg; } // Form element: Label .form-label { display: block; line-height: $line-height; padding: $control-padding-y + $border-width 0; &.label-sm { font-size: $font-size-sm; padding: $control-padding-y-sm + $border-width 0; } &.label-lg { font-size: $font-size-lg; padding: $control-padding-y-lg + $border-width 0; } } // Form element: Input .form-input { appearance: none; background: $bg-color-light; background-image: none; border: $border-width solid $border-color-dark; border-radius: $border-radius; color: $body-font-color; display: block; font-size: $font-size; height: $control-size; line-height: $line-height; max-width: 100%; outline: none; padding: $control-padding-y $control-padding-x; position: relative; transition: background .2s, border .2s, box-shadow .2s, color .2s; width: 100%; &:focus { @include control-shadow(); border-color: $primary-color; } &::placeholder { color: $gray-color; } // Input sizes &.input-sm { font-size: $font-size-sm; height: $control-size-sm; padding: $control-padding-y-sm $control-padding-x-sm; } &.input-lg { font-size: $font-size-lg; height: $control-size-lg; padding: $control-padding-y-lg $control-padding-x-lg; } &.input-inline { display: inline-block; vertical-align: middle; width: auto; } // Input types &[type="file"] { height: auto; } } // Form element: Textarea textarea.form-input { &, &.input-lg, &.input-sm { height: auto; } } // Form element: Input hint .form-input-hint { color: $gray-color; font-size: $font-size-sm; margin-top: $unit-1; .has-success &, .is-success + & { color: $success-color; } .has-error &, .is-error + & { color: $error-color; } } // Form element: Select .form-select { appearance: none; border: $border-width solid $border-color-dark; border-radius: $border-radius; color: inherit; font-size: $font-size; height: $control-size; line-height: $line-height; outline: none; padding: $control-padding-y $control-padding-x; vertical-align: middle; width: 100%; background: $bg-color-light; &:focus { @include control-shadow(); border-color: $primary-color; } &::-ms-expand { display: none; } // Select sizes &.select-sm { font-size: $font-size-sm; height: $control-size-sm; padding: $control-padding-y-sm ($control-icon-size + $control-padding-x-sm) $control-padding-y-sm $control-padding-x-sm; } &.select-lg { font-size: $font-size-lg; height: $control-size-lg; padding: $control-padding-y-lg ($control-icon-size + $control-padding-x-lg) $control-padding-y-lg $control-padding-x-lg; } // Multiple select &[size], &[multiple] { height: auto; padding: $control-padding-y $control-padding-x; option { padding: $unit-h $unit-1; } } &:not([multiple]):not([size]) { background: $bg-color-light url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center / .4rem .5rem; padding-right: $control-icon-size + $control-padding-x; } } // Form Icons .has-icon-left, .has-icon-right { position: relative; .form-icon { height: $control-icon-size; margin: 0 $control-padding-y; position: absolute; top: 50%; transform: translateY(-50%); width: $control-icon-size; z-index: $zindex-0 + 1; } } .has-icon-left { .form-icon { left: $border-width; } .form-input { padding-left: $control-icon-size + $control-padding-y * 2; } } .has-icon-right { .form-icon { right: $border-width; } .form-input { padding-right: $control-icon-size + $control-padding-y * 2; } } // Form element: Checkbox and Radio .form-checkbox, .form-radio, .form-switch { display: block; line-height: $line-height; margin: ($control-size - $control-size-sm) / 2 0; min-height: $control-size-sm; padding: (($control-size-sm - $line-height) / 2) $control-padding-x (($control-size-sm - $line-height) / 2) ($control-icon-size + $control-padding-x); position: relative; input { clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; position: absolute; width: 1px; &:focus + .form-icon { @include control-shadow(); border-color: $primary-color; } &:checked + .form-icon { background: $primary-color; border-color: $primary-color; } } .form-icon { border: $border-width solid $border-color-dark; cursor: pointer; display: inline-block; position: absolute; transition: background .2s, border .2s, box-shadow .2s, color .2s; } // Input checkbox, radio and switch sizes &.input-sm { font-size: $font-size-sm; margin: 0; } &.input-lg { font-size: $font-size-lg; margin: ($control-size-lg - $control-size-sm) / 2 0; } } .form-checkbox, .form-radio { .form-icon { background: $bg-color-light; height: $control-icon-size; left: 0; top: ($control-size-sm - $control-icon-size) / 2; width: $control-icon-size; } input { &:active + .form-icon { background: $bg-color-dark; } } } .form-checkbox { .form-icon { border-radius: $border-radius; } input { &:checked + .form-icon { &::before { background-clip: padding-box; border: $border-width-lg solid $light-color; border-left-width: 0; border-top-width: 0; content: ""; height: 9px; left: 50%; margin-left: -3px; margin-top: -6px; position: absolute; top: 50%; transform: rotate(45deg); width: 6px; } } &:indeterminate + .form-icon { background: $primary-color; border-color: $primary-color; &::before { background: $bg-color-light; content: ""; height: 2px; left: 50%; margin-left: -5px; margin-top: -1px; position: absolute; top: 50%; width: 10px; } } } } .form-radio { .form-icon { border-radius: 50%; } input { &:checked + .form-icon { &::before { background: $bg-color-light; border-radius: 50%; content: ""; height: 6px; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 6px; } } } } // Form element: Switch .form-switch { padding-left: ($unit-8 + $control-padding-x); .form-icon { background: $gray-color; background-clip: padding-box; border-radius: $unit-2 + $border-width; height: $unit-4 + $border-width * 2; left: 0; top: ($control-size-sm - $unit-4) / 2 - $border-width; width: $unit-8; &::before { background: $bg-color-light; border-radius: 50%; content: ""; display: block; height: $unit-4; left: 0; position: absolute; top: 0; transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s; width: $unit-4; } } input { &:checked + .form-icon { &::before { left: 14px; } } &:active + .form-icon { &::before { background: $bg-color; } } } } // Form element: Input groups .input-group { display: flex; .input-group-addon { background: $bg-color; border: $border-width solid $border-color-dark; border-radius: $border-radius; line-height: $line-height; padding: $control-padding-y $control-padding-x; white-space: nowrap; &.addon-sm { font-size: $font-size-sm; padding: $control-padding-y-sm $control-padding-x-sm; } &.addon-lg { font-size: $font-size-lg; padding: $control-padding-y-lg $control-padding-x-lg; } } .form-input, .form-select { flex: 1 1 auto; width: 1%; } .input-group-btn { z-index: $zindex-0; } .form-input, .form-select, .input-group-addon, .input-group-btn { &:first-child:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } &:not(:first-child):not(:last-child) { border-radius: 0; margin-left: -$border-width; } &:last-child:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -$border-width; } &:focus { z-index: $zindex-0 + 1; } } .form-select { width: auto; } &.input-inline { display: inline-flex; } } // Form validation states .form-input, .form-select { .has-success &, &.is-success { background: lighten($success-color, 53%); border-color: $success-color; &:focus { @include control-shadow($success-color); } } .has-error &, &.is-error { background: lighten($error-color, 53%); border-color: $error-color; &:focus { @include control-shadow($error-color); } } } .form-checkbox, .form-radio, .form-switch { .has-error &, &.is-error { .form-icon { border-color: $error-color; } input { &:checked + .form-icon { background: $error-color; border-color: $error-color; } &:focus + .form-icon { @include control-shadow($error-color); border-color: $error-color; } } } } .form-checkbox { .has-error &, &.is-error { input { &:indeterminate + .form-icon { background: $error-color; border-color: $error-color; } } } } // validation based on :placeholder-shown (Edge doesn't support it yet) .form-input { &:not(:placeholder-shown) { &:invalid { border-color: $error-color; &:focus { @include control-shadow($error-color); background: lighten($error-color, 53%); } & + .form-input-hint { color: $error-color; } } } } // Form disabled and readonly .form-input, .form-select { &:disabled, &.disabled { background-color: $bg-color-dark; cursor: not-allowed; opacity: .5; } } .form-input { &[readonly] { background-color: $bg-color; } } input { &:disabled, &.disabled { & + .form-icon { background: $bg-color-dark; cursor: not-allowed; opacity: .5; } } } .form-switch { input { &:disabled, &.disabled { & + .form-icon::before { background: $bg-color-light; } } } } // Form horizontal .form-horizontal { padding: $layout-spacing 0; .form-group { display: flex; flex-wrap: wrap; } } // Form inline .form-inline { display: inline-block; } ================================================ FILE: src/_hero.scss ================================================ // Hero .hero { display: flex; flex-direction: column; justify-content: space-between; padding-bottom: 4rem; padding-top: 4rem; &.hero-sm { padding-bottom: 2rem; padding-top: 2rem; } &.hero-lg { padding-bottom: 8rem; padding-top: 8rem; } .hero-body { padding: $layout-spacing; } } ================================================ FILE: src/_icons.scss ================================================ // CSS Icons @import "icons/icons-core"; @import "icons/icons-navigation"; @import "icons/icons-action"; @import "icons/icons-object"; ================================================ FILE: src/_labels.scss ================================================ // Labels .label { @include label-base(); @include label-variant(lighten($body-font-color, 5%), $bg-color-dark); display: inline-block; // Label rounded &.label-rounded { border-radius: 5rem; padding-left: .4rem; padding-right: .4rem; } // Label colors &.label-primary { @include label-variant($light-color, $primary-color); } &.label-secondary { @include label-variant($primary-color, $secondary-color); } &.label-success { @include label-variant($light-color, $success-color); } &.label-warning { @include label-variant($light-color, $warning-color); } &.label-error { @include label-variant($light-color, $error-color); } } ================================================ FILE: src/_layout.scss ================================================ // Layout .container { margin-left: auto; margin-right: auto; padding-left: $layout-spacing; padding-right: $layout-spacing; width: 100%; $grid-spacing: ($layout-spacing / ($layout-spacing * 0 + 1)) * $html-font-size; &.grid-xl { max-width: $grid-spacing * 2 + $size-xl; } &.grid-lg { max-width: $grid-spacing * 2 + $size-lg; } &.grid-md { max-width: $grid-spacing * 2 + $size-md; } &.grid-sm { max-width: $grid-spacing * 2 + $size-sm; } &.grid-xs { max-width: $grid-spacing * 2 + $size-xs; } } // Responsive breakpoint system .show-xs, .show-sm, .show-md, .show-lg, .show-xl { display: none !important; } // Responsive grid system .cols, .columns { display: flex; flex-wrap: wrap; margin-left: -$layout-spacing; margin-right: -$layout-spacing; &.col-gapless { margin-left: 0; margin-right: 0; & > .column { padding-left: 0; padding-right: 0; } } &.col-oneline { flex-wrap: nowrap; overflow-x: auto; } } [class~="col-"], .column { flex: 1; max-width: 100%; padding-left: $layout-spacing; padding-right: $layout-spacing; &.col-12, &.col-11, &.col-10, &.col-9, &.col-8, &.col-7, &.col-6, &.col-5, &.col-4, &.col-3, &.col-2, &.col-1, &.col-auto { flex: none; } } .col-12 { width: 100%; } .col-11 { width: 91.66666667%; } .col-10 { width: 83.33333333%; } .col-9 { width: 75%; } .col-8 { width: 66.66666667%; } .col-7 { width: 58.33333333%; } .col-6 { width: 50%; } .col-5 { width: 41.66666667%; } .col-4 { width: 33.33333333%; } .col-3 { width: 25%; } .col-2 { width: 16.66666667%; } .col-1 { width: 8.33333333%; } .col-auto { flex: 0 0 auto; max-width: none; width: auto; } .col-mx-auto { margin-left: auto; margin-right: auto; } .col-ml-auto { margin-left: auto; } .col-mr-auto { margin-right: auto; } @media (max-width: $size-xl) { .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-xl-auto { flex: none; } .col-xl-12 { width: 100%; } .col-xl-11 { width: 91.66666667%; } .col-xl-10 { width: 83.33333333%; } .col-xl-9 { width: 75%; } .col-xl-8 { width: 66.66666667%; } .col-xl-7 { width: 58.33333333%; } .col-xl-6 { width: 50%; } .col-xl-5 { width: 41.66666667%; } .col-xl-4 { width: 33.33333333%; } .col-xl-3 { width: 25%; } .col-xl-2 { width: 16.66666667%; } .col-xl-1 { width: 8.33333333%; } .col-xl-auto { width: auto; } .hide-xl { display: none !important; } .show-xl { display: block !important; } } @media (max-width: $size-lg) { .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-lg-auto { flex: none; } .col-lg-12 { width: 100%; } .col-lg-11 { width: 91.66666667%; } .col-lg-10 { width: 83.33333333%; } .col-lg-9 { width: 75%; } .col-lg-8 { width: 66.66666667%; } .col-lg-7 { width: 58.33333333%; } .col-lg-6 { width: 50%; } .col-lg-5 { width: 41.66666667%; } .col-lg-4 { width: 33.33333333%; } .col-lg-3 { width: 25%; } .col-lg-2 { width: 16.66666667%; } .col-lg-1 { width: 8.33333333%; } .col-lg-auto { width: auto; } .hide-lg { display: none !important; } .show-lg { display: block !important; } } @media (max-width: $size-md) { .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-md-auto { flex: none; } .col-md-12 { width: 100%; } .col-md-11 { width: 91.66666667%; } .col-md-10 { width: 83.33333333%; } .col-md-9 { width: 75%; } .col-md-8 { width: 66.66666667%; } .col-md-7 { width: 58.33333333%; } .col-md-6 { width: 50%; } .col-md-5 { width: 41.66666667%; } .col-md-4 { width: 33.33333333%; } .col-md-3 { width: 25%; } .col-md-2 { width: 16.66666667%; } .col-md-1 { width: 8.33333333%; } .col-md-auto { width: auto; } .hide-md { display: none !important; } .show-md { display: block !important; } } @media (max-width: $size-sm) { .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col-sm-auto { flex: none; } .col-sm-12 { width: 100%; } .col-sm-11 { width: 91.66666667%; } .col-sm-10 { width: 83.33333333%; } .col-sm-9 { width: 75%; } .col-sm-8 { width: 66.66666667%; } .col-sm-7 { width: 58.33333333%; } .col-sm-6 { width: 50%; } .col-sm-5 { width: 41.66666667%; } .col-sm-4 { width: 33.33333333%; } .col-sm-3 { width: 25%; } .col-sm-2 { width: 16.66666667%; } .col-sm-1 { width: 8.33333333%; } .col-sm-auto { width: auto; } .hide-sm { display: none !important; } .show-sm { display: block !important; } } @media (max-width: $size-xs) { .col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1, .col-xs-auto { flex: none; } .col-xs-12 { width: 100%; } .col-xs-11 { width: 91.66666667%; } .col-xs-10 { width: 83.33333333%; } .col-xs-9 { width: 75%; } .col-xs-8 { width: 66.66666667%; } .col-xs-7 { width: 58.33333333%; } .col-xs-6 { width: 50%; } .col-xs-5 { width: 41.66666667%; } .col-xs-4 { width: 33.33333333%; } .col-xs-3 { width: 25%; } .col-xs-2 { width: 16.66666667%; } .col-xs-1 { width: 8.33333333%; } .col-xs-auto { width: auto; } .hide-xs { display: none !important; } .show-xs { display: block !important; } } ================================================ FILE: src/_media.scss ================================================ // Media // Image responsive .img-responsive { display: block; height: auto; max-width: 100%; } // object-fit support is coming to Microsoft Edge // https://developer.microsoft.com/en-us/microsoft-edge/platform/status/objectfitandobjectposition/ .img-fit-cover { object-fit: cover; } .img-fit-contain { object-fit: contain; } // Video responsive .video-responsive { display: block; overflow: hidden; padding: 0; position: relative; width: 100%; &::before { content: ""; display: block; padding-bottom: 56.25%; // Default ratio 16:9, you can calculate this value by dividing 9 by 16 } iframe, object, embed { border: 0; bottom: 0; height: 100%; left: 0; position: absolute; right: 0; top: 0; width: 100%; } } video.video-responsive { height: auto; max-width: 100%; &::before { content: none; } } .video-responsive-4-3 { &::before { padding-bottom: 75%; // Ratio 4:3 } } .video-responsive-1-1 { &::before { padding-bottom: 100%; // Ratio 1:1 } } // Figure .figure { margin: 0 0 $layout-spacing 0; .figure-caption { color: $gray-color-dark; margin-top: $layout-spacing; } } ================================================ FILE: src/_menus.scss ================================================ // Menus .menu { @include shadow-variant(.05rem); background: $bg-color-light; border-radius: $border-radius; list-style: none; margin: 0; min-width: $control-width-xs; padding: $unit-2; transform: translateY($layout-spacing-sm); z-index: $zindex-3; &.menu-nav { background: transparent; box-shadow: none; } .menu-item { margin-top: 0; padding: 0 $unit-2; position: relative; text-decoration: none; & > a { border-radius: $border-radius; color: inherit; display: block; margin: 0 (-$unit-2); padding: $unit-1 $unit-2; text-decoration: none; &:focus, &:hover { background: $secondary-color; color: $primary-color; } &:active, &.active { background: $secondary-color; color: $primary-color; } } .form-checkbox, .form-radio, .form-switch { margin: $unit-h 0; } & + .menu-item { margin-top: $unit-1; } } .menu-badge { align-items: center; display: flex; height: 100%; position: absolute; right: 0; top: 0; .label { margin-right: $unit-2; } } } ================================================ FILE: src/_meters.scss ================================================ // Meters // Credit: https://css-tricks.com/html5-meter-element/ .meter { appearance: none; background: $bg-color; border: 0; border-radius: $border-radius; display: block; width: 100%; height: $unit-4; &::-webkit-meter-inner-element { display: block; } &::-webkit-meter-bar, &::-webkit-meter-optimum-value, &::-webkit-meter-suboptimum-value, &::-webkit-meter-even-less-good-value { border-radius: $border-radius; } &::-webkit-meter-bar { background: $bg-color; } &::-webkit-meter-optimum-value { background: $success-color; } &::-webkit-meter-suboptimum-value { background: $warning-color; } &::-webkit-meter-even-less-good-value { background: $error-color; } &::-moz-meter-bar, &:-moz-meter-optimum, &:-moz-meter-sub-optimum, &:-moz-meter-sub-sub-optimum { border-radius: $border-radius; } &:-moz-meter-optimum::-moz-meter-bar { background: $success-color; } &:-moz-meter-sub-optimum::-moz-meter-bar { background: $warning-color; } &:-moz-meter-sub-sub-optimum::-moz-meter-bar { background: $error-color; } } ================================================ FILE: src/_mixins.scss ================================================ // Mixins @import "mixins/avatar"; @import "mixins/button"; @import "mixins/clearfix"; @import "mixins/color"; @import "mixins/label"; @import "mixins/position"; @import "mixins/shadow"; @import "mixins/text"; @import "mixins/toast"; ================================================ FILE: src/_modals.scss ================================================ // Modals .modal { align-items: center; bottom: 0; display: none; justify-content: center; left: 0; opacity: 0; overflow: hidden; padding: $layout-spacing; position: fixed; right: 0; top: 0; &:target, &.active { display: flex; opacity: 1; z-index: $zindex-4; .modal-overlay { background: rgba($bg-color, .75); bottom: 0; cursor: default; display: block; left: 0; position: absolute; right: 0; top: 0; } .modal-container { animation: slide-down .2s ease 1; z-index: $zindex-0; } } &.modal-sm { .modal-container { max-width: $control-width-sm; padding: 0 $unit-2; } } &.modal-lg { .modal-overlay { background: $bg-color-light; } .modal-container { box-shadow: none; max-width: $control-width-lg; } } } .modal-container { @include shadow-variant(.2rem); background: $bg-color-light; border-radius: $border-radius; display: flex; flex-direction: column; max-height: 75vh; max-width: $control-width-md; padding: 0 $unit-4; width: 100%; &.modal-fullheight { max-height: 100vh; } .modal-header { color: $dark-color; padding: $unit-4; } .modal-body { overflow-y: auto; padding: $unit-4; position: relative; } .modal-footer { padding: $unit-4; text-align: right; } } ================================================ FILE: src/_navbar.scss ================================================ // Navbar .navbar { align-items: stretch; display: flex; flex-wrap: wrap; justify-content: space-between; .navbar-section { align-items: center; display: flex; flex: 1 0 0; &:not(:first-child):last-child { justify-content: flex-end; } } .navbar-center { align-items: center; display: flex; flex: 0 0 auto; } .navbar-brand { font-size: $font-size-lg; text-decoration: none; } } ================================================ FILE: src/_navs.scss ================================================ // Navs .nav { display: flex; flex-direction: column; list-style: none; margin: $unit-1 0; .nav-item { a { color: $gray-color-dark; padding: $unit-1 $unit-2; text-decoration: none; &:focus, &:hover { color: $primary-color; } } &.active { & > a { color: darken($gray-color-dark, 10%); font-weight: bold; &:focus, &:hover { color: $primary-color; } } } } & .nav { margin-bottom: $unit-2; margin-left: $unit-4; } } ================================================ FILE: src/_normalize.scss ================================================ /* Manually forked from Normalize.css */ /* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ /** * 1. Change the default font family in all browsers (opinionated). * 2. Correct the line height in all browsers. * 3. Prevent adjustments of font size after orientation changes in * IE on Windows Phone and in iOS. */ /* Document ========================================================================== */ html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 3 */ -webkit-text-size-adjust: 100%; /* 3 */ } /* Sections ========================================================================== */ /** * Remove the margin in all browsers (opinionated). */ body { margin: 0; } /** * Add the correct display in IE 9-. */ article, aside, footer, header, nav, section { display: block; } /** * Correct the font size and margin on `h1` elements within `section` and * `article` contexts in Chrome, Firefox, and Safari. */ h1 { font-size: 2em; margin: 0.67em 0; } /* Grouping content ========================================================================== */ /** * Add the correct display in IE 9-. * 1. Add the correct display in IE. */ figcaption, figure, main { /* 1 */ display: block; } /** * Add the correct margin in IE 8 (removed). */ /** * 1. Add the correct box sizing in Firefox. * 2. Show the overflow in Edge and IE. */ hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ } /** * 1. Correct the inheritance and scaling of font size in all browsers. (removed) * 2. Correct the odd `em` font sizing in all browsers. */ /* Text-level semantics ========================================================================== */ /** * 1. Remove the gray background on active links in IE 10. * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ a { background-color: transparent; /* 1 */ -webkit-text-decoration-skip: objects; /* 2 */ } /** * Remove the outline on focused links when they are also active or hovered * in all browsers (opinionated). */ a:active, a:hover { outline-width: 0; } /** * Modify default styling of address. */ address { font-style: normal; } /** * 1. Remove the bottom border in Firefox 39-. * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed) */ /** * Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ b, strong { font-weight: inherit; } /** * Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { font-weight: bolder; } /** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ code, kbd, pre, samp { font-family: $mono-font-family; /* 1 (changed) */ font-size: 1em; /* 2 */ } /** * Add the correct font style in Android 4.3-. */ dfn { font-style: italic; } /** * Add the correct background and color in IE 9-. (Removed) */ /** * Add the correct font size in all browsers. */ small { font-size: 80%; font-weight: 400; /* (added) */ } /** * Prevent `sub` and `sup` elements from affecting the line height in * all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* Embedded content ========================================================================== */ /** * Add the correct display in IE 9-. */ audio, video { display: inline-block; } /** * Add the correct display in iOS 4-7. */ audio:not([controls]) { display: none; height: 0; } /** * Remove the border on images inside links in IE 10-. */ img { border-style: none; } /** * Hide the overflow in IE. */ svg:not(:root) { overflow: hidden; } /* Forms ========================================================================== */ /** * 1. Change the font styles in all browsers (opinionated). * 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 (changed) */ font-size: inherit; /* 1 (changed) */ line-height: inherit; /* 1 (changed) */ margin: 0; /* 2 */ } /** * Show the overflow in IE. * 1. Show the overflow in Edge. */ button, input { /* 1 */ overflow: visible; } /** * Remove the inheritance of text transform in Edge, Firefox, and IE. * 1. Remove the inheritance of text transform in Firefox. */ button, select { /* 1 */ text-transform: none; } /** * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` * controls in Android 4. * 2. Correct the inability to style clickable types in iOS and Safari. */ button, html [type="button"], /* 1 */ [type="reset"], [type="submit"] { -webkit-appearance: button; /* 2 */ } /** * Remove the inner border and padding in Firefox. */ button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } /** * Restore the focus styles unset by the previous rule (removed). */ /** * Change the border, margin, and padding in all browsers (opinionated) (changed). */ fieldset { border: 0; margin: 0; padding: 0; } /** * 1. Correct the text wrapping in Edge and IE. * 2. Correct the color inheritance from `fieldset` elements in IE. * 3. Remove the padding so developers are not caught out when they zero out * `fieldset` elements in all browsers. */ legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ } /** * 1. Add the correct display in IE 9-. * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ progress { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } /** * Remove the default vertical scrollbar in IE. */ textarea { overflow: auto; } /** * 1. Add the correct box sizing in IE 10-. * 2. Remove the padding in IE 10-. */ [type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** * Correct the cursor style of increment and decrement buttons in Chrome. */ [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } /** * 1. Correct the odd appearance in Chrome and Safari. * 2. Correct the outline style in Safari. */ [type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /** * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** * 1. Correct the inability to style clickable types in iOS and Safari. * 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Interactive ========================================================================== */ /* * Add the correct display in IE 9-. * 1. Add the correct display in Edge, IE, and Firefox. */ details, /* 1 */ menu { display: block; } /* * Add the correct display in all browsers. */ summary { display: list-item; outline: none; } /* Scripting ========================================================================== */ /** * Add the correct display in IE 9-. */ canvas { display: inline-block; } /** * Add the correct display in IE. */ template { display: none; } /* Hidden ========================================================================== */ /** * Add the correct display in IE 10-. */ [hidden] { display: none; } ================================================ FILE: src/_off-canvas.scss ================================================ // Off canvas menus $off-canvas-breakpoint: $size-lg !default; .off-canvas { display: flex; flex-flow: nowrap; height: 100%; position: relative; width: 100%; .off-canvas-toggle { display: block; position: absolute; top: $layout-spacing; transition: none; z-index: $zindex-0; @if $rtl == true { right: $layout-spacing; } @else { left: $layout-spacing; } } .off-canvas-sidebar { background: $bg-color; bottom: 0; min-width: 10rem; overflow-y: auto; position: fixed; top: 0; transition: transform .25s; z-index: $zindex-2; @if $rtl == true { right: 0; transform: translateX(100%); } @else { left: 0; transform: translateX(-100%); } } .off-canvas-content { flex: 1 1 auto; height: 100%; padding: $layout-spacing $layout-spacing $layout-spacing 4rem; } .off-canvas-overlay { background: rgba($dark-color, .1); border-color: transparent; border-radius: 0; bottom: 0; display: none; height: 100%; left: 0; position: fixed; right: 0; top: 0; width: 100%; } .off-canvas-sidebar { &:target, &.active { transform: translateX(0); } &:target ~ .off-canvas-overlay, &.active ~ .off-canvas-overlay { display: block; z-index: $zindex-1; } } } // Responsive layout @media (min-width: $off-canvas-breakpoint) { .off-canvas { &.off-canvas-sidebar-show { .off-canvas-toggle { display: none; } .off-canvas-sidebar { flex: 0 0 auto; position: relative; transform: none; } .off-canvas-overlay { display: none !important; } } } } ================================================ FILE: src/_pagination.scss ================================================ // Pagination .pagination { display: flex; list-style: none; margin: $unit-1 0; padding: $unit-1 0; .page-item { margin: $unit-1 $unit-o; span { display: inline-block; padding: $unit-1 $unit-1; } a { border-radius: $border-radius; display: inline-block; padding: $unit-1 $unit-2; text-decoration: none; &:focus, &:hover { color: $primary-color; } } &.disabled { a { cursor: default; opacity: .5; pointer-events: none; } } &.active { a { background: $primary-color; color: $light-color; } } &.page-prev, &.page-next { flex: 1 0 50%; } &.page-next { text-align: right; } .page-item-title { margin: 0; } .page-item-subtitle { margin: 0; opacity: .5; } } } ================================================ FILE: src/_panels.scss ================================================ // Panels .panel { border: $border-width solid $border-color; border-radius: $border-radius; display: flex; flex-direction: column; .panel-header, .panel-footer { flex: 0 0 auto; padding: $layout-spacing-lg; } .panel-nav { flex: 0 0 auto; } .panel-body { flex: 1 1 auto; overflow-y: auto; padding: 0 $layout-spacing-lg; } } ================================================ FILE: src/_parallax.scss ================================================ // Parallax $parallax-deg: 3deg !default; $parallax-offset: 4.5px !default; $parallax-offset-z: 50px !default; $parallax-perspective: 1000px !default; $parallax-scale: .95 !default; $parallax-fade-color: rgba(255, 255, 255, .35) !default; // Mixin: Parallax direction @mixin parallax-dir() { height: 50%; outline: none; position: absolute; width: 50%; z-index: $zindex-1; } .parallax { display: block; height: auto; position: relative; width: auto; .parallax-content { @include shadow-variant(1rem); height: auto; transform: perspective($parallax-perspective); transform-style: preserve-3d; transition: all .4s ease; width: 100%; &::before { content: ""; display: block; height: 100%; left: 0; position: absolute; top: 0; width: 100%; } } .parallax-front { align-items: center; color: $light-color; display: flex; height: 100%; justify-content: center; left: 0; position: absolute; text-align: center; text-shadow: 0 0 20px rgba($dark-color, .75); top: 0; transform: translateZ($parallax-offset-z) scale($parallax-scale); transition: transform .4s; width: 100%; z-index: $zindex-0; } .parallax-top-left { @include parallax-dir(); left: 0; top: 0; &:focus ~ .parallax-content, &:hover ~ .parallax-content { transform: perspective($parallax-perspective) rotateX($parallax-deg) rotateY(-$parallax-deg); &::before { background: linear-gradient(135deg, $parallax-fade-color 0%, transparent 50%); } .parallax-front { transform: translate3d($parallax-offset, $parallax-offset, $parallax-offset-z) scale($parallax-scale); } } } .parallax-top-right { @include parallax-dir(); right: 0; top: 0; &:focus ~ .parallax-content, &:hover ~ .parallax-content { transform: perspective($parallax-perspective) rotateX($parallax-deg) rotateY($parallax-deg); &::before { background: linear-gradient(-135deg, $parallax-fade-color 0%, transparent 50%); } .parallax-front { transform: translate3d(-$parallax-offset, $parallax-offset, $parallax-offset-z) scale($parallax-scale); } } } .parallax-bottom-left { @include parallax-dir(); bottom: 0; left: 0; &:focus ~ .parallax-content, &:hover ~ .parallax-content { transform: perspective($parallax-perspective) rotateX(-$parallax-deg) rotateY(-$parallax-deg); &::before { background: linear-gradient(45deg, $parallax-fade-color 0%, transparent 50%); } .parallax-front { transform: translate3d($parallax-offset, -$parallax-offset, $parallax-offset-z) scale($parallax-scale); } } } .parallax-bottom-right { @include parallax-dir(); bottom: 0; right: 0; &:focus ~ .parallax-content, &:hover ~ .parallax-content { transform: perspective($parallax-perspective) rotateX(-$parallax-deg) rotateY($parallax-deg); &::before { background: linear-gradient(-45deg, $parallax-fade-color 0%, transparent 50%); } .parallax-front { transform: translate3d(-$parallax-offset, -$parallax-offset, $parallax-offset-z) scale($parallax-scale); } } } } ================================================ FILE: src/_popovers.scss ================================================ // Popovers .popover { display: inline-block; position: relative; .popover-container { left: 50%; opacity: 0; padding: $layout-spacing; position: absolute; top: 0; transform: translate(-50%, -50%) scale(0); transition: transform .2s; width: $control-width-sm; z-index: $zindex-3; } *:focus + .popover-container, &:hover .popover-container { display: block; opacity: 1; transform: translate(-50%, -100%) scale(1); } &.popover-right { .popover-container { left: 100%; top: 50%; } *:focus + .popover-container, &:hover .popover-container { transform: translate(0, -50%) scale(1); } } &.popover-bottom { .popover-container { left: 50%; top: 100%; } *:focus + .popover-container, &:hover .popover-container { transform: translate(-50%, 0) scale(1); } } &.popover-left { .popover-container { left: 0; top: 50%; } *:focus + .popover-container, &:hover .popover-container { transform: translate(-100%, -50%) scale(1); } } .card { @include shadow-variant(.2rem); border: 0; } } ================================================ FILE: src/_progress.scss ================================================ // Progress // Credit: https://css-tricks.com/html5-progress-element/ .progress { appearance: none; background: $bg-color-dark; border: 0; border-radius: $border-radius; color: $primary-color; height: $unit-1; position: relative; width: 100%; &::-webkit-progress-bar { background: transparent; border-radius: $border-radius; } &::-webkit-progress-value { background: $primary-color; border-radius: $border-radius; } &::-moz-progress-bar { background: $primary-color; border-radius: $border-radius; } &:indeterminate { animation: progress-indeterminate 1.5s linear infinite; background: $bg-color-dark linear-gradient(to right, $primary-color 30%, $bg-color-dark 30%) top left / 150% 150% no-repeat; &::-moz-progress-bar { background: transparent; } } } @keyframes progress-indeterminate { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } ================================================ FILE: src/_sliders.scss ================================================ // Sliders // Credit: https://css-tricks.com/styling-cross-browser-compatible-range-inputs-css/ .slider { appearance: none; background: transparent; display: block; width: 100%; height: $unit-6; &:focus { @include control-shadow(); outline: none; } &.tooltip:not([data-tooltip]) { &::after { content: attr(value); } } // Slider Thumb &::-webkit-slider-thumb { -webkit-appearance: none; background: $primary-color; border: 0; border-radius: 50%; height: $unit-3; margin-top: -($unit-3 - $unit-h) / 2; transition: transform .2s; width: $unit-3; } &::-moz-range-thumb { background: $primary-color; border: 0; border-radius: 50%; height: $unit-3; transition: transform .2s; width: $unit-3; } &::-ms-thumb { background: $primary-color; border: 0; border-radius: 50%; height: $unit-3; transition: transform .2s; width: $unit-3; } &:active { &::-webkit-slider-thumb { transform: scale(1.25); } &::-moz-range-thumb { transform: scale(1.25); } &::-ms-thumb { transform: scale(1.25); } } &:disabled, &.disabled { &::-webkit-slider-thumb { background: $gray-color-light; transform: scale(1); } &::-moz-range-thumb { background: $gray-color-light; transform: scale(1); } &::-ms-thumb { background: $gray-color-light; transform: scale(1); } } // Slider Track &::-webkit-slider-runnable-track { background: $bg-color-dark; border-radius: $border-radius; height: $unit-h; width: 100%; } &::-moz-range-track { background: $bg-color-dark; border-radius: $border-radius; height: $unit-h; width: 100%; } &::-ms-track { background: $bg-color-dark; border-radius: $border-radius; height: $unit-h; width: 100%; } &::-ms-fill-lower { background: $primary-color; } } ================================================ FILE: src/_steps.scss ================================================ // Steps .step { display: flex; flex-wrap: nowrap; list-style: none; margin: $unit-1 0; width: 100%; .step-item { flex: 1 1 0; margin-top: 0; min-height: 1rem; text-align: center; position: relative; &:not(:first-child)::before { background: $primary-color; content: ""; height: 2px; left: -50%; position: absolute; top: 9px; width: 100%; } a { color: $primary-color; display: inline-block; padding: 20px 10px 0; text-decoration: none; &::before { background: $primary-color; border: $border-width-lg solid $light-color; border-radius: 50%; content: ""; display: block; height: $unit-3; left: 50%; position: absolute; top: $unit-1; transform: translateX(-50%); width: $unit-3; z-index: $zindex-0; } } &.active { a { &::before { background: $light-color; border: $border-width-lg solid $primary-color; } } & ~ .step-item { &::before { background: $border-color; } a { color: $gray-color; &::before { background: $border-color; } } } } } } ================================================ FILE: src/_tables.scss ================================================ // Tables .table { border-collapse: collapse; border-spacing: 0; width: 100%; @if $rtl == true { text-align: right; } @else { text-align: left; } &.table-striped { tbody { tr:nth-of-type(odd) { background: $bg-color; } } } &, &.table-striped { tbody { tr { &.active { background: $bg-color-dark; } } } } &.table-hover { tbody { tr { &:hover { background: $bg-color-dark; } } } } // Scollable tables &.table-scroll { display: block; overflow-x: auto; padding-bottom: .75rem; white-space: nowrap; } td, th { border-bottom: $border-width solid $border-color; padding: $unit-3 $unit-2; } th { border-bottom-width: $border-width-lg; } } ================================================ FILE: src/_tabs.scss ================================================ // Tabs .tab { align-items: center; border-bottom: $border-width solid $border-color; display: flex; flex-wrap: wrap; list-style: none; margin: $unit-1 0 ($unit-1 - $border-width) 0; .tab-item { margin-top: 0; a { border-bottom: $border-width-lg solid transparent; color: inherit; display: block; margin: 0 $unit-2 0 0; padding: $unit-2 $unit-1 $unit-2 - $border-width-lg $unit-1; text-decoration: none; &:focus, &:hover { color: $link-color; } } &.active a, a.active { border-bottom-color: $primary-color; color: $link-color; } &.tab-action { flex: 1 0 auto; text-align: right; } .btn-clear { margin-top: -$unit-1; } } &.tab-block { .tab-item { flex: 1 0 0; text-align: center; a { margin: 0; } .badge { &[data-badge]::after { position: absolute; right: $unit-h; top: $unit-h; transform: translate(0, 0); } } } } &:not(.tab-block) { .badge { padding-right: 0; } } } ================================================ FILE: src/_tiles.scss ================================================ // Tiles .tile { align-content: space-between; align-items: flex-start; display: flex; .tile-icon, .tile-action { flex: 0 0 auto; } .tile-content { flex: 1 1 auto; &:not(:first-child) { padding-left: $unit-2; } &:not(:last-child) { padding-right: $unit-2; } } .tile-title, .tile-subtitle { line-height: $line-height; } &.tile-centered { align-items: center; .tile-content { overflow: hidden; } .tile-title, .tile-subtitle { @include text-ellipsis(); margin-bottom: 0; } } } ================================================ FILE: src/_timelines.scss ================================================ // Timelines .timeline { .timeline-item { display: flex; margin-bottom: $unit-6; position: relative; &::before { background: $border-color; content: ""; height: 100%; left: 11px; position: absolute; top: $unit-6; width: 2px; } .timeline-left { flex: 0 0 auto; } .timeline-content { flex: 1 1 auto; padding: 2px 0 2px $layout-spacing-lg; } .timeline-icon { align-items: center; border-radius: 50%; color: $light-color; display: flex; height: $unit-6; justify-content: center; text-align: center; width: $unit-6; &::before { border: $border-width-lg solid $primary-color; border-radius: 50%; content: ""; display: block; height: $unit-2; left: $unit-2; position: absolute; top: $unit-2; width: $unit-2; } &.icon-lg { background: $primary-color; line-height: $line-height; &::before { content: none; } } } } } ================================================ FILE: src/_toasts.scss ================================================ // Toasts .toast { @include toast-variant($dark-color); border: $border-width solid $dark-color; border-radius: $border-radius; color: $light-color; display: block; padding: $layout-spacing; width: 100%; &.toast-primary { @include toast-variant($primary-color); } &.toast-success { @include toast-variant($success-color); } &.toast-warning { @include toast-variant($warning-color); } &.toast-error { @include toast-variant($error-color); } a { color: $light-color; text-decoration: underline; &:focus, &:hover, &:active, &.active { opacity: .75; } } .btn-clear { margin: $unit-h; } p { &:last-child { margin-bottom: 0; } } } ================================================ FILE: src/_tooltips.scss ================================================ // Tooltips .tooltip { position: relative; &::after { background: rgba($dark-color, .95); border-radius: $border-radius; bottom: 100%; color: $light-color; content: attr(data-tooltip); display: block; font-size: $font-size-sm; left: 50%; max-width: $control-width-sm; opacity: 0; overflow: hidden; padding: $unit-1 $unit-2; pointer-events: none; position: absolute; text-overflow: ellipsis; transform: translate(-50%, $unit-2); transition: opacity .2s, transform .2s; white-space: pre; z-index: $zindex-3; } &:focus, &:hover { &::after { opacity: 1; transform: translate(-50%, -$unit-1); } } &[disabled], &.disabled { pointer-events: auto; } &.tooltip-right { &::after { bottom: 50%; left: 100%; transform: translate(-$unit-1, 50%); } &:focus, &:hover { &::after { transform: translate($unit-1, 50%); } } } &.tooltip-bottom { &::after { bottom: auto; top: 100%; transform: translate(-50%, -$unit-2); } &:focus, &:hover { &::after { transform: translate(-50%, $unit-1); } } } &.tooltip-left { &::after { bottom: 50%; left: auto; right: 100%; transform: translate($unit-2, 50%); } &:focus, &:hover { &::after { transform: translate(-$unit-1, 50%); } } } } ================================================ FILE: src/_typography.scss ================================================ // Typography // Headings h1, h2, h3, h4, h5, h6 { color: inherit; font-weight: 500; line-height: 1.2; margin-bottom: .5em; margin-top: 0; } .h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 500; } h1, .h1 { font-size: 2rem; } h2, .h2 { font-size: 1.6rem; } h3, .h3 { font-size: 1.4rem; } h4, .h4 { font-size: 1.2rem; } h5, .h5 { font-size: 1rem; } h6, .h6 { font-size: .8rem; } // Paragraphs p { margin: 0 0 $line-height; } // Semantic text elements a, ins, u { text-decoration-skip: ink edges; } abbr[title] { border-bottom: $border-width dotted; cursor: help; text-decoration: none; } kbd { @include label-base(); @include label-variant($light-color, $dark-color); font-size: $font-size-sm; } mark { @include label-variant($body-font-color, $highlight-color); border-bottom: $unit-o solid darken($highlight-color, 15%); border-radius: $border-radius; padding: $unit-o $unit-h 0; } // Blockquote blockquote { border-left: $border-width-lg solid $border-color; margin-left: 0; padding: $unit-2 $unit-4; p:last-child { margin-bottom: 0; } } // Lists ul, ol { margin: $unit-4 0 $unit-4 $unit-4; padding: 0; ul, ol { margin: $unit-4 0 $unit-4 $unit-4; } li { margin-top: $unit-2; } } ul { list-style: disc inside; ul { list-style-type: circle; } } ol { list-style: decimal inside; ol { list-style-type: lower-alpha; } } dl { dt { font-weight: bold; } dd { margin: $unit-2 0 $unit-4 0; } } ================================================ FILE: src/_utilities.scss ================================================ @import "utilities/colors"; @import "utilities/cursors"; @import "utilities/display"; @import "utilities/divider"; @import "utilities/loading"; @import "utilities/position"; @import "utilities/shapes"; @import "utilities/text"; ================================================ FILE: src/_variables.scss ================================================ // Core variables $version: "0.5.9"; // Core features $rtl: false !default; // Core colors $primary-color: #5755d9 !default; $primary-color-dark: darken($primary-color, 3%) !default; $primary-color-light: lighten($primary-color, 3%) !default; $secondary-color: lighten($primary-color, 37.5%) !default; $secondary-color-dark: darken($secondary-color, 3%) !default; $secondary-color-light: lighten($secondary-color, 3%) !default; // Gray colors $dark-color: #303742 !default; $light-color: #fff !default; $gray-color: lighten($dark-color, 55%) !default; $gray-color-dark: darken($gray-color, 30%) !default; $gray-color-light: lighten($gray-color, 20%) !default; $border-color: lighten($dark-color, 65%) !default; $border-color-dark: darken($border-color, 10%) !default; $border-color-light: lighten($border-color, 8%) !default; $bg-color: lighten($dark-color, 75%) !default; $bg-color-dark: darken($bg-color, 3%) !default; $bg-color-light: $light-color !default; // Control colors $success-color: #32b643 !default; $warning-color: #ffb700 !default; $error-color: #e85600 !default; // Other colors $code-color: #d73e48 !default; $highlight-color: #ffe9b3 !default; $body-bg: $bg-color-light !default; $body-font-color: lighten($dark-color, 5%) !default; $link-color: $primary-color !default; $link-color-dark: darken($link-color, 10%) !default; $link-color-light: lighten($link-color, 10%) !default; // Fonts // Credit: https://www.smashingmagazine.com/2015/11/using-system-ui-fonts-practical-guide/ $base-font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto !default; $mono-font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace !default; $fallback-font-family: "Helvetica Neue", sans-serif !default; $cjk-zh-hans-font-family: $base-font-family, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", $fallback-font-family !default; $cjk-zh-hant-font-family: $base-font-family, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", $fallback-font-family !default; $cjk-jp-font-family: $base-font-family, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, $fallback-font-family !default; $cjk-ko-font-family: $base-font-family, "Malgun Gothic", $fallback-font-family !default; $body-font-family: $base-font-family, $fallback-font-family !default; // Unit sizes $unit-o: .05rem !default; $unit-h: .1rem !default; $unit-1: .2rem !default; $unit-2: .4rem !default; $unit-3: .6rem !default; $unit-4: .8rem !default; $unit-5: 1rem !default; $unit-6: 1.2rem !default; $unit-7: 1.4rem !default; $unit-8: 1.6rem !default; $unit-9: 1.8rem !default; $unit-10: 2rem !default; $unit-12: 2.4rem !default; $unit-16: 3.2rem !default; // Font sizes $html-font-size: 20px !default; $html-line-height: 1.5 !default; $font-size: .8rem !default; $font-size-sm: .7rem !default; $font-size-lg: .9rem !default; $line-height: 1.2rem !default; // Sizes $layout-spacing: $unit-2 !default; $layout-spacing-sm: $unit-1 !default; $layout-spacing-lg: $unit-4 !default; $border-radius: $unit-h !default; $border-width: $unit-o !default; $border-width-lg: $unit-h !default; $control-size: $unit-9 !default; $control-size-sm: $unit-7 !default; $control-size-lg: $unit-10 !default; $control-padding-x: $unit-2 !default; $control-padding-x-sm: $unit-2 * .75 !default; $control-padding-x-lg: $unit-2 * 1.5 !default; $control-padding-y: ($control-size - $line-height) / 2 - $border-width !default; $control-padding-y-sm: ($control-size-sm - $line-height) / 2 - $border-width !default; $control-padding-y-lg: ($control-size-lg - $line-height) / 2 - $border-width !default; $control-icon-size: .8rem !default; $control-width-xs: 180px !default; $control-width-sm: 320px !default; $control-width-md: 640px !default; $control-width-lg: 960px !default; $control-width-xl: 1280px !default; // Responsive breakpoints $size-xs: 480px !default; $size-sm: 600px !default; $size-md: 840px !default; $size-lg: 960px !default; $size-xl: 1280px !default; $size-2x: 1440px !default; $responsive-breakpoint: $size-xs !default; // Z-index $zindex-0: 1 !default; $zindex-1: 100 !default; $zindex-2: 200 !default; $zindex-3: 300 !default; $zindex-4: 400 !default; ================================================ FILE: src/_viewer-360.scss ================================================ // 360 Degree Viewer // Mixin: Viewer slider sizes @mixin viewer-slider-size($image-number: 36) { @for $s from 1 through ($image-number) { .viewer-slider[max='#{$image-number}'][value='#{$s}'] + .viewer-image { background-position-y: percentage((($s)-1) * 1/(($image-number)-1)); } } } .viewer-360 { align-items: center; display: flex; flex-direction: column; // Copy and add more numbers if you need @include viewer-slider-size(36); .viewer-slider { cursor: ew-resize; margin: 1rem; order: 2; width: 60%; } .viewer-image { background-position-y: 0; background-repeat: no-repeat; background-size: 100%; max-width: 100%; order: 1; } } ================================================ FILE: src/icons/_icons-action.scss ================================================ // Icon resize .icon-resize-horiz, .icon-resize-vert { &::before, &::after { border: $icon-border-width solid currentColor; border-bottom: 0; border-right: 0; height: .45em; width: .45em; } &::before { transform: translate(-50%, -90%) rotate(45deg); } &::after { transform: translate(-50%, -10%) rotate(225deg); } } .icon-resize-horiz { &::before { transform: translate(-90%, -50%) rotate(-45deg); } &::after { transform: translate(-10%, -50%) rotate(135deg); } } // Icon more .icon-more-horiz, .icon-more-vert { &::before { background: currentColor; box-shadow: -.4em 0, .4em 0; border-radius: 50%; height: 3px; width: 3px; } } .icon-more-vert { &::before { box-shadow: 0 -.4em, 0 .4em; } } // Icon plus, minus, cross .icon-plus, .icon-minus, .icon-cross { &::before { background: currentColor; height: $icon-border-width; width: 100%; } } .icon-plus, .icon-cross { &::after { background: currentColor; height: 100%; width: $icon-border-width; } } .icon-cross { &::before { width: 100%; } &::after { height: 100%; } &::before, &::after { transform: translate(-50%, -50%) rotate(45deg); } } // Icon check .icon-check { &::before { border: $icon-border-width solid currentColor; border-right: 0; border-top: 0; height: .5em; width: .9em; transform: translate(-50%, -75%) rotate(-45deg); } } // Icon stop .icon-stop { border: $icon-border-width solid currentColor; border-radius: 50%; &::before { background: currentColor; height: $icon-border-width; transform: translate(-50%, -50%) rotate(45deg); width: 1em; } } // Icon shutdown .icon-shutdown { border: $icon-border-width solid currentColor; border-radius: 50%; border-top-color: transparent; &::before { background: currentColor; content: ""; height: .5em; top: .1em; width: $icon-border-width; } } // Icon refresh .icon-refresh { &::before { border: $icon-border-width solid currentColor; border-radius: 50%; border-right-color: transparent; height: 1em; width: 1em; } &::after { border: .2em solid currentColor; border-top-color: transparent; border-left-color: transparent; height: 0; left: 80%; top: 20%; width: 0; } } // Icon search .icon-search { &::before { border: $icon-border-width solid currentColor; border-radius: 50%; height: .75em; left: 5%; top: 5%; transform: translate(0, 0) rotate(45deg); width: .75em; } &::after { background: currentColor; height: $icon-border-width; left: 80%; top: 80%; transform: translate(-50%, -50%) rotate(45deg); width: .4em; } } // Icon edit .icon-edit { &::before { border: $icon-border-width solid currentColor; height: .4em; transform: translate(-40%, -60%) rotate(-45deg); width: .85em; } &::after { border: .15em solid currentColor; border-top-color: transparent; border-right-color: transparent; height: 0; left: 5%; top: 95%; transform: translate(0, -100%); width: 0; } } // Icon delete .icon-delete { &::before { border: $icon-border-width solid currentColor; border-bottom-left-radius: $border-radius; border-bottom-right-radius: $border-radius; border-top: 0; height: .75em; top: 60%; width: .75em; } &::after { background: currentColor; box-shadow: -.25em .2em, .25em .2em; height: $icon-border-width; top: $icon-border-width/2; width: .5em; } } // Icon share .icon-share { border: $icon-border-width solid currentColor; border-radius: $border-radius; border-right: 0; border-top: 0; &::before { border: $icon-border-width solid currentColor; border-left: 0; border-top: 0; height: .4em; left: 100%; top: .25em; transform: translate(-125%, -50%) rotate(-45deg); width: .4em; } &::after { border: $icon-border-width solid currentColor; border-bottom: 0; border-right: 0; border-radius: 75% 0; height: .5em; width: .6em; } } // Icon flag .icon-flag { &::before { background: currentColor; height: 1em; left: 15%; width: $icon-border-width; } &::after { border: $icon-border-width solid currentColor; border-bottom-right-radius: $border-radius; border-left: 0; border-top-right-radius: $border-radius; height: .65em; top: 35%; left: 60%; width: .8em; } } // Icon bookmark .icon-bookmark { &::before { border: $icon-border-width solid currentColor; border-bottom: 0; border-top-left-radius: $border-radius; border-top-right-radius: $border-radius; height: .9em; width: .8em; } &::after { border: $icon-border-width solid currentColor; border-bottom: 0; border-left: 0; border-radius: $border-radius; height: .5em; transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg); width: .5em; } } // Icon download & upload .icon-download, .icon-upload { border-bottom: $icon-border-width solid currentColor; &::before { border: $icon-border-width solid currentColor; border-bottom: 0; border-right: 0; height: .5em; width: .5em; transform: translate(-50%, -60%) rotate(-135deg); } &::after { background: currentColor; height: .6em; top: 40%; width: $icon-border-width; } } .icon-upload { &::before { transform: translate(-50%, -60%) rotate(45deg); } &::after { top: 50%; } } // Icon copy .icon-copy { &::before { border: $icon-border-width solid currentColor; border-radius: $border-radius; border-right: 0; border-bottom: 0; height: .8em; left: 40%; top: 35%; width: .8em; } &::after { border: $icon-border-width solid currentColor; border-radius: $border-radius; height: .8em; left: 60%; top: 60%; width: .8em; } } ================================================ FILE: src/icons/_icons-core.scss ================================================ // Icon variables $icon-border-width: $border-width-lg; $icon-prefix: "icon"; // Icon base style .#{$icon-prefix} { box-sizing: border-box; display: inline-block; font-size: inherit; font-style: normal; height: 1em; position: relative; text-indent: -9999px; vertical-align: middle; width: 1em; &::before, &::after { content: ""; display: block; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); } // Icon sizes &.icon-2x { font-size: 1.6rem; } &.icon-3x { font-size: 2.4rem; } &.icon-4x { font-size: 3.2rem; } } // Component icon support .accordion, .btn, .toast, .menu { .#{$icon-prefix} { vertical-align: -10%; } } .btn-lg { .#{$icon-prefix} { vertical-align: -15%; } } ================================================ FILE: src/icons/_icons-navigation.scss ================================================ // Icon arrows .icon-arrow-down, .icon-arrow-left, .icon-arrow-right, .icon-arrow-up, .icon-downward, .icon-back, .icon-forward, .icon-upward { &::before { border: $icon-border-width solid currentColor; border-bottom: 0; border-right: 0; height: .65em; width: .65em; } } .icon-arrow-down { &::before { transform: translate(-50%, -75%) rotate(225deg); } } .icon-arrow-left { &::before { transform: translate(-25%, -50%) rotate(-45deg); } } .icon-arrow-right { &::before { transform: translate(-75%, -50%) rotate(135deg); } } .icon-arrow-up { &::before { transform: translate(-50%, -25%) rotate(45deg); } } .icon-back, .icon-forward { &::after { background: currentColor; height: $icon-border-width; width: .8em; } } .icon-downward, .icon-upward { &::after { background: currentColor; height: .8em; width: $icon-border-width; } } .icon-back { &::after { left: 55%; } &::before { transform: translate(-50%, -50%) rotate(-45deg); } } .icon-downward { &::after { top: 45%; } &::before { transform: translate(-50%, -50%) rotate(-135deg); } } .icon-forward { &::after { left: 45%; } &::before { transform: translate(-50%, -50%) rotate(135deg); } } .icon-upward { &::after { top: 55%; } &::before { transform: translate(-50%, -50%) rotate(45deg); } } // Icon caret .icon-caret { &::before { border-top: .3em solid currentColor; border-right: .3em solid transparent; border-left: .3em solid transparent; height: 0; transform: translate(-50%, -25%); width: 0; } } // Icon menu .icon-menu { &::before { background: currentColor; box-shadow: 0 -.35em, 0 .35em; height: $icon-border-width; width: 100%; } } // Icon apps .icon-apps { &::before { background: currentColor; box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em; height: 3px; width: 3px; } } ================================================ FILE: src/icons/_icons-object.scss ================================================ // Icon time .icon-time { border: $icon-border-width solid currentColor; border-radius: 50%; &::before { background: currentColor; height: .4em; transform: translate(-50%, -75%); width: $icon-border-width; } &::after { background: currentColor; height: .3em; transform: translate(-50%, -75%) rotate(90deg); transform-origin: 50% 90%; width: $icon-border-width; } } // Icon mail .icon-mail { &::before { border: $icon-border-width solid currentColor; border-radius: $border-radius; height: .8em; width: 1em; } &::after { border: $icon-border-width solid currentColor; border-right: 0; border-top: 0; height: .5em; transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg); width: .5em; } } // Icon people .icon-people { &::before { border: $icon-border-width solid currentColor; border-radius: 50%; height: .45em; top: 25%; width: .45em; } &::after { border: $icon-border-width solid currentColor; border-radius: 50% 50% 0 0; height: .4em; top: 75%; width: .9em; } } // Icon message .icon-message { border: $icon-border-width solid currentColor; border-bottom: 0; border-radius: $border-radius; border-right: 0; &::before { border: $icon-border-width solid currentColor; border-bottom-right-radius: $border-radius; border-left: 0; border-top: 0; height: .8em; left: 65%; top: 40%; width: .7em; } &::after { background: currentColor; border-radius: $border-radius; height: .3em; left: 10%; top: 100%; transform: translate(0, -90%) rotate(45deg); width: $icon-border-width; } } // Icon photo .icon-photo { border: $icon-border-width solid currentColor; border-radius: $border-radius; &::before { border: $icon-border-width solid currentColor; border-radius: 50%; height: .25em; left: 35%; top: 35%; width: .25em; } &::after { border: $icon-border-width solid currentColor; border-bottom: 0; border-left: 0; height: .5em; left: 60%; transform: translate(-50%, 25%) rotate(-45deg); width: .5em; } } // Icon link .icon-link { &::before, &::after { border: $icon-border-width solid currentColor; border-radius: 5em 0 0 5em; border-right: 0; height: .5em; width: .75em; } &::before { transform: translate(-70%, -45%) rotate(-45deg); } &::after { transform: translate(-30%, -55%) rotate(135deg); } } // Icon location .icon-location { &::before { border: $icon-border-width solid currentColor; border-radius: 50% 50% 50% 0; height: .8em; transform: translate(-50%, -60%) rotate(-45deg); width: .8em; } &::after { border: $icon-border-width solid currentColor; border-radius: 50%; height: .2em; transform: translate(-50%, -80%); width: .2em; } } // Icon emoji .icon-emoji { border: $icon-border-width solid currentColor; border-radius: 50%; &::before { border-radius: 50%; box-shadow: -.17em -.1em, .17em -.1em; height: .15em; width: .15em; } &::after { border: $icon-border-width solid currentColor; border-bottom-color: transparent; border-radius: 50%; border-right-color: transparent; height: .5em; transform: translate(-50%, -40%) rotate(-135deg); width: .5em; } } ================================================ FILE: src/mixins/_avatar.scss ================================================ // Avatar mixin @mixin avatar-base($size: $unit-8) { font-size: $size / 2; height: $size; width: $size; } ================================================ FILE: src/mixins/_button.scss ================================================ // Button variant mixin @mixin button-variant($color: $primary-color) { background: $color; border-color: darken($color, 3%); color: $light-color; &:focus { @include control-shadow($color); } &:focus, &:hover { background: darken($color, 2%); border-color: darken($color, 5%); color: $light-color; } &:active, &.active { background: darken($color, 7%); border-color: darken($color, 10%); color: $light-color; } &.loading { &::after { border-bottom-color: $light-color; border-left-color: $light-color; } } } @mixin button-outline-variant($color: $primary-color) { background: $light-color; border-color: $color; color: $color; &:focus { @include control-shadow($color); } &:focus, &:hover { background: lighten($color, 50%); border-color: darken($color, 2%); color: $color; } &:active, &.active { background: $color; border-color: darken($color, 5%); color: $light-color; } &.loading { &::after { border-bottom-color: $color; border-left-color: $color; } } } ================================================ FILE: src/mixins/_clearfix.scss ================================================ // Clearfix mixin @mixin clearfix() { &::after { clear: both; content: ""; display: table; } } ================================================ FILE: src/mixins/_color.scss ================================================ // Background color utility mixin @mixin bg-color-variant($name: ".bg-primary", $color: $primary-color) { #{$name} { background: $color !important; @if (lightness($color) < 60) { color: $light-color; } } } // Text color utility mixin @mixin text-color-variant($name: ".text-primary", $color: $primary-color) { #{$name} { color: $color !important; } a#{$name} { &:focus, &:hover { color: darken($color, 5%); } &:visited { color: lighten($color, 5%); } } } ================================================ FILE: src/mixins/_label.scss ================================================ // Label base style @mixin label-base() { border-radius: $border-radius; line-height: 1.25; padding: .1rem .2rem; } @mixin label-variant($color: $light-color, $bg-color: $primary-color) { background: $bg-color; color: $color; } ================================================ FILE: src/mixins/_position.scss ================================================ // Margin utility mixin @mixin margin-variant($id: 1, $size: $unit-1) { .m-#{$id} { margin: $size !important; } .mb-#{$id} { margin-bottom: $size !important; } .ml-#{$id} { margin-left: $size !important; } .mr-#{$id} { margin-right: $size !important; } .mt-#{$id} { margin-top: $size !important; } .mx-#{$id} { margin-left: $size !important; margin-right: $size !important; } .my-#{$id} { margin-bottom: $size !important; margin-top: $size !important; } } // Padding utility mixin @mixin padding-variant($id: 1, $size: $unit-1) { .p-#{$id} { padding: $size !important; } .pb-#{$id} { padding-bottom: $size !important; } .pl-#{$id} { padding-left: $size !important; } .pr-#{$id} { padding-right: $size !important; } .pt-#{$id} { padding-top: $size !important; } .px-#{$id} { padding-left: $size !important; padding-right: $size !important; } .py-#{$id} { padding-bottom: $size !important; padding-top: $size !important; } } ================================================ FILE: src/mixins/_shadow.scss ================================================ // Component focus shadow @mixin control-shadow($color: $primary-color) { box-shadow: 0 0 0 .1rem rgba($color, .2); } // Shadow mixin @mixin shadow-variant($offset) { box-shadow: 0 $offset ($offset + .05rem) * 2 rgba($dark-color, .3); } ================================================ FILE: src/mixins/_text.scss ================================================ // Text Ellipsis @mixin text-ellipsis() { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } ================================================ FILE: src/mixins/_toast.scss ================================================ // Toast variant mixin @mixin toast-variant($color: $dark-color) { background: rgba($color, .95); border-color: $color; } ================================================ FILE: src/spectre-exp.scss ================================================ // Variables and mixins @import "variables"; @import "mixins"; /*! Spectre.css Experimentals v#{$version} | MIT License | github.com/picturepan2/spectre */ // Experimentals @import "autocomplete"; @import "calendars"; @import "carousels"; @import "comparison-sliders"; @import "filters"; @import "meters"; @import "off-canvas"; @import "parallax"; @import "progress"; @import "sliders"; @import "timelines"; @import "viewer-360"; ================================================ FILE: src/spectre-icons.scss ================================================ // Variables and mixins @import "variables"; @import "mixins"; /*! Spectre.css Icons v#{$version} | MIT License | github.com/picturepan2/spectre */ // Icons @import "icons/icons-core"; @import "icons/icons-navigation"; @import "icons/icons-action"; @import "icons/icons-object"; ================================================ FILE: src/spectre.scss ================================================ // Variables and mixins @import "variables"; @import "mixins"; /*! Spectre.css v#{$version} | MIT License | github.com/picturepan2/spectre */ // Reset and dependencies @import "normalize"; @import "base"; // Elements @import "typography"; @import "asian"; @import "tables"; @import "buttons"; @import "forms"; @import "labels"; @import "codes"; @import "media"; // Layout @import "layout"; @import "hero"; @import "navbar"; // Components @import "accordions"; @import "avatars"; @import "badges"; @import "breadcrumbs"; @import "bars"; @import "cards"; @import "chips"; @import "dropdowns"; @import "empty"; @import "menus"; @import "modals"; @import "navs"; @import "pagination"; @import "panels"; @import "popovers"; @import "steps"; @import "tabs"; @import "tiles"; @import "toasts"; @import "tooltips"; // Utility classes @import "animations"; @import "utilities"; ================================================ FILE: src/utilities/_colors.scss ================================================ // Text colors @include text-color-variant(".text-primary", $primary-color); @include text-color-variant(".text-secondary", $secondary-color-dark); @include text-color-variant(".text-gray", $gray-color); @include text-color-variant(".text-light", $light-color); @include text-color-variant(".text-dark", $body-font-color); @include text-color-variant(".text-success", $success-color); @include text-color-variant(".text-warning", $warning-color); @include text-color-variant(".text-error", $error-color); // Background colors @include bg-color-variant(".bg-primary", $primary-color); @include bg-color-variant(".bg-secondary", $secondary-color); @include bg-color-variant(".bg-dark", $dark-color); @include bg-color-variant(".bg-gray", $bg-color); @include bg-color-variant(".bg-success", $success-color); @include bg-color-variant(".bg-warning", $warning-color); @include bg-color-variant(".bg-error", $error-color); ================================================ FILE: src/utilities/_cursors.scss ================================================ // Cursors .c-hand { cursor: pointer; } .c-move { cursor: move; } .c-zoom-in { cursor: zoom-in; } .c-zoom-out { cursor: zoom-out; } .c-not-allowed { cursor: not-allowed; } .c-auto { cursor: auto; } ================================================ FILE: src/utilities/_display.scss ================================================ // Display .d-block { display: block; } .d-inline { display: inline; } .d-inline-block { display: inline-block; } .d-flex { display: flex; } .d-inline-flex { display: inline-flex; } .d-none, .d-hide { display: none !important; } .d-visible { visibility: visible; } .d-invisible { visibility: hidden; } .text-hide { background: transparent; border: 0; color: transparent; font-size: 0; line-height: 0; text-shadow: none; } .text-assistive { border: 0; clip: rect(0,0,0,0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } ================================================ FILE: src/utilities/_divider.scss ================================================ // Divider .divider, .divider-vert { display: block; position: relative; &[data-content]::after { background: $bg-color-light; color: $gray-color; content: attr(data-content); display: inline-block; font-size: $font-size-sm; padding: 0 $unit-2; transform: translateY(-$font-size-sm + $border-width); } } .divider { border-top: $border-width solid $border-color-light; height: $border-width; margin: $unit-2 0; &[data-content] { margin: $unit-4 0; } } .divider-vert { display: block; padding: $unit-4; &::before { border-left: $border-width solid $border-color; bottom: $unit-2; content: ""; display: block; left: 50%; position: absolute; top: $unit-2; transform: translateX(-50%); } &[data-content]::after { left: 50%; padding: $unit-1 0; position: absolute; top: 50%; transform: translate(-50%, -50%); } } ================================================ FILE: src/utilities/_loading.scss ================================================ // Loading .loading { color: transparent !important; min-height: $unit-4; pointer-events: none; position: relative; &::after { animation: loading 500ms infinite linear; background: transparent; border: $border-width-lg solid $primary-color; border-radius: 50%; border-right-color: transparent; border-top-color: transparent; content: ""; display: block; height: $unit-4; left: 50%; margin-left: -$unit-2; margin-top: -$unit-2; opacity: 1; padding: 0; position: absolute; top: 50%; width: $unit-4; z-index: $zindex-0; } &.loading-lg { min-height: $unit-10; &::after { height: $unit-8; margin-left: -$unit-4; margin-top: -$unit-4; width: $unit-8; } } } ================================================ FILE: src/utilities/_position.scss ================================================ // Position .clearfix { @include clearfix(); } .float-left { float: left !important; } .float-right { float: right !important; } .p-relative { position: relative !important; } .p-absolute { position: absolute !important; } .p-fixed { position: fixed !important; } .p-sticky { position: sticky !important; } .p-centered { display: block; float: none; margin-left: auto; margin-right: auto; } .flex-centered { align-items: center; display: flex; justify-content: center; } // Spacing @include margin-variant(0, 0); @include margin-variant(1, $unit-1); @include margin-variant(2, $unit-2); @include padding-variant(0, 0); @include padding-variant(1, $unit-1); @include padding-variant(2, $unit-2); ================================================ FILE: src/utilities/_shapes.scss ================================================ // Shapes .s-rounded { border-radius: $border-radius; } .s-circle { border-radius: 50%; } ================================================ FILE: src/utilities/_text.scss ================================================ // Text // Text alignment utilities .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .text-justify { text-align: justify; } // Text transform utilities .text-lowercase { text-transform: lowercase; } .text-uppercase { text-transform: uppercase; } .text-capitalize { text-transform: capitalize; } // Text style utilities .text-normal { font-weight: normal; } .text-bold { font-weight: bold; } .text-italic { font-style: italic; } .text-large { font-size: 1.2em; } .text-small { font-size: .9em; } .text-tiny { font-size: .8em; } .text-muted { opacity: .8; } // Text overflow utilities .text-ellipsis { @include text-ellipsis(); } .text-clip { overflow: hidden; text-overflow: clip; white-space: nowrap; } .text-break { hyphens: auto; word-break: break-word; word-wrap: break-word; }