From 5842436b6cdbe052b2266a8c81e3eaf929c9f16c Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Fri, 10 Feb 2023 04:38:23 +0800 Subject: [PATCH] feat(theme): initial styles --- packages/theme/src/client/styles/index.scss | 4 + .../theme/src/client/styles/normalize.scss | 231 ++++++++++ .../theme/src/client/styles/nprogress.scss | 12 + packages/theme/src/client/styles/vars.scss | 401 ++++++++++++++++++ 4 files changed, 648 insertions(+) create mode 100644 packages/theme/src/client/styles/normalize.scss create mode 100644 packages/theme/src/client/styles/nprogress.scss create mode 100644 packages/theme/src/client/styles/vars.scss diff --git a/packages/theme/src/client/styles/index.scss b/packages/theme/src/client/styles/index.scss index e69de29b..dec863da 100644 --- a/packages/theme/src/client/styles/index.scss +++ b/packages/theme/src/client/styles/index.scss @@ -0,0 +1,4 @@ +@use 'vars'; +@use 'fonts'; +@use 'normalize'; +@use 'nprogress'; diff --git a/packages/theme/src/client/styles/normalize.scss b/packages/theme/src/client/styles/normalize.scss new file mode 100644 index 00000000..5ccb5d8b --- /dev/null +++ b/packages/theme/src/client/styles/normalize.scss @@ -0,0 +1,231 @@ +*, +::before, +::after { + box-sizing: border-box; +} + +html { + line-height: 1.4; + font-size: 16px; + -webkit-text-size-adjust: 100%; +} + +html.dark { + color-scheme: dark; +} + +body { + margin: 0; + width: 100%; + min-width: 320px; + min-height: 100vh; + line-height: 24px; + font-family: var(--vp-font-family-base); + font-size: 16px; + font-weight: 400; + color: var(--vp-c-text-1); + background-color: var(--vp-c-bg); + direction: ltr; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +main { + display: block; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + line-height: 24px; + font-size: 16px; + font-weight: 400; +} + +p { + margin: 0; +} + +strong, +b { + font-weight: 600; +} + +/** + * Avoid 300ms click delay on touch devices that support the `touch-action` + * CSS property. + * + * In particular, unlike most other browsers, IE11+Edge on Windows 10 on + * touch devices and IE Mobile 10-11 DON'T remove the click delay when + * `` is present. + * However, they DO support removing the click delay via + * `touch-action: manipulation`. + * + * See: + * - http://v4-alpha.getbootstrap.com/content/reboot/#click-delay-optimization-for-touch + * - http://caniuse.com/#feat=css-touch-action + * - http://patrickhlauke.github.io/touch/tests/results/#suppressing-300ms-delay + */ +a, +area, +button, +[role='button'], +input, +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +a { + color: inherit; + text-decoration: inherit; +} + +ol, +ul { + list-style: none; + margin: 0; + padding: 0; +} + +blockquote { + margin: 0; +} + +pre, +code, +kbd, +samp { + font-family: var(--vp-font-family-mono); +} + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; +} + +figure { + margin: 0; +} + +img, +video { + max-width: 100%; + height: auto; +} + +button, +input, +optgroup, +select, +textarea { + border: 0; + padding: 0; + line-height: inherit; + color: inherit; +} + +button { + padding: 0; + font-family: inherit; + background-color: transparent; + background-image: none; +} + +button:enabled, +[role='button']:enabled { + cursor: pointer; +} + +button:focus, +button:focus-visible { + outline: 1px dotted; + outline: 4px auto -webkit-focus-ring-color; +} + +button:focus:not(:focus-visible) { + outline: none !important; +} + +input:focus, +textarea:focus, +select:focus { + outline: none; +} + +table { + border-collapse: collapse; +} + +input { + background-color: transparent; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: var(--vp-c-text-3); +} + +input::-ms-input-placeholder, +textarea::-ms-input-placeholder { + color: var(--vp-c-text-3); +} + +input::placeholder, +textarea::placeholder { + color: var(--vp-c-text-3); +} + +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type='number'] { + -moz-appearance: textfield; + appearance: textfield; +} + +textarea { + resize: vertical; +} + +select { + -webkit-appearance: none; + appearance: none; +} + +fieldset { + margin: 0; + padding: 0; +} + +h1, +h2, +h3, +h4, +h5, +h6, +li, +p { + overflow-wrap: break-word; +} + +vite-error-overlay { + z-index: 9999; +} diff --git a/packages/theme/src/client/styles/nprogress.scss b/packages/theme/src/client/styles/nprogress.scss new file mode 100644 index 00000000..477703ce --- /dev/null +++ b/packages/theme/src/client/styles/nprogress.scss @@ -0,0 +1,12 @@ +#nprogress .bar { + background: var(--vp-c-brand); +} + +#nprogress .spinner-icon { + border-top-color: var(--vp-c-brand); + border-left-color: var(--vp-c-brand); +} + +#nprogress .peg { + box-shadow: 0 0 10px var(--vp-c-brand), 0 0 5px var(--vp-c-brand); +} diff --git a/packages/theme/src/client/styles/vars.scss b/packages/theme/src/client/styles/vars.scss new file mode 100644 index 00000000..aee40e11 --- /dev/null +++ b/packages/theme/src/client/styles/vars.scss @@ -0,0 +1,401 @@ +/** + * Colors Base + * + * These are the pure base color presets. Most of the time, you should not be + * using these colors directly in the theme but rather use "Colors Theme" + * instead because those are "Theme (light or dark)" dependant. + * -------------------------------------------------------------------------- */ + +:root { + --vp-c-white: #ffffff; + --vp-c-black: #000000; + + --vp-c-gray: #8e8e93; + + --vp-c-text-light-1: rgba(60, 60, 67, 0.92); + --vp-c-text-light-2: rgba(60, 60, 67, 0.7); + --vp-c-text-light-3: rgba(60, 60, 67, 0.33); + + --vp-c-text-dark-1: rgba(255, 255, 245, 0.86); + --vp-c-text-dark-2: rgba(235, 235, 245, 0.6); + --vp-c-text-dark-3: rgba(235, 235, 245, 0.38); + + --vp-c-green: #10b981; + --vp-c-green-light: #34d399; + --vp-c-green-lighter: #6ee7b7; + --vp-c-green-dark: #059669; + --vp-c-green-darker: #047857; + --vp-c-green-dimm-1: rgba(16, 185, 129, 0.05); + --vp-c-green-dimm-2: rgba(16, 185, 129, 0.2); + --vp-c-green-dimm-3: rgba(16, 185, 129, 0.5); + + --vp-c-yellow: #eab308; + --vp-c-yellow-light: #facc15; + --vp-c-yellow-lighter: #fde047; + --vp-c-yellow-dark: #ca8a04; + --vp-c-yellow-darker: #a16207; + --vp-c-yellow-dimm-1: rgba(234, 179, 8, 0.05); + --vp-c-yellow-dimm-2: rgba(234, 179, 8, 0.2); + --vp-c-yellow-dimm-3: rgba(234, 179, 8, 0.5); + + --vp-c-red: #f43f5e; + --vp-c-red-light: #fb7185; + --vp-c-red-lighter: #fda4af; + --vp-c-red-dark: #e11d48; + --vp-c-red-darker: #be123c; + --vp-c-red-dimm-1: rgba(244, 63, 94, 0.05); + --vp-c-red-dimm-2: rgba(244, 63, 94, 0.2); + --vp-c-red-dimm-3: rgba(244, 63, 94, 0.5); + + --vp-c-sponsor: #db2777; +} + +/** + * Colors Theme + * -------------------------------------------------------------------------- */ + +:root { + --vp-c-bg: #ffffff; + + --vp-c-bg-elv: #ffffff; + --vp-c-bg-elv-up: #ffffff; + --vp-c-bg-elv-down: #f6f6f7; + --vp-c-bg-elv-mute: #f6f6f7; + + --vp-c-bg-soft: #f6f6f7; + --vp-c-bg-soft-up: #ffffff; + --vp-c-bg-soft-down: #e3e3e5; + --vp-c-bg-soft-mute: #e3e3e5; + + --vp-c-bg-alt: #f6f6f7; + + --vp-c-border: rgba(60, 60, 67, 0.29); + --vp-c-divider: rgba(60, 60, 67, 0.12); + --vp-c-gutter: rgba(60, 60, 67, 0.12); + + --vp-c-neutral: var(--vp-c-black); + --vp-c-neutral-inverse: var(--vp-c-white); + + --vp-c-text-1: var(--vp-c-text-light-1); + --vp-c-text-2: var(--vp-c-text-light-2); + --vp-c-text-3: var(--vp-c-text-light-3); + + --vp-c-text-inverse-1: var(--vp-c-text-dark-1); + --vp-c-text-inverse-2: var(--vp-c-text-dark-2); + --vp-c-text-inverse-3: var(--vp-c-text-dark-3); + + --vp-c-text-code: #476582; + + --vp-c-brand: var(--vp-c-green); + --vp-c-brand-light: var(--vp-c-green-light); + --vp-c-brand-lighter: var(--vp-c-green-lighter); + --vp-c-brand-dark: var(--vp-c-green-dark); + --vp-c-brand-darker: var(--vp-c-green-darker); + + --vp-c-mute: #f6f6f7; + --vp-c-mute-light: #f9f9fc; + --vp-c-mute-lighter: #ffffff; + --vp-c-mute-dark: #e3e3e5; + --vp-c-mute-darker: #d7d7d9; +} + +.dark { + --vp-c-bg: #1e1e20; + + --vp-c-bg-elv: #252529; + --vp-c-bg-elv-up: #313136; + --vp-c-bg-elv-down: #1e1e20; + --vp-c-bg-elv-mute: #313136; + + --vp-c-bg-soft: #252529; + --vp-c-bg-soft-up: #313136; + --vp-c-bg-soft-down: #1e1e20; + --vp-c-bg-soft-mute: #313136; + + --vp-c-bg-alt: #161618; + + --vp-c-border: rgba(82, 82, 89, 0.68); + --vp-c-divider: rgba(82, 82, 89, 0.32); + --vp-c-gutter: #000000; + + --vp-c-neutral: var(--vp-c-white); + --vp-c-neutral-inverse: var(--vp-c-black); + + --vp-c-text-1: var(--vp-c-text-dark-1); + --vp-c-text-2: var(--vp-c-text-dark-2); + --vp-c-text-3: var(--vp-c-text-dark-3); + + --vp-c-text-inverse-1: var(--vp-c-text-light-1); + --vp-c-text-inverse-2: var(--vp-c-text-light-2); + --vp-c-text-inverse-3: var(--vp-c-text-light-3); + + --vp-c-text-code: #c9def1; + + --vp-c-mute: #313136; + --vp-c-mute-light: #3a3a3c; + --vp-c-mute-lighter: #505053; + --vp-c-mute-dark: #2c2c30; + --vp-c-mute-darker: #252529; +} + +/** + * Typography + * -------------------------------------------------------------------------- */ + +:root { + --vp-font-family-base: 'Inter var', 'Inter', ui-sans-serif, system-ui, + -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', + Helvetica, Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', + 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --vp-font-family-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Monaco, + Consolas, 'Liberation Mono', 'Courier New', monospace; +} + +/** + * Shadows + * -------------------------------------------------------------------------- */ + +:root { + --vp-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06); + --vp-shadow-2: 0 3px 12px rgba(0, 0, 0, 0.07), 0 1px 4px rgba(0, 0, 0, 0.07); + --vp-shadow-3: 0 12px 32px rgba(0, 0, 0, 0.1), 0 2px 6px rgba(0, 0, 0, 0.08); + --vp-shadow-4: 0 14px 44px rgba(0, 0, 0, 0.12), 0 3px 9px rgba(0, 0, 0, 0.12); + --vp-shadow-5: 0 18px 56px rgba(0, 0, 0, 0.16), 0 4px 12px rgba(0, 0, 0, 0.16); +} + +/** + * Z-indexes + * -------------------------------------------------------------------------- */ + +:root { + --vp-z-index-local-nav: 10; + --vp-z-index-nav: 20; + --vp-z-index-layout-top: 30; + --vp-z-index-backdrop: 40; + --vp-z-index-sidebar: 50; + --vp-z-index-footer: 60; +} + +/** + * Icons + * -------------------------------------------------------------------------- */ + +:root { + --vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E"); + --vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E"); +} + +/** + * Layouts + * -------------------------------------------------------------------------- */ + +:root { + --vp-layout-max-width: 1440px; +} + +/** + * Component: Code + * -------------------------------------------------------------------------- */ + +:root { + --vp-code-line-height: 1.7; + --vp-code-font-size: 0.875em; + + --vp-code-block-color: var(--vp-c-text-dark-1); + --vp-code-block-bg: #292b30; + --vp-code-block-divider-color: #000000; + + --vp-code-line-highlight-color: rgba(0, 0, 0, 0.5); + --vp-code-line-number-color: var(--vp-c-text-dark-3); + + --vp-code-line-diff-add-color: var(--vp-c-green-dimm-2); + --vp-code-line-diff-add-symbol-color: var(--vp-c-green); + + --vp-code-line-diff-remove-color: var(--vp-c-red-dimm-2); + --vp-code-line-diff-remove-symbol-color: var(--vp-c-red); + + --vp-code-line-warning-color: var(--vp-c-yellow-dimm-2); + --vp-code-line-error-color: var(--vp-c-red-dimm-2); + + --vp-code-copy-code-hover-bg: rgba(255, 255, 255, 0.05); + --vp-code-copy-code-active-text: var(--vp-c-text-dark-2); + + --vp-code-tab-divider: var(--vp-code-block-divider-color); + --vp-code-tab-text-color: var(--vp-c-text-dark-2); + --vp-code-tab-bg: var(--vp-code-block-bg); + --vp-code-tab-hover-text-color: var(--vp-c-text-dark-1); + --vp-code-tab-active-text-color: var(--vp-c-text-dark-1); + --vp-code-tab-active-bar-color: var(--vp-c-brand); +} + +.dark { + --vp-code-block-bg: #161618; +} + +/** + * Component: Button + * -------------------------------------------------------------------------- */ + +:root { + --vp-button-brand-border: var(--vp-c-brand-lighter); + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand); + --vp-button-brand-hover-border: var(--vp-c-brand-lighter); + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-dark); + --vp-button-brand-active-border: var(--vp-c-brand-lighter); + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-c-brand-darker); + + --vp-button-alt-border: var(--vp-c-border); + --vp-button-alt-text: var(--vp-c-neutral); + --vp-button-alt-bg: var(--vp-c-mute); + --vp-button-alt-hover-border: var(--vp-c-border); + --vp-button-alt-hover-text: var(--vp-c-neutral); + --vp-button-alt-hover-bg: var(--vp-c-mute-dark); + --vp-button-alt-active-border: var(--vp-c-border); + --vp-button-alt-active-text: var(--vp-c-neutral); + --vp-button-alt-active-bg: var(--vp-c-mute-darker); + + --vp-button-sponsor-border: var(--vp-c-gray-light-3); + --vp-button-sponsor-text: var(--vp-c-text-light-2); + --vp-button-sponsor-bg: transparent; + --vp-button-sponsor-hover-border: var(--vp-c-sponsor); + --vp-button-sponsor-hover-text: var(--vp-c-sponsor); + --vp-button-sponsor-hover-bg: transparent; + --vp-button-sponsor-active-border: var(--vp-c-sponsor); + --vp-button-sponsor-active-text: var(--vp-c-sponsor); + --vp-button-sponsor-active-bg: transparent; +} + +.dark { + --vp-button-sponsor-border: var(--vp-c-gray-dark-1); + --vp-button-sponsor-text: var(--vp-c-text-dark-2); +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-custom-block-font-size: 14px; + --vp-custom-block-code-font-size: 13px; + + --vp-custom-block-info-border: var(--vp-c-border); + --vp-custom-block-info-text: var(--vp-c-text-2); + --vp-custom-block-info-bg: var(--vp-c-bg-soft); + --vp-custom-block-info-code-bg: var(--vp-c-mute); + + --vp-custom-block-tip-border: var(--vp-c-green-dimm-3); + --vp-custom-block-tip-text: var(--vp-c-green); + --vp-custom-block-tip-bg: var(--vp-c-green-dimm-1); + --vp-custom-block-tip-code-bg: var(--vp-custom-block-tip-bg); + + --vp-custom-block-warning-border: var(--vp-c-yellow-dimm-3); + --vp-custom-block-warning-text: var(--vp-c-yellow); + --vp-custom-block-warning-bg: var(--vp-c-yellow-dimm-1); + --vp-custom-block-warning-code-bg: var(--vp-custom-block-warning-bg); + + --vp-custom-block-danger-border: var(--vp-c-red-dimm-3); + --vp-custom-block-danger-text: var(--vp-c-red); + --vp-custom-block-danger-bg: var(--vp-c-red-dimm-1); + --vp-custom-block-danger-code-bg: var(--vp-custom-block-danger-bg); + + --vp-custom-block-details-border: var(--vp-custom-block-info-border); + --vp-custom-block-details-text: var(--vp-custom-block-info-text); + --vp-custom-block-details-bg: var(--vp-custom-block-info-bg); + --vp-custom-block-details-code-bg: var(--vp-custom-block-details-bg); +} + +/** + * Component: Input + * -------------------------------------------------------------------------- */ + +:root { + --vp-input-border-color: var(--vp-c-border); + --vp-input-bg-color: var(--vp-c-bg-alt); + --vp-input-hover-border-color: var(--vp-c-gray); + + --vp-input-switch-bg-color: var(--vp-c-mute); +} + +/** + * Component: Nav + * -------------------------------------------------------------------------- */ + +:root { + --vp-nav-height: 64px; + --vp-nav-bg-color: var(--vp-c-bg); + --vp-nav-screen-bg-color: var(--vp-c-bg); +} + +/** + * Component: Local Nav + * -------------------------------------------------------------------------- */ + +:root { + --vp-local-nav-bg-color: var(--vp-c-bg); +} + +/** + * Component: Sidebar + * -------------------------------------------------------------------------- */ + +:root { + --vp-sidebar-width: 272px; + --vp-sidebar-bg-color: var(--vp-c-bg-alt); +} + +/** + * Colors Backdrop + * -------------------------------------------------------------------------- */ + +:root { + --vp-backdrop-bg-color: rgba(0, 0, 0, 0.6); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ + +:root { + --vp-home-hero-name-color: var(--vp-c-brand); + --vp-home-hero-name-background: transparent; + + --vp-home-hero-image-background-image: none; + --vp-home-hero-image-filter: none; +} + +/** + * Component: Badge + * -------------------------------------------------------------------------- */ + +:root { + --vp-badge-info-border: var(--vp-c-border); + --vp-badge-info-text: var(--vp-c-text-2); + --vp-badge-info-bg: var(--vp-c-bg-soft); + + --vp-badge-tip-border: var(--vp-c-green-dark); + --vp-badge-tip-text: var(--vp-c-green); + --vp-badge-tip-bg: var(--vp-c-green-dimm-1); + + --vp-badge-warning-border: var(--vp-c-yellow-dark); + --vp-badge-warning-text: var(--vp-c-yellow); + --vp-badge-warning-bg: var(--vp-c-yellow-dimm-1); + + --vp-badge-danger-border: var(--vp-c-red-dark); + --vp-badge-danger-text: var(--vp-c-red); + --vp-badge-danger-bg: var(--vp-c-red-dimm-1); +} + +/** + * Component: CarbonAds + * -------------------------------------------------------------------------- */ + +:root { + --vp-carbon-ads-text-color: var(--vp-c-text-1); + --vp-carbon-ads-poweredby-color: var(--vp-c-text-2); + --vp-carbon-ads-bg-color: var(--vp-c-bg-soft); + --vp-carbon-ads-hover-text-color: var(--vp-c-brand); + --vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1); +}