Say it with Sass

Show filters
Sort:
Size
Color
Price
All filters
Sort
Loading...
tag of the document. This will help to improve the load of the images // during color swatches interaction on PLP const preloadBackground = (entries, observer) => { entries.forEach(async (entry) => { if (entry.isIntersecting) { const swatch = entry.target; const images = swatch.dataset.varimg.split(','); images.forEach((img, index) => { // preload image const link = document.createElement('link'); link.href = buildSrc(img); link.imagesrcset = getSrcset(img); link.imagesizes = cssImageMediaCondition; link.rel = 'preload'; link.as = 'image'; document.getElementsByTagName('head')[0].appendChild(link); }); swatch.removeAttribute('data-varimg'); switchObserver.unobserve(swatch); } }); }; const switchObserver = new IntersectionObserver(preloadBackground, { root: null, // Default is the viewport rootMargin: '30px', threshold: 0.05, // Load image when 10% of the div is visible }); // Sort options function getPageParam() { const urlParams = new URLSearchParams(window.location.search); const pageParam = urlParams.get('page'); return pageParam ? parseInt(pageParam, 10) : 1; } domLoadedPage = getPageParam(); setupSortDropdown('.fs_sort_by_wrap_desktop', '.fs_sort_by_options_desktop', '.fs_sort_by_select_desktop'); const sortBySelect = document.getElementById('sortByDesktop'); let sortByValue = getSortBy(); // call the function and store the returned value sortBySelect.value = sortByValue; // update the desktop dropdown value on page load // update sort mobile dropdown value on page load const validSortOptions = ['price_min_to_max', 'price_max_to_min', 'creation_date', 'relevency']; sortByValue = validSortOptions.includes(sortByValue) ? sortByValue : 'relevency'; const inputField = document.querySelector(`form [data-value="${sortByValue}"]`); if (inputField) { inputField.checked = true; // update the value of the option } else { console.error(`No radio button found with data-value="${sortByValue}"`); } const form = document.getElementById('sortForm'); if (form) { form.addEventListener('change', (event) => { if (event.target.name === 'sort') { const selectedValue = event.target.getAttribute('data-value'); if (selectedValue && validSortOptions.includes(selectedValue)) { setUrlParam('sortBy', selectedValue, true); resetPageAndScroll(); updateOtherDropdown(selectedValue); } } }); } updateOtherDropdown(getSortBy()); if (sortBySelect) { sortBySelect.addEventListener('change', function () { if (sortBySelect.value && validSortOptions.includes(sortBySelect.value)) { setUrlParam('sortBy', sortBySelect.value, true); } }); } // Description 'read more' function toggleReadMore(button) { const container = button.parentNode; const isExpanded = container.getAttribute('aria-expanded') === 'true'; container.setAttribute('aria-expanded', !isExpanded); if (isExpanded) { button.querySelector('.button-text').textContent = 'more'; } else { button.querySelector('.button-text').textContent = 'Show less'; } } function visibleReadMore() { const toggleButtons = document.querySelectorAll('.fs_collection_top_toggle'); toggleButtons.forEach(button => { const description_children = button.previousElementSibling.children; let description_scroll_width = 0; let description_client_width = 0; for(const child of description_children) { description_scroll_width += child.scrollWidth; description_client_width += child.clientWidth; }; button.style.display = (description_scroll_width > description_client_width) ? 'block' : 'none'; }); } window.addEventListener('DOMContentLoaded', visibleReadMore); // category pills GTM const categories = document.querySelectorAll('.category-pills__pill'); let category; let categoryHandle; let categoryId; const pushCategoryPills = (category, categoryHandle, categoryId, typeCategory) => { if (category && categoryHandle && categoryId && typeCategory) { const categoryPills = { event: `categoryPills`, category: category, categoryHandle: categoryHandle, categoryId: categoryId, typeCategory: typeCategory }; window.dataLayer.push(categoryPills); } } categories?.forEach(category => { category.addEventListener('click', function(e) { try { category = e.currentTarget.getAttribute('data-category'); categoryHandle = e.currentTarget.getAttribute('data-collection-handle'); categoryId = e.currentTarget.getAttribute('data-collection-id'); typeCategory = e.currentTarget.getAttribute('data-type-category'); pushCategoryPills(category, categoryHandle, categoryId, typeCategory); } catch (error) { console.error('Error in category click event:', error); } }) })

Product Recommendations

  • Good Girl, Bad Girl Graphic Tee

    Let this graphic tee do the talking at concerts or festivals. The front script reads "Good Girls Go To Heaven," and the back script reads "Bad Girls Go Backstage."

    Fit & Features

    • Stretchy knit fabric
    • Short sleeves
    • Crew neck with notch cutout
    • Front script "Good Girls Go To Heaven"
    • Back script "Bad Girls Go Backstage"
    • Fitted crop hem
    • Runs true to size

    Style Number/Barcode: 06002-000074

    Category Name: Say it with Sass

    Price: $19.90

    Availability: In Stock

    Available Color: WHITE

    Available Size: XS, S, M, L

  • All This And Brains Too Baseball Cap

    Let this baseball cap do the talking when you're out and about! It flaunts a sassy embroidered script, "All This And Brains Too," and an adjustable back strap for a snug fit.

    Fit & Features

    • Wide curved brim
    • Adjustable back strap
    • Embroidered script "All This And Brains Too"

    Style Number/Barcode: 07302-000001

    Category Name: Say it with Sass

    Price: $14.90

    Availability: In Stock

    Available Color: WHITE

    Available Size: NS

  • Lose My Number Halter Graphic Top

    Make a statement in this graphic top. This eye-catching crop top features a bold graphic script "Lose My Number" with an attitude-packed message, perfectly paired with a flattering halter neckline and fitted chem.

    Fit & Features

    • Stretchy knit fabric
    • Halter neckline
    • "Lose My Number" front graphic script
    • Fitted crop hem
    • Runs true to size

    Style Number/Barcode: 06002-000155

    Category Name: Say it with Sass

    Price: $19.90

    Availability: In Stock

    Available Color: BLK/WHT

    Available Size: XS, S, M, L

  • Don't Be Jealous Graphic Halter Top

    Serve icon attitude in this trendy graphic top featuring a halter V-neck, fitted cropped hem, and script reading, "Don't Be Jealous." Style with distressed denim and sneakers.

    Fit & Features

    • Cotton-blend fabric, moderate stretch
    • Sleeveless V-neckline
    • Halter strap, partially open back
    • Front script reading, "Don't Be Jealous"
    • Fitted cropped hem
    • Runs true to size

    Style Number/Barcode: 06002-000159

    Category Name: Say it with Sass

    Price: $19.90

    Availability: In Stock

    Available Color: PINK

    Available Size: XS, S, M, L

  • Future Trophy Wife Baseball Cap

    This eye-catching baseball cap combines playful confidence with everyday style, perfect for casual outings or beach days. The adjustable strap ensures a comfortable fit, while the bold embroidered text adds an aspirational touch!

    Fit & Features

    • "Future Trophy Wife" embroidered text
    • Wide curved brim
    • Adjustable back strap

    Style Number/Barcode: 07302-000012

    Category Name: Say it with Sass

    Price: $14.90

    Availability: In Stock

    Available Color: BLACK

    Available Size: NS