/**
 * My Account.
 *
 * Loaded on every account page, not just My Designs, so Orders and Addresses
 * sit in the same frame: a navigation rail on the left, the endpoint's own
 * content in a card on the right.
 *
 * The rail is WooCommerce's own markup, so the icons are attached by endpoint
 * class from here rather than injected into the labels - the account template
 * escapes those, and a theme swapping them out should not leave broken markup
 * behind.
 */
.woocommerce-account,
.ppd-my-designs,
.ppd-transfer-block {
    --ppd-green: #12a150;
    --ppd-green-soft: #e8f6ee;
    --ppd-green-deep: #0d7d3e;
    --ppd-border: #e3e8e5;
    --ppd-ink: #111a15;
    --ppd-muted: #6a726d;
}

/* ---------------------------------------------------------------- the rail */

/* Themes style this container themselves - usually their own grid and their
   own max-width. Written against the account page's second body class as well,
   so it wins on specificity rather than on which stylesheet happens to load
   last. No max-width of its own: the row then fills whatever page container
   the theme puts around it, matching the header. */
.woocommerce-account.woocommerce-page .woocommerce,
.woocommerce-account .woocommerce {
    align-items: flex-start;
    display: flex;
    flex-wrap: wrap;
    gap: 28px;
    margin-inline: 0;
    max-width: none;
}

/* The rail is one element wrapping the menu, because WooCommerce fires both
   navigation hooks outside the <nav> - unwrapped, the title and the help card
   land beside the menu as separate cells of the account layout. */
.ppd-account-rail {
    background: #fff;
    border: 1px solid var(--ppd-border);
    border-radius: 16px;
    box-sizing: border-box;
    flex: 0 0 268px;
    max-width: 100%;
    padding: 14px;
}

/* WooCommerce's own stylesheet floats the two columns at fixed percentages,
   which neither the flex row nor the wrapper can undo on their own. */
.woocommerce-account .ppd-account-rail .woocommerce-MyAccount-navigation {
    float: none !important;
    width: auto !important;
}

/* Themes commonly label the menu with generated content. The rail prints its
   own heading, which unlike a CSS string can be translated. */
.woocommerce-account .ppd-account-rail .woocommerce-MyAccount-navigation::before {
    content: none;
    display: none;
}

.woocommerce-account .woocommerce-MyAccount-content {
    background: #fff;
    border: 1px solid var(--ppd-border);
    border-radius: 16px;
    box-sizing: border-box;
    flex: 1 1 520px;
    float: none !important;
    min-width: 0;
    padding: 26px;
    width: auto !important;
}

.ppd-account-rail__title {
    color: #8c938f;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .09em;
    margin: 6px 0 10px;
    padding: 0 12px;
    text-transform: uppercase;
}

.woocommerce-account .ppd-account-rail .woocommerce-MyAccount-navigation ul {
    list-style: none;
    margin: 0;
    padding: 0;
}

.woocommerce-account .ppd-account-rail .woocommerce-MyAccount-navigation li {
    margin: 0;
}

.woocommerce-account .ppd-account-rail .woocommerce-MyAccount-navigation li a {
    align-items: center;
    border-radius: 10px;
    color: #37403a;
    display: flex;
    font-size: 15px;
    font-weight: 500;
    gap: 11px;
    line-height: 1.3;
    padding: 11px 12px;
    text-decoration: none;
}

.woocommerce-account .ppd-account-rail .woocommerce-MyAccount-navigation li a:hover {
    background: #f4f7f5;
    color: var(--ppd-ink);
}

.woocommerce-account .ppd-account-rail .woocommerce-MyAccount-navigation li.is-active a {
    background: var(--ppd-green-soft);
    color: var(--ppd-green-deep);
    font-weight: 700;
}

/* Tinted from the link colour, so hover and the active state carry the icon
   with them. The fallback rides in the var() default rather than in a rule of
   its own: declared on the pseudo-element it would outrank the per-endpoint
   values below, which are inherited from the list item. */
