protokit-ui
Version:
A comprehensive React component library with hand-drawn design system. Features 30+ beautiful, accessible components including buttons, forms, navigation, data display, and layout components. Built with TypeScript and styled with CSS for modern React appl
145 lines (126 loc) • 3.07 kB
CSS
.paper-icon-button {
font-family: var(--font-family);
background: transparent;
border: 2px solid var(--ink-black);
border-radius: 50%;
cursor: pointer;
transition: all var(--transition-normal);
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
text-decoration: none;
color: var(--ink-black);
font-weight: normal;
outline: none;
user-select: none;
padding: 0;
}
/* Icon button sizes */
.paper-icon-button--small {
width: 32px;
height: 32px;
font-size: var(--font-size-sm);
}
.paper-icon-button--medium {
width: 40px;
height: 40px;
font-size: var(--font-size-base);
}
.paper-icon-button--large {
width: 48px;
height: 48px;
font-size: var(--font-size-lg);
}
/* Icon button variants */
.paper-icon-button--outline {
background: transparent;
color: var(--ink-black);
}
.paper-icon-button--primary {
background: var(--ink-black);
color: var(--paper-white);
border-color: var(--ink-black);
}
.paper-icon-button--secondary {
background: var(--paper-gray);
color: var(--ink-black);
border-color: var(--ink-gray);
}
/* Hover states */
.paper-icon-button--outline:hover:not(.paper-icon-button--disabled) {
background: var(--ink-black);
color: var(--paper-white);
transform: scale(1.05);
box-shadow: var(--shadow-pencil);
}
.paper-icon-button--primary:hover:not(.paper-icon-button--disabled) {
background: var(--ink-gray);
border-color: var(--ink-gray);
transform: scale(1.05);
box-shadow: var(--shadow-pencil);
}
.paper-icon-button--secondary:hover:not(.paper-icon-button--disabled) {
background: var(--ink-gray);
color: var(--paper-white);
transform: scale(1.05);
box-shadow: var(--shadow-pencil);
}
/* Active states */
.paper-icon-button:active:not(.paper-icon-button--disabled) {
transform: scale(0.95);
box-shadow: var(--shadow-pencil);
}
/* Disabled state */
.paper-icon-button--disabled {
border-color: var(--pencil-gray);
color: var(--pencil-gray);
cursor: not-allowed;
transform: none;
box-shadow: none;
background: transparent;
}
.paper-icon-button--disabled:hover {
transform: none;
box-shadow: none;
background: transparent;
color: var(--pencil-gray);
}
/* Icon styles */
.paper-icon-button__icon {
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 1em;
width: 100%;
height: 100%;
}
/* Hand-drawn border effect */
.paper-icon-button::before {
content: '';
position: absolute;
top: -1px;
left: -1px;
right: -1px;
bottom: -1px;
border: 1px solid var(--ink-black);
border-radius: 50%;
opacity: 0.3;
pointer-events: none;
transition: opacity var(--transition-normal);
}
.paper-icon-button:hover::before {
opacity: 0.1;
}
/* Focus state */
.paper-icon-button:focus {
outline: none;
box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.2);
}
/* Irregular shape variation */
.paper-icon-button--irregular {
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
}
.paper-icon-button--irregular::before {
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
}