Site updated: 2026-05-13 16:50:34

This commit is contained in:
llbzow
2026-05-13 16:50:38 +08:00
parent 8f2e89e58c
commit 54f0d09b31
361 changed files with 204078 additions and 0 deletions

94
css/custom.css Normal file
View File

@@ -0,0 +1,94 @@
/* ==========================================================
自定义博客的美化样式 (Custom Style for Butterfly)
主要用于配合背景图片,实现内容容器的半透明毛玻璃效果
========================================================== */
/* 1. 整体布局页面背景透明,让 body 背景图透射出来 */
#body-wrap {
background: transparent !important;
}
/* 2. 主卡片容器(文章列表、内容页)的半透明毛玻璃效果 */
.layout > div:first-child:not(.recent-posts) {
background: rgba(255, 255, 255, 0.85) !important;
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
border-radius: 12px;
box-shadow: 0 4px 8px 6px rgba(7, 17, 27, 0.06);
}
/* 首页文章卡片 */
.recent-posts > .recent-post-item {
background: rgba(255, 255, 255, 0.85) !important;
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
border-radius: 12px;
box-shadow: 0 4px 8px 6px rgba(7, 17, 27, 0.06);
}
/* 3. 侧边栏所有块状元素(名片、公告、分类等)透明毛玻璃效果 */
#aside-content .card-widget {
background: rgba(255, 255, 255, 0.85) !important;
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
border-radius: 12px;
box-shadow: 0 4px 8px 6px rgba(7, 17, 27, 0.06);
}
/* 4. 分页栏容器透明处理 */
#pagination {
background: transparent !important;
}
#pagination .page-number.current {
background: var(--btn-bg) !important;
}
/* 5. 顶层导航栏(随屏幕滚动效果调整) */
#page-header.nav-fixed #nav {
background: rgba(255, 255, 255, 0.8) !important;
backdrop-filter: blur(5px);
-webkit-backdrop-filter: blur(5px);
box-shadow: 0 5px 6px -5px rgba(133, 133, 133, 0.6);
}
/* 6. 深色模式下的适配 (Dark mode compatibility) */
[data-theme="dark"] .layout > div:first-child:not(.recent-posts),
[data-theme="dark"] .recent-posts > .recent-post-item,
[data-theme="dark"] #aside-content .card-widget {
background: rgba(30, 30, 30, 0.8) !important; /* 深灰色半透明 */
box-shadow: 0 4px 8px 6px rgba(0, 0, 0, 0.5);
}
[data-theme="dark"] #page-header.nav-fixed #nav {
background: rgba(18, 18, 18, 0.8) !important;
box-shadow: 0 5px 6px -5px rgba(0, 0, 0, 0.6);
}
/* 隐藏不需要的线条组件 (如果配置中开启了 canvas_nest 觉得乱可以强行在此隐藏) */
/* canvas {
opacity: 0.3 !important;
} */
/* ==========================================================
LQIP 图片懒加载渐入动效
使用 lazysizes 的 class 状态控制,确保加载后图片清晰还原
========================================================== */
/* 加载中:模糊 + 半透明lazysizes 会自动添加这些 class*/
img.lazyload,
img.lazyloading {
filter: blur(10px);
opacity: 0.6;
transition: filter 0.45s ease, opacity 0.45s ease;
will-change: filter, opacity;
}
/* 加载完成完全清晰lazysizes 添加 lazyloaded class 后生效)*/
img.lazyloaded {
filter: blur(0) !important;
opacity: 1 !important;
transition: filter 0.45s ease, opacity 0.45s ease;
}

749
css/hbe.style.css Normal file
View File