.woocommerce-account .ppd-account-rail .woocommerce-MyAccount-navigation li a::before {
    --ppd-nav-fallback: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='7.5'/%3E%3C/svg%3E");
    background-color: currentColor;
    content: "";
    flex: 0 0 20px;
    height: 20px;
    -webkit-mask: var(--ppd-nav-icon, var(--ppd-nav-fallback)) center / 20px 20px no-repeat;
    mask: var(--ppd-nav-icon, var(--ppd-nav-fallback)) center / 20px 20px no-repeat;
    width: 20px;
}

.woocommerce-MyAccount-navigation-link--dashboard {
    --ppd-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9.6 12 3l9 6.6V20a1 1 0 0 1-1 1h-5v-6.5H9V21H4a1 1 0 0 1-1-1z'/%3E%3C/svg%3E");
}

.woocommerce-MyAccount-navigation-link--orders {
    --ppd-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5.5 7.5h13l1 12.5h-15z'/%3E%3Cpath d='M9 7.5a3 3 0 0 1 6 0'/%3E%3C/svg%3E");
}

.woocommerce-MyAccount-navigation-link--downloads {
    --ppd-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 4v10'/%3E%3Cpath d='m8 12 4 4 4-4'/%3E%3Cpath d='M5 20h14'/%3E%3C/svg%3E");
}

.woocommerce-MyAccount-navigation-link--my-designs {
    --ppd-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20h8.5'/%3E%3Cpath d='M16.4 3.9a2 2 0 0 1 2.8 2.8L7.6 18.3 3.8 19.4l1.1-3.8z'/%3E%3C/svg%3E");
}

.woocommerce-MyAccount-navigation-link--edit-address {
    --ppd-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 21s7-5.6 7-11a7 7 0 1 0-14 0c0 5.4 7 11 7 11z'/%3E%3Ccircle cx='12' cy='10' r='2.5'/%3E%3C/svg%3E");
}

.woocommerce-MyAccount-navigation-link--payment-methods {
    --ppd-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2.5' y='5' width='19' height='14' rx='2.5'/%3E%3Cpath d='M2.5 10h19'/%3E%3C/svg%3E");
}

.woocommerce-MyAccount-navigation-link--edit-account {
    --ppd-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='8' r='3.5'/%3E%3Cpath d='M5 20a7 7 0 0 1 14 0'/%3E%3C/svg%3E");
}

.woocommerce-MyAccount-navigation-link--customer-logout {
    --ppd-nav-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 4H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h4'/%3E%3Cpath d='m16 16 4-4-4-4'/%3E%3Cpath d='M20 12H10'/%3E%3C/svg%3E");
}

.ppd-account-help {
    background: var(--ppd-green-soft);
    border-radius: 12px;
    margin-top: 18px;
    padding: 16px;
}

.ppd-account-help h3 {
    color: var(--ppd-ink);
    font-size: 15px;
    font-weight: 700;
    margin: 0;
}

.ppd-account-help p {
    color: #4c5450;
    font-size: 13px;
    line-height: 1.45;
    margin: 6px 0 12px;
}

.ppd-account-help__button {
    align-items: center;
    background: #111;
    border-radius: 8px;
    color: #fff;
    display: flex;
    font-size: 14px;
    font-weight: 700;
    gap: 8px;
    justify-content: center;
    padding: 10px 14px;
    text-align: center;
    text-decoration: none;
}

.ppd-account-help__button:hover,
.ppd-account-help__button:focus {
    background: #000;
    color: #fff;
    text-decoration: none;
}

