UI Customization
SDK provides extensive customization options through CSS variables, allowing you to match your application's design system.
General Styling
You can set provided CSS variables in your stylesheet to customize the SDK's appearance:
:root {
/* Colors */
--modal-background-color: rgba(255, 255, 255, 0.8);
--modal-text-color: #1e293b;
/* Border Styles */
--modal-border-radius: 8px;
/* Font Settings */
--modal-text-font-family: 'Your-Font-Family', sans-serif;
--modal-text-font-size: 24px;
}
Available Customization Options
- Blur Modal
- Document Modal
- Check Capture Modal
- Credit Card Scanner
- Control Buttons (Capture, Torch, Submit)
- Cropped Image
- Check Images
- Crop Layout Overlay
- Spinner

Text in the blur modal is customizable through the blurModalMessage.
:root {
/* Container Styles */
--blur-modal-background-color: white;
--blur-modal-border-radius: 8px;
--blur-modal-padding: 20px;
--blur-modal-width: 300px;
--blur-modal-max-width: 300px;
/* Text Styles */
--blur-modal-text-color: #1e293b;
--blur-modal-text-font-family: 'NB International Pro', sans-serif;
--blur-modal-text-font-size: 17px;
/* Button Styles */
--blur-modal-button-width: 100%;
--blur-modal-button-padding: 12px;
--blur-modal-button-border-radius: 4px;
--blur-modal-button-font-family: 'DIN Pro', sans-serif;
--blur-modal-button-font-size: 14px;
--blur-modal-button-font-weight: 700;
/* Primary Button (Retake) */
--blur-modal-primary-button-background: #00AA00;
--blur-modal-primary-button-color: white;
/* Secondary Button (Submit Anyway) */
--blur-modal-secondary-button-background: transparent;
--blur-modal-secondary-button-border: 1px solid #333;
--blur-modal-secondary-button-color: #333;
}
Global Modal Positioning
:root {
/* Modal Positioning (applies to all modals) */
--modal-border-radius: 8px;
--modal-z-index: 1000;
--modal-width: 300px;
--modal-height: 250px; /* Auto-adjusts for enforced modes */
--modal-top: 50%;
--modal-left: 50%;
--modal-transform: translate(-50%, -50%);
}

Text in the document modal is customizable through the documentModalMessage.
:root {
/* Container Styles */
--document-modal-background-color: white;
--document-modal-border-radius: 8px;
--document-modal-padding: 20px;
--document-modal-width: 300px;
--document-modal-max-width: 300px;
/* Text Styles */
--document-modal-text-color: #1e293b;
--document-modal-text-font-family: 'NB International Pro', sans-serif;
--document-modal-text-font-size: 17px;
/* Button Styles */
--document-modal-button-width: 100%;
--document-modal-button-padding: 12px;
--document-modal-button-border-radius: 4px;
--document-modal-button-font-family: 'DIN Pro', sans-serif;
--document-modal-button-font-size: 14px;
--document-modal-button-font-weight: 700;
/* Primary Button (Retake) */
--document-modal-primary-button-background: #00AA00;
--document-modal-primary-button-color: white;
/* Secondary Button (Submit Anyway) */
--document-modal-secondary-button-background: transparent;
--document-modal-secondary-button-border: 1px solid #333;
--document-modal-secondary-button-color: #333;
}
Global Modal Positioning
:root {
/* Modal Positioning (applies to all modals) */
--modal-border-radius: 8px;
--modal-z-index: 1000;
--modal-width: 300px;
--modal-height: 250px; /* Auto-adjusts for enforced modes */
--modal-top: 50%;
--modal-left: 50%;
--modal-transform: translate(-50%, -50%);
}

Text in the check capture modal is customizable through the checkEnforcedModalMessage and checkOptionalModalMessage.
:root {
/* Container Styles */
--check-modal-background-color: white;
--check-modal-border-radius: 8px;
--check-modal-padding: 20px;
--check-modal-width: 300px;
--check-modal-max-width: 300px;
/* Text Styles */
--check-modal-text-color: #1e293b;
--check-modal-text-font-family: 'NB International Pro', sans-serif;
--check-modal-text-font-size: 17px;
/* Button Styles */
--check-modal-button-width: 100%;
--check-modal-button-padding: 12px;
--check-modal-button-border-radius: 4px;
--check-modal-button-font-family: 'DIN Pro', sans-serif;
--check-modal-button-font-size: 14px;
--check-modal-button-font-weight: 700;
/* Primary Button (Continue/Yes) */
--check-modal-primary-button-background: #00AA00;
--check-modal-primary-button-color: white;
/* Secondary Button (No) */
--check-modal-secondary-button-background: transparent;
--check-modal-secondary-button-border: 1px solid #333;
--check-modal-secondary-button-color: #333;
}
Global Modal Positioning
:root {
/* Modal Positioning (applies to all modals) */
--modal-border-radius: 8px;
--modal-z-index: 1000;
--modal-width: 300px;
--modal-height: 250px; /* Auto-adjusts for enforced modes */
--modal-top: 50%;
--modal-left: 50%;
--modal-transform: translate(-50%, -50%);
}

:root {
/* Overlay Settings */
--card-overlay-max-width: 500px;
--card-overlay-height: 100%;
--card-overlay-z-index: 150;
/* Card Outline */
--card-outline-width: 400px;
--card-outline-height: 250px;
--card-outline-border-width: 8px;
--card-outline-border-color: white;
--card-outline-border-radius: 12px;
/* Text Display */
--card-text-color: white;
--card-number-font-size: 24px;
--card-number-margin: 90px 0 10px 40px;
--card-info-margin-left: 20px;
--card-info-font-weight: bold;
/* Flip Message */
--flip-message-width: 300px;
--flip-message-font-size: 25px;
}