@@ -0,0 +1,749 @@
.hbe,
.hbe:after,
.hbe:before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.hbe-container{
margin: 0 auto;
overflow: hidden;
}
.hbe-content {
text-align: center;
font-size: 150%;
padding: 1em 0;
}
.hbe-input {
position: relative;
z-index: 1;
display: inline-block;
margin: 1em;
width: 80%;
min-width: 200px;
vertical-align: top;
}
.hbe-input-field {
line-height: normal;
font-size: 100%;
margin: 0;
position: relative;
display: block;
float: right;
padding: 0.8em;
width: 60%;
border: none;
border-radius: 0;
background: #f0f0f0;
color: #aaa;
font-weight: 400;
font-family: "Avenir Next", "Helvetica Neue", Helvetica, Arial, sans-serif;
-webkit-appearance: none; /* for box shadows to show on iOS */
}
.hbe-input-field:focus {
outline: none;
}
.hbe-input-label {
display: inline-block;
float: right;
padding: 0 1em;
width: 40%;
color: #696969;
font-weight: bold;
font-size: 70.25%;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.hbe-input-label-content {
position: relative;
display: block;
padding: 1.6em 0;
width: 100%;
}
.hbe-graphic {
position: absolute;
top: 0;
left: 0;
fill: none;
}
/* hbe button in post page */
.hbe-button {
width: 130px;
height: 40px;
background: linear-gradient(to bottom, #4eb5e5 0%,#389ed5 100%); /* W3C */
border: none;
border-radius: 5px;
position: relative;
border-bottom: 4px solid #2b8bc6;
color: #fbfbfb;
font-weight: 600;
font-family: 'Open Sans', sans-serif;
text-shadow: 1px 1px 1px rgba(0,0,0,.4);
font-size: 15px;
text-align: left;
text-indent: 5px;
box-shadow: 0px 3px 0px 0px rgba(0,0,0,.2);
cursor: pointer;
display: block;
margin: 0 auto;
margin-bottom: 20px;
}
.hbe-button:active {
box-shadow: 0px 2px 0px 0px rgba(0,0,0,.2);
top: 1px;
}
.hbe-button:after {
content: "";
width: 0;
height: 0;
display: block;
border-top: 20px solid #187dbc;
border-bottom: 20px solid #187dbc;
border-left: 16px solid transparent;
border-right: 20px solid #187dbc;
position: absolute;
opacity: 0.6;
right: 0;
top: 0;
border-radius: 0 5px 5px 0;
}
/* hbe button in post page */
/* default theme {{{ */
.hbe-input-default {
overflow: hidden;
}
.hbe-input-field-default {
width: 100%;
background: transparent;
padding: 0.5em;
margin-bottom: 2em;
color: #f9f7f6;
z-index: 100;
opacity: 0;
}
.hbe-input-label-default {
width: 100%;
position: absolute;
text-align: left;
padding: 0.5em 0;
pointer-events: none;
font-size: 1em;
}
.hbe-input-label-default::before,
.hbe-input-label-default::after {
content: '';
position: absolute;
width: 100%;
left: 0;
}
.hbe-input-label-default::before {
height: 100%;
background: #666666;
top: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
-webkit-transition: -webkit-transform 0.2s;
transition: transform 0.2s;
}
.hbe-input-label-default::after {
height: 2px;
background: #666666;
top: 100%;
-webkit-transition: opacity 0.2s;
transition: opacity 0.2s;
}
.hbe-input-label-content-default {
padding: 0;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transition: -webkit-transform 0.2s, color 0.2s;
transition: transform 0.2s, color 0.2s;
}
.hbe-input-field-default:focus,
.hbe-input--filled .hbe-input-field-default {
opacity: 1;
-webkit-transition: opacity 0s 0.2s;
transition: opacity 0s 0.2s;
}
.hbe-input-label-default::before,
.hbe-input-label-default::after,
.hbe-input-label-content-default,
.hbe-input-field-default:focus,
.hbe-input--filled .hbe-input-field-default {
-webkit-transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1);
transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1);
}
.hbe-input-field-default:focus + .hbe-input-label-default::before,
.hbe-input--filled .hbe-input-label-default::before {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.hbe-input-field-default:focus + .hbe-input-label-default::after,
.hbe-input--filled .hbe-input-label-default::after {
opacity: 0;
}
.hbe-input-field-default:focus + .hbe-input-label-default .hbe-input-label-content-default,
.hbe-input--filled .hbe-input-label-default .hbe-input-label-content-default {
color: #555555;
-webkit-transform: translate3d(0, 2.1em, 0) scale3d(0.65, 0.65, 1);
transform: translate3d(0, 2.1em, 0) scale3d(0.65, 0.65, 1);
}
/* default theme }}} */
/* up theme {{{ */
.hbe-input-up {
overflow: hidden;
padding-top: 2em;
}
.hbe-input-field-up {
width: 100%;
background: transparent;
opacity: 0;
padding: 0.35em;
z-index: 100;
color: #837482;
}
.hbe-input-label-up {
width: 100%;
bottom: 0;
position: absolute;
pointer-events: none;
text-align: left;
color: #8E9191;
padding: 0 0.5em;
}
.hbe-input-label-up::before {
content: '';
position: absolute;
width: 100%;
height: 4em;
top: 100%;
left: 0;
background: #fff;
border-top: 4px solid #9B9F9F;
-webkit-transform: translate3d(0, -3px, 0);
transform: translate3d(0, -3px, 0);
-webkit-transition: -webkit-transform 0.4s;
transition: transform 0.4s;
-webkit-transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
}
.hbe-input-label-content-up {
padding: 0.5em 0;
-webkit-transform-origin: 0% 100%;
transform-origin: 0% 100%;
-webkit-transition: -webkit-transform 0.4s, color 0.4s;
transition: transform 0.4s, color 0.4s;
-webkit-transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
}
.hbe-input-field-up:focus,
.input--filled .hbe-input-field-up {
cursor: text;
opacity: 1;
-webkit-transition: opacity 0s 0.4s;
transition: opacity 0s 0.4s;
}
.hbe-input-field-up:focus + .hbe-input-label-up::before,
.input--filled .hbe-input-label-up::before {
-webkit-transition-delay: 0.05s;
transition-delay: 0.05s;
-webkit-transform: translate3d(0, -3.3em, 0);
transform: translate3d(0, -3.3em, 0);
}
.hbe-input-field-up:focus + .hbe-input-label-up .hbe-input-label-content-up,
.input--filled .hbe-input-label-content-up {
color: #6B6E6E;
-webkit-transform: translate3d(0, -3.3em, 0) scale3d(0.81, 0.81, 1);
transform: translate3d(0, -3.3em, 0) scale3d(0.81, 0.81, 1);
}
/* up theme }}} */
/* wave theme {{{ */
.hbe-input-wave {
overflow: hidden;
padding-top: 1em;
}
.hbe-input-field-wave {
padding: 0.5em 0em 0.25em;
width: 100%;
background: transparent;
color: #9da8b2;
font-size: 1.25em;
}
.hbe-input-label-wave {
position: absolute;
top: 0.95em;
font-size: 0.85em;
left: 0;
display: block;
width: 100%;
text-align: left;
padding: 0em;
pointer-events: none;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transition: -webkit-transform 0.2s 0.15s, color 1s;
transition: transform 0.2s 0.15s, color 1s;
-webkit-transition-timing-function: ease-out;
transition-timing-function: ease-out;
}
.hbe-graphic-wave {
stroke: #92989e;
pointer-events: none;
-webkit-transition: -webkit-transform 0.7s, stroke 0.7s;
transition: transform 0.7s, stroke 0.7s;
-webkit-transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1);
transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1);
}
.hbe-input-field-wave:focus + .hbe-input-label-wave,
.input--filled .hbe-input-label-wave {
color: #333;
-webkit-transform: translate3d(0, -1.25em, 0) scale3d(0.75, 0.75, 1);
transform: translate3d(0, -1.25em, 0) scale3d(0.75, 0.75, 1);
}
.hbe-input-field-wave:focus ~ .hbe-graphic-wave,
.input--filled .graphic-wave {
stroke: #333;
-webkit-transform: translate3d(-66.6%, 0, 0);
transform: translate3d(-66.6%, 0, 0);
}
/* wave theme }}} */
/* flip theme {{{ */
.hbe-input-field-flip {
width: 100%;
background-color: #d0d1d0;
border: 2px solid transparent;
-webkit-transition: background-color 0.25s, border-color 0.25s;
transition: background-color 0.25s, border-color 0.25s;
}
.hbe-input-label-flip {
width: 100%;
text-align: left;
position: absolute;
bottom: 100%;
pointer-events: none;
overflow: hidden;
padding: 0 1.25em;
-webkit-transform: translate3d(0, 3em, 0);
transform: translate3d(0, 3em, 0);
-webkit-transition: -webkit-transform 0.25s;
transition: transform 0.25s ;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out;
}
.hbe-input-label-content-flip {
color: #8B8C8B;
padding: 0.25em 0;
-webkit-transition: -webkit-transform 0.25s;
transition: transform 0.25s;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out;
}
.hbe-input-label-content-flip::after {
content: attr(data-content);
position: absolute;
font-weight: 800;
bottom: 100%;
left: 0;
height: 100%;
width: 100%;
color: #666666;
padding: 0.25em 0;
letter-spacing: 1px;
font-size: 1em;
}
.hbe-input-field-flip:focus + .hbe-input-label-flip,
.input--filled .hbe-input-label-flip {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.hbe-input-field-flip:focus + .hbe-input-label-flip .hbe-input-label-content-flip,
.input--filled .hbe-input-label-content-flip {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
.hbe-input-field-flip:focus + .hbe-input-field-flip,
.input--filled .hbe-input-field-flip {
background-color: transparent;
border-color: #666666;
}
/* flip theme }}} */
/* xray theme {{{ */
.hbe-input-xray {
overflow: hidden;
padding-bottom: 2.5em;
}
.hbe-input-field-xray {
padding: 0;
margin-top: 1.2em;
width: 100%;
background: transparent;
color: #84AF9B ;
font-size: 1.55em;
}
.hbe-input-label-xray {
position: absolute;
top: 2em;
left: 0;
display: block;
width: 100%;
text-align: left;
padding: 0em;
letter-spacing: 1px;
color: #84AF9B ;
pointer-events: none;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transition: -webkit-transform 0.2s 0.1s, color 0.3s;
transition: transform 0.2s 0.1s, color 0.3s;
-webkit-transition-timing-function: ease-out;
transition-timing-function: ease-out;
}
.hbe-graphic-xray {
stroke: #84AF9B ;
pointer-events: none;
stroke-width: 2px;
top: 1.25em;
bottom: 0px;
height: 3.275em;
-webkit-transition: -webkit-transform 0.7s, stroke 0.7s;
transition: transform 0.7s, stroke 0.7s;
-webkit-transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1);
transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1);
}
.hbe-input-field-xray:focus + .hbe-input-label-xray,
.input--filled .hbe-input-label-xray {
color: #84AF9B ;
-webkit-transform: translate3d(0, 3.5em, 0) scale3d(0.85, 0.85, 1);
transform: translate3d(0, 3.5em, 0) scale3d(0.85, 0.85, 1);
}
.hbe-input-field-xray:focus ~ .hbe-graphic-xray,
.input--filled .graphic-xray {
stroke: #84AF9B ;
-webkit-transform: translate3d(-66.6%, 0, 0);
transform: translate3d(-66.6%, 0, 0);
}
/* xray theme }}} */
/* blink theme {{{ */
.hbe-input-blink {
padding-top: 1em;
}
.hbe-input-field-blink {
width: 100%;
padding: 0.8em 0.5em;
background: transparent;
border: 2px solid;
color: #8781bd;
-webkit-transition: border-color 0.25s;
transition: border-color 0.25s;
}
.hbe-input-label-blink {
width: 100%;
position: absolute;
top: 0;
text-align: left;
overflow: hidden;
padding: 0;
pointer-events: none;
-webkit-transform: translate3d(0, 3em, 0);
transform: translate3d(0, 3em, 0);
}
.hbe-input-label-content-blink {
padding: 0 1em;
font-weight: 400;
color: #b5b5b5;
}
.hbe-input-label-content-blink::after {
content: attr(data-content);
position: absolute;
top: -200%;
left: 0;
color: #8781bd ;
font-weight: 800;
}
.hbe-input-field-blink:focus,
.input--filled .hbe-input-field-blink {
border-color: #8781bd ;
}
.hbe-input-field-blink:focus + .hbe-input-label-blink,
.input--filled .hbe-input-label-blink {
-webkit-animation: anim-blink-1 0.25s forwards;
animation: anim-blink-1 0.25s forwards;
}
.hbe-input-field-blink:focus + .hbe-input-label-blink .hbe-input-label-content-blink,
.input--filled .hbe-input-label-content-blink {
-webkit-animation: anim-blink-2 0.25s forwards ease-in;
animation: anim-blink-2 0.25s forwards ease-in;
}
@-webkit-keyframes anim-blink-1 {
0%, 70% {
-webkit-transform: translate3d(0, 3em, 0);
transform: translate3d(0, 3em, 0);
}
71%, 100% {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
@-webkit-keyframes anim-blink-2 {
0% {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
70%, 71% {
-webkit-transform: translate3d(0, 125%, 0);
transform: translate3d(0, 125%, 0);
opacity: 0;
-webkit-animation-timing-function: ease-out;
}
100% {
color: transparent;
-webkit-transform: translate3d(0, 200%, 0);
transform: translate3d(0, 200%, 0);
}
}
@keyframes anim-blink-1 {
0%, 70% {
-webkit-transform: translate3d(0, 3em, 0);
transform: translate3d(0, 3em, 0);
}
71%, 100% {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
@keyframes anim-blink-2 {
0% {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
70%, 71% {
-webkit-transform: translate3d(0, 125%, 0);
transform: translate3d(0, 125%, 0);
opacity: 0;
-webkit-animation-timing-function: ease-out;
}
100% {
color: transparent;
-webkit-transform: translate3d(0, 200%, 0);
transform: translate3d(0, 200%, 0);
}
}
/* blink theme }}} */
/* surge theme {{{ */
.hbe-input-surge {
overflow: hidden;
padding-bottom: 1em;
}
.hbe-input-field-surge {
padding: 0.25em 0.5em;
margin-top: 1.25em;
width: 100%;
background: transparent;
color: #D0D0D0;
font-size: 1.55em;
opacity: 0;
}
.hbe-input-label-surge {
width: 100%;
text-align: left;
position: absolute;
top: 1em;
pointer-events: none;
overflow: hidden;
padding: 0 0.25em;
-webkit-transform: translate3d(1em, 2.75em, 0);
transform: translate3d(1em, 2.75em, 0);
-webkit-transition: -webkit-transform 0.3s;
transition: transform 0.3s;
}
.hbe-input-label-content-surge {
color: #A4A5A6;
padding: 0.4em 0 0.25em;
-webkit-transition: -webkit-transform 0.3s;
transition: transform 0.3s;
}
.hbe-input-label-content-surge::after {
content: attr(data-content);
position: absolute;
font-weight: 800;
top: 100%;
left: 0;
height: 100%;
width: 100%;
color: #2C3E50;
padding: 0.25em 0;
letter-spacing: 1px;
font-size: 0.85em;
}
.hbe-graphic-surge {
fill: #2C3E50;
pointer-events: none;
top: 1em;
bottom: 0px;
height: 4.5em;
z-index: -1;
-webkit-transition: -webkit-transform 0.7s, fill 0.7s;
transition: transform 0.7s, fill 0.7s;
-webkit-transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1);
transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1);
}
.hbe-input-field-surge:focus,
.input--filled .hbe-input-field-surge {
-webkit-transition: opacity 0s 0.35s;
transition: opacity 0s 0.35s;
opacity: 1;
}
.hbe-input-field-surge:focus + .hbe-input-label-surge,
.input--filled .hbe-input-label-surge {
-webkit-transition-delay: 0.15s;
transition-delay: 0.15s;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.hbe-input-field-surge:focus + .hbe-input-label-surge .hbe-input-label-content-surge,
.input--filled .hbe-input-label-content-surge {
-webkit-transition-delay: 0.15s;
transition-delay: 0.15s;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
.hbe-input-field-surge:focus ~ .hbe-graphic-surge,
.input--filled .graphic-surge {
fill: #2C3E50;
-webkit-transform: translate3d(-66.6%, 0, 0);
transform: translate3d(-66.6%, 0, 0);
}
/* surge theme }}} */
/* shrink theme {{{ */
.hbe-input-field-shrink {
width: 100%;
background: transparent;
padding: 0.5em 0;
margin-bottom: 2em;
color: #2C3E50;
}
.hbe-input-label-shrink {
width: 100%;
position: absolute;
text-align: left;
font-size: 1em;
padding: 10px 0 5px;
pointer-events: none;
}
.hbe-input-label-shrink::after {
content: '';
position: absolute;
width: 100%;
height: 7px;
background: #B7C3AC;
left: 0;
top: 100%;
-webkit-transform-origin: 50% 100%;
transform-origin: 50% 100%;
-webkit-transition: -webkit-transform 0.3s, background-color 0.3s;
transition: transform 0.3s, background-color 0.3s;
}
.hbe-input-label-content-shrink {
padding: 0;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transition: -webkit-transform 0.3s, color 0.3s;
transition: transform 0.3s, color 0.3s;
}
.hbe-input-field-shrink:focus + .hbe-input-label-shrink::after,
.input--filled .hbe-input-label-shrink::after {
background: #84AF9B;
-webkit-transform: scale3d(1, 0.25, 1);
transform: scale3d(1, 0.25, 1);
}
.hbe-input-field-shrink:focus + .hbe-input-label-shrink .hbe-input-label-content-shrink,
.input--filled .hbe-input-label-shrink .hbe-input-label-content-shrink {
color: #84AF9B;
-webkit-transform: translate3d(0, 2em, 0) scale3d(0.655, 0.655, 1);
transform: translate3d(0, 2em, 0) scale3d(0.655, 0.655, 1);
}
/* shrink theme }}} */

8218
css/index.css Normal file

File diff suppressed because it is too large Load Diff

94
css/tools.css Normal file
View File

@@ -0,0 +1,94 @@
/* Shared Tools CSS */
.tool-container {
max-width: 900px;
margin: 0 auto;
padding: 20px;
}
.tool-section {
background: #fff;
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 4px 10px rgba(0,0,0,0.05);
/* Fix layout jitter */
min-height: 100px;
transition: height 0.3s ease;
}
[data-theme='dark'] .tool-section {
background: #2c2c2c;
color: #eee;
}
.tool-title {
font-size: 1.3em;
margin-bottom: 20px;
border-left: 5px solid #49b1f5;
padding-left: 10px;
font-weight: bold;
}
input[type="text"], input[type="number"], select, textarea {
padding: 8px 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-family: inherit;
background: #fff;
color: #333;
}
[data-theme='dark'] input, [data-theme='dark'] select, [data-theme='dark'] textarea {
background: #444;
border: 1px solid #555;
color: #eee;
}
.btn {
padding: 8px 20px;
background: #49b1f5;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background 0.3s, transform 0.2s;
text-decoration: none;
display: inline-block;
font-size: 14px;
}
.btn:hover {
background: #ff7242;
color: white;
transform: translateY(-2px);
}
.btn:disabled {
background: #ccc;
cursor: not-allowed;
transform: none;
}
.upload-box {
border: 2px dashed #ddd;
padding: 30px;
text-align: center;
border-radius: 8px;
cursor: pointer;
background: #f9f9f9;
transition: all 0.3s;
}
.upload-box:hover {
border-color: #49b1f5;
background: #eef4fe;
}
[data-theme='dark'] .upload-box {
background: #333;
border-color: #555;
}
/* Fix: Disable animations on inputs to prevent theme "power mode" shake */
.tool-container input,
.tool-container textarea,
.tool-container select {
animation: none !important;
/* Allow native focus ring and transitions */
}
/* Fix: Stop theme clicking effects visual interference if possible via CSS */
/* Note: JS stopPropagation is the main fix, this is fallback */
.tool-container {
position: relative;
z-index: 10; /* Ensure above background canvas effects */
}

0
css/var.css Normal file
View File