.ppd-account-help__button::before {
    background-color: currentColor;
    content: "";
    height: 17px;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 13a8 8 0 0 1 16 0'/%3E%3Crect x='2.5' y='13' width='4.5' height='7' rx='1.6'/%3E%3Crect x='17' y='13' width='4.5' height='7' rx='1.6'/%3E%3C/svg%3E") center / 17px 17px no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 13a8 8 0 0 1 16 0'/%3E%3Crect x='2.5' y='13' width='4.5' height='7' rx='1.6'/%3E%3Crect x='17' y='13' width='4.5' height='7' rx='1.6'/%3E%3C/svg%3E") center / 17px 17px no-repeat;
    width: 17px;
}

/* ------------------------------------------------------------- my designs */

.ppd-my-designs {
    color: var(--ppd-ink);
}

.ppd-my-designs__header {
    align-items: flex-end;
    display: flex;
    justify-content: space-between;
    margin-bottom: 22px;
}

.ppd-my-designs__header h2,
.ppd-my-designs__empty h3,
.ppd-design-card h3 {
    color: var(--ppd-ink);
    font-weight: 700;
    margin: 0;
}

.ppd-my-designs__header h2 {
    font-size: clamp(26px, 3vw, 36px);
}

.ppd-my-designs__header p {
    color: var(--ppd-muted);
    margin: 7px 0 0;
}

/* One card per row: each carries its own product strip. */
.ppd-my-designs__grid {
    display: grid;
    gap: 22px;
    grid-template-columns: minmax(0, 1fr);
}

.ppd-design-card,
.ppd-my-designs__empty {
    background: #fff;
    border: 1px solid var(--ppd-border);
    border-radius: 16px;
}

.ppd-my-designs__empty {
    padding: 32px;
    text-align: center;
}

.ppd-my-designs__empty p {
    margin: 8px auto 18px;
}

/* Anchor for the corner menu. */
.ppd-design-card {
    position: relative;
}

.ppd-design-card__head {
    align-items: center;
    display: grid;
    gap: 22px;
    grid-template-columns: minmax(0, 210px) minmax(0, 1fr) auto;
    padding: 20px;
}

.ppd-design-card__image {
    align-items: center;
    aspect-ratio: 4 / 3;
    background: #f5f7f6;
    border-radius: 12px;
    display: flex;
    justify-content: center;
    overflow: hidden;
}

.ppd-design-card__image img {
    height: 100%;
    object-fit: contain;
    width: 100%;
}

.ppd-design-card h3 {
    font-size: 20px;
    line-height: 1.3;
}

.ppd-design-card__price {
    color: var(--ppd-ink);
    font-size: 19px;
    font-weight: 700;
    margin-top: 8px;
}

.ppd-design-card__price del {
    color: #7d837f;
    font-weight: 400;
    margin-right: 6px;
}

.ppd-design-card__summary > p {
    color: var(--ppd-muted);
    font-size: 13px;
    margin: 8px 0 16px;
}

/* -------------------------------------------------------- the corner menu */

.ppd-design-card__menu {
    align-self: start;
    position: relative;
}

.ppd-design-card__menu-toggle {
    align-items: center;
    background: #fff;
    border: 1px solid var(--ppd-border);
    border-radius: 50%;
    color: #5c635f;
    cursor: pointer;
    display: flex;
    height: 34px;
    justify-content: center;
    list-style: none;
    width: 34px;
}

/* Safari still paints the disclosure triangle without this. */
.ppd-design-card__menu-toggle::-webkit-details-marker {
    display: none;
}

.ppd-design-card__menu-toggle::before {
    background-color: currentColor;
    content: "";
    height: 18px;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Ccircle cx='5' cy='12' r='1.8'/%3E%3Ccircle cx='12' cy='12' r='1.8'/%3E%3Ccircle cx='19' cy='12' r='1.8'/%3E%3C/svg%3E") center / 18px 18px no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Ccircle cx='5' cy='12' r='1.8'/%3E%3Ccircle cx='12' cy='12' r='1.8'/%3E%3Ccircle cx='19' cy='12' r='1.8'/%3E%3C/svg%3E") center / 18px 18px no-repeat;
    width: 18px;
}

