/
spirzen
/
it-knowledge-base
Обзор
Документация
Войти
/
spirzen
/
it-knowledge-base
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
Mobile
src/components/MouseInteractionsPlay.module.css
287 строк
5 KB
Spirzen
Ultra Mega Components Buff
20 май 2026, 03:14
20 май 2026, 03:14
3a2dddc
Код
Авторство
О чём код?
.root { max-width: min(720px, 100%); margin: 0 auto; } .layout { display: grid; grid-template-columns: minmax(140px, 180px) 1fr; gap: 1rem; align-items: start; } @media (max-width: 640px) { .layout { grid-template-columns: 1fr; } } /* —— Схема мыши —— */ .mouseWrap { display: flex; flex-direction: column; align-items: center; gap: 0.75rem; padding: 0.5rem; } .mouseBody { position: relative; width: 88px; height: 128px; border-radius: 44px 44px 36px 36px; background: linear-gradient( 165deg, var(--ifm-color-emphasis-200) 0%, var(--ifm-color-emphasis-300) 55%, var(--ifm-color-emphasis-400) 100% ); box-shadow: inset 0 2px 4px rgba(255, 255, 255, 0.35), 0 4px 12px rgba(0, 0, 0, 0.12); border: 1px solid var(--ifm-color-emphasis-400); } .mouseBtn { position: absolute; top: 14px; height: 44px; border-radius: 8px 8px 4px 4px; background: var(--ifm-background-surface-color); border: 1px solid var(--ifm-color-emphasis-400); transition: background 0.15s ease, box-shadow 0.15s ease, transform 0.1s ease; } .mouseBtnLeft { left: 10px; width: 30px; } .mouseBtnRight { right: 10px; width: 30px; } .mouseWheel { position: absolute; left: 50%; top: 22px; transform: translateX(-50%); width: 10px; height: 28px; border-radius: 4px; background: var(--ifm-color-emphasis-500); border: 1px solid var(--ifm-color-emphasis-600); transition: background 0.15s ease, box-shadow 0.15s ease; } .mouseBtnActive { background: color-mix(in srgb, var(--ifm-color-primary) 25%, var(--ifm-background-surface-color)); border-color: var(--ifm-color-primary); box-shadow: 0 0 0 2px color-mix(in srgb, var(--ifm-color-primary) 35%, transparent); } .mouseBtnPulse { animation: btnPulse 0.45s ease; } @keyframes btnPulse { 0% { transform: scale(1); } 40% { transform: scale(0.94); } 100% { transform: scale(1); } } .mouseLegend { list-style: none; margin: 0; padding: 0; font-size: 0.72rem; line-height: 1.5; color: var(--ifm-color-content-secondary); width: 100%; } .mouseLegend li { display: flex; align-items: center; gap: 0.4rem; margin-bottom: 0.25rem; } .legendDot { width: 8px; height: 8px; border-radius: 2px; flex-shrink: 0; } .legendLeft { background: var(--ifm-color-primary); } .legendMid { background: var(--demo-warning, #ed6c02); border-radius: 50%; width: 6px; height: 10px; } .legendRight { background: var(--ifm-color-emphasis-600); } /* —— Площадка —— */ .arena { position: relative; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.5rem; min-height: 220px; padding: 0.5rem; padding-bottom: 2rem; border-radius: 10px; border: 1px dashed var(--ifm-color-emphasis-300); background: color-mix(in srgb, var(--ifm-color-primary) 4%, var(--ifm-background-surface-color)); } .zone { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0.2rem; min-height: 88px; padding: 0.5rem; text-align: center; border-radius: 8px; border: 1px solid var(--ifm-color-emphasis-300); background: var(--ifm-card-background-color); cursor: default; user-select: none; transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease, transform 0.15s ease; } .zone strong { font-size: 0.8rem; } .zoneHint { font-size: 0.7rem; color: var(--ifm-color-content-secondary); } .zoneIcon { font-size: 1.25rem; line-height: 1; } .zoneHover:hover, .zoneActive { border-color: var(--ifm-color-primary); background: color-mix(in srgb, var(--ifm-color-primary) 10%, var(--ifm-card-background-color)); box-shadow: 0 0 0 2px color-mix(in srgb, var(--ifm-color-primary) 20%, transparent); } .zone:hover { transform: translateY(-1px); } .zoneFolderOpen { border-color: var(--demo-success, #2e7d32); background: color-mix(in srgb, #2e7d32 12%, var(--ifm-card-background-color)); } .dragBox { position: absolute; z-index: 2; width: 56px; height: 56px; display: flex; align-items: center; justify-content: center; font-size: 1.25rem; font-weight: 700; color: #fff; border-radius: 10px; background: linear-gradient(135deg, var(--ifm-color-primary) 0%, var(--ifm-color-primary-dark) 100%); box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2); cursor: grab; touch-action: none; transition: box-shadow 0.15s ease; } .dragBox:active, .dragBoxActive { cursor: grabbing; box-shadow: 0 6px 16px rgba(0, 0, 0, 0.28); } .dragLabel { position: absolute; bottom: 0.35rem; left: 0; right: 0; margin: 0; text-align: center; font-size: 0.68rem; color: var(--ifm-color-content-secondary); } /* —— Журнал —— */ .logPanel { margin-top: 1rem; padding: 0.65rem 0.75rem; border-radius: 8px; border: 1px solid var(--ifm-color-emphasis-300); background: var(--ifm-code-background); min-height: 4.5rem; } .logTitle { margin: 0 0 0.4rem; font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ifm-color-content-secondary); } .logEmpty { margin: 0; font-size: 0.8rem; color: var(--ifm-color-content-secondary); font-style: italic; } .logList { margin: 0; padding: 0; list-style: none; } .logList li { font-size: 0.8rem; padding: 0.2rem 0; border-bottom: 1px solid var(--ifm-color-emphasis-200); font-family: var(--ifm-font-family-monospace); } .logList li:first-child { color: var(--ifm-color-primary); font-weight: 600; }