:root {
/* Capture Button */
--capture-button-background-color: transparent;
--capture-button-hover-background-color: rgba(255, 255, 255, 0.5);
--capture-button-active-background-color: rgba(255, 0, 0, 0.5);
/* Torch Button */
--torch-button-background-color: rgba(107, 114, 128, 0.5);
--torch-button-hover-background-color: rgba(75, 85, 99, 0.8);
/* Submit Button */
--submit-button-background-color: #4CAF50;
--submit-button-color: white;
--submit-button-border-radius: 5px;
--submit-button-font-size: 16px;
}

:root {
/* Basic Positioning */
--cropped-image-position: absolute;
--cropped-image-width: 100%;
--cropped-image-height: auto;
--cropped-image-max-width: 350px;
--cropped-image-max-height: 100%;
--cropped-image-z-index: 130;
/* Border Styles */
--cropped-image-border-width: 3px;
--cropped-image-border-color-error: red;
--cropped-image-border-color-success: #00AA00;
--cropped-image-border-radius: 10px;
--cropped-image-border-radius-rectangle: 5px;
--cropped-image-border-hidden: none;
--cropped-image-border-radius-hidden: 0;
/* Mobile Portrait */
--cropped-image-mobile-width: 370px;
--cropped-image-mobile-height: 95vh;
--cropped-image-mobile-max-width: 350px;
--cropped-image-mobile-position: fixed;
/* Mobile Landscape */
--cropped-image-mobile-landscape-width: 170px;
--cropped-image-mobile-landscape-height: 85vh;
--cropped-image-mobile-landscape-max-width: 200px;
/* Desktop */
--cropped-image-desktop-width: 100%;
--cropped-image-desktop-height: 95%;
--cropped-image-desktop-max-width: 370px;
--cropped-image-desktop-position: absolute;
/* Square Display (Bottle Caps) */
--cropped-image-square-size: 350px; /* Auto-calculated based on screen size */
--cropped-image-square-position: fixed;
--cropped-image-square-top: 50%;
--cropped-image-square-left: 50%;
--cropped-image-square-transform: translate(-50%, -50%);
/* Rectangle Display (Code Strips) */
--cropped-image-rectangle-width: 500px; /* Auto-calculated based on aspect ratio */
--cropped-image-rectangle-height: 300px; /* Auto-calculated based on aspect ratio */
--cropped-image-rectangle-max-width: 500px;
--cropped-image-rectangle-max-height: 60vh;
--cropped-image-rectangle-position: fixed;
--cropped-image-rectangle-top: 50%;
--cropped-image-rectangle-left: 50%;
--cropped-image-rectangle-transform: translate(-50%, -50%);
/* Common Display Properties */
--cropped-image-object-fit: contain;
--cropped-image-display: block;
--cropped-image-margin: auto;
}
:root {
/* Container Layout */
--check-images-container-display: flex;
--check-images-container-flex-direction: column;
--check-images-container-justify-content: center;
--check-images-container-align-items: center;
--check-images-container-width: 100%;
--check-images-container-height: 100%;
--check-images-container-overflow: auto;
/* Container Orientation Modes */
--check-images-container-flex-direction-portrait: row;
--check-images-container-flex-direction-landscape: column;
/* Image Sizing - Portrait Mode */
--check-images-max-width-portrait: 48%;
--check-images-max-height-portrait: 96%;
/* Image Sizing - Landscape Mode */
--check-images-max-width-landscape: 96%;
--check-images-max-height-landscape: 48%;
/* Image Display Properties */
--check-images-object-fit: contain;
--check-images-margin: 1%;
/* Hidden State */
--check-images-container-display-hidden: none;
}
The crop layout overlay appears in manual capture mode for checks when the detected aspect ratio falls outside acceptable limits. Configure the behavior via Check Processing settings.
:root {
/* Overlay Rectangle Styles */
--crop-layout-border-color: #54C08B;
--crop-layout-stroke-width: 2px;
--crop-layout-corner-radius: 0px;
--crop-layout-overlay-opacity: 0.6;
/* Overlay Position & Size */
--crop-layout-guide-top: 40%;
--crop-layout-guide-left: 50%;
--crop-layout-guide-width-scale: 0.90;
--crop-layout-guide-max-height-scale: 0.70;
/* Tip Text Styling */
--crop-layout-tip-font-family: 'Arial, sans-serif';
--crop-layout-tip-font-size: 16px;
--crop-layout-tip-font-weight: bold;
--crop-layout-tip-color: white;
--crop-layout-tip-text-shadow: 0 1px 2px rgba(0,0,0,0.8);
--crop-layout-tip-offset: 35%;
}
You can customize the instructional text shown with the overlay using the cropLayoutTipMessage configuration option, and control its position with cropLayoutTipPosition (options: "top", "bottom", "left", "right").

:root {
/* Overlay Styles */
--spinner-overlay-background-color: rgba(0, 0, 0, 0.7);
--spinner-overlay-z-index: 9999;
/* Spinner Styles */
--spinner-size: 40px;
--spinner-border-width: 4px;
--spinner-border-color: #f3f3f3;
--spinner-primary-color: #4CAF50;
--spinner-animation-duration: 1s;
/* Text Styles */
--spinner-text-color: #4CAF50;
--spinner-text-size: 16px;
--spinner-text-margin: 20px;
--spinner-font-family: 'Arial', sans-serif;
}