.ppd-design-card__menu-toggle:hover,
.ppd-design-card__menu[open] .ppd-design-card__menu-toggle {
    background: #f4f7f5;
    color: var(--ppd-ink);
}

.ppd-design-card__menu-panel {
    background: #fff;
    border: 1px solid var(--ppd-border);
    border-radius: 12px;
    box-shadow: 0 10px 28px rgba(16, 26, 21, .14);
    min-width: 208px;
    padding: 6px;
    position: absolute;
    right: 0;
    top: calc(100% + 8px);
    z-index: 5;
}

.ppd-design-card__action {
    margin: 0;
}

.ppd-design-card__menu-item {
    align-items: center;
    background: none;
    border: 0;
    border-radius: 8px;
    color: #37403a;
    cursor: pointer;
    display: flex;
    font: inherit;
    font-size: 14px;
    gap: 10px;
    padding: 10px 11px;
    text-align: left;
    width: 100%;
}

.ppd-design-card__menu-item:hover {
    background: #f4f7f5;
}

.ppd-design-card__menu-item::before {
    background-color: currentColor;
    content: "";
    flex: 0 0 17px;
    height: 17px;
    -webkit-mask: var(--ppd-menu-icon) center / 17px 17px no-repeat;
    mask: var(--ppd-menu-icon) center / 17px 17px no-repeat;
    width: 17px;
}

.ppd-design-card__menu-item--duplicate {
    --ppd-menu-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9' y='9' width='11' height='11' rx='2'/%3E%3Cpath d='M5 15H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v1'/%3E%3C/svg%3E");
}

.ppd-design-card__menu-item--delete {
    --ppd-menu-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 7h16'/%3E%3Cpath d='M9 7V5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2'/%3E%3Cpath d='M6 7l1 13h10l1-13'/%3E%3C/svg%3E");
    color: #d63b30;
}

.ppd-design-card__menu-item--delete:hover {
    background: #fdf3f2;
    color: #b3261e;
}

/* ----------------------------------------------------------- product strip */

.ppd-design-card__transfer {
    border-top: 1px solid var(--ppd-border);
    padding: 20px;
}

/* The same strip standing on its own, above the related products and under the
   cart totals. In a design card it is the last band and inherits the card's
   box; here there is no card, so it brings one - and clears, because the
   product summary above it is floated in most WooCommerce themes. */
.ppd-transfer-block {
    background: #fff;
    border: 1px solid var(--ppd-border);
    border-radius: 16px;
    box-sizing: border-box;
    clear: both;
    color: var(--ppd-ink);
    margin: 48px 0;
    overflow: hidden;
    width: 100%;
}


/* The block is printed in the footer and moved into place by the script, so it
   lands between full-width sections and has to bring the page's own gutter with
   it rather than running edge to edge. The theme's container width is used when
   the theme publishes one. */
.ppd-transfer-mount {
    box-sizing: border-box;
    margin-inline: auto;
    max-width: var(--pp-container-width, 1280px);
    padding-inline: 24px;
    width: 100%;
}

/* Themes that give every div a display value would otherwise show the mount
   before the script has anything to put in it. */
.ppd-transfer-mount[hidden] {
    display: none !important;
}

/* Same breakpoint the theme's own container narrows at, so the block's edges
   keep lining up with the product rows above and below it. */
@media (max-width: 768px) {
    .ppd-transfer-mount {
        padding-inline: 16px;
    }
}

/* Its top rule is the frame's own border, one pixel away. */
.ppd-transfer-block .ppd-design-card__transfer {
    border-top: 0;
    padding: 24px;
}

/* The account area needs the same two guards further down this file: themes
   style the headings and paragraphs of their own page content, and the block is
   now standing in that content rather than inside the account card. */
.ppd-transfer-block .ppd-design-card__transfer h4 {
    color: var(--ppd-ink);
    font-size: 17px;
    font-weight: 700;
    letter-spacing: normal;
    line-height: 1.3;
    margin: 0;
    text-transform: none;
}

.ppd-transfer-block .ppd-design-search__status {
    color: var(--ppd-muted);
    font-size: 13px;
    line-height: 1.5;
    margin: 0 0 12px;
}

/* On the home page it is one of the page's own bands rather than a card
   dropped into one: no frame and no inner padding, so its heading and its
   first tile line up with the product rows above and below it. These come
   after the framed rules above because they carry the same specificity. */
.ppd-transfer-block--home {
    background: none;
    border: 0;
    border-radius: 0;
    margin: 64px 0 0;
    overflow: visible;
}

.ppd-transfer-block--home .ppd-design-card__transfer {
    padding: 0;
}

.ppd-transfer-block--home .ppd-design-card__transfer h4 {
    font-size: clamp(20px, 3vw, 28px);
}

/* The strip under the add-to-cart confirmation: a single centred line of
   "your design looks great on these too" and three small thumbnails, sitting
   directly beneath the band it belongs to. No frame - it is part of the
   confirmation, not a section of its own - and no top margin for the same
   reason. */
.ppd-transfer-block--notice {
    background: none;
    border: 0;
    /* The one rule it keeps: a hairline underneath, so the strip reads as the
       tail of the confirmation rather than as the start of the product page. */
    border-bottom: 1px solid var(--ppd-border);
    border-radius: 0;
    margin: 0;
    overflow: visible;
}

.ppd-transfer-block--notice .ppd-design-card__transfer {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: 10px 18px;
    justify-content: center;
    padding: 14px 18px 18px;
}

.ppd-transfer-block--notice .ppd-design-card__transfer h4 {
    font-size: 15px;
    font-weight: 600;
}

/* Three tiles side by side at their own size rather than stretched across the
   six-column grid the other placements use. */
.ppd-transfer-block--notice .ppd-design-targets {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: center;
}

.ppd-transfer-block--notice .ppd-design-target {
    border-radius: 10px;
    padding-bottom: 8px;
    width: 76px;
}

.ppd-transfer-block--notice .ppd-design-target__name {
    -webkit-line-clamp: 1;
    font-size: 11px;
    margin-top: 6px;
    padding: 0 6px;
    text-align: center;
}

/* The price is the one thing this strip can do without: the customer is
   already past the buying decision on the product it follows. */
.ppd-transfer-block--notice .ppd-design-target__price {
    display: none;
}

/* On a phone the heading takes the full width and the thumbnails sit under
   it, which is the same shape the line has on desktop, only wrapped. */
@media (max-width: 600px) {
    .ppd-transfer-block--notice .ppd-design-card__transfer {
        gap: 8px 12px;
        padding: 12px 12px 14px;
    }

    .ppd-transfer-block--notice .ppd-design-card__transfer h4 {
        font-size: 14px;
        width: 100%;
        text-align: center;
    }

    .ppd-transfer-block--notice .ppd-design-target {
        width: 68px;
    }
}

.ppd-design-card__transfer-head {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: 10px 18px;
    justify-content: space-between;
    margin-bottom: 16px;
}

.ppd-design-card__transfer h4 {
    font-size: 17px;
    font-weight: 700;
    margin: 0;
}

.ppd-design-search {
    align-items: center;
    display: flex;
    gap: 8px;
}

.ppd-design-search__label {
    color: var(--ppd-muted);
    font-size: 13px;
    white-space: nowrap;
}

.ppd-design-search__input {
    background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236a726d' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='6.5'/%3E%3Cpath d='m16 16 4.5 4.5'/%3E%3C/svg%3E") right 12px center / 17px 17px no-repeat;
    border: 1px solid var(--ppd-border);
    border-radius: 10px;
    box-sizing: border-box;
    color: var(--ppd-ink);
    font: inherit;
    font-size: 14px;
    max-width: 100%;
    padding: 10px 38px 10px 14px;
    width: 300px;
}

.ppd-design-search__input:focus {
    border-color: var(--ppd-green);
    outline: none;
}

/* The browser's own clear button would sit on top of the magnifier. */
.ppd-design-search__input::-webkit-search-cancel-button {
    margin-right: 4px;
}

.ppd-design-search__status {
    color: var(--ppd-muted);
    font-size: 13px;
    margin: 0 0 12px;
}

.ppd-design-search__status:empty {
    display: none;
}

/* Six across, and search results simply wrap onto a second row: everything on
   offer is visible at once, with nothing to scroll and no arrows to find. The
   gutter matches the shop archive's product grid. */
.ppd-design-targets {
    display: grid;
    gap: 24px;
    grid-template-columns: repeat(6, minmax(0, 1fr));
}

/* display:grid would otherwise beat the browser's own [hidden] rule, and the
   set the search swapped out would stay on screen. */
.ppd-design-targets[hidden] {
    display: none;
}

/* Deliberately the shop archive's product card, down to the border colour and
   the lift on hover: wherever these tiles turn up — my account, the cart, a
   product page, the home page — they read as the same product cards the rest
   of the site uses, not as a widget bolted on. */
.ppd-design-target {
    background: #fff;
    border: 1px solid #ededed;
    border-radius: 12px;
    color: inherit;
    cursor: pointer;
    display: block;
    font: inherit;
    overflow: hidden;
    padding: 0 0 16px;
    text-align: left;
    text-decoration: none;
    transition: box-shadow .2s;
    width: 100%;
}

.ppd-design-target:hover,
.ppd-design-target:focus-visible,
.ppd-design-target:focus {
    box-shadow: 0 4px 20px rgba(0, 0, 0, .08);
    color: inherit;
    text-decoration: none;
}

.ppd-design-target__media {
    align-items: center;
    aspect-ratio: 1 / 1;
    background: #f5f5f5;
    display: flex;
    justify-content: center;
    position: relative;
}

.ppd-design-target__media img {
    display: block;
    height: 100%;
    object-fit: contain;
    /* The catalog image is a stand-in until the composite lands, so fade it
       back to read as provisional rather than as the finished design. */
    opacity: .45;
    transition: opacity .2s ease;
    width: 100%;
}

.ppd-design-target.is-ready .ppd-design-target__media img {
    opacity: 1;
}

.ppd-design-target__status {
    color: #404743;
    font-size: 11px;
    left: 4px;
    line-height: 1.3;
    position: absolute;
    right: 4px;
    text-align: center;
    top: 50%;
    transform: translateY(-50%);
}

/* Legible over whatever catalog photo happens to be underneath: a silent tile
   and a failing tile look identical otherwise. */
.ppd-design-target__status:not(:empty) {
    background: rgba(255, 255, 255, .94);
    border-radius: 4px;
    font-weight: 600;
    padding: 5px 4px;
}

.ppd-design-target.is-error .ppd-design-target__status {
    color: #b3261e;
}

.ppd-design-target__debug {
    color: #404743;
    display: block;
    font-size: 10px;
    line-height: 1.35;
    margin-top: 6px;
    padding: 0 16px;
    word-break: break-word;
}

.ppd-design-target__loader {
    background: #eef8f3;
    border-radius: 9px;
    box-shadow: inset 0 0 0 1px rgba(18, 161, 80, .18), 0 4px 14px rgba(0, 0, 0, .1);
    display: none;
    height: 34px;
    left: 50%;
    overflow: hidden;
    place-items: center;
    position: absolute;
    top: calc(50% - 21px);
    transform: translate(-50%, -50%);
    width: 34px;
    z-index: 2;
}

.ppd-design-target.is-loading .ppd-design-target__loader { display: grid; }
.ppd-design-target.is-loading .ppd-design-target__status { top: calc(50% + 27px); }

.ppd-design-target__loader::before,
.ppd-design-target__loader::after {
    background: var(--ppd-loader-icon) center / contain no-repeat;
    content: "";
    inset: 6px;
    position: absolute;
}

.ppd-design-target__loader::before { filter: grayscale(1); opacity: .22; }
.ppd-design-target__loader::after {
    animation: ppd-design-target-loader-fill 1.45s ease-in-out infinite;
    background: var(--ppd-green);
    -webkit-mask: var(--ppd-loader-icon) center / contain no-repeat;
    mask: var(--ppd-loader-icon) center / contain no-repeat;
}

.ppd-design-target__loader.is-fallback {
    animation: ppd-design-target-loader-pulse 1.1s ease-in-out infinite;
    background: var(--ppd-green);
    color: #fff;
    font-size: 15px;
    font-weight: 900;
}
.ppd-design-target__loader.is-fallback::before,
.ppd-design-target__loader.is-fallback::after { display: none; }

@keyframes ppd-design-target-loader-fill {
    0% { clip-path: inset(100% 0 0 0); opacity: .65; }
    50% { clip-path: inset(0 0 0 0); opacity: 1; }
    100% { clip-path: inset(100% 0 0 0); opacity: .65; }
}
@keyframes ppd-design-target-loader-pulse {
    0%, 100% { transform: translate(-50%, -50%) scale(.94); }
    50% { transform: translate(-50%, -50%) scale(1); }
}

/* The archive card's body is padding 14px 16px 16px with a 6px gap; there is no
   body wrapper in this markup, so the same figures live on the two children. */
.ppd-design-target__name,
.ppd-design-target__price {
    color: #111;
    display: block;
    padding: 0 16px;
}

.ppd-design-target__name {
    font-size: 14px;
    font-weight: 600;
    line-height: 1.35;
    margin-top: 14px;
    overflow: hidden;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
}

.ppd-design-target__price {
    font-size: 14px;
    font-weight: 700;
    margin-top: 6px;
}

.ppd-design-target__price del {
    color: #7d837f;
    font-weight: 400;
    margin-right: 4px;
}

.ppd-design-card__edit,
.ppd-my-designs__empty .button {
    align-items: center;
    background: var(--ppd-green);
    border: 1px solid var(--ppd-green);
    border-radius: 9px;
    box-sizing: border-box;
    color: #fff;
    cursor: pointer;
    display: inline-flex;
    font-size: 15px;
    font-weight: 700;
    gap: 9px;
    justify-content: center;
    min-height: 46px;
    padding: 11px 24px;
    text-align: center;
    text-decoration: none;
}

.ppd-design-card__edit:hover,
.ppd-design-card__edit:focus,
.ppd-my-designs__empty .button:hover {
    background: var(--ppd-green-deep);
    border-color: var(--ppd-green-deep);
    color: #fff;
}

.ppd-design-card__edit::before {
    background-color: currentColor;
    content: "";
    height: 17px;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20h8.5'/%3E%3Cpath d='M16.4 3.9a2 2 0 0 1 2.8 2.8L7.6 18.3 3.8 19.4l1.1-3.8z'/%3E%3C/svg%3E") center / 17px 17px no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20h8.5'/%3E%3Cpath d='M16.4 3.9a2 2 0 0 1 2.8 2.8L7.6 18.3 3.8 19.4l1.1-3.8z'/%3E%3C/svg%3E") center / 17px 17px no-repeat;
    width: 17px;
}

/* ------------------------------------------------- holding the theme's line */

/*
 * Themes style the account endpoint's bare h2/h3/h4/p - that is how they make
 * Orders and Addresses look like the rest of the site - and they do it from a
 * selector these cards cannot outrank with a class of their own. Left alone,
 * the page heading arrives at the theme's 18px and every paragraph at the
 * theme's colour and spacing.
 *
 * So the handful of declarations that actually get overridden are restated
 * here, qualified by the two classes WooCommerce puts on the body and the
 * content wrapper. Nothing new is styled below this line.
 */
.woocommerce-account .woocommerce-MyAccount-content .ppd-my-designs h2,
.woocommerce-account .woocommerce-MyAccount-content .ppd-my-designs h3,
.woocommerce-account .woocommerce-MyAccount-content .ppd-my-designs h4 {
    color: var(--ppd-ink);
    font-weight: 700;
    line-height: 1.3;
    margin: 0;
}

.woocommerce-account .woocommerce-MyAccount-content .ppd-my-designs__header h2 {
    font-size: clamp(26px, 3vw, 36px);
}

.woocommerce-account .woocommerce-MyAccount-content .ppd-design-card h3,
.woocommerce-account .woocommerce-MyAccount-content .ppd-my-designs__empty h3 {
    font-size: 20px;
}

.woocommerce-account .woocommerce-MyAccount-content .ppd-design-card__transfer h4 {
    font-size: 17px;
}

.woocommerce-account .woocommerce-MyAccount-content .ppd-my-designs p {
    color: inherit;
    line-height: 1.5;
    margin: 0;
}

.woocommerce-account .woocommerce-MyAccount-content .ppd-my-designs__header p {
    color: var(--ppd-muted);
    margin: 7px 0 0;
}

.woocommerce-account .woocommerce-MyAccount-content .ppd-design-card__summary > p {
    color: var(--ppd-muted);
    font-size: 13px;
    margin: 8px 0 16px;
}

.woocommerce-account .woocommerce-MyAccount-content .ppd-my-designs__empty p {
    color: var(--ppd-muted);
    margin: 8px auto 18px;
}

.woocommerce-account .woocommerce-MyAccount-content .ppd-design-search__status {
    color: var(--ppd-muted);
    font-size: 13px;
    margin: 0 0 12px;
}

.woocommerce-account .woocommerce-MyAccount-content .ppd-design-target__debug {
    margin-top: 6px;
}

/* Themes give every .button in the account area the same treatment; the empty
   state's call to action is the one place that collides. */
.woocommerce-account .woocommerce-MyAccount-content .ppd-my-designs__empty .button {
    background: var(--ppd-green);
    border-radius: 9px;
    color: #fff;
    display: inline-flex;
    font-size: 15px;
    padding: 11px 24px;
    width: auto;
}

@media (max-width: 980px) {
    .ppd-account-rail {
        flex: 1 1 100%;
    }

    .woocommerce-account .ppd-account-rail .woocommerce-MyAccount-navigation ul {
        display: flex;
        flex-wrap: wrap;
        gap: 4px;
    }

    .woocommerce-account .woocommerce-MyAccount-content {
        padding: 20px;
    }

    .ppd-account-help {
        display: none;
    }
}

@media (max-width: 680px) {
    .ppd-design-card__head {
        gap: 16px;
        grid-template-columns: minmax(0, 1fr) auto;
    }

    .ppd-design-card__image {
        grid-column: 1 / -1;
    }

    /* The search box gets the full width once it no longer fits beside the
       heading, rather than being squeezed into a stub. */
    .ppd-design-card__transfer-head {
        align-items: stretch;
        flex-direction: column;
    }

    .ppd-design-search {
        flex-wrap: wrap;
    }

    .ppd-design-search__input {
        width: 100%;
    }

    .ppd-my-designs__header {
        align-items: flex-start;
    }
}

/* Fewer per row as the card narrows, so a tile never gets too small to read
   the product name off. */
@media (max-width: 1180px) {
    .ppd-design-targets {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }
}

@media (max-width: 760px) {
    .ppd-design-targets {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

@media (max-width: 520px) {
    .ppd-design-targets {